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+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MzQ4ZmUuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVdTVCBXZWIgVGVzdHMKLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPVRoZSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBQcm9qZWN0IHVwZGF0ZSBzaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1XU1QgV2ViIHRlc3RzCi0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLU1hcmNoIDE3LCAyMDA1XG5cCi1cblwKLVVzYWdlIE9mIENvbnRlbnRcblwKLVxuXAotVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAotT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCi1VU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKLUFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAotTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCi1PRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAotQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAotXG5cCi1BcHBsaWNhYmxlIExpY2Vuc2VzXG5cCi1cblwKLVVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXG5cCi1pcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpY1xuXAotTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXNcblwKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCi1cblwKLUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTXG5cCi1yZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKLSAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAotICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmE/IEFSY2hpdmUpXG5cCi0gICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKLSAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCi0gICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAotICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAotICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkXG5cCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZlxuXAotSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLVRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKLWNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKLWluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKLUxpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAotXG5cCi0gICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAotICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCi0gICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKLSAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1FY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZVxuXAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLFxuXAotRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXJcblwKLXVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKLVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAotU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAotXG5cCi0gICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAotICAgIC0gSUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sKVxuXAotICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCi0gICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2UzN2I5Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIxLjUuMC5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHVybD4KLSAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvdXBkYXRlcy8iLz4KLSAgIDwvdXJsPgotCi0gICA8cmVxdWlyZXM+Ci0gICAgICA8aW1wb3J0IGZlYXR1cmU9Im9yZy5lY2xpcHNlLnRlc3QiLz4KLSAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlIi8+Ci0gICA8L3JlcXVpcmVzPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLnBlcmZvcm1hbmNlIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLnBlcmZvcm1hbmNlIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLTwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvbGljZW5zZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzQ3MDYwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53M2Mub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KLTwhLS0gc2F2ZWQgZnJvbSB1cmw9KDAwNDQpaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwvbm90aWNlLmh0bWwgLS0+Ci08SFRNTD48SEVBRD48VElUTEU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L1RJVExFPgotPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPE1FVEEgY29udGVudD0iTVNIVE1MIDYuMDAuMjgwMC4xNDc5IiBuYW1lPUdFTkVSQVRPUj48L0hFQUQ+Ci08Qk9EWSBsYW5nPUVOLVVTIHZMaW5rPXB1cnBsZSBsaW5rPWJsdWU+Ci08SDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9IMj4KLTxQPkphbnVhcnkgMjgsIDIwMDU8L1A+Ci08SDM+VXNhZ2UgT2YgQ29udGVudDwvSDM+Ci08UD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gCi1BTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuIFVTRSBPRiAKLVRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgCi1CRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIAotQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIAotQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIAotQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgCi1NQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L1A+Ci08SDM+QXBwbGljYWJsZSBMaWNlbnNlczwvSDM+Ci08UD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgCi1Gb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgCi1QdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8QSAKLWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotPFA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgCi0oIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIAotYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS48L1A+Ci08UD5Db250ZW50IG1heSBiZSBhcHBvcnRpb25lZCBpbnRvIHBsdWctaW5zICgiUGx1Zy1pbnMiKSwgcGx1Zy1pbiBmcmFnbWVudHMgCi0oIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLiBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgCi1QbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiBGaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSAKLWNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIAotYXNzb2NpYXRlZCB3aXRoIGEgRmVhdHVyZS4gUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyAKLW5hbWVkICJwbHVnaW5zIiBhbmQgRmVhdHVyZXMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgbmFtZWQgImZlYXR1cmVzIi48L1A+Ci08UD5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWQgCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCAKLUZlYXR1cmVzLjwvUD4KLTxQPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIAotaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgCi1GZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAKLSgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IAotZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgCi1sb2NhdGlvbnM6PC9QPgotPFVMPgotICA8TEk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5IAotICA8TEk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXMgCi0gIDxMST5TdWJkaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnMgCi0gIDxMST5GZWF0dXJlIGRpcmVjdG9yaWVzIDwvTEk+PC9VTD4KLTxQPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCAKLXVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZSAKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCAKLUZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gCi1sb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgCi1maWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgCi1VcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyAKLWFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgCi1kaXJlY3RvcnkuPC9QPgotPFA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgCi1PUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuIFNPTUUgT0YgVEhFU0UgCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvUD4KLTxVTD4KLSAgPExJPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L0E+KSAKLQotICA8TEk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L0E+KSAKLQotICA8TEk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvQT4pIAotCi0gIDxMST5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9BPikgCi0gIDwvTEk+PC9VTD4KLTxQPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyAKLXByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCAKLWNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvUD4KLTxIMz5DcnlwdG9ncmFwaHk8L0gzPgotPFA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgCi1yZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IAotZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIAotY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgCi10byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9QPjwvQk9EWT48L0hUTUw+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+Ci0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY2NGU5ZS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9V1NUIFhNTCBUZXN0cwotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVdTVCBYTUwgdGVzdHMKLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotTWFyY2ggMTcsIDIwMDVcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi1cblwKLUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1DcnlwdG9ncmFwaHlcblwKLVxuXAotQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCi1hbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCi11c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKLXJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSxcblwKLWFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAotXG5cCi1KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmOTViN2IuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmZWF0dXJlCi0gICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlIgotICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjEuNS4wLnF1YWxpZmllciIKLSAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgotCi0gICA8ZGVzY3JpcHRpb24+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQ+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2UgdXJsPSJsaWNlbnNlLmh0bWwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHVybD4KLSAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvdXBkYXRlcy8iLz4KLSAgIDwvdXJsPgotCi0gICA8cmVxdWlyZXM+Ci0gICAgICA8aW1wb3J0IGZlYXR1cmU9Im9yZy5lY2xpcHNlLndzdC54bWxfdWkuZmVhdHVyZSIvPgotICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS50ZXN0Ii8+Ci0gICA8L3JlcXVpcmVzPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMucGVyZm9ybWFuY2UiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5wZXJmb3JtYW5jZSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLTwvZmVhdHVyZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM0NzA2MC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzNjLm9yZy9UUi8xOTk5L1JFQy1odG1sNDAxLTE5OTkxMjI0L2xvb3NlLmR0ZCI+Ci08IS0tIHNhdmVkIGZyb20gdXJsPSgwMDQ0KWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsL25vdGljZS5odG1sIC0tPgotPEhUTUw+PEhFQUQ+PFRJVExFPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9USVRMRT4KLTxNRVRBIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxNRVRBIGNvbnRlbnQ9Ik1TSFRNTCA2LjAwLjI4MDAuMTQ3OSIgbmFtZT1HRU5FUkFUT1I+PC9IRUFEPgotPEJPRFkgbGFuZz1FTi1VUyB2TGluaz1wdXJwbGUgbGluaz1ibHVlPgotPEgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvSDI+Ci08UD5KYW51YXJ5IDI4LCAyMDA1PC9QPgotPEgzPlVzYWdlIE9mIENvbnRlbnQ8L0gzPgotPFA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIAotQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLiBVU0UgT0YgCi1USEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIAotQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCAKLUJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSAKLUFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSAKLUFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIAotTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9QPgotPEgzPkFwcGxpY2FibGUgTGljZW5zZXM8L0gzPgotPFA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIAotRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIAotUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPEEgCi1ocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLTxQPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCAKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5IAotKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSAKLWFyY2hpdmVzICgiRG93bmxvYWRzIikuPC9QPgotPFA+Q29udGVudCBtYXkgYmUgYXBwb3J0aW9uZWQgaW50byBwbHVnLWlucyAoIlBsdWctaW5zIiksIHBsdWctaW4gZnJhZ21lbnRzIAotKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS4gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIAotUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gRmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgCi1jb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyAKLWFzc29jaWF0ZWQgd2l0aCBhIEZlYXR1cmUuIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgCi1uYW1lZCAicGx1Z2lucyIgYW5kIEZlYXR1cmVzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIG5hbWVkICJmZWF0dXJlcyIuPC9QPgotPFA+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkIAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgCi1GZWF0dXJlcy48L1A+Ci08UD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCAKLWluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIAotRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgCi0oIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSAKLWRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZSBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIAotbG9jYXRpb25zOjwvUD4KLTxVTD4KLSAgPExJPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeSAKLSAgPExJPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzIAotICA8TEk+U3ViZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zIAotICA8TEk+RmVhdHVyZSBkaXJlY3RvcmllcyA8L0xJPjwvVUw+Ci08UD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgCi11c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGUgCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgCi1GZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyAKLWFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIAotbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIAotZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIAotVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgCi1hbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IAotZGlyZWN0b3J5LjwvUD4KLTxQPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIAotT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiBTT01FIE9GIFRIRVNFIAotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L1A+Ci08VUw+Ci0gIDxMST5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9BPikgCi0KLSAgPExJPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9BPikgCi0KLSAgPExJPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L0E+KSAKLQotICA8TEk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvQT4pIAotICA8L0xJPjwvVUw+Ci08UD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgCi1wcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgCi1jb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L1A+Ci08SDM+Q3J5cHRvZ3JhcGh5PC9IMz4KLTxQPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSAKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIAotcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSAKLWVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyAKLWNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIAotdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvUD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUxYzhmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzNTUyNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLWJpbgotYmluLnByb2plY3QKLWJ1aWxkLnhtbAotb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzXzEuMC4wLmphcgotanNwY29yZXRlc3RzLmphcgotdGVtcC5mb2xkZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UzMzUwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZDhiNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjM3OjIxIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjJhYzY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MjQ5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jU3VuIEFwciAxNiAxNDowNToyOSBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMGNiMGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMC4wCi1CdW5kbGUtQ2xhc3NQYXRoOiBqc3Bjb3JldGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuSlNQQ29yZVRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLmNsZWFudXBmb3JtYXQsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLmNsZWFudXBmb3JtYXQudGVzdGZpbGVzLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jb250ZW50dHlwZWlkZW50aWZpZXIuY29udGVudHNwZWNpZmljLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5kb20sCi0gb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLm1vZGVsLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy50YWdsaWJpbmRleAotUmVxdWlyZS1CdW5kbGU6IG9yZy5qdW5pdCwKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUsCi0gY29tLmlibS5pY3UKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWM1OTg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+TWF5IDIsIDIwMDY8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcwMDgyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBqc3Bjb3JldGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RmaWxlcy8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzLwotamFycy5jb21waWxlLm9yZGVyID0ganNwY29yZXRlc3RzLmphcgotc291cmNlLmpzcGNvcmV0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuanNwY29yZXRlc3RzLmphciA9IGJpbi8KLXNyYy5pbmNsdWRlcyA9IHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICB0ZXN0ZmlsZXMvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEzZGIzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2Uub3JnCi1CdW5kbGUtTmFtZS4wID0gSlNQIENvcmUgVGVzdHMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9KU1BDb3JlUHJlZmVyZW5jZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9KU1BDb3JlUHJlZmVyZW5jZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2ZDRlZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvSlNQQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5EZWZhdWx0U2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkluc3RhbmNlU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLkpTUENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmVuY29kaW5nLkpTUERvY3VtZW50TG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5KU1BDb3JlUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29udGVudEJhc2VkUHJlZmVyZW5jZUdhdGV3YXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbnRlbnRUeXBlRW5jb2RpbmdQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUVuY29kZWREb2N1bWVudDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLm9zZ2kuc2VydmljZS5wcmVmcy5QcmVmZXJlbmNlczsKLQotLyoqCi0gKiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUgSlNQIFNvdXJjZSBlZGl0b3IKLSAqIHByZWZlcmVuY2VzLiBUZXN0cyBpbmNsdWRlIHNldHRpbmcvZ2V0dGluZyBwcmVmZXJlbmNlcy4KLSAqIAotICogTk9URTogVGhpcyB0ZXN0IHNob3VsZCBiZSBwcmVmb3JtZWQgb24gYSBjbGVhbiB3b3Jrc3BhY2UuIElmIHBlcmZvcm1lZCBvbgotICogYW4gZXhpc3Rpbmcgd29ya3NwYWNlLCB0aGlzIHRlc3Qgd2lsbCBtYW5pcHVsYXRlIHByZWZlcmVuY2VzIGluIHRoZQotICogd29ya3NwYWNlLCB0aG91Z2ggYXR0ZW1wdHMgd2lsbCBiZSBtYWRlIHRvIHJlc3RvcmUgb3JpZ2luYWwgdmFsdWVzIGFmdGVyCi0gKiB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgSlNQQ29yZVByZWZlcmVuY2VzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUZXN0cyBleGlzdGFuY2Ugb2YgcHJlZmVyZW5jZSB2YWx1ZXMgd2hlbiBnZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzCi0JICogdGhyb3VnaCBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdW5kbGVHZXRQcmVmZXJlbmNlcygpIHsKLQkJZmluYWwgU3RyaW5nIGJ1bmRsZU5hbWUgPSAib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlIjsKLQotCQkvLyBuZWVkIHRvIHN0YXJ0IHVwIGJ1bmRsZSBmb3IgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgbG9hZGVkCi0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlTmFtZSk7Ci0JCXRyeSB7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpCi0JCQkJYnVuZGxlLnN0YXJ0KCk7Ci0JCQllbHNlCi0JCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2UgY291bGQgbm90IGZpbmQgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSk7Ci0JCX0KLQkJY2F0Y2ggKEJ1bmRsZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBvZiBleGNlcHRpb24gc3RhcnRpbmcgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSArICIgZXhjZXB0aW9uOiAiICsgZSk7Ci0JCX0KLQotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIEpTUENvcmVQcmVmZXJlbmNlTmFtZXMuREVGQVVMVF9FWFRFTlNJT04pOwotCX0KLQotCXByaXZhdGUgdm9pZCBidW5kbGVHZXRQcmVmZXJlbmNlKFN0cmluZyBidW5kbGVOYW1lLCBTdHJpbmcgcHJlZktleSkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gbnVsbDsKLQotCQlTdHJpbmcgdmFsdWUgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKS5nZXRTdHJpbmcoYnVuZGxlTmFtZSwgcHJlZktleSwgZGVmYXVsdFZhbHVlLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZSgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZS4gS2V5OiAiICsgcHJlZktleSwgZGVmYXVsdFZhbHVlICE9IHZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBkZWZhdWx0IHZhbHVlcyBvZiBwcmVmZXJlbmNlcy4KLQkgKiAKLQkgKiBOT1RFOiBFeHBlY3RlZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFyZC1jb2RlZCwgc28gaWYgZGVmYXVsdCB2YWx1ZXMgZG8KLQkgKiBnZXQgY2hhbmdlZCwgYXNzZXJ0aW9ucyBuZWVkIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZXMoKSB7Ci0JCUlFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSA9IG5ldyBEZWZhdWx0U2NvcGUoKS5nZXROb2RlKEpTUENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpKTsKLQotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShub2RlLCBKU1BDb3JlUHJlZmVyZW5jZU5hbWVzLlZBTElEQVRFX0ZSQUdNRU5UUywgQm9vbGVhbi50b1N0cmluZyh0cnVlKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXksIFN0cmluZyBleHBlY3RlZCkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7IC8vIHJhbmRvbQotCQkvLyBzdHJpbmcKLQotCQlTdHJpbmcgdGhlRGVmYXVsdFZhbHVlID0gbm9kZS5nZXQocHJlZktleSwgZGVmYXVsdFZhbHVlKTsKLQkJYXNzZXJ0RXF1YWxzKCJHZXQgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5LCBleHBlY3RlZCwgdGhlRGVmYXVsdFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzIGJ5IHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZSB0byBiZSBhCi0JICogY2VydGFpbiB2YWx1ZSwgdGhlbiBnZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHZhbHVlIHRvIHZlcmlmeSBpdCB3YXMgc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5TZXRQcmVmZXJlbmNlcygpIHsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlID0gbmV3IEluc3RhbmNlU2NvcGUoKS5nZXROb2RlKEpTUENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpKTsKLQotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihub2RlLCBKU1BDb3JlUHJlZmVyZW5jZU5hbWVzLlZBTElEQVRFX0ZSQUdNRU5UUyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJYm9vbGVhbiBvcmlnaW5hbFZhbHVlID0gZmFsc2U7Ci0JCWJvb2xlYW4gZXhwZWN0ZWRWYWx1ZSA9IHRydWU7Ci0KLQkJU3RyaW5nIG9yaWdpbmFsU3RyaW5nID0gbm9kZS5nZXQocHJlZktleSwgImJvZ3VzIik7Ci0JCWlmICghImJvZ3VzIi5lcXVhbHMob3JpZ2luYWxTdHJpbmcpKSB7Ci0JCQlvcmlnaW5hbFZhbHVlID0gQm9vbGVhbi52YWx1ZU9mKG9yaWdpbmFsU3RyaW5nKS5ib29sZWFuVmFsdWUoKTsKLQkJCWV4cGVjdGVkVmFsdWUgPSAhb3JpZ2luYWxWYWx1ZTsKLQkJfQotCQlub2RlLnB1dEJvb2xlYW4ocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCWJvb2xlYW4gZm91bmRWYWx1ZSA9IG5vZGUuZ2V0Qm9vbGVhbihwcmVmS2V5LCB0cnVlKTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSArICIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlpZiAoImJvZ3VzIi5lcXVhbHMob3JpZ2luYWxTdHJpbmcpKQotCQkJbm9kZS5yZW1vdmUocHJlZktleSk7Ci0JCWVsc2UKLQkJCW5vZGUucHV0KHByZWZLZXksIG9yaWdpbmFsU3RyaW5nKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBsaW5lIGRlbGltaXRlciBwcmVmZXJlbmNlcyBieSBtYWtpbmcgc3VyZSBkb2N1bWVudCBjcmVhdGVkCi0JICogZm9sbG93cyBsaW5lIGRlbGltaXRlciBwcmVmZXJlbmNlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REZWxpbWl0ZXJQcmVmZXJlbmNlcygpIHsKLQkJLy8gY2hlY2sgaWYgY29udGVudCB0eXBlIHByZWZlcmVuY2VzIG1hdGNoCi0JCVN0cmluZyBwcmVmZXJyZWREZWxpbWl0ZXIgPSBDb250ZW50VHlwZUVuY29kaW5nUHJlZmVyZW5jZXMuZ2V0UHJlZmVycmVkTmV3TGluZURlbGltaXRlcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJUHJlZmVyZW5jZXMgcHJlZnMgPSBDb250ZW50QmFzZWRQcmVmZXJlbmNlR2F0ZXdheS5nZXRQcmVmZXJlbmNlcyhDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJU3RyaW5nIGdhdGV3YXlEZWxpbWl0ZXIgPSBwcmVmcy5nZXQoQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuRU5EX09GX0xJTkVfQ09ERSwgbnVsbCk7Ci0JCWFzc2VydEVxdWFscygiQ29udGVudFR5cGVFbmNvZGluZ1ByZWZlcmVuY2VzIGFuZCBDb250ZW50QmFzZWRQcmVmZXJlbmNlR2F0ZXdheSBwcmVmZXJlbmNlcyBkbyBub3QgbWF0Y2giLCBnYXRld2F5RGVsaW1pdGVyLCBwcmVmZXJyZWREZWxpbWl0ZXIpOwotCi0JCS8vIHNldCBhIHBhcnRpY3VsYXIgbGluZSBkZWxpbWl0ZXIKLQkJcHJlZnMucHV0KENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkVORF9PRl9MSU5FX0NPREUsIENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkxGKTsKLQotCQkvLyBjcmVhdGUgZG9jdW1lbnQKLQkJSlNQRG9jdW1lbnRMb2FkZXIgbG9hZGVyID0gbmV3IEpTUERvY3VtZW50TG9hZGVyKCk7Ci0JCUlFbmNvZGVkRG9jdW1lbnQgZG9jdW1lbnQgPSBsb2FkZXIuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCVN0cmluZyBkb2N1bWVudERlbGltaXRlciA9IGRvY3VtZW50LmdldFByZWZlcnJlZExpbmVEZWxpbWl0ZXIoKTsKLQotCQkvLyB2ZXJpZnkgZGVsaW1pdGVyIGluIGRvY3VtZW50IG1hdGNoZXMgcHJlZmVyZW5jZQotCQlhc3NlcnRFcXVhbHMoIkRlbGltaXRlciBpbiBkb2N1bWVudCBkb2VzIG5vdCBtYXRjaCBwcmVmZXJlbmNlIiwgQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuU1RSSU5HX0xGLCBkb2N1bWVudERlbGltaXRlcik7Ci0KLQkJLy8gcmV0dXJuIHRvIG9yaWdpbmFsIHByZWZlcmVuY2UKLQkJcHJlZnMucmVtb3ZlKENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkVORF9PRl9MSU5FX0NPREUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL0pTUENvcmVUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL0pTUENvcmVUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQzZmVhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9KU1BDb3JlVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuY2xlYW51cGZvcm1hdC5Gb3JtYXRUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLmNvbnRlbnR0eXBlaWRlbnRpZmllci5jb250ZW50c3BlY2lmaWMuVGVzdENvbnRlbnRUeXBlSGFuZGxlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLmNvbnRlbnR0eXBlaWRlbnRpZmllci5jb250ZW50c3BlY2lmaWMuVGVzdE1vZGVsSGFuZGxlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLm1vZGVsLlRlc3RNb2RlbEluY2x1ZGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5tb2RlbC5UZXN0TW9kZWxSZWxlYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5tb2RlbC5UZXN0TW9kZWxXaXRoTm9GaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5zb3VyY2UuSlNQVG9rZW5pemVyVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudGFnbGliaW5kZXguVGVzdEluZGV4OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy50cmFuc2xhdGlvbi5KU1BKYXZhVHJhbnNsYXRvckNvcmVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY3NzLmNvcmUudGVzdHMuc291cmNlLkpTUGVkQ1NTU291cmNlUGFyc2VyVGVzdDsKLQotCi0KLXB1YmxpYyBjbGFzcyBKU1BDb3JlVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgSlNQQ29yZVRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBKU1BDb3JlVGVzdFN1aXRlKCkgewotCQlzdXBlcigiU1NFTW9kZWxUZXN0U3VpdGVGb3JKU1AiKTsKLQotCQlhZGRUZXN0KFRlc3RDZWFudXBGb3JtYXQuc3VpdGUoKSk7Ci0JCWFkZFRlc3QoTW9kZWxDbG9uZVN1aXRlLnN1aXRlKCkpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdE1vZGVsSGFuZGxlcnMuY2xhc3MsICJUZXN0TW9kZWxIYW5kbGVycyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RDb250ZW50VHlwZUhhbmRsZXJzLmNsYXNzLCAiVGVzdENvbnRlbnRUeXBlSGFuZGxlcnMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0TW9kZWxNYW5hZ2VyLmNsYXNzLCAiVGVzdE1vZGVsTWFuYWdlciIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEZvcm1hdFRlc3Rlci5jbGFzcywgIkZvcm1hdFRlc3RlciIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RNb2RlbFJlbGVhc2UuY2xhc3MsICJKU1AgTW9kZWwgVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0TW9kZWxXaXRoTm9GaWxlLmNsYXNzLCAiSlNQIE1vZGVsIFRlc3RzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdEluZGV4LmNsYXNzLCAiVGFnbGliSW5kZXggVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BUb2tlbml6ZXJUZXN0LmNsYXNzLCAiU3BlY2lhbCBQYXJzaW5nIFRlc3RzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoSlNQSmF2YVRyYW5zbGF0b3JDb3JlVGVzdC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdE1vZGVsSW5jbHVkZXMuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEpTUENvcmVQcmVmZXJlbmNlc1Rlc3QuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEpTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC5jbGFzcywgIlNwZWNpYWwgUGFyc2luZyBUZXN0cyBmb3IgSlNQLUNTUyBjb250ZW50IikpOwotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvSlNQQ29yZVRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9KU1BDb3JlVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY1YjNiNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9KU1BDb3JlVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgSlNQQ29yZVRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgSlNQQ29yZVRlc3RzUGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBKU1BDb3JlVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JCXRyeSB7Ci0JCQlyZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLlRlc3RzUGx1Z2luUmVzb3VyY2VzIik7Ci0JCX0KLQkJY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiB4KSB7Ci0JCQlyZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBKU1BDb3JlVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IEpTUENvcmVUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFVSTCBnZXRJbnN0YWxsTG9jYXRpb24oKSB7Ci0JCVVSTCBpbnN0YWxsTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cyIpLmdldEVudHJ5KCIvIik7Ci0JCVVSTCByZXNvbHZlZExvY2F0aW9uID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc29sdmVkTG9jYXRpb24gPSBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbGxMb2NhdGlvbik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUKLQkJCXRocm93IG5ldyBFcnJvcihlKTsKLQkJfQotCQlyZXR1cm4gcmVzb2x2ZWRMb2NhdGlvbjsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBGaWxlIGdldFRlc3RGaWxlKFN0cmluZyBmaWxlcGF0aCkgewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvL1N0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJRmlsZSByZXN1bHQgPSBuZXcgRmlsZShsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9Mb2dnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY0MWUxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9Mb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0czsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0vKioKLSAqIFNtYWxsIGNvbnZlbmllbmNlIGNsYXNzIHRvIGxvZyBtZXNzYWdlcyB0byBwbHVnaW4ncyBsb2cgZmlsZSBhbmQgYWxzbywgaWYgZGVzaXJlZCwKLSAqIHRoZSBjb25zb2xlLiBUaGlzIGNsYXNzIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgY2xhc3NlcyBpbiB0aGlzIHBsdWdpbi4gT3RoZXIKLSAqIHBsdWdpbnMgc2hvdWxkIG1ha2UgdGhlaXIgb3duIGNvcHksIHdpdGggYXBwcm9wcmlhdGUgSUQuCi0gKi8KLXB1YmxpYyBjbGFzcyBMb2dnZXIgewotCXByaXZhdGUgc3RhdGljIFBsdWdpbiBmUGx1Z2luID0gSlNQQ29yZVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKTsKLQlwcml2YXRlIHN0YXRpYyBCdW5kbGUgZkJ1bmRsZSA9IGZQbHVnaW4uZ2V0QnVuZGxlKCk7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGZQbHVnaW5JZCA9IGZCdW5kbGUuZ2V0U3ltYm9saWNOYW1lKCk7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJBQ0VGSUxURVJfTE9DQVRJT04gPSAiL2RlYnVnL3RyYWNlZmlsdGVyIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0sgPSBJU3RhdHVzLk9LOyAvLyAwCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GTyA9IElTdGF0dXMuSU5GTzsgLy8gMQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkcgPSBJU3RhdHVzLldBUk5JTkc7IC8vIDIKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUiA9IElTdGF0dXMuRVJST1I7IC8vIDQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LX0RFQlVHID0gMjAwICsgT0s7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GT19ERUJVRyA9IDIwMCArIElORk87Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklOR19ERUJVRyA9IDIwMCArIFdBUk5JTkc7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfREVCVUcgPSAyMDAgKyBFUlJPUjsKLQotCS8qKgotCSAqIEFkZHMgbWVzc2FnZSB0byBsb2cuCi0JICogQHBhcmFtIGxldmVsIHNldmVyaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlIChPSywgSU5GTywgV0FSTklORywgRVJST1IsIE9LX0RFQlVHLCBJTkZPX0RFQlVHLCBXQVJOSU5HX0RFQlVHLCBFUlJPUl9ERUJVRykKLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIGFkZCB0byB0aGUgbG9nCi0JICogQHBhcmFtIGV4Y2VwdGlvbiBleGNlcHRpb24gdGhyb3duCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF9sb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAobGV2ZWwgPT0gT0tfREVCVUcgfHwgbGV2ZWwgPT0gSU5GT19ERUJVRyB8fCBsZXZlbCA9PSBXQVJOSU5HX0RFQlVHIHx8IGxldmVsID09IEVSUk9SX0RFQlVHKSB7Ci0JCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQkJcmV0dXJuOwotCQl9Ci0KLQkJaW50IHNldmVyaXR5ID0gSVN0YXR1cy5PSzsKLQkJc3dpdGNoIChsZXZlbCkgewotCQkJY2FzZSBJTkZPX0RFQlVHIDoKLQkJCWNhc2UgSU5GTyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLklORk87Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFdBUk5JTkdfREVCVUcgOgotCQkJY2FzZSBXQVJOSU5HIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuV0FSTklORzsKLQkJCQlicmVhazsKLQkJCWNhc2UgRVJST1JfREVCVUcgOgotCQkJY2FzZSBFUlJPUiA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLkVSUk9SOwotCQl9Ci0JCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoc2V2ZXJpdHksIGZQbHVnaW5JZCwgc2V2ZXJpdHksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCWZQbHVnaW4uZ2V0TG9nKCkubG9nKHN0YXR1c09iaik7Ci0JfQotCi0JLyoqCi0JICogUHJpbnRzIG1lc3NhZ2UgdG8gbG9nIGlmIGNhdGVnb3J5IG1hdGNoZXMgL2RlYnVnL3RyYWNlZmlsdGVyIG9wdGlvbi4KLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIHByaW50Ci0JICogQHBhcmFtIGNhdGVnb3J5IGNhdGVnb3J5IG9mIHRoZSBtZXNzYWdlLCB0byBiZSBjb21wYXJlZCB3aXRoIC9kZWJ1Zy90cmFjZWZpbHRlcgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAoaXNUcmFjaW5nKGNhdGVnb3J5KSkgewotCQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgZlBsdWdpbklkLCBJU3RhdHVzLk9LLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQkJZlBsdWdpbi5nZXRMb2coKS5sb2coc3RhdHVzT2JqKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGx1Z2luIGZvciB0aGlzIGxvZ2dlciBpcyBkZWJ1Z2dpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEZWJ1Z2dpbmcoKSB7Ci0JCXJldHVybiBmUGx1Z2luLmlzRGVidWdnaW5nKCk7Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lcyBpZiBjdXJyZW50bHkgdHJhY2luZyBhIGNhdGVnb3J5Ci0JICogQHBhcmFtIGNhdGVnb3J5Ci0JICogQHJldHVybiB0cnVlIGlmIHRyYWNpbmcgY2F0ZWdvcnksIGZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1RyYWNpbmcoU3RyaW5nIGNhdGVnb3J5KSB7Ci0JCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmcgdHJhY2VGaWx0ZXIgPSBQbGF0Zm9ybS5nZXREZWJ1Z09wdGlvbihmUGx1Z2luSWQgKyBUUkFDRUZJTFRFUl9MT0NBVElPTik7Ci0JCWlmICh0cmFjZUZpbHRlciAhPSBudWxsKSB7Ci0JCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcih0cmFjZUZpbHRlciwgIiwiKTsgLy8kTk9OLU5MUy0xJAotCQkJd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQlTdHJpbmcgY2F0ID0gdG9rZW5pemVyLm5leHRUb2tlbigpLnRyaW0oKTsKLQkJCQlpZiAoY2F0ZWdvcnkuZXF1YWxzKGNhdCkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSkgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIG51bGwpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9Nb2RlbENsb25lU3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL01vZGVsQ2xvbmVTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmYyY2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL01vZGVsQ2xvbmVTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1wdWJsaWMgY2xhc3MgTW9kZWxDbG9uZVN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgTW9kZWxDbG9uZVN1aXRlKCk7Ci0JfQotCi0JcHVibGljIE1vZGVsQ2xvbmVTdWl0ZSgpIHsKLQkJc3VwZXIoIk1vZGVsQ2xvbmVTdWl0ZSIpOwotCi0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0U3RydWN0dXJlZERvY3VtZW50Q2xvbmUuY2xhc3MsICJUZXN0U3RydWN0dXJlZERvY3VtZW50Q2xvbmUiKSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL051bGxJbnB1dFN0cmVhbS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvTnVsbElucHV0U3RyZWFtLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1MDEzYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvTnVsbElucHV0U3RyZWFtLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIEplbnMgTHVrb3dza2kvSW5ub29wcmFjdCAtIGluaXRpYWwgcmVuYW1pbmcvcmVzdHJ1Y3R1cmluZwotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotCi1wdWJsaWMgY2xhc3MgTnVsbElucHV0U3RyZWFtIGV4dGVuZHMgSW5wdXRTdHJlYW0gewotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI21hcmsoaW50KQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBtYXJrKGludCByZWFkbGltaXQpIHsKLQkJLy8gbm90aGluZyB0byBkbwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNtYXJrU3VwcG9ydGVkKCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBtYXJrU3VwcG9ydGVkKCkgewotCQkvLyB3ZSBjYW4gbWFyayBub3RoaW5nLgotCQkvLyBhbmQsIHdlIGFyZSB1c2luZyB0aGlzIE51bGwgY2xhc3Mgc3BlY2lmaWNhbGx5IGZvcgotCQkvLyBhICJmYWtlIiByZXNldHRhYmxlIHN0cmVhbS4KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI3JlYWQoKQotCSAqLwotCXB1YmxpYyBpbnQgcmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0KLQkJcmV0dXJuIC0xOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNyZXNldCgpCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlc2V0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gbm90aGluZyB0byBkbwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNza2lwKGxvbmcpCi0JICovCi0JcHVibGljIGxvbmcgc2tpcChsb25nIG4pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXJldHVybiAwOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL1Rlc3RDZWFudXBGb3JtYXQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL1Rlc3RDZWFudXBGb3JtYXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZlNjcxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9UZXN0Q2VhbnVwRm9ybWF0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuY2xlYW51cGZvcm1hdC5DbGVhbnVwVGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jbGVhbnVwZm9ybWF0LkZvcm1hdFRlc3RlcjsKLQotCi1wdWJsaWMgY2xhc3MgVGVzdENlYW51cEZvcm1hdCBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RDZWFudXBGb3JtYXQoKTsKLQl9Ci0KLQlwdWJsaWMgVGVzdENlYW51cEZvcm1hdCgpIHsKLQkJc3VwZXIoIlRlc3RDZWFudXBGb3JtYXQiKTsKLQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoQ2xlYW51cFRlc3Rlci5jbGFzcywgIkNsZWFudXBUZXN0ZXIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShGb3JtYXRUZXN0ZXIuY2xhc3MsICJGb3JtYXRUZXN0ZXIiKSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL1Rlc3RNb2RlbE1hbmFnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL1Rlc3RNb2RlbE1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU3MmI3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9UZXN0TW9kZWxNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci0KLS8qKgotICogVGhpcyBjbGFzcyB0ZXN0cyBiYXNpYyBjcmVhdGlvbiBvZiBJTW9kZWxNYW5hZ2VyIHBsdWdpbiBhbmQgdGhlCi0gKiBNb2RlbE1hbmdlci4KLSAqIAotICogQXBwcm9wcmlhdGUgZm9yIEJWVC4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RNb2RlbE1hbmFnZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVGVzdE1vZGVsTWFuYWdlci4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBUZXN0TW9kZWxNYW5hZ2VyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbE1hbmFnZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlhc3NlcnRUcnVlKCJtb2RlbE1hbmFnZXIgbXVzdCBub3QgYmUgbnVsbCIsIG1vZGVsTWFuYWdlciAhPSBudWxsKTsKLQotCQl0cnkgewotCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KCJ0ZXN0LnhtbCIsIG5ldyBOdWxsSW5wdXRTdHJlYW0oKSwgbnVsbCk7Ci0JCQlhc3NlcnRUcnVlKCJiYXNpYyBYTUwgZW1wdHkgbW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQiLCBtb2RlbCAhPSBudWxsKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROdWxsQXJndW1lbnQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJRXhjZXB0aW9uIGUgPSBudWxsOwotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoKFN0cmluZykgbnVsbCwgbnVsbCwgbnVsbCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJCWUgPSBleGNlcHRpb247Ci0JCQlhc3NlcnRUcnVlKCJpbGxlZ2FsIGFyZ3VtZW50IGZhaWxlZCB0byB0aHJvdyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iLCBlIGluc3RhbmNlb2YgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvVGVzdFN0cnVjdHVyZWREb2N1bWVudENsb25lLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9UZXN0U3RydWN0dXJlZERvY3VtZW50Q2xvbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ1OTMzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9UZXN0U3RydWN0dXJlZERvY3VtZW50Q2xvbmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLS8qKgotICogQGF1dGhvciBkYXZpZHcKLSAqCi0gKiBUbyBjaGFuZ2UgdGhpcyBnZW5lcmF0ZWQgY29tbWVudCBlZGl0IHRoZSB0ZW1wbGF0ZSB2YXJpYWJsZSAidHlwZWNvbW1lbnQiOgotICogV2luZG93PlByZWZlcmVuY2VzPkphdmE+VGVtcGxhdGVzLgotICogVG8gZW5hYmxlIGFuZCBkaXNhYmxlIHRoZSBjcmVhdGlvbiBvZiB0eXBlIGNvbW1lbnRzIGdvIHRvCi0gKiBXaW5kb3c+UHJlZmVyZW5jZXM+SmF2YT5Db2RlIEdlbmVyYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0U3RydWN0dXJlZERvY3VtZW50Q2xvbmUgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVGVzdE1vZGVsQ2xvbmUuCi0JICovCi0JcHVibGljIFRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRDbG9uZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3QgZ2V0VGVzdCgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3RydWN0dXJlZERvY3VtZW50Q2xvbmUoInRlc3RDbG9uZVN0cnVjdHVyZWRNb2RlbEpTUFhNTCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbG9uZVN0cnVjdHVyZWREb2N1bWVudFhNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsTWFuYWdlci5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoImR1bW15LnhtbCIsIChJbnB1dFN0cmVhbSkgbnVsbCwgbnVsbCk7Ci0JCWFzc2VydFRydWUoInN0cnVjdHVyZWREb2N1bWVudCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBzdHJ1Y3R1cmVkRG9jdW1lbnQgIT0gbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudCBjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQubmV3SW5zdGFuY2UoKTsKLQkJLy8gbWFrZSBzdXJlIHRoZSBjcml0aWNhbCB2YXJpYWJsZXMgYXJlIE5PVCBpZGVudGljYWwsIGJ1dCB0aGF0IG5ldyBpbnN0YW5jZXMgCi0JCS8vIGhhdmUgYmVlbiBtYWRlCi0JCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQkJaWYgKGNsb25lZFN0cnVjdHVyZWREb2N1bWVudC5nZXRFbmNvZGluZ01lbWVudG8oKSA9PSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0RW5jb2RpbmdNZW1lbnRvKCkpCi0JCQlwYXNzZWQgPSBmYWxzZTsKLQkJaWYgKGNsb25lZFN0cnVjdHVyZWREb2N1bWVudC5nZXRQYXJzZXIoKSA9PSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UGFyc2VyKCkpCi0JCQlwYXNzZWQgPSBmYWxzZTsKLQkJaWYgKGNsb25lZFN0cnVjdHVyZWREb2N1bWVudC5nZXRSZVBhcnNlcigpID09IHN0cnVjdHVyZWREb2N1bWVudC5nZXRSZVBhcnNlcigpKQotCQkJcGFzc2VkID0gZmFsc2U7Ci0JCWFzc2VydFRydWUoIm5ld0luc3RhbmNlIG9mIFhNTCBzdHJ1Y3R1cmVkRG9jdW1lbnQgaXMgbm90IGNvcnJlY3QiLCBwYXNzZWQpOwotCi0JfQotCi0JLyoqCi0JICogVGhpcyB0ZXN0IGlzIG1vc3QgdXNlZnVsIHRvIGNoZWNrIGJyZWFrcG9pbnRzIGFuZCBkaWcgZGVlcCBpbiBvYmplY3QgCi0JICogdG8gY2hlY2sgY2xvbmVzIHZhbHVlcwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDbG9uZVN0cnVjdHVyZWREb2N1bWVudEpTUCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsTWFuYWdlci5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoImR1bW15LmpzcCIsIChJbnB1dFN0cmVhbSkgbnVsbCwgbnVsbCk7Ci0JCWFzc2VydFRydWUoInN0cnVjdHVyZWREb2N1bWVudCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBzdHJ1Y3R1cmVkRG9jdW1lbnQgIT0gbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudCBjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQubmV3SW5zdGFuY2UoKTsKLQkJLy8gbWFrZSBzdXJlIHRoZSBjcml0aWNhbCB2YXJpYWJsZXMgYXJlIE5PVCBpZGVudGljYWwsIGJ1dCB0aGF0IG5ldyBpbnN0YW5jZXMgCi0JCS8vIGhhdmUgYmVlbiBtYWRlCi0JCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQkJaWYgKGNsb25lZFN0cnVjdHVyZWREb2N1bWVudC5nZXRFbmNvZGluZ01lbWVudG8oKSA9PSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0RW5jb2RpbmdNZW1lbnRvKCkpCi0JCQlwYXNzZWQgPSBmYWxzZTsKLQkJaWYgKGNsb25lZFN0cnVjdHVyZWREb2N1bWVudC5nZXRQYXJzZXIoKSA9PSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UGFyc2VyKCkpCi0JCQlwYXNzZWQgPSBmYWxzZTsKLQkJaWYgKGNsb25lZFN0cnVjdHVyZWREb2N1bWVudC5nZXRSZVBhcnNlcigpID09IHN0cnVjdHVyZWREb2N1bWVudC5nZXRSZVBhcnNlcigpKQotCQkJcGFzc2VkID0gZmFsc2U7Ci0JCWFzc2VydFRydWUoIm5ld0luc3RhbmNlIG9mIEpTUCBzdHJ1Y3R1cmVkRG9jdW1lbnQgaXMgbm90IGNvcnJlY3QiLCBwYXNzZWQpOwotCi0JfQotCi0JLyoqCi0JICogVGhpcyB0ZXN0IGlzIG1vc3QgdXNlZnVsIHRvIGNoZWNrIGJyZWFrcG9pbnRzIGFuZCBkaWcgZGVlcCBpbiBvYmplY3QgCi0JICogdG8gY2hlY2sgY2xvbmVzIHZhbHVlcwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDbG9uZVN0cnVjdHVyZWREb2N1bWVudEpTUFhNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlTdHJpbmcgdGVzdENvbnRlbnQgPSAiPEAhIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L3htbFwiIEA+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbE1hbmFnZXIuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKCJkdW1teS5qc3AiLCB0ZXN0Q29udGVudCwgbnVsbCk7Ci0JCWFzc2VydFRydWUoInN0cnVjdHVyZWREb2N1bWVudCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBzdHJ1Y3R1cmVkRG9jdW1lbnQgIT0gbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudCBjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQubmV3SW5zdGFuY2UoKTsKLQkJLy8gbWFrZSBzdXJlIHRoZSBjcml0aWNhbCB2YXJpYWJsZXMgYXJlIE5PVCBpZGVudGljYWwsIGJ1dCB0aGF0IG5ldyBpbnN0YW5jZXMgCi0JCS8vIGhhdmUgYmVlbiBtYWRlCi0JCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQkJaWYgKGNsb25lZFN0cnVjdHVyZWREb2N1bWVudC5nZXRFbmNvZGluZ01lbWVudG8oKSA9PSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0RW5jb2RpbmdNZW1lbnRvKCkpCi0JCQlwYXNzZWQgPSBmYWxzZTsKLQkJaWYgKGNsb25lZFN0cnVjdHVyZWREb2N1bWVudC5nZXRQYXJzZXIoKSA9PSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UGFyc2VyKCkpCi0JCQlwYXNzZWQgPSBmYWxzZTsKLQkJaWYgKGNsb25lZFN0cnVjdHVyZWREb2N1bWVudC5nZXRSZVBhcnNlcigpID09IHN0cnVjdHVyZWREb2N1bWVudC5nZXRSZVBhcnNlcigpKQotCQkJcGFzc2VkID0gZmFsc2U7Ci0JCWFzc2VydFRydWUoIm5ld0luc3RhbmNlIG9mIEpTUFhNTCBzdHJ1Y3R1cmVkRG9jdW1lbnQgaXMgbm90IGNvcnJlY3QiLCBwYXNzZWQpOwotCi0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC9DbGVhbnVwVGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L0NsZWFudXBUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRhMDY0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L0NsZWFudXBUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jbGVhbnVwZm9ybWF0OwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5jbGVhbnVwLkhUTUxDbGVhbnVwUHJvY2Vzc29ySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkhUTUxDb3JlUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5jbGVhbnVwLkFic3RyYWN0U3RydWN0dXJlZENsZWFudXBQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmNsZWFudXAuSVN0cnVjdHVyZWRDbGVhbnVwUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jbGVhbnVwLkNsZWFudXBQcm9jZXNzb3JYTUw7Ci0KLXB1YmxpYyBjbGFzcyBDbGVhbnVwVGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gUFJJTlRfRkFJTEVEX0ZPUk1BVF9URVNUUyA9IGZhbHNlOwotCXByb3RlY3RlZCBJTW9kZWxNYW5hZ2VyIGZNb2RlbE1hbmFnZXIgPSBudWxsOwotCXByb3RlY3RlZCBDbGVhbnVwUHJvY2Vzc29yWE1MIGZDbGVhbnVwUHJvY2Vzc29yID0gbnVsbDsKLQlwcm90ZWN0ZWQgSFRNTENsZWFudXBQcm9jZXNzb3JJbXBsIGZIVE1MQ2xlYW51cFByb2Nlc3NvciA9IG51bGw7Ci0KLQlwdWJsaWMgQ2xlYW51cFRlc3RlcihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQkJLy8gZ2V0IG1vZGVsIG1hbmFnZXIKLQkJZk1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0KLQkJLy8gZ2V0IGNsZWFudXAgcHJvY2Vzc29yCi0JCWZDbGVhbnVwUHJvY2Vzc29yID0gbmV3IENsZWFudXBQcm9jZXNzb3JYTUwoKTsKLQotCQkvLyBnZXQgSFRNTCBjbGVhbnVwIHByb2Nlc3NvcgotCQlmSFRNTENsZWFudXBQcm9jZXNzb3IgPSBuZXcgSFRNTENsZWFudXBQcm9jZXNzb3JJbXBsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENsZWFudXBJbnNlcnRUYWdzUXVvdGVBdHRycygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJpbnZvaWNlLnhtbCIpOwotCi0JCS8vIHVzZSBmb3IgZGVidWdnaW5nCi0vLwkJU3RyaW5nIHByZWNsZWFuZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0KLQkJLy8gaW5pdCBDbGVhbnVwUHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRDbGVhbnVwUHJlZmVyZW5jZXMgY2xlYW51cFByZWZlcmVuY2VzID0gZkNsZWFudXBQcm9jZXNzb3IuZ2V0Q2xlYW51cFByZWZlcmVuY2VzKCk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRDb21wcmVzc0VtcHR5RWxlbWVudFRhZ3MoZmFsc2UpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0SW5zZXJ0UmVxdWlyZWRBdHRycyhmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRJbnNlcnRNaXNzaW5nVGFncyh0cnVlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldFF1b3RlQXR0clZhbHVlcyh0cnVlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldEZvcm1hdFNvdXJjZShmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRDb252ZXJ0RU9MQ29kZXMoZmFsc2UpOwotCi0JCS8vIGNsZWFudXAKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRDbGVhbnVwUHJvY2Vzc29yKSBmQ2xlYW51cFByb2Nlc3NvcikucmVmcmVzaENsZWFudXBQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmQ2xlYW51cFByb2Nlc3Nvci5jbGVhbnVwTW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRDbGVhbnVwUHJvY2Vzc29yKSBmQ2xlYW51cFByb2Nlc3NvcikucmVmcmVzaENsZWFudXBQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgY2xlYW5lZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiaW52b2ljZS5hZnRlckNsZWFudXBJbnNlcnRUYWdzUXVvdGVBdHRycy54bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBjbGVhbmVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cEluc2VydFRhZ3MoKSB0aHJvd3MgSU9FeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoImludm9pY2UueG1sIik7Ci0KLQkJLy8gaW5pdCBDbGVhbnVwUHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRDbGVhbnVwUHJlZmVyZW5jZXMgY2xlYW51cFByZWZlcmVuY2VzID0gZkNsZWFudXBQcm9jZXNzb3IuZ2V0Q2xlYW51cFByZWZlcmVuY2VzKCk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRDb21wcmVzc0VtcHR5RWxlbWVudFRhZ3MoZmFsc2UpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0SW5zZXJ0UmVxdWlyZWRBdHRycyhmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRJbnNlcnRNaXNzaW5nVGFncyh0cnVlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldFF1b3RlQXR0clZhbHVlcyhmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRGb3JtYXRTb3VyY2UoZmFsc2UpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Q29udmVydEVPTENvZGVzKGZhbHNlKTsKLQotCQkvLyBjbGVhbnVwCi0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkQ2xlYW51cFByb2Nlc3NvcikgZkNsZWFudXBQcm9jZXNzb3IpLnJlZnJlc2hDbGVhbnVwUHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkNsZWFudXBQcm9jZXNzb3IuY2xlYW51cE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkQ2xlYW51cFByb2Nlc3NvcikgZkNsZWFudXBQcm9jZXNzb3IpLnJlZnJlc2hDbGVhbnVwUHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGNsZWFuZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gImludm9pY2UuYWZ0ZXJDbGVhbnVwSW5zZXJ0VGFncy54bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBjbGVhbmVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cENvbXByZXNzRW1wdHlFbGVtZW50VGFncygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJzbWFsbC54bWwiKTsKLQotCQkvLyBpbml0IENsZWFudXBQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZENsZWFudXBQcmVmZXJlbmNlcyBjbGVhbnVwUHJlZmVyZW5jZXMgPSBmQ2xlYW51cFByb2Nlc3Nvci5nZXRDbGVhbnVwUHJlZmVyZW5jZXMoKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldENvbXByZXNzRW1wdHlFbGVtZW50VGFncyh0cnVlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldEluc2VydFJlcXVpcmVkQXR0cnMoZmFsc2UpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0SW5zZXJ0TWlzc2luZ1RhZ3MoZmFsc2UpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0UXVvdGVBdHRyVmFsdWVzKGZhbHNlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldEZvcm1hdFNvdXJjZSh0cnVlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldENvbnZlcnRFT0xDb2RlcyhmYWxzZSk7Ci0KLQkJLy8gY2xlYW51cAotCQkoKEFic3RyYWN0U3RydWN0dXJlZENsZWFudXBQcm9jZXNzb3IpIGZDbGVhbnVwUHJvY2Vzc29yKS5yZWZyZXNoQ2xlYW51cFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZDbGVhbnVwUHJvY2Vzc29yLmNsZWFudXBNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZENsZWFudXBQcm9jZXNzb3IpIGZDbGVhbnVwUHJvY2Vzc29yKS5yZWZyZXNoQ2xlYW51cFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBjbGVhbmVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJzbWFsbC5hZnRlckNvbXByZXNzRW1wdHlFbGVtZW50VGFncy54bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBjbGVhbmVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cEhUTUwoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgiY2xlYW51cC5odG1sIik7Ci0KLQkJLy8gaW5pdCBDbGVhbnVwUHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRDbGVhbnVwUHJlZmVyZW5jZXMgY2xlYW51cFByZWZlcmVuY2VzID0gZkhUTUxDbGVhbnVwUHJvY2Vzc29yLmdldENsZWFudXBQcmVmZXJlbmNlcygpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0VGFnTmFtZUNhc2UoSFRNTENvcmVQcmVmZXJlbmNlTmFtZXMuVVBQRVIpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0QXR0ck5hbWVDYXNlKEhUTUxDb3JlUHJlZmVyZW5jZU5hbWVzLkxPV0VSKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldENvbXByZXNzRW1wdHlFbGVtZW50VGFncyhmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRJbnNlcnRSZXF1aXJlZEF0dHJzKGZhbHNlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldEluc2VydE1pc3NpbmdUYWdzKHRydWUpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0UXVvdGVBdHRyVmFsdWVzKHRydWUpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Rm9ybWF0U291cmNlKGZhbHNlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldENvbnZlcnRFT0xDb2RlcyhmYWxzZSk7Ci0KLQkJLy8gY2xlYW51cAotCQkoKEFic3RyYWN0U3RydWN0dXJlZENsZWFudXBQcm9jZXNzb3IpIGZIVE1MQ2xlYW51cFByb2Nlc3NvcikucmVmcmVzaENsZWFudXBQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmSFRNTENsZWFudXBQcm9jZXNzb3IuY2xlYW51cE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkQ2xlYW51cFByb2Nlc3NvcikgZkhUTUxDbGVhbnVwUHJvY2Vzc29yKS5yZWZyZXNoQ2xlYW51cFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBjbGVhbmVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJjbGVhbnVwLmFmdGVyQ2xlYW51cC5odG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgY2xlYW5lZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENsZWFudXBIVE1MdHdpY2UoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgiY2xlYW51cC5hZnRlckNsZWFudXAuaHRtbCIpOwotCi0JCS8vIGluaXQgQ2xlYW51cFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkQ2xlYW51cFByZWZlcmVuY2VzIGNsZWFudXBQcmVmZXJlbmNlcyA9IGZIVE1MQ2xlYW51cFByb2Nlc3Nvci5nZXRDbGVhbnVwUHJlZmVyZW5jZXMoKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldFRhZ05hbWVDYXNlKEhUTUxDb3JlUHJlZmVyZW5jZU5hbWVzLlVQUEVSKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldEF0dHJOYW1lQ2FzZShIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5MT1dFUik7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRDb21wcmVzc0VtcHR5RWxlbWVudFRhZ3MoZmFsc2UpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0SW5zZXJ0UmVxdWlyZWRBdHRycyhmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRJbnNlcnRNaXNzaW5nVGFncyh0cnVlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldFF1b3RlQXR0clZhbHVlcyh0cnVlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldEZvcm1hdFNvdXJjZShmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRDb252ZXJ0RU9MQ29kZXMoZmFsc2UpOwotCi0JCS8vIGNsZWFudXAKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRDbGVhbnVwUHJvY2Vzc29yKSBmSFRNTENsZWFudXBQcm9jZXNzb3IpLnJlZnJlc2hDbGVhbnVwUHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkhUTUxDbGVhbnVwUHJvY2Vzc29yLmNsZWFudXBNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZENsZWFudXBQcm9jZXNzb3IpIGZIVE1MQ2xlYW51cFByb2Nlc3NvcikucmVmcmVzaENsZWFudXBQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgY2xlYW5lZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiY2xlYW51cC5hZnRlckNsZWFudXAuaHRtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGNsZWFuZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotLy8JcHVibGljIHZvaWQgdGVzdENsZWFudXBKU1BFbXB0eVRhZ3MxKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQkvLyBnZXQgbW9kZWwKLS8vCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJsb2dpbi5qc3AiKTsKLS8vCi0vLwkJLy8gaW5pdCBDbGVhbnVwUHJlZmVyZW5jZXMKLS8vCQlJU3RydWN0dXJlZENsZWFudXBQcmVmZXJlbmNlcyBjbGVhbnVwUHJlZmVyZW5jZXMgPSBmSFRNTENsZWFudXBQcm9jZXNzb3IuZ2V0Q2xlYW51cFByZWZlcmVuY2VzKCk7Ci0vLwkJY2xlYW51cFByZWZlcmVuY2VzLnNldFRhZ05hbWVDYXNlKENvbW1vbk1vZGVsUHJlZmVyZW5jZU5hbWVzLlVQUEVSKTsKLS8vCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0QXR0ck5hbWVDYXNlKENvbW1vbk1vZGVsUHJlZmVyZW5jZU5hbWVzLkxPV0VSKTsKLS8vCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Q29tcHJlc3NFbXB0eUVsZW1lbnRUYWdzKGZhbHNlKTsKLS8vCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0SW5zZXJ0UmVxdWlyZWRBdHRycyhmYWxzZSk7Ci0vLwkJY2xlYW51cFByZWZlcmVuY2VzLnNldEluc2VydE1pc3NpbmdUYWdzKHRydWUpOwotLy8JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRRdW90ZUF0dHJWYWx1ZXModHJ1ZSk7Ci0vLwkJY2xlYW51cFByZWZlcmVuY2VzLnNldEZvcm1hdFNvdXJjZSh0cnVlKTsKLS8vCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Q29udmVydEVPTENvZGVzKGZhbHNlKTsKLS8vCi0vLwkJLy8gY2xlYW51cAotLy8JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkQ2xlYW51cFByb2Nlc3NvcikgZkhUTUxDbGVhbnVwUHJvY2Vzc29yKS5yZWZyZXNoQ2xlYW51cFByZWZlcmVuY2VzID0gZmFsc2U7Ci0vLwkJZkhUTUxDbGVhbnVwUHJvY2Vzc29yLmNsZWFudXBNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotLy8JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkQ2xlYW51cFByb2Nlc3NvcikgZkhUTUxDbGVhbnVwUHJvY2Vzc29yKS5yZWZyZXNoQ2xlYW51cFByZWZlcmVuY2VzID0gdHJ1ZTsKLS8vCi0vLwkJLy8gY29tcGFyZQotLy8JCVN0cmluZyBjbGVhbmVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotLy8JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gImxvZ2luLmFmdGVyQ2xlYW51cC5qc3AiOwotLy8JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0vLwkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgY2xlYW5lZCk7Ci0vLwotLy8JCS8vIHJlbGVhc2UgbW9kZWwKLS8vCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0vLwl9Ci0vLwotLy8JcHVibGljIHZvaWQgdGVzdENsZWFudXBKU1BFbXB0eVRhZ3MyKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQkvLyBnZXQgbW9kZWwKLS8vCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJzdWJzY3JpcHRpb24uanNwIik7Ci0vLwotLy8JCS8vIGluaXQgQ2xlYW51cFByZWZlcmVuY2VzCi0vLwkJSVN0cnVjdHVyZWRDbGVhbnVwUHJlZmVyZW5jZXMgY2xlYW51cFByZWZlcmVuY2VzID0gZkhUTUxDbGVhbnVwUHJvY2Vzc29yLmdldENsZWFudXBQcmVmZXJlbmNlcygpOwotLy8JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRUYWdOYW1lQ2FzZShDb21tb25Nb2RlbFByZWZlcmVuY2VOYW1lcy5VUFBFUik7Ci0vLwkJY2xlYW51cFByZWZlcmVuY2VzLnNldEF0dHJOYW1lQ2FzZShDb21tb25Nb2RlbFByZWZlcmVuY2VOYW1lcy5MT1dFUik7Ci0vLwkJY2xlYW51cFByZWZlcmVuY2VzLnNldENvbXByZXNzRW1wdHlFbGVtZW50VGFncyhmYWxzZSk7Ci0vLwkJY2xlYW51cFByZWZlcmVuY2VzLnNldEluc2VydFJlcXVpcmVkQXR0cnMoZmFsc2UpOwotLy8JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRJbnNlcnRNaXNzaW5nVGFncyh0cnVlKTsKLS8vCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0UXVvdGVBdHRyVmFsdWVzKHRydWUpOwotLy8JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRGb3JtYXRTb3VyY2UodHJ1ZSk7Ci0vLwkJY2xlYW51cFByZWZlcmVuY2VzLnNldENvbnZlcnRFT0xDb2RlcyhmYWxzZSk7Ci0vLwotLy8JCS8vIGNsZWFudXAKLS8vCQkoKEFic3RyYWN0U3RydWN0dXJlZENsZWFudXBQcm9jZXNzb3IpIGZIVE1MQ2xlYW51cFByb2Nlc3NvcikucmVmcmVzaENsZWFudXBQcmVmZXJlbmNlcyA9IGZhbHNlOwotLy8JCWZIVE1MQ2xlYW51cFByb2Nlc3Nvci5jbGVhbnVwTW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLS8vCQkoKEFic3RyYWN0U3RydWN0dXJlZENsZWFudXBQcm9jZXNzb3IpIGZIVE1MQ2xlYW51cFByb2Nlc3NvcikucmVmcmVzaENsZWFudXBQcmVmZXJlbmNlcyA9IHRydWU7Ci0vLwotLy8JCS8vIGNvbXBhcmUKLS8vCQlTdHJpbmcgY2xlYW5lZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLS8vCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJzdWJzY3JpcHRpb24uYWZ0ZXJDbGVhbnVwLmpzcCI7Ci0vLwkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLS8vCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBjbGVhbmVkKTsKLS8vCi0vLwkJLy8gcmVsZWFzZSBtb2RlbAotLy8JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLS8vCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgcmVhZEZpbGUoU3RyaW5nIGZpbGVOYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgaW5wdXRTdHJpbmcgPSBudWxsOwotCQlJbnB1dFN0cmVhbSBmaWxlSW5wdXRTdHJlYW0gPSBudWxsOwotCi0JCXRyeSB7Ci0JCQlmaWxlSW5wdXRTdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZU5hbWUpOwotCi0JCQlieXRlW10gaW5wdXRCdWZmZXIgPSBuZXcgYnl0ZVsyMDQ4XTsKLQkJCWlucHV0U3RyaW5nID0gbmV3IFN0cmluZygpOwotCQkJaW50IGJ5dGVzUmVhZCA9IC0xOwotCi0JCQl3aGlsZSAodHJ1ZSkgewotCQkJCWJ5dGVzUmVhZCA9IGZpbGVJbnB1dFN0cmVhbS5yZWFkKGlucHV0QnVmZmVyKTsKLQkJCQlpZiAoYnl0ZXNSZWFkID09IC0xKQotCQkJCQlicmVhazsKLQkJCQlTdHJpbmcgYnVmZmVyU3RyaW5nID0gbmV3IFN0cmluZyhpbnB1dEJ1ZmZlciwgMCwgYnl0ZXNSZWFkKTsKLQkJCQkvL2J1ZmZlclN0cmluZyA9IGJ1ZmZlclN0cmluZy5zdWJzdHJpbmcoMCwgYnl0ZXNSZWFkKTsKLQkJCQlpbnB1dFN0cmluZyA9IGlucHV0U3RyaW5nLmNvbmNhdChidWZmZXJTdHJpbmcpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGZpbGVJbnB1dFN0cmVhbSAhPSBudWxsKQotCQkJCWZpbGVJbnB1dFN0cmVhbS5jbG9zZSgpOwotCQl9Ci0KLQkJcmV0dXJuIGlucHV0U3RyaW5nOwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBwcmludEV4Y2VwdGlvbihFeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0JCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbChTdHJpbmcgZmlsZU5hbWUpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gbnVsbDsKLQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBudWxsOwotCi0JCXRyeSB7Ci0JCQlTdHJpbmcgaW5wdXQgPSBnZXRGaWxlKGZpbGVOYW1lKTsKLQkJCWlucHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGlucHV0LmdldEJ5dGVzKCJVVEYtOCIpKTsKLQkJCVN0cmluZyBpZCA9IGlucHV0U3RyZWFtLnRvU3RyaW5nKCkuY29uY2F0KGZpbGVOYW1lKTsKLQkJCXN0cnVjdHVyZWRNb2RlbCA9IGZNb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JSZWFkKGlkLCBpbnB1dFN0cmVhbSwgbnVsbCk7Ci0JCX0KLQkJLy8gc2luY2UgaW4gdGVzdCBjb2RlLCBubyBuZWVkIHRvIGNhdGNoIHRoaXMKLQkJLy8JCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0JCS8vCQkJTG9nZ2VyLmxvZ0V4Y2VwdGlvbihleGNlcHRpb24pOwotCQkvLwkJfQotCQlmaW5hbGx5IHsKLQkJCXRyeSB7Ci0JCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0JCQkJLy8gaG9wZWxlc3MKLQkJCX0KLQkJfQotCi0JCXJldHVybiBzdHJ1Y3R1cmVkTW9kZWw7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlKFN0cmluZyBmaWxlTmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHJlYWRGaWxlKCJ0ZXN0ZmlsZXMvIi5jb25jYXQoZmlsZU5hbWUpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjb21wYXJlKFN0cmluZyB0ZXN0Y2FzZU5hbWUsIFN0cmluZyBleHBlY3RlZCwgU3RyaW5nIGNsZWFuZWQpIHsKLQkJaWYgKGNsZWFuZWQuY29tcGFyZVRvKGV4cGVjdGVkKSAhPSAwKSB7Ci0JCQlpZiAoUFJJTlRfRkFJTEVEX0ZPUk1BVF9URVNUUykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbih0ZXN0Y2FzZU5hbWUgKyAiIGZhaWxlZCIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiPT09PT09PT09PSBleHBlY3RlZCBmaWxlID09PT09PT09PT0iKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZXhwZWN0ZWQpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiPT09PT09PT09PSBjbGVhbmVkIGZpbGUgPT09PT09PT09PSIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihjbGVhbmVkKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIj09PT09PT09PT0gZXhwZWN0ZWQgZmlsZSA9PT09PT09PT09Iik7Ci0JCQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShleHBlY3RlZCwgIlxyIiwgIlxcciIpOwotCQkJCWV4cGVjdGVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShleHBlY3RlZFN0cmluZywgIlxuIiwgIlxcbiIpOwotCQkJCWV4cGVjdGVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShleHBlY3RlZFN0cmluZywgIlx0IiwgIlxcdCIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleHBlY3RlZFN0cmluZyk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09IGNsZWFuZWQgZmlsZSA9PT09PT09PT09Iik7Ci0JCQkJU3RyaW5nIGNsZWFuZWRTdHJpbmcgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGNsZWFuZWQsICJcciIsICJcXHIiKTsKLQkJCQljbGVhbmVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShjbGVhbmVkU3RyaW5nLCAiXG4iLCAiXFxuIik7Ci0JCQkJY2xlYW5lZFN0cmluZyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoY2xlYW5lZFN0cmluZywgIlx0IiwgIlxcdCIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihjbGVhbmVkU3RyaW5nKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpOwotCQkJfQotCQkJYXNzZXJ0VHJ1ZShmYWxzZSk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC9Gb3JtYXRUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvRm9ybWF0VGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZGI2ZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC9Gb3JtYXRUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jbGVhbnVwZm9ybWF0OwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLmZvcm1hdC5IVE1MRm9ybWF0UHJvY2Vzc29ySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZm9ybWF0LkFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZm9ybWF0LklTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5mb3JtYXQuRm9ybWF0UHJvY2Vzc29yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5mb3JtYXQuSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTDsKLQotcHVibGljIGNsYXNzIEZvcm1hdFRlc3RlciBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSSU5UX0ZBSUxFRF9GT1JNQVRfVEVTVFMgPSBmYWxzZTsKLQlwcm90ZWN0ZWQgSU1vZGVsTWFuYWdlciBmTW9kZWxNYW5hZ2VyID0gbnVsbDsKLQlwcm90ZWN0ZWQgRm9ybWF0UHJvY2Vzc29yWE1MIGZGb3JtYXRQcm9jZXNzb3IgPSBudWxsOwotCXByb3RlY3RlZCBIVE1MRm9ybWF0UHJvY2Vzc29ySW1wbCBmSFRNTEZvcm1hdFByb2Nlc3NvciA9IG51bGw7Ci0KLQlwdWJsaWMgRm9ybWF0VGVzdGVyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCi0JCS8vIGdldCBtb2RlbCBtYW5hZ2VyCi0JCWZNb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCS8vIGdldCBmb3JtYXQgcHJvY2Vzc29yCi0JCWZGb3JtYXRQcm9jZXNzb3IgPSBuZXcgRm9ybWF0UHJvY2Vzc29yWE1MKCk7Ci0KLQkJLy8gZ2V0IEhUTUwgZm9ybWF0IHByb2Nlc3NvcgotCQlmSFRNTEZvcm1hdFByb2Nlc3NvciA9IG5ldyBIVE1MRm9ybWF0UHJvY2Vzc29ySW1wbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXQyNjE5NjgoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCIyNjE5NjgueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKElTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoZmFsc2UpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRMaW5lV2lkdGgoOTk5KTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KCJcdCIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCi0JCS8vIGZvcm1hdAotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZGb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgZm9ybWF0dGVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICIyNjE5NjguYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdFRhZ09wZW4oKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJ0YWdPcGVuLnhtbCIpOwotCi0JCS8vIGluaXQgRm9ybWF0UHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZGb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJKChJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDk5OSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudCgiXHQiKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKGZhbHNlKTsKLQotCQkvLyBmb3JtYXQKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmRm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAidGFnT3Blbi54bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBmb3JtYXR0ZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRUYWdPcGVuVGFnQ2xvc2UoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJ0YWdPcGVuVGFnQ2xvc2UueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKElTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoZmFsc2UpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRMaW5lV2lkdGgoOTk5KTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KCJcdCIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCi0JCS8vIGZvcm1hdAotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZGb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgZm9ybWF0dGVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJ0YWdPcGVuVGFnQ2xvc2UueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0VGFncygpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoInRhZ3MueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKElTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoZmFsc2UpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRMaW5lV2lkdGgoOTk5KTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KCJcdCIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCi0JCS8vIGZvcm1hdAotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZGb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgZm9ybWF0dGVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJ0YWdzLmFmdGVyRGVmYXVsdEZvcm1hdC54bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBmb3JtYXR0ZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRFbXB0eSgpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoImVtcHR5LnhtbCIpOwotCi0JCS8vIGluaXQgRm9ybWF0UHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZGb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJKChJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDk5OSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudCgiXHQiKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKGZhbHNlKTsKLQotCQkvLyBmb3JtYXQKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmRm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiZW1wdHkueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0T25lU3BhY2UoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJvbmVTcGFjZS54bWwiKTsKLQotCQkvLyBpbml0IEZvcm1hdFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmRm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCSgoSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg5OTkpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gImVtcHR5LnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdE9uZUNoYXIoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJvbmVDaGFyLnhtbCIpOwotCi0JCS8vIGluaXQgRm9ybWF0UHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZGb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJKChJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDk5OSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudCgiXHQiKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKGZhbHNlKTsKLQotCQkvLyBmb3JtYXQKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmRm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAib25lQ2hhci54bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBmb3JtYXR0ZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRTcGFjZXMoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJzcGFjZXMueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKElTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoZmFsc2UpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRMaW5lV2lkdGgoOTk5KTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KCJcdCIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCi0JCS8vIGZvcm1hdAotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZGb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgZm9ybWF0dGVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJlbXB0eS54bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBmb3JtYXR0ZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRDaGFycygpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoImNoYXJzLnhtbCIpOwotCi0JCS8vIGluaXQgRm9ybWF0UHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZGb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJKChJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDk5OSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudCgiXHQiKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKGZhbHNlKTsKLQotCQkvLyBmb3JtYXQKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmRm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiY2hhcnMueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0U3BhY2VzQW5kQ2hhcnMoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJzcGFjZXNBbmRDaGFycy54bWwiKTsKLQotCQkvLyBpbml0IEZvcm1hdFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmRm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCSgoSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg5OTkpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gImNoYXJzLnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdCgpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoInNtYWxsLnhtbCIpOwotCi0JCS8vIGluaXQgRm9ybWF0UHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZGb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJKChJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDk5OSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudCgiXHQiKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKGZhbHNlKTsKLQotCQkvLyBmb3JtYXQKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmRm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAic21hbGwuYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdFNwbGl0TGluZXNTcGxpdE11bHRpQXR0cnMoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJzbWFsbC54bWwiKTsKLQotCQkvLyBpbml0IEZvcm1hdFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmRm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCSgoSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyh0cnVlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDcyKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KCJcdCIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCi0JCS8vIGZvcm1hdAotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZGb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgZm9ybWF0dGVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJzbWFsbC5hZnRlclNwbGl0TGluZXNTcGxpdE11bHRpQXR0cnNGb3JtYXQueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0U3BsaXRMaW5lcygpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoInNtYWxsLnhtbCIpOwotCi0JCS8vIGluaXQgRm9ybWF0UHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZGb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJKChJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDcyKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KCJcdCIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCi0JCS8vIGZvcm1hdAotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZGb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgZm9ybWF0dGVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJzbWFsbC5hZnRlclNwbGl0TGluZXNGb3JtYXQueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0QmxvY2tDb21tZW50cygpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoImJsb2NrQ29tbWVudHMueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKElTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoZmFsc2UpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRMaW5lV2lkdGgoOTk5KTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KCJcdCIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCi0JCS8vIGZvcm1hdAotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZGb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgZm9ybWF0dGVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJibG9ja0NvbW1lbnRzLmFmdGVyRGVmYXVsdEZvcm1hdC54bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBmb3JtYXR0ZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRJbmxpbmVDb21tZW50cygpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoImlubGluZUNvbW1lbnRzLnhtbCIpOwotCi0JCS8vIGluaXQgRm9ybWF0UHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZGb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJKChJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDk5OSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudCgiXHQiKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKGZhbHNlKTsKLQotCQkvLyBmb3JtYXQKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmRm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiaW5saW5lQ29tbWVudHMuYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdElubGluZUNvbW1lbnRzU3BsaXRMaW5lc1NwbGl0TXVsdGlBdHRycygpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoImlubGluZUNvbW1lbnRzLnhtbCIpOwotCi0JCS8vIGluaXQgRm9ybWF0UHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZGb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJKChJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKHRydWUpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRMaW5lV2lkdGgoNzIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gImlubGluZUNvbW1lbnRzLmFmdGVyU3BsaXRMaW5lc1NwbGl0TXVsdGlBdHRyc0Zvcm1hdC54bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBmb3JtYXR0ZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RIVE1MRm9ybWF0KCkgewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgiSGl0Q291bnRlckludHJvLmh0bWwiKTsKLQotCQkvLyBpbml0IEZvcm1hdFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmSFRNTEZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKElTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoZmFsc2UpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRMaW5lV2lkdGgoNzIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmSFRNTEZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZIVE1MRm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmSFRNTEZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gIkhpdENvdW50ZXJJbnRyby5hZnRlckRlZmF1bHRGb3JtYXQuaHRtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyByZWFkRmlsZShTdHJpbmcgZmlsZU5hbWUpIHsKLQkJU3RyaW5nIGlucHV0U3RyaW5nID0gbnVsbDsKLQkJSW5wdXRTdHJlYW0gZmlsZUlucHV0U3RyZWFtID0gbnVsbDsKLQotCQl0cnkgewotCQkJZmlsZUlucHV0U3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVOYW1lKTsKLQotCQkJYnl0ZVtdIGlucHV0QnVmZmVyID0gbmV3IGJ5dGVbMTAyNF07Ci0JCQlpbnB1dFN0cmluZyA9IG5ldyBTdHJpbmcoKTsKLQkJCWludCBieXRlc1JlYWQgPSAtMTsKLQotCQkJd2hpbGUgKHRydWUpIHsKLQkJCQlieXRlc1JlYWQgPSBmaWxlSW5wdXRTdHJlYW0ucmVhZChpbnB1dEJ1ZmZlcik7Ci0JCQkJaWYgKGJ5dGVzUmVhZCA9PSAtMSkKLQkJCQkJYnJlYWs7Ci0JCQkJU3RyaW5nIGJ1ZmZlclN0cmluZyA9IG5ldyBTdHJpbmcoaW5wdXRCdWZmZXIpOwotCQkJCWJ1ZmZlclN0cmluZyA9IGJ1ZmZlclN0cmluZy5zdWJzdHJpbmcoMCwgYnl0ZXNSZWFkKTsKLQkJCQlpbnB1dFN0cmluZyA9IGlucHV0U3RyaW5nLmNvbmNhdChidWZmZXJTdHJpbmcpOwotCQkJfQotCi0JCQlpZiAoZmlsZUlucHV0U3RyZWFtICE9IG51bGwpCi0JCQkJZmlsZUlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgewotCQkJcHJpbnRFeGNlcHRpb24oZXhjZXB0aW9uKTsKLQkJfQotCi0JCXJldHVybiBpbnB1dFN0cmluZzsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcHJpbnRFeGNlcHRpb24oRXhjZXB0aW9uIGV4Y2VwdGlvbikgewotCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQotCi0JcHJvdGVjdGVkIElTdHJ1Y3R1cmVkTW9kZWwgZ2V0TW9kZWwoU3RyaW5nIGZpbGVOYW1lKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gbnVsbDsKLQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBudWxsOwotCi0JCXRyeSB7Ci0JCQlTdHJpbmcgaW5wdXQgPSBnZXRGaWxlKGZpbGVOYW1lKTsKLQkJCWlucHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGlucHV0LmdldEJ5dGVzKCJVVEY4IikpOwotCQkJU3RyaW5nIGlkID0gaW5wdXRTdHJlYW0udG9TdHJpbmcoKS5jb25jYXQoZmlsZU5hbWUpOwotCQkJc3RydWN0dXJlZE1vZGVsID0gZk1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoaWQsIGlucHV0U3RyZWFtLCBudWxsKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgewotCQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJdHJ5IHsKLQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJCQkvLyBob3BlbGVzcwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHN0cnVjdHVyZWRNb2RlbDsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGUoU3RyaW5nIGZpbGVOYW1lKSB7Ci0JCXJldHVybiByZWFkRmlsZSgidGVzdGZpbGVzLyIuY29uY2F0KGZpbGVOYW1lKSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgY29tcGFyZShTdHJpbmcgdGVzdGNhc2VOYW1lLCBTdHJpbmcgZXhwZWN0ZWQsIFN0cmluZyBmb3JtYXR0ZWQpIHsKLQkJaWYgKGZvcm1hdHRlZC5jb21wYXJlVG8oZXhwZWN0ZWQpICE9IDApIHsKLQkJCWlmIChQUklOVF9GQUlMRURfRk9STUFUX1RFU1RTKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKHRlc3RjYXNlTmFtZSArICIgZmFpbGVkIik7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09IGV4cGVjdGVkIGZpbGUgPT09PT09PT09PSIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleHBlY3RlZCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09IGZvcm1hdHRlZCBmaWxlID09PT09PT09PT0iKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZm9ybWF0dGVkKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIj09PT09PT09PT0gZXhwZWN0ZWQgZmlsZSA9PT09PT09PT09Iik7Ci0JCQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShleHBlY3RlZCwgIlxyIiwgIlxcciIpOwotCQkJCWV4cGVjdGVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShleHBlY3RlZFN0cmluZywgIlxuIiwgIlxcbiIpOwotCQkJCWV4cGVjdGVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShleHBlY3RlZFN0cmluZywgIlx0IiwgIlxcdCIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleHBlY3RlZFN0cmluZyk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09IGZvcm1hdHRlZCBmaWxlID09PT09PT09PT0iKTsKLQkJCQlTdHJpbmcgZm9ybWF0dGVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShmb3JtYXR0ZWQsICJcciIsICJcXHIiKTsKLQkJCQlmb3JtYXR0ZWRTdHJpbmcgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGZvcm1hdHRlZFN0cmluZywgIlxuIiwgIlxcbiIpOwotCQkJCWZvcm1hdHRlZFN0cmluZyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoZm9ybWF0dGVkU3RyaW5nLCAiXHQiLCAiXFx0Iik7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKGZvcm1hdHRlZFN0cmluZyk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKTsKLQkJCX0KLQkJCWFzc2VydFRydWUoZmFsc2UpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzLzI2MTk2OC5hZnRlckRlZmF1bHRGb3JtYXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvMjYxOTY4LmFmdGVyRGVmYXVsdEZvcm1hdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ODM4ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvMjYxOTY4LmFmdGVyRGVmYXVsdEZvcm1hdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08dGFnPgotCTx0MT48L3QxPgotCTx0Mj48L3QyCi0JPHQzPjwvdDM+Ci08L3RhZz4KLTx0YWc+Ci0JPHQxPjwvdDE+Ci0JPHQyPgotCQkvdDI+Ci0JCTx0Mz48L3QzPgotPC90YWc+Ci08dGFnPgotCTx0MT48L3QxPgotCXQyPgotCTwvdDI+Ci0JPHQzPjwvdDM+Ci08L3RhZz4KLTx0YWc+Ci0JPHQxPjwvdDE+Ci0JPHQyPC90Mj4KLQk8dDM+PC90Mz4KLTwvdGFnPgotPHRhZz4KLQk8dDE+PC90MT4KLQk8dDI8L3QyCi0JPHQzPjwvdDM+Ci08L3RhZz4KLTx0YWc+Ci0JPHQxPjwvdDE+Ci0JPHQyPC90Mj4KLQk8dDM+PC90Mz4KLTwvdGFnPgotPHRhZz4KLQk8dDE+PC90MT4KLQk8dDI8L3QyPgotCTx0Mz48L3QzPgotPC90YWc+Ci08dGFnPgotCTx0MT48L3QxPgotCTx0MjwvdDI+Ci0JdDM+Ci0JPC90Mz4KLTwvdGFnPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzLzI2MTk2OC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy8yNjE5NjgueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTk4MWU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzLzI2MTk2OC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08dGFnPgotICAgICAgIDx0MT48L3QxPgotICAgICAgIDx0Mj48L3QyCi0gICAgICAgPHQzPjwvdDM+Ci08L3RhZz4KLTx0YWc+Ci0gICAgICAgPHQxPjwvdDE+Ci0gICAgICAgPHQyPi90Mj4KLSAgICAgICA8dDM+PC90Mz4KLTwvdGFnPgotPHRhZz4KLSAgICAgICA8dDE+PC90MT4KLSAgICAgICB0Mj48L3QyPgotICAgICAgIDx0Mz48L3QzPgotPC90YWc+Ci08dGFnPgotICAgICAgIDx0MT48L3QxPgotICAgICAgIDx0MjwvdDI+Ci0gICAgICAgPHQzPjwvdDM+Ci08L3RhZz4KLTx0YWc+Ci0gICAgICAgPHQxPjwvdDE+Ci0gICAgICAgPHQyPC90MiAgICAgICA8dDM+PC90Mz4KLTwvdGFnPgotPHRhZz4KLSAgICAgICA8dDE+PC90MT4KLSAgICAgICA8dDI8L3QyICAgICAgPiAgICAgICA8dDM+PC90Mz4KLTwvdGFnPgotPHRhZz4KLSAgICAgICA8dDE+PC90MT4KLSAgICAgICA8dDI8L3QyICAgICAgPjx0Mz48L3QzPgotPC90YWc+Ci08dGFnPgotICAgICAgIDx0MT48L3QxPgotICAgICAgIDx0MjwvdDIgICAgICA+dDM+PC90Mz4KLTwvdGFnPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL0hpdENvdW50ZXJJbnRyby5hZnRlckRlZmF1bHRGb3JtYXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL0hpdENvdW50ZXJJbnRyby5hZnRlckRlZmF1bHRGb3JtYXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JhY2U0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9IaXRDb3VudGVySW50cm8uYWZ0ZXJEZWZhdWx0Rm9ybWF0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08SFRNTD4KLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPFRJVExFPlBhZ2UgSGl0IENvdW50ZXIgSW50cm9kdWN0aW9uPC9USVRMRT4KLTxMSU5LIHJlbD0iU1RZTEVTSEVFVCIgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9IRUFEPgotPEJPRFk+Ci08Q0VOVEVSPgotPEZPUk0gbmFtZT0ibXlGb3JtIiBtZXRob2Q9InBvc3QiCi0JYWN0aW9uPSIuLi9Db250cm9sbGVycy9TYW1wbGVDb250cm9sbGVyIj4KLTxUQUJMRSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjUwMCI+Ci0JPFRCT0RZPgotCQk8VFI+Ci0JCQk8VEQgY29sc3Bhbj0iMiI+PElNRyBzcmM9Ii4uL2ltYWdlcy9jbGVhclBpeGVsLmdpZiIgd2lkdGg9IjEiCi0JCQkJaGVpZ2h0PSIyNSIgYWx0PSIiPjwvVEQ+Ci0JCTwvVFI+Ci0JCTxUUj4KLQkJCTxURCByb3dzcGFuPSIyIiBhbGlnbj0iTEVGVCIgd2lkdGg9IjIyMCIgaGVpZ2h0PSIzMDAiPjxJTUcKLQkJCQlzcmM9Ii4uL2ltYWdlcy9oaXRDb3VudGVyMDEuZ2lmIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwMCIgYWx0PSIiPjwvVEQ+Ci0JCQk8VEQgYWxpZ249IkxFRlQiIHdpZHRoPSIzODAiPgotCQkJPFA+PEZPTlQgc2l6ZT0iKzEiPjxCPlBhZ2UgSGl0IENvdW50ZXIgU2FtcGxlPC9CPjwvRk9OVD48L1A+Ci0JCQk8L1REPgotCQk8L1RSPgotCQk8VFI+Ci0JCQk8VEQgYWxpZ249IkxFRlQiIHZhbGlnbj0iVE9QIj4KLQkJCTxQPjxGT05UIHNpemU9Ii0xIj5UaGlzIHNhbXBsZSBzaG93cyB5b3UgaG93IHRvIHVzZSBhIEphdmEKLQkJCXNlcnZsZXQgdG8gY291bnQgaG93IG1hbnkgdGltZXMgYSBwYWdlIHdhcyB2aXNpdGVkLjwvRk9OVD48L1A+Ci0JCQk8UD48Rk9OVCBzaXplPSItMSI+VGhpcyBzYW1wbGUgcmVxdWlyZXMgYSBkYXRhYmFzZSB0bwotCQkJc3RvcmUgdGhlIGNvdW50ZXIuIElmIHlvdSBoYXZlIG5vdCBhbHJlYWR5IGluc3RhbGxlZCBhbmQgY29uZmlndXJlZAotCQkJeW91ciBkYXRhYmFzZSBmb3IgdGhlIFdlYlNwaGVyZSBzYW1wbGVzLCByZWZlciB0byA8QQotCQkJCWhyZWY9Ii4uL0NvbmZpZ3VyYXRpb24vREJDb25maWcuaHRtbCI+RGF0YWJhc2UgQ29uZmlndXJhdGlvbjwvQT4gZm9yCi0JCQlpbnN0cnVjdGlvbnMuIDwvRk9OVD48L1A+Ci0JCQk8UD48Rk9OVCBzaXplPSItMSI+PEEKLQkJCQlocmVmPSJqYXZhc2NyaXB0OmRvY3VtZW50Lm15Rm9ybS5zdWJtaXQoKSIgdGFyZ2V0PSJfc2VsZiI+IDxCPlJ1bgotCQkJdGhpcyBzYW1wbGU8L0I+PC9BPiA8L0ZPTlQ+PC9QPgotCQkJPElOUFVUIG5hbWU9ImNvbW1hbmQiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IkhpdENvdW50ZXJWaWV3IiAvPiA8SU5QVVQKLQkJCQluYW1lPSJkYl9yZWdpb24iIHR5cGU9ImhpZGRlbiIgdmFsdWU9InRydWUiIC8+PC9URD4KLQkJPC9UUj4KLTwvVEFCTEU+Ci08L0ZPUk0+Ci08QlI+Ci08VEFCTEUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI1MDAiPgotCTxUQk9EWT4KLQkJPFRSPgotCQkJPFREIGFsaWduPSJDRU5URVIiPgotCQkJPFA+PEI+PEZPTlQgc2l6ZT0iLTEiPkhvdyB0aGlzIHNhbXBsZSB3b3Jrczo8L0ZPTlQ+Ci0JCQk8L1REPgotCQk8L1RSPgotCQk8VFI+Ci0JCQk8VEQ+Ci0JCQk8VEFCTEUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSI+Ci0JCQkJPFRCT0RZPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PCEtLSAjIyMjIyMjIyMjIyMgaG9yaXpvbnRhbCBzcGFjZXIgIyMjIyMjIyMjIyMjIC0tPiA8SU1HCi0JCQkJCQkJc3JjPSIuLi9pbWFnZXMvY2xlYXJQaXhlbC5naWYiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxIiBhbHQ9IiI+Ci0JCQkJCQk8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+PC9URD4KLQkJCQkJCTxURD4KLQkJCQkJCTxQPjxGT05UIHNpemU9Ii0xIj5UaGlzIHNhbXBsZSBoYXM6PC9GT05UPjwvUD4KLQkJCQkJCTxVTD4KLQkJCQkJCQk8TEk+PEZPTlQgc2l6ZT0iLTEiPkEgSmF2YSBzZXJ2bGV0IHRoYXQgaW5jcmVtZW50cyBhCi0JCQkJCQkJY291bnRlciBldmVyeSB0aW1lIGl0IGlzIGludm9rZWQgPC9GT05UPgotCQkJCQkJCTxVTD4KLQkJCQkJCQkJPExJPjxGT05UIHNpemU9Ii0xIj5BIEphdmEgU2VydmVyIFBhZ2UgKEpTUCkgdGhhdAotCQkJCQkJCQlpbnZva2VzIHRoZSBzZXJ2bGV0IGFuZCBkaXNwbGF5cyB0aGUgY291bnRlciA8L0ZPTlQ+Ci0JCQkJCQkJCTxMST48Rk9OVCBzaXplPSItMSI+QSAuc2VydmxldCBmaWxlIHRoYXQgcHJvdmlkZXMKLQkJCQkJCQkJaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlcnZsZXQgdG8gdGhlIFdlYlNwaGVyZSBBcHBsaWNhdGlvbgotCQkJCQkJCQlTZXJ2ZXIgPC9GT05UPgotCQkJCQkJCTwvVUw+Ci0JCQkJCQk8L1VMPgotCQkJCQkJPFA+PEZPTlQgc2l6ZT0iLTEiPlRoZSBBcHBsaWNhdGlvbiBTZXJ2ZXIgcHJvY2Vzc2VzCi0JCQkJCQkuanNwIGZpbGVzIHdpdGggaXRzIEpTUCAxLjAgcHJvY2Vzc29yIHNlcnZsZXQuIEl0IGhhbmRsZXMgdGhlCi0JCQkJCQkmbHQ7anNwOmluY2x1ZGUgLi4uIC8mZ3Q7IHRhZyBhcyBhIHNlcnZlci1zaWRlIGluY2x1ZGUsIHJlcGxhY2luZwotCQkJCQkJdGhlIHRhZyB3aXRoIHRoZSB2YXJpYWJsZSBkYXRhIGdlbmVyYXRlZCBieSB0aGUgc2VydmxldC48L0ZPTlQ+PC9QPgotCQkJCQkJPC9URD4KLQkJCQkJCTxURD48IS0tICMjIyMjIyMjIyMjIyBob3Jpem9udGFsIHNwYWNlciAjIyMjIyMjIyMjIyMgLS0+IDxJTUcKLQkJCQkJCQlzcmM9Ii4uL2ltYWdlcy9jbGVhclBpeGVsLmdpZiIgd2lkdGg9IjE1IiBoZWlnaHQ9IjEiIGFsdD0iIj4KLQkJCQkJCTwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT48L1REPgotCQkJCTwvVEJPRFk+Ci0JCQk8L1RBQkxFPgotCQkJPC9URD4KLQkJPC9UUj4KLQk8L1RCT0RZPgotPC9UQUJMRT4KLTxCUj4KLTxUQUJMRSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjUwMCIgYm9yZGVyPSIwIgotCWNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjUwMCIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIKLQljZWxsc3BhY2luZz0iMCIgd2lkdGg9IjUwMCIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiCi0Jd2lkdGg9IjUwMCI+Ci0JPFRCT0RZPgotCQk8VFI+Ci0JCQk8VEQgYWxpZ249IkNFTlRFUiI+Ci0JCQk8UD48Qj48Rk9OVCBzaXplPSItMSI+IEhvdyB0byB1c2UgdGhpcyBzYW1wbGUgb24geW91cgotCQkJd2ViIHBhZ2U6PC9GT05UPjwvQj48L1A+Ci0JCQk8L1REPgotCQk8L1RSPgotCQk8VFI+Ci0JCQk8VEQ+Ci0JCQk8VEFCTEUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSI+Ci0JCQkJPFRCT0RZPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PCEtLSAjIyMjIyMjIyMjIyMgaG9yaXpvbnRhbCBzcGFjZXIgIyMjIyMjIyMjIyMjIC0tPiA8SU1HCi0JCQkJCQkJc3JjPSIuLi9pbWFnZXMvY2xlYXJQaXhlbC5naWYiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxIiBhbHQ9IiI+Ci0JCQkJCQk8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+PC9URD4KLQkJCQkJCTxURD4KLQkJCQkJCTxQPjxGT05UIHNpemU9Ii0xIj5Zb3UgY2FuIGFkZCB0aGlzIGV4YWN0IHRhZyB0byBhbnkKLQkJCQkJCUhUTUwgcGFnZSB5b3UgaGF2ZSBvbiB5b3VyIHNpdGUuIFJlbmFtZSB0aGUgSFRNTCBmaWxlIHdpdGggYSAuanNwCi0JCQkJCQlmaWxlIGV4dGVuc2lvbiwgcHV0IHRoZSBKYXZhIC5jbGFzcyBhbmQgLnNlcnZsZXQgZmlsZXMgaW4gdGhlCi0JCQkJCQljbGFzc2VzIGZvbGRlciwgcHVibGlzaC4uLi4gYW5kIHlvdSdyZSByZWFkeSB0byBnby48L0ZPTlQ+PC9QPgotCQkJCQkJPC9URD4KLQkJCQkJCTxURD48IS0tICMjIyMjIyMjIyMjIyBob3Jpem9udGFsIHNwYWNlciAjIyMjIyMjIyMjIyMgLS0+IDxJTUcKLQkJCQkJCQlzcmM9Ii4uL2ltYWdlcy9jbGVhclBpeGVsLmdpZiIgd2lkdGg9IjE1IiBoZWlnaHQ9IjEiIGFsdD0iIj4KLQkJCQkJCTwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT48L1REPgotCQkJCQk8L1RSPgotCQkJCTwvVEJPRFk+Ci0JCQk8L1RBQkxFPgotCQkJPC9URD4KLQkJPC9UUj4KLQk8L1RCT0RZPgotPC9UQUJMRT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL0hpdENvdW50ZXJJbnRyby5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvSGl0Q291bnRlckludHJvLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjY2NhMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvSGl0Q291bnRlckludHJvLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxIVE1MPgotCQk8SEVBRD4KLTxNRVRBIGh0dHAtZXF1aXYKLT0KLSJDb250ZW50LVR5cGUiCi1jb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPFRJVExFPlBhZ2UgSGl0IENvdW50ZXIgSW50cm9kdWN0aW9uPC9USVRMRT4KLTxMSU5LIHJlbD0iU1RZTEVTSEVFVCIgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9IRUFEPgotPEJPRFk+Ci08Q0VOVEVSPgotPEZPUk0gbmFtZSAgID0gICAibXlGb3JtIiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iLi4vQ29udHJvbGxlcnMvU2FtcGxlQ29udHJvbGxlciI+Ci0JPFRBQkxFIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNTAwIj4KLQk8VEJPRFk+Ci0JCTxUUj4KLQkJCTxURCBjb2xzcGFuPSIyIj4KLQkJCTxJTUcgc3JjPSIuLi9pbWFnZXMvY2xlYXJQaXhlbC5naWYiIHdpZHRoPSIxIiBoZWlnaHQ9IjI1IiBhbHQ9IiI+PC9URD4KLQkJPC9UUj4KLQkJPFRSPgotCQkJPFREIHJvd3NwYW49IjIiIGFsaWduPSJMRUZUIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjMwMCI+PElNRyBzcmM9Ii4uL2ltYWdlcy9oaXRDb3VudGVyMDEuZ2lmIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwMCIgYWx0PSIiPjwvVEQ+Ci0JCQk8VEQgYWxpZ249IkxFRlQiIHdpZHRoPSIzODAiPgotCQkJPFA+PEZPTlQgc2l6ZT0iKzEiPjxCPlBhZ2UgSGl0IENvdW50ZXIgU2FtcGxlPC9CPjwvRk9OVD48L1A+Ci0JCQk8L1REPgotCQk8L1RSPgotCQk8VFI+Ci0JCQk8VEQgYWxpZ249IkxFRlQiIHZhbGlnbj0iVE9QIj4KLQkJCTxQPjxGT05UIHNpemU9Ii0xIj5UaGlzIHNhbXBsZSBzaG93cyB5b3UgaG93IHRvIHVzZSBhIEphdmEgc2VydmxldCB0byBjb3VudCBob3cgbWFueSB0aW1lcyBhIHBhZ2Ugd2FzIHZpc2l0ZWQuPC9GT05UPjwvUD4KLQkJCTxQPjxGT05UIHNpemU9Ii0xIj5UaGlzIHNhbXBsZSByZXF1aXJlcyBhIGRhdGFiYXNlIHRvIHN0b3JlIHRoZSBjb3VudGVyLiBJZiB5b3UgaGF2ZSBub3QgYWxyZWFkeSBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQgeW91ciBkYXRhYmFzZSBmb3IgdGhlIFdlYlNwaGVyZSBzYW1wbGVzLCByZWZlciB0byA8QSBocmVmPSIuLi9Db25maWd1cmF0aW9uL0RCQ29uZmlnLmh0bWwiPkRhdGFiYXNlIENvbmZpZ3VyYXRpb248L0E+IGZvciBpbnN0cnVjdGlvbnMuIDwvRk9OVD48L1A+Ci0JCQk8UD48Rk9OVCBzaXplPSItMSI+PEEgaHJlZj0iamF2YXNjcmlwdDpkb2N1bWVudC5teUZvcm0uc3VibWl0KCkiIHRhcmdldD0iX3NlbGYiPiA8Qj5SdW4gdGhpcyBzYW1wbGU8L0I+PC9BPiA8L0ZPTlQ+PC9QPgotCQkJPElOUFVUIG5hbWU9ImNvbW1hbmQiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IkhpdENvdW50ZXJWaWV3IiAvPiA8SU5QVVQgbmFtZT0iZGJfcmVnaW9uIiB0eXBlPSJoaWRkZW4iIHZhbHVlPSJ0cnVlIiAvPjwvVEQ+Ci0JCTwvVFI+Ci08L1RBQkxFPgotPC9GT1JNPgotPEJSPgotPFRBQkxFIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNTAwIj4KLQk8VEJPRFk+Ci0JCTxUUj4KLQkJCTxURCBhbGlnbj0iQ0VOVEVSIj4KLQkJCTxQPjxCPjxGT05UIHNpemU9Ii0xIj5Ib3cgdGhpcyBzYW1wbGUgd29ya3M6PC9GT05UPgotCQkJPC9URD4KLQkJPC9UUj4KLQkJPFRSPgotCQkJPFREPgotCQkJPFRBQkxFIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiPgotCQkJCTxUQk9EWT4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwhLS0gIyMjIyMjIyMjIyMjIGhvcml6b250YWwgc3BhY2VyICMjIyMjIyMjIyMjIyAtLT4gPElNRyBzcmM9Ii4uL2ltYWdlcy9jbGVhclBpeGVsLmdpZiIgd2lkdGg9IjE1IiBoZWlnaHQ9IjEiIGFsdD0iIj4gPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPjwvVEQ+Ci0JCQkJCQk8VEQ+Ci0JCQkJCQk8UD48Rk9OVCBzaXplPSItMSI+VGhpcyBzYW1wbGUgaGFzOjwvRk9OVD48L1A+Ci0JCQkJCQk8VUw+Ci0JCQkJCQkJPExJPjxGT05UIHNpemU9Ii0xIj5BIEphdmEgc2VydmxldCB0aGF0IGluY3JlbWVudHMgYSBjb3VudGVyIGV2ZXJ5IHRpbWUgaXQgaXMgaW52b2tlZCA8L0ZPTlQ+Ci08VUw+Ci0JPExJPjxGT05UIHNpemU9Ii0xIj5BIEphdmEgU2VydmVyIFBhZ2UgKEpTUCkgdGhhdCBpbnZva2VzIHRoZSBzZXJ2bGV0IGFuZCBkaXNwbGF5cyB0aGUgY291bnRlciA8L0ZPTlQ+Ci0JPExJPjxGT05UIHNpemU9Ii0xIj5BIC5zZXJ2bGV0IGZpbGUgdGhhdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VydmxldCB0byB0aGUgV2ViU3BoZXJlIEFwcGxpY2F0aW9uIFNlcnZlciA8L0ZPTlQ+Ci08L1VMPgotCQkJCQkJPC9VTD4KLQkJCQkJCTxQPjxGT05UIHNpemU9Ii0xIj5UaGUgQXBwbGljYXRpb24gU2VydmVyIHByb2Nlc3NlcyAuanNwIGZpbGVzIHdpdGggaXRzIEpTUCAxLjAgcHJvY2Vzc29yIHNlcnZsZXQuIEl0IGhhbmRsZXMgdGhlICZsdDtqc3A6aW5jbHVkZSAuLi4gLyZndDsgdGFnIGFzIGEgc2VydmVyLXNpZGUgaW5jbHVkZSwgcmVwbGFjaW5nIHRoZSB0YWcgd2l0aCB0aGUgdmFyaWFibGUgZGF0YSBnZW5lcmF0ZWQgYnkgdGhlIHNlcnZsZXQuPC9GT05UPjwvUD4KLQkJCQkJCTwvVEQ+Ci0JCQkJCQk8VEQ+PCEtLSAjIyMjIyMjIyMjIyMgaG9yaXpvbnRhbCBzcGFjZXIgIyMjIyMjIyMjIyMjIC0tPiA8SU1HIHNyYz0iLi4vaW1hZ2VzL2NsZWFyUGl4ZWwuZ2lmIiB3aWR0aD0iMTUiIGhlaWdodD0iMSIgYWx0PSIiPiA8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+PC9URD4KLQkJCQk8L1RCT0RZPgotCQkJPC9UQUJMRT4KLQkJCTwvVEQ+Ci0JCTwvVFI+Ci0JPC9UQk9EWT4KLTwvVEFCTEU+Ci08QlI+Ci08VEFCTEUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI1MDAiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNTAwIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjUwMCIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI1MDAiPgotCTxUQk9EWT4KLQkJPFRSPgotCQkJPFREIGFsaWduPSJDRU5URVIiPgotCQkJPFA+PEI+PEZPTlQgc2l6ZT0iLTEiPgotSG93IHRvIHVzZSB0aGlzIHNhbXBsZSBvbiB5b3VyIHdlYiBwYWdlOjwvRk9OVD48L0I+PC9QPgotCQkJPC9URD4KLQkJPC9UUj4KLQkJPFRSPgotCQkJPFREPgotCQkJPFRBQkxFIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiPgotCQkJCTxUQk9EWT4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwhLS0gIyMjIyMjIyMjIyMjIGhvcml6b250YWwgc3BhY2VyICMjIyMjIyMjIyMjIyAtLT4gPElNRyBzcmM9Ii4uL2ltYWdlcy9jbGVhclBpeGVsLmdpZiIgd2lkdGg9IjE1IiBoZWlnaHQ9IjEiIGFsdD0iIj4gPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPjwvVEQ+Ci0JCQkJCQk8VEQ+Ci0JCQkJCQk8UD48Rk9OVCBzaXplPSItMSI+WW91IGNhbiBhZGQgdGhpcyBleGFjdCB0YWcgdG8gYW55IEhUTUwgcGFnZSB5b3UgaGF2ZSBvbiB5b3VyIHNpdGUuIFJlbmFtZSB0aGUgSFRNTCBmaWxlIHdpdGggYSAuanNwIGZpbGUgZXh0ZW5zaW9uLCBwdXQgdGhlIEphdmEgLmNsYXNzIGFuZCAuc2VydmxldCBmaWxlcyBpbiB0aGUgY2xhc3NlcyBmb2xkZXIsIHB1Ymxpc2guLi4uIGFuZCB5b3UncmUgcmVhZHkgdG8gZ28uPC9GT05UPjwvUD4KLQkJCQkJCTwvVEQ+Ci0JCQkJCQk8VEQ+PCEtLSAjIyMjIyMjIyMjIyMgaG9yaXpvbnRhbCBzcGFjZXIgIyMjIyMjIyMjIyMjIC0tPiA8SU1HIHNyYz0iLi4vaW1hZ2VzL2NsZWFyUGl4ZWwuZ2lmIiB3aWR0aD0iMTUiIGhlaWdodD0iMSIgYWx0PSIiPiA8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQk8L1RCT0RZPgotCQkJPC9UQUJMRT4KLQkJCTwvVEQ+Ci0JCQkJPC9UUj4KLQkJCQkJPC9UQk9EWT4KLQkJCQkJCTwvVEFCTEU+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9ibG9ja0NvbW1lbnRzLmFmdGVyRGVmYXVsdEZvcm1hdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9ibG9ja0NvbW1lbnRzLmFmdGVyRGVmYXVsdEZvcm1hdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3Yjg0MTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvYmxvY2tDb21tZW50cy5hZnRlckRlZmF1bHRGb3JtYXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCEtLSBjb21tZW50IG9uIGEgbmV3IGxpbmUgLS0+Ci08bWVudSBkYXRlPSIxMS8zMC8yMDAwIj48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQk8cm5hbWU+TGlhbSdzIENob3dkZXIgSG91c2UgYW5kIEdyaWxsPC9ybmFtZT48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQk8IS0tIGJsb2NrIGNvbW1lbnQKLQkJQmxhY2sgPSAjMDAwMDAwCi0JCVNpbHZlcj0gI0MwQzBDMAotCQlHcmF5ICA9ICM4MDgwODAKLQkJV2hpdGUgPSAjRkZGRkZGCi0JLS0+Ci0JPCEtLSBibG9jayBjb21tZW50Ci0JCUJsYWNrID0gIzAwMDAwMAotCQlTaWx2ZXI9ICNDMEMwQzAKLQkJR3JheSAgPSAjODA4MDgwCi0JCVdoaXRlID0gI0ZGRkZGRgotCS0tPgotCTxpdGVtIHR5cGU9ImFwcGV0aXplciI+Ci0JCTxkZXNjPldhcm1lZCBsZWVrIHNhbGFkPC9kZXNjPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotCQk8cHJpY2UgdW5pdHM9InVzZCI+Ni45NTwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCAtLT48L3ByaWNlPgotCQk8cHJpY2UgdW5pdHM9InVzZCIgdW5pdHM9InVzZCI+Ni45NTwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCAtLT48L3ByaWNlPgotCTwvaXRlbT4KLQk8IS0tIGNvbW1lbnQgb24gYSBuZXcgbGluZSAtLT4KLQk8IS0tICAgY29tbWVudCAgIG9uICAgYSAgIG5ldyAgIGxpbmUgICAtLT4KLQk8IS0tY29tbWVudCBvbiBhIG5ldyBsaW5lIHdpdGggbm8gc3BhY2UtLT4KLQk8IS0tCi0JCU5vIHNwYWNlCi0JLS0+Ci0JPCEtLQotCQlPbmVTcGFjZQotCS0tPgotCTwhLS0KLQkJT25lIHRhYgotCS0tPgotCTwhLS0KLQkJVGhpcyBpcyBhIGxvbmcgcGFyYWdyYXBoLgotCQkKLQkJVGhlIHRleHQKLQkJaW4gdGhpcyBwYXJhZ3JhcGggc2hvdWxkIE5PVCBiZSByZS1mbG93ZWQuLS0+Ci0JPCEtLQotCQlUaGlzIGlzIGEgbG9uZyBwYXJhZ3JhcGguCi0JCQotCQlUaGUgdGV4dAotCQlpbiB0aGlzIHBhcmFncmFwaCBzaG91bGQgTk9UIGJlIHJlLWZsb3dlZC4KLQktLT4KLQk8IS0tCi0JCVRoaXMgaXMgYSBsb25nIHBhcmFncmFwaC4KLQkJCi0JCQotCQlUaGUgdGV4dAotCQlpbiB0aGlzIHBhcmFncmFwaCBzaG91bGQgTk9UIGJlIHJlLWZsb3dlZC4KLQktLT4KLQk8IS0tCi0JCVRoaXMgaXMgYSBsb25nIHBhcmFncmFwaC4KLQkJCi0JCQotCQkKLQkJVGhlIHRleHQKLQkJaW4gdGhpcyBwYXJhZ3JhcGggc2hvdWxkIE5PVCBiZSByZS1mbG93ZWQuCi0JLS0+Ci0JPCEtLQotCQkKLQkJVGhpcyBpcyBhIGxvbmcgcGFyYWdyYXBoLgotCQkKLQkJVGhlIHRleHQKLQkJaW4gdGhpcyBwYXJhZ3JhcGggc2hvdWxkIE5PVCBiZSByZS1mbG93ZWQuCi0JLS0+Ci0JPCEtLQotCQkKLQkJVGhpcyBpcyBhIGxvbmcgcGFyYWdyYXBoLgotCQkKLQkJVGhlIHRleHQKLQkJaW4gdGhpcyBwYXJhZ3JhcGggc2hvdWxkIE5PVCBiZSByZS1mbG93ZWQuCi0JCQotCS0tPgotCTwhLS0KLQkJCi0JCQotCQkKLQkJVGhpcyBpcyBhIGxvbmcgcGFyYWdyYXBoLgotCQkKLQkJCi0JCQotCQlUaGUgdGV4dAotCQlpbiB0aGlzIHBhcmFncmFwaCBzaG91bGQgTk9UIGJlIHJlLWZsb3dlZC4KLQkJCi0JCQotCQkKLQktLT4KLQk8aXRlbSB0eXBlPSJhcHBldGl6ZXIiPgotCQk8IS0tIGEKLQkJCWItLT4KLQkJPCEtLSBhCi0JCQliIC0tPgotCQk8IS0tCi0JCQlhCi0JCQliLS0+Ci0JCTwhLS0KLQkJCWEKLQkJCWIgLS0+Ci0JCTwhLS0KLQkJCWEKLQkJCWIKLQkJLS0+Ci0JCTwhLS0gYQotCQkJYgotCQktLT4KLQkJPCEtLQotCQkJCi0JCQkKLQkJCQotCQkJYQotCQkJCi0JCQkKLQkJCQotCQkJYgotCQkJCi0JCQkKLQkJCQotCQktLT4KLQkJPGRlc2M+UHJvc2NpdXR0byBoYW0gd2l0aCBtZWxvbjwvZGVzYz4KLQkJPCEtLSB0aGlzIGJsb2NrIGNvbW1lbnQgc2hvdWxkIGxpbmUgdXAgd2l0aCB0aGUgc2liaWxpbmdzCi0JCQlCbGFjayA9ICMwMDAwMDAKLQkJCVNpbHZlcj0gI0MwQzBDMAotCQkJR3JheSAgPSAjODA4MDgwCi0JCQlXaGl0ZSA9ICNGRkZGRkYKLQkJLS0+Ci0JCTxwcmljZSB1bml0cz0idXNkIj43Ljk1PC9wcmljZT4KLQkJPCEtLSBjb21tZW50IGJlZm9yZSBtaXNzaW5nIGVuZCB0YWcgLS0+Ci08L21lbnU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvYmxvY2tDb21tZW50cy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9ibG9ja0NvbW1lbnRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk2OTg3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9ibG9ja0NvbW1lbnRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLQk8IS0tIGNvbW1lbnQgb24gYSBuZXcgbGluZSAtLT4KLQkJPG1lbnUgZGF0ZT0iMTEvMzAvMjAwMCI+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci0JPHJuYW1lPkxpYW0ncyBDaG93ZGVyIEhvdXNlIGFuZCBHcmlsbDwvcm5hbWU+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci0JPCEtLSBibG9jayBjb21tZW50Ci0JCUJsYWNrID0gIzAwMDAwMAotCQlTaWx2ZXI9ICNDMEMwQzAKLQkJR3JheSAgPSAjODA4MDgwCi0JCVdoaXRlID0gI0ZGRkZGRgotCS0tPgotCTwhLS0gYmxvY2sgY29tbWVudAotCQkJQmxhY2sgPSAjMDAwMDAwCi0JCVNpbHZlcj0gI0MwQzBDMAotCQkJCUdyYXkgID0gIzgwODA4MAotCVdoaXRlID0gI0ZGRkZGRgotLS0+Ci0JPGl0ZW0gdHlwZT0iYXBwZXRpemVyIj4KLQkJPGRlc2M+V2FybWVkIGxlZWsgc2FsYWQ8L2Rlc2M+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+PHByaWNlIHVuaXRzPSJ1c2QiPjYuOTU8IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRleHQgLS0+PC9wcmljZT48cHJpY2UgdW5pdHM9InVzZCIgdW5pdHM9InVzZCI+Ni45NTwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCAtLT48L3ByaWNlPgotCTwvaXRlbT4KLQk8IS0tIGNvbW1lbnQgb24gYSBuZXcgbGluZSAtLT4KLQk8IS0tICAgY29tbWVudCAgIG9uICAgYSAgIG5ldyAgIGxpbmUgICAtLT4KLQk8IS0tY29tbWVudCBvbiBhIG5ldyBsaW5lIHdpdGggbm8gc3BhY2UtLT4KLTwhLS0KLU5vIHNwYWNlCi0tLT4KLTwhLS0KLSBPbmVTcGFjZQotLS0+Ci08IS0tCi0JT25lIHRhYgotLS0+Ci08IS0tCi1UaGlzIGlzIGEgbG9uZyBwYXJhZ3JhcGguCi0KLVRoZSB0ZXh0Ci1pbiB0aGlzIHBhcmFncmFwaCBzaG91bGQgTk9UIGJlIHJlLWZsb3dlZC4tLT4KLTwhLS0KLVRoaXMgaXMgYSBsb25nIHBhcmFncmFwaC4KLQotVGhlIHRleHQKLWluIHRoaXMgcGFyYWdyYXBoIHNob3VsZCBOT1QgYmUgcmUtZmxvd2VkLgotLS0+Ci08IS0tCi1UaGlzIGlzIGEgbG9uZyBwYXJhZ3JhcGguCi0KLQotVGhlIHRleHQKLWluIHRoaXMgcGFyYWdyYXBoIHNob3VsZCBOT1QgYmUgcmUtZmxvd2VkLgotLS0+Ci08IS0tCi1UaGlzIGlzIGEgbG9uZyBwYXJhZ3JhcGguCi0KLQotCi1UaGUgdGV4dAotaW4gdGhpcyBwYXJhZ3JhcGggc2hvdWxkIE5PVCBiZSByZS1mbG93ZWQuCi0tLT4KLTwhLS0KLQotVGhpcyBpcyBhIGxvbmcgcGFyYWdyYXBoLgotCi1UaGUgdGV4dAotaW4gdGhpcyBwYXJhZ3JhcGggc2hvdWxkIE5PVCBiZSByZS1mbG93ZWQuCi0tLT4KLTwhLS0KLQotVGhpcyBpcyBhIGxvbmcgcGFyYWdyYXBoLgotCi1UaGUgdGV4dAotaW4gdGhpcyBwYXJhZ3JhcGggc2hvdWxkIE5PVCBiZSByZS1mbG93ZWQuCi0KLS0tPgotPCEtLQotCi0KLQotVGhpcyBpcyBhIGxvbmcgcGFyYWdyYXBoLgotCi0KLQotVGhlIHRleHQKLWluIHRoaXMgcGFyYWdyYXBoIHNob3VsZCBOT1QgYmUgcmUtZmxvd2VkLgotCi0KLQotLS0+Ci0JPGl0ZW0gdHlwZT0iYXBwZXRpemVyIj4KLTwhLS0gYQotICAgICBiLS0+Ci08IS0tIGEKLSAgICAgYiAtLT4KLTwhLS0KLWEKLSAgICAgYi0tPgotPCEtLQotYQotICAgICBiIC0tPgotPCEtLQotYQotICAgICBiCi0tLT4KLTwhLS0gYQotICAgICBiCi0gICAgICAtLT4KLTwhLS0KLQotCi0KLWEKLQotCi0KLWIKLQotCi0KLS0tPgotCQk8ZGVzYz5Qcm9zY2l1dHRvIGhhbSB3aXRoIG1lbG9uPC9kZXNjPgotPCEtLSB0aGlzIGJsb2NrIGNvbW1lbnQgc2hvdWxkIGxpbmUgdXAgd2l0aCB0aGUgc2liaWxpbmdzCi0JQmxhY2sgPSAjMDAwMDAwCi0JU2lsdmVyPSAjQzBDMEMwCi0JR3JheSAgPSAjODA4MDgwCi0JV2hpdGUgPSAjRkZGRkZGCi0tLT4KLQk8cHJpY2UgdW5pdHM9InVzZCI+Ny45NTwvcHJpY2U+Ci0JPCEtLSBjb21tZW50IGJlZm9yZSBtaXNzaW5nIGVuZCB0YWcgLS0+Ci08L21lbnU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvY2hhcnMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvY2hhcnMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmJhOGY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2NoYXJzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWFiYwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2NsZWFudXAuYWZ0ZXJDbGVhbnVwLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9jbGVhbnVwLmFmdGVyQ2xlYW51cC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDdkOGQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2NsZWFudXAuYWZ0ZXJDbGVhbnVwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotPEhUTUw+Ci08SEVBRD4KLSAgIDxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiIC8+Ci0gICA8TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9Ik1vemlsbGEvNC43MiBbZW5dIChXaW5kb3dzIE5UIDUuMDsgVSkgW05ldHNjYXBlXSIgLz4KLTxUSVRMRT48L1RJVExFPgotPC9IRUFEPgotCi1UaGlzIGlzIGEgcGFnZSBvZiBzb21lIG9mIHRoZSB0ZWNobmljYWwgc3R1ZmYgdGhhdCBJJ3ZlIHdyaXR0ZW4gdXNpbmcgdmFyaW91cwotcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLiAgQ2xpY2sgb24gdGhlIGxpbmtzIHRvIGxlYXJuIG1vcmUgYWJvdXQgdGhlIHByb2plY3RzIG9yCi10byBzZWUgdGhlIHNvdXJjZSBjb2RlLjxCUj4KLTxJPk5vdGU6IEZlZWwgZnJlZSB0byBjb3B5LCBzdGVhbCwgbW9kaWZ5LCBkZXN0cm95IHdoYXQgeW91IHdpbGwuLi48L0k+PEJSPjxCUj4KLTxIUj4KLQotPEgyPiBQcm9ncmFtcyBhbmQgVXRpbGl0aWVzIDwvSDI+Ci08VUw+Ci08TEk+PEEgaHJlZj0ibWFrZW1ha2UuaHRtbCI+IDxJPiBBdXRvbWF0aWMKLU1ha2VmaWxlIFV0aWxpdHk6IDwvST48L0E+IFRoaXMgZ2VuZXJhdGVzIGEgTWFrZWZpbGUgYW5kIHVwZGF0ZXMgaXQgYWNjb3JkaW5nCi10byB0aGUgZmlsZXMgY3VycmVudGx5IGluIHlvdXIgZGlyZWN0b3J5LgotVGFrZSBhIGdhbmRlciBhdCB0aGUgc291cmNlIGhlcmU6IDxBCi1ocmVmPSJtYWtlbWFrZS5jIj4gPEk+IG1ha2VtYWtlLmMgCi0gPC9JPjwvQT4gCi0KLTxCUj48QlI+Ci08L0xJPjxMST48QSBocmVmPSJtYWlsc29ydC5wbCIgPiA8ST4KLW1haWwgZmlsZSBzb3J0ZXI6ICA8L0k+IDwvQT4gCi1UaGlzIHV0aWxpdHkgcGFyc2VzIGEgbWFpbCBmaWxlIGFuZCBjcmVhdGVzIGFub3RoZXIgbWFpbCBmaWxlIGNvbnRhaW5pbmcgb25seQotdGhlIG1lc3NhZ2VzIHNwZWNpZmllZCBieSBwYXJhbWF0ZXJzLiAgRm9yIGV4YW1wbGUsIHBhcnNlIGEgbWFpbCBhcmNoaXZlIGZpbGUKLShvbGQtbWFpbC1KYW4tMjAwMCkgYW5kIGV4dHJhY3QgYWxsIG9mIHRoZSBtZXNzYWdlcyBmcm9tIGRhdmVrQHlvdXJtb20uY29tIG9yCi13aXRoIHRoZSBzdWJqZWN0IE1hcmlsbGlvbi4gIFRoaXMgZ3V5IHdhcyB3aGlwcGVkIHVwIGluIFBlcmwuCi08QlI+PEJSPgotCi08L0xJPjxMST48QSBocmVmPSJlbGVjdHJvbmljTm90ZXMuaHRtbCIgPiA8ST4KLUVsZWN0cm9uaWMgTm90ZXM6ICA8L0k+IDwvQT4gVGhpcyBpcyBhbiBvcmlnaW5hbCBpZGVhIChnYXNwISkgdGhhdCBJIGRldmVsb3BlZCB3aGljaCBpcyBhCi1zeXN0ZW0gZm9yIGtlZXBpbmcgbGl0dGxlIHJlbWluZGVycyB0byB5b3Vyc2VsZiBkdXJpbmcgdGhlIGRheSBhbmQgaGF2aW5nIHRoZW0KLXNlbnQgdG8geW91IGFsbCBpbiBvbmUgY29udmVuaWVudCBmaWxlIHZpYSBlbWFpbCBhdCB0aGUgZW5kIG9mIHRoZSBkYXkuICAKLTxCUj48QlI+Ci0KLTwvTEk+PExJPjxBIGhyZWY9ImhlYWRlci5odG1sIiA+IDxJPiBDL0MrKyBIZWFkZXIgZmlsZQotdG8gSW1wbGVtZW50YXRpb24gZmlsZSBjb252ZXJ0ZXI6IDwvST4gPC9BPgotVGhpcyBpcyBhIHZlcnkgdXNlZnVsIHRvb2wgd3JpdHRlbiBpbiBDKysgdGhhdCBjb252ZXJ0cyAuaCBmaWxlcyB0byBlbXB0eQotaW1wbGVtZW50YXRpb24gKC5DKSBmaWxlcy4gIAotPEJSPjxCUj4KLTwvTEk+PExJPjxBIGhyZWY9Im1hdHJpeC5odG1sIiA+IDxJPiBNYXRyaXggTWFuaXB1bGF0aW9uCi1QYWNrYWdlOiA8L0k+PC9BPiBUaGlzIGlzIGEgcGFja2FnZSB0aGF0IGRvZXMgYWxsIHNvcnRzIG9mIGNvb2wgbWFuaXB1bGF0aW9ucwotd2l0aCBtYXRyaWNlcywgc3VjaCBhcyBHYXVzc2lhbiBFbGltaW5hdGlvbiwgTm9ybWFsIEVxdWF0aW9ucywgVmFuZGVybW9uZGUKLU1hdHJpY2VzLCBDaG9sZXNreSBGYWN0b3JpemF0aW9uLCBFcnJvciBBbmFseXNpcywgYW5kIG1vcmUgc3R1ZmYgdGhhbiB5b3Ugd291bGQKLWV2ZXIgd2FudCB0byBkbyB3aXRoIGEgbWF0cml4LiAgSXQgaXMgd3JpdHRlbiBpbiBnb29kIG9sJyBDLgotCi08QlIgPjxCUiAgPgotPC9MST48TEk+IAotPEEgaHJlZj0ibGlzcC5odG1sIiA+IDxJPlNldCBPcGVyYXRpb25zOiA8L0k+PC9BPiA8ST48L0k+IEEgcHJvZ3JhbSB0aGF0IHBlcmZvcm1zIHNldAotb3BlcmF0aW9ucyBvbiBhIGxpc3QuICBUaGlzIGlzIHdyaXR0ZW4gaW4gTGlzcCwgb2YgYWxsIHRoaW5ncy4gIFRoZXJlJ3MgYWxzbwotc29tZSBleGFtcGxlcyBvZiBteSBvd24gaW50ZXJwcmV0YXRpb25zIG9mIHNvbWUgTGlzcCBmdW5jdGlvbnMuIExpc3AgaXMgYSBnb29kCi1sYW5ndWFnZSBmb3IgQUkgYW5kIHRoaW5ncyBvZiB0aGF0IG5hdHVyZS4gIAotSXQgcmVsaWVzIGhlYXZpbHkgb24gcmVjdXJzaW9uLCBzbyBpdCB0YWtlcyBhIGRpZmZlcmVudAotbWluZHNldCB0byBwcm9ncmFtIGluIHRoaXMgbGFuZ3VhZ2UuICBCdXQgdXNlZCBjb3JyZWN0bHkgYW5kIGZvciBpdHMgaW50ZW5kZWQKLXB1cnBvc2UsIExpc3AgaXMgYSB2ZXJ5IHVuaXF1ZSBhbmQgcG93ZXJmdWwgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuCi08QlIgICA+PEJSICAgID4KLQotPC9MST48TEk+IAotPEEgaHJlZj0ibG9jLmh0bWwiID4gPEk+IExpbmVzIE9mIENvZGUgQ291bnRlcjoKLTwvST48L0E+PEk+PC9JPiAgVGhpcyBpcyBpcyBMT0MgY291bnRlciB0aGF0IEkgd3JvdGUgaW4gUGVybCB0aGF0IGNhbGN1bGF0ZXMgdGhlIG51bWJlciBvZgotdW5jb21tZW50ZWQgbGluZXMgb2YgY29kZSBpbiBhIHByb2dyYW0uICBUaGlzIHdvcmtzIGZvciBhbnkgcHJvZ3JhbW1pbmcKLWxhbmd1YWdlIGFzIHlvdSBjYW4gc3VwcGx5IHRoZSBjb21tZW50IGNoYXJhY3RlciBvbiB0aGUgY29tbWFuZCBsaW5lLiAgVGhpcyBpcwotYW4gZXh0cmVtZWx5IHVzZWZ1bCBwcm9ncmFtIGZvciB1c2UgaW4gc29mdHdhcmUgbWV0cmljcy4KLTxCUiBhYmM9ImRlZiI+PEJSIGFiYz0iZGVmIiA+Ci0KLTwvTEk+PExJPjxBIGhyZWY9Imxpbndpbi5odG1sIj4gPEk+IFNpbXBsZSAqbml4IHRvCi13aW5kb3dzIHRleHQgY29udmVydGVyIDwvST48L0E+IFRoaXMgdGFrZXMgZmlsZXMgd3JpdHRlbiBpbiBMaW51eCAoYW5kIGluIHZpIG9yCi0gICAgICAgIGFuIGVkaXRvciB3aXRoIGF1dG9tYXRpYyBsaW5lIGJyZWFrcyBhZnRlciBldmVyeSA4MCBvciBzbyBjaGFycykgYW5kCi1mb3JtYXRzIGl0IHNvIGl0IHdpbGwgZGlzcGxheSBwcm9wZXJseSBpbiBXaW5kb3dzIGVudmlyb25tZW50IHNob3VsZCB5b3UgYmUKLWZvcmNlZCB0byBkbyBzby4gIAotUGVydXNlIChwZXJ1c2UsIG1pbmQgeW91LiAgSSBkb24ndCB3YW50IHRvIHNlZSBhbnkgPEk+YnJvd3Npbmc8L0k+KSB0aGUgc291cmNlIGhlcmU6IDxBCi1ocmVmPSJsaW53aW4uYyI+IDxJPiBsaW53aW4uYyAKLSA8L0k+PC9BPiAKLTxCUiBhYmMgPSAiZGVmIj48QlIgYWJjICA9ICAiZGVmIj4KLQotCi08L0xJPjxMST48Qj4gUmVncmVzc2lvbiBhbmQgU3RhbmRhcmQgRGV2aWF0aW9uOiA8L0I+IAotQSBtYXRoIGNsYXNzIHdyaXR0ZW4gaW4gSmF2YSB1c2luZyBPYmplY3QgT3JpZW50ZWQgZGVzaWduIHByaW5jaXBsZXMuICBUaGUgbWFpbgotYXNwZWN0cyBvZiB0aGUgcHJvZ3JhbSBhcmUgZm9yIGZpZ3VyaW5nIG91dCBTdGFuZGFyZCBEZXZpYXRpb24gYW5kIHRoZQotUmVncmVzc2lvbiwgd2hlbiB5b3UgaW5wdXQgYSBzZXQgb2YgeCBhbmQgeSB2YWx1ZXMuICBSZWdyZXNzaW9uIGNhbGN1bGF0aW9ucwotYXJlIG9mdGVuIHVzZWQgaW4gU29mdHdhcmUgTWV0cmljcyB0byB0byBoZWxwIGluIGVzdGltYXRpbmcgbGVuZ3RoIG9mIGNvZGUsIGFuZAotdGltZSBzcGVudCBvbiB0aGUgcHJvamVjdC48QlI+Ci0KLTxBIGhyZWY9IlJlZ3Jlc3Npb25DYWxjLmh0bWwiID4gCi08ST4gUmVncmVzc2lvbkNhbGMuamF2YSA8L0k+IDwvQT4gIFRoaXMgaXMgdGhlIG1haW4gY2xhc3MgdGhhdCBkb2VzIHRoZQotY2FsY3VsYXRpb25zLiAgSXQgY2FsY3VsYXRlcyBCMSwgQjAsIGFuZCByXjIsIHdoaWNoIGFyZSBhbGwgcGFyYW1ldGVycyBvZgotUmVncmVzc2lvbi4KLTxCUiBhYmM9ICJkZWYiPgotPEEgaHJlZj0iTWF0aENsYXNzLmh0bWwiID4gCi08ST4gTWF0aENsYXNzLmphdmEgPC9JPiAgPC9BPiBUaGlzIGlzIHNpbXBseSBhIHNtYWxsIGNsYXNzIHdoaWNoIGNhbGN1bGF0ZXMgdGhlCi1tZWFuIGFuZCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGEgdmVjdG9yIG9mIG51bWJlcnMuICBUaGlzIGlzIHVzZWQgYnkgdGhlCi1SZWdyZXNzaW9uQ2FsYyBjbGFzcyBpbiBpdHMgY2FsY3VsYXRpb25zLgotPEJSIGFiYyA9ImRlZiI+Ci08QSBocmVmPSJSZWdyZXNzaW9uLmh0bWwiID4gCi08ST4gUmVncmVzc2lvbi5qYXZhIDwvST4gIDwvQT4gVGhpcyBpcyBiYXNpY2FsbHkgdGhlIG1haW4gcm91dGluZSwgb3Igd2hlcmUgdGhlCi1wcm9ncmFtIHN0YXJ0cy4gIEl0IHB1dHMgYWxsIG9mIHRoZSBpbnB1dCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgaW50byB0d28KLXNlcGFyYXRlIHZlY3RvcnMgZm9yIHRoZSB4IGFuZCB5IHZhbHVlcy48QlI+PEJSPgotCi1BbiBleGFtcGxlIG9mIHRoZSB1c2FnZSBvZiB0aGlzIHByb2dyYW0gd291bGQgYmU6ICA8QlI+Ci1JZiB5b3UgaGFkIGEgaGlzdG9yeSBvZiBkYXRhIG9uIHlvdXIgZXN0aW1hdGVkIExpbmVzIE9mIENvZGUgKExPQykgcGVyIGNsYXNzLAotYXMgd2VsbCBhcyB0aGUgYWN0dWFsIExPQyBwZXIgY2xhc3MsIHlvdSBjb3VsZCBwdXQgdGhlc2UgaW4gdGhlIGZvcm11bGEgYW5kCi1maW5kIG91dCB0aGUgUmVncmVzc2lvbiBvZiB0aGUgZGF0YSAob3IgaG93IGZhciBhd2F5IGVhY2ggcG9pbnQgaXMgZnJvbSB0aGUKLWZ1bmN0aW9uIGxpbmUuKSAgCi0KLVlvdSB3b3VsZCBpbnB1dCB0aGUgZGF0YSBmb3IgdGhlIGVzdGltYXRlZCBMT0MsIHNlcGFyYXRlZCBieSBhIGNvbW1hLCBhbmQKLWZvbGxvd2VkIGJ5IHRoZSBhY3R1YWwgTE9DLiAgVGhlIHJlc3VsdCB3b3VsZCBiZSB0aGUgcmVncmVzc2lvbiBjYWxjdWxhdGlvbi4KLTxQUkU+Ci0lamF2YSBSZWdyZXNzaW9uIDEzMCA2NTAgOTkgMTUwICwgMTg2IDY5OSAxMzIgMjcyIAotCi1YIERhdGEgPSBbIDEzMC4wIDY1MC4wIDk5LjAgMTUwLjAgXQotWSBEYXRhID0gWyAxODYuMCA2OTkuMCAxMzIuMCAyNzIuMCBdCi1OID0gNAotQmV0YTAgPSA3Mi42OTA1MDMwNzgwMzYxCi1CZXRhMSA9IDAuOTcwMTA0OTQ0MzAzMDY2NwotclNxdWFyZWQgPSAyMjEyLjUwNDY5NzY3MzY4OQotPC9QUkU+Ci0KLTwvTEk+PC9VTD4KLQotPEhSPgotPEgyPiBLbm93bGVkZ2UgPC9IMj4KLTxVTD4KLTxMST48QSBocmVmPSJ2aW0uaHRtbCI+IDxJPiBFc3BvdXNpbmcgbXkgbG92ZQotZm9yIHZpbSEgPC9JPjwvQT4gdmltIGp1c3Qgcm9ja3MsIG9rYXkuICBSZWFsbHkuICBJZiBJIGhhZCB0byBjaG9vc2UgYmV0d2VlbiwKLWxpa2UsIHNleCwgb3IgdXNpbmcgdmltLS1sZXQncyBqdXN0IHNheSBJJ2QgYmUgb25lIG1hc3RlcmZ1bC1lZGl0aW5nIG1vbmsuIAotPEJSPjxCUj4KLQotCi08L0xJPjxMST4KLTxBIGhyZWY9Ik1CUi1MSUxPLnR4dCI+IAotPEk+IExvc3QgTElMTz8gIFJlY292ZXIuPC9JPiAgPC9BPiBJZiB5b3UgaGF2ZSBMaW51eCBpbnN0YWxsZWQgaW4gYSBtdWx0aS1ib290Ci1lbnZpcm9ubWVudCwgYW5kIHlvdSBvdmVyd3JpdGUgeW91ciBNQlIsIHlvdSBjYW4gbG9zZSBMSUxPLiAgSSByZWluc3RhbGxlZAotV2luZG93cyAoaGV5LCBJIG5lZWRlZCB0byBwbGF5IEZpbmFsIEZhbnRhc3kgVklJSSEpIGFuZCBjb3VsZG4ndCBib290IGludG8KLUxpbnV4LiAgSGVyZSdzIGhvdyBJIHJlY292ZXJlZC4KLTxCUj48QlI+Ci0KLQotCi08L0xJPjwvVUw+PEJPRFk+PC9CT0RZPgotPC9IVE1MPjxIVE1MPgotPC9IVE1MPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2NsZWFudXAuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2NsZWFudXAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI5N2EwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9jbGVhbnVwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotPGh0bWw+Ci08SEVBRD4KLSAgIDxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiIC8+Ci0gICA8TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9Ik1vemlsbGEvNC43MiBbZW5dIChXaW5kb3dzIE5UIDUuMDsgVSkgW05ldHNjYXBlXSIgLz4KLTxUSVRMRT48L1RJVExFPgotPC9IRUFEPgotCi1UaGlzIGlzIGEgcGFnZSBvZiBzb21lIG9mIHRoZSB0ZWNobmljYWwgc3R1ZmYgdGhhdCBJJ3ZlIHdyaXR0ZW4gdXNpbmcgdmFyaW91cwotcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLiAgQ2xpY2sgb24gdGhlIGxpbmtzIHRvIGxlYXJuIG1vcmUgYWJvdXQgdGhlIHByb2plY3RzIG9yCi10byBzZWUgdGhlIHNvdXJjZSBjb2RlLjxCUj4KLTxJPk5vdGU6IEZlZWwgZnJlZSB0byBjb3B5LCBzdGVhbCwgbW9kaWZ5LCBkZXN0cm95IHdoYXQgeW91IHdpbGwuLi48L0k+PEJSPjxCUj4KLTxIUj4KLQotPEgyPiBQcm9ncmFtcyBhbmQgVXRpbGl0aWVzIDwvSDI+Ci08VUw+Ci08TEk+PEEgaHJlZj0ibWFrZW1ha2UuaHRtbCI+IDxJPiBBdXRvbWF0aWMKLU1ha2VmaWxlIFV0aWxpdHk6IDwvST48L0E+IFRoaXMgZ2VuZXJhdGVzIGEgTWFrZWZpbGUgYW5kIHVwZGF0ZXMgaXQgYWNjb3JkaW5nCi10byB0aGUgZmlsZXMgY3VycmVudGx5IGluIHlvdXIgZGlyZWN0b3J5LgotVGFrZSBhIGdhbmRlciBhdCB0aGUgc291cmNlIGhlcmU6IDxBCi1ocmVmPSJtYWtlbWFrZS5jIj4gPEk+IG1ha2VtYWtlLmMgCi0gPC9JPjwvQT4gCi0KLTxicj48QlI+Ci08L0xJPjxMST48QSBocmVmPSJtYWlsc29ydC5wbCIgPiA8ST4KLW1haWwgZmlsZSBzb3J0ZXI6ICA8L0k+IDwvQT4gCi1UaGlzIHV0aWxpdHkgcGFyc2VzIGEgbWFpbCBmaWxlIGFuZCBjcmVhdGVzIGFub3RoZXIgbWFpbCBmaWxlIGNvbnRhaW5pbmcgb25seQotdGhlIG1lc3NhZ2VzIHNwZWNpZmllZCBieSBwYXJhbWF0ZXJzLiAgRm9yIGV4YW1wbGUsIHBhcnNlIGEgbWFpbCBhcmNoaXZlIGZpbGUKLShvbGQtbWFpbC1KYW4tMjAwMCkgYW5kIGV4dHJhY3QgYWxsIG9mIHRoZSBtZXNzYWdlcyBmcm9tIGRhdmVrQHlvdXJtb20uY29tIG9yCi13aXRoIHRoZSBzdWJqZWN0IE1hcmlsbGlvbi4gIFRoaXMgZ3V5IHdhcyB3aGlwcGVkIHVwIGluIFBlcmwuCi08QlI+PGJyPgotCi08L0xJPjxMST48QSBocmVmPSJlbGVjdHJvbmljTm90ZXMuaHRtbCIgPiA8ST4KLUVsZWN0cm9uaWMgTm90ZXM6ICA8L0k+IDwvQT4gVGhpcyBpcyBhbiBvcmlnaW5hbCBpZGVhIChnYXNwISkgdGhhdCBJIGRldmVsb3BlZCB3aGljaCBpcyBhCi1zeXN0ZW0gZm9yIGtlZXBpbmcgbGl0dGxlIHJlbWluZGVycyB0byB5b3Vyc2VsZiBkdXJpbmcgdGhlIGRheSBhbmQgaGF2aW5nIHRoZW0KLXNlbnQgdG8geW91IGFsbCBpbiBvbmUgY29udmVuaWVudCBmaWxlIHZpYSBlbWFpbCBhdCB0aGUgZW5kIG9mIHRoZSBkYXkuICAKLTxicj48YnI+Ci0KLTwvTEk+PExJPjxBIGhyZWY9ImhlYWRlci5odG1sIiA+IDxJPiBDL0MrKyBIZWFkZXIgZmlsZQotdG8gSW1wbGVtZW50YXRpb24gZmlsZSBjb252ZXJ0ZXI6IDwvST4gPC9BPgotVGhpcyBpcyBhIHZlcnkgdXNlZnVsIHRvb2wgd3JpdHRlbiBpbiBDKysgdGhhdCBjb252ZXJ0cyAuaCBmaWxlcyB0byBlbXB0eQotaW1wbGVtZW50YXRpb24gKC5DKSBmaWxlcy4gIAotPEJSPjxCUj4KLTwvTEk+PExJPjxBIGhyZWY9Im1hdHJpeC5odG1sIiA+IDxJPiBNYXRyaXggTWFuaXB1bGF0aW9uCi1QYWNrYWdlOiA8L0k+PC9BPiBUaGlzIGlzIGEgcGFja2FnZSB0aGF0IGRvZXMgYWxsIHNvcnRzIG9mIGNvb2wgbWFuaXB1bGF0aW9ucwotd2l0aCBtYXRyaWNlcywgc3VjaCBhcyBHYXVzc2lhbiBFbGltaW5hdGlvbiwgTm9ybWFsIEVxdWF0aW9ucywgVmFuZGVybW9uZGUKLU1hdHJpY2VzLCBDaG9sZXNreSBGYWN0b3JpemF0aW9uLCBFcnJvciBBbmFseXNpcywgYW5kIG1vcmUgc3R1ZmYgdGhhbiB5b3Ugd291bGQKLWV2ZXIgd2FudCB0byBkbyB3aXRoIGEgbWF0cml4LiAgSXQgaXMgd3JpdHRlbiBpbiBnb29kIG9sJyBDLgotCi08QlIgPjxCUiAgPgotPC9MST48TEk+IAotPEEgaHJlZj0ibGlzcC5odG1sIiA+IDxJPlNldCBPcGVyYXRpb25zOiA8L0k+PC9BPiA8ST48L0k+IEEgcHJvZ3JhbSB0aGF0IHBlcmZvcm1zIHNldAotb3BlcmF0aW9ucyBvbiBhIGxpc3QuICBUaGlzIGlzIHdyaXR0ZW4gaW4gTGlzcCwgb2YgYWxsIHRoaW5ncy4gIFRoZXJlJ3MgYWxzbwotc29tZSBleGFtcGxlcyBvZiBteSBvd24gaW50ZXJwcmV0YXRpb25zIG9mIHNvbWUgTGlzcCBmdW5jdGlvbnMuIExpc3AgaXMgYSBnb29kCi1sYW5ndWFnZSBmb3IgQUkgYW5kIHRoaW5ncyBvZiB0aGF0IG5hdHVyZS4gIAotSXQgcmVsaWVzIGhlYXZpbHkgb24gcmVjdXJzaW9uLCBzbyBpdCB0YWtlcyBhIGRpZmZlcmVudAotbWluZHNldCB0byBwcm9ncmFtIGluIHRoaXMgbGFuZ3VhZ2UuICBCdXQgdXNlZCBjb3JyZWN0bHkgYW5kIGZvciBpdHMgaW50ZW5kZWQKLXB1cnBvc2UsIExpc3AgaXMgYSB2ZXJ5IHVuaXF1ZSBhbmQgcG93ZXJmdWwgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuCi08QlIgICA+PEJSICAgID4KLQotPC9MST48TEk+IAotPEEgaHJlZj0ibG9jLmh0bWwiID4gPEk+IExpbmVzIE9mIENvZGUgQ291bnRlcjoKLTwvST48L0E+PEk+PC9JPiAgVGhpcyBpcyBpcyBMT0MgY291bnRlciB0aGF0IEkgd3JvdGUgaW4gUGVybCB0aGF0IGNhbGN1bGF0ZXMgdGhlIG51bWJlciBvZgotdW5jb21tZW50ZWQgbGluZXMgb2YgY29kZSBpbiBhIHByb2dyYW0uICBUaGlzIHdvcmtzIGZvciBhbnkgcHJvZ3JhbW1pbmcKLWxhbmd1YWdlIGFzIHlvdSBjYW4gc3VwcGx5IHRoZSBjb21tZW50IGNoYXJhY3RlciBvbiB0aGUgY29tbWFuZCBsaW5lLiAgVGhpcyBpcwotYW4gZXh0cmVtZWx5IHVzZWZ1bCBwcm9ncmFtIGZvciB1c2UgaW4gc29mdHdhcmUgbWV0cmljcy4KLTxCUiBhYmM9ImRlZiI+PEJSIGFiYz0iZGVmIiA+Ci0KLTwvTEk+PExJPjxBIGhyZWY9Imxpbndpbi5odG1sIj4gPEk+IFNpbXBsZSAqbml4IHRvCi13aW5kb3dzIHRleHQgY29udmVydGVyIDwvST48L0E+IFRoaXMgdGFrZXMgZmlsZXMgd3JpdHRlbiBpbiBMaW51eCAoYW5kIGluIHZpIG9yCi0gICAgICAgIGFuIGVkaXRvciB3aXRoIGF1dG9tYXRpYyBsaW5lIGJyZWFrcyBhZnRlciBldmVyeSA4MCBvciBzbyBjaGFycykgYW5kCi1mb3JtYXRzIGl0IHNvIGl0IHdpbGwgZGlzcGxheSBwcm9wZXJseSBpbiBXaW5kb3dzIGVudmlyb25tZW50IHNob3VsZCB5b3UgYmUKLWZvcmNlZCB0byBkbyBzby4gIAotUGVydXNlIChwZXJ1c2UsIG1pbmQgeW91LiAgSSBkb24ndCB3YW50IHRvIHNlZSBhbnkgPEk+YnJvd3Npbmc8L0k+KSB0aGUgc291cmNlIGhlcmU6IDxBCi1ocmVmPSJsaW53aW4uYyI+IDxJPiBsaW53aW4uYyAKLSA8L0k+PC9BPiAKLTxCUiBhYmMgPSAiZGVmIj48QlIgYWJjICA9ICAiZGVmIj4KLQotCi08L0xJPjxMST48Qj4gUmVncmVzc2lvbiBhbmQgU3RhbmRhcmQgRGV2aWF0aW9uOiA8L0I+IAotQSBtYXRoIGNsYXNzIHdyaXR0ZW4gaW4gSmF2YSB1c2luZyBPYmplY3QgT3JpZW50ZWQgZGVzaWduIHByaW5jaXBsZXMuICBUaGUgbWFpbgotYXNwZWN0cyBvZiB0aGUgcHJvZ3JhbSBhcmUgZm9yIGZpZ3VyaW5nIG91dCBTdGFuZGFyZCBEZXZpYXRpb24gYW5kIHRoZQotUmVncmVzc2lvbiwgd2hlbiB5b3UgaW5wdXQgYSBzZXQgb2YgeCBhbmQgeSB2YWx1ZXMuICBSZWdyZXNzaW9uIGNhbGN1bGF0aW9ucwotYXJlIG9mdGVuIHVzZWQgaW4gU29mdHdhcmUgTWV0cmljcyB0byB0byBoZWxwIGluIGVzdGltYXRpbmcgbGVuZ3RoIG9mIGNvZGUsIGFuZAotdGltZSBzcGVudCBvbiB0aGUgcHJvamVjdC48QlI+Ci0KLTxBIGhyZWY9IlJlZ3Jlc3Npb25DYWxjLmh0bWwiID4gCi08ST4gUmVncmVzc2lvbkNhbGMuamF2YSA8L0k+IDwvQT4gIFRoaXMgaXMgdGhlIG1haW4gY2xhc3MgdGhhdCBkb2VzIHRoZQotY2FsY3VsYXRpb25zLiAgSXQgY2FsY3VsYXRlcyBCMSwgQjAsIGFuZCByXjIsIHdoaWNoIGFyZSBhbGwgcGFyYW1ldGVycyBvZgotUmVncmVzc2lvbi4KLTxCUiBhYmM9ICJkZWYiPgotPEEgaHJlZj0iTWF0aENsYXNzLmh0bWwiID4gCi08ST4gTWF0aENsYXNzLmphdmEgPC9JPiAgPC9BPiBUaGlzIGlzIHNpbXBseSBhIHNtYWxsIGNsYXNzIHdoaWNoIGNhbGN1bGF0ZXMgdGhlCi1tZWFuIGFuZCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGEgdmVjdG9yIG9mIG51bWJlcnMuICBUaGlzIGlzIHVzZWQgYnkgdGhlCi1SZWdyZXNzaW9uQ2FsYyBjbGFzcyBpbiBpdHMgY2FsY3VsYXRpb25zLgotPEJSIGFiYyA9ImRlZiI+Ci08QSBocmVmPSJSZWdyZXNzaW9uLmh0bWwiID4gCi08ST4gUmVncmVzc2lvbi5qYXZhIDwvST4gIDwvQT4gVGhpcyBpcyBiYXNpY2FsbHkgdGhlIG1haW4gcm91dGluZSwgb3Igd2hlcmUgdGhlCi1wcm9ncmFtIHN0YXJ0cy4gIEl0IHB1dHMgYWxsIG9mIHRoZSBpbnB1dCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgaW50byB0d28KLXNlcGFyYXRlIHZlY3RvcnMgZm9yIHRoZSB4IGFuZCB5IHZhbHVlcy48QlI+PEJSPgotCi1BbiBleGFtcGxlIG9mIHRoZSB1c2FnZSBvZiB0aGlzIHByb2dyYW0gd291bGQgYmU6ICA8QlI+Ci1JZiB5b3UgaGFkIGEgaGlzdG9yeSBvZiBkYXRhIG9uIHlvdXIgZXN0aW1hdGVkIExpbmVzIE9mIENvZGUgKExPQykgcGVyIGNsYXNzLAotYXMgd2VsbCBhcyB0aGUgYWN0dWFsIExPQyBwZXIgY2xhc3MsIHlvdSBjb3VsZCBwdXQgdGhlc2UgaW4gdGhlIGZvcm11bGEgYW5kCi1maW5kIG91dCB0aGUgUmVncmVzc2lvbiBvZiB0aGUgZGF0YSAob3IgaG93IGZhciBhd2F5IGVhY2ggcG9pbnQgaXMgZnJvbSB0aGUKLWZ1bmN0aW9uIGxpbmUuKSAgCi0KLVlvdSB3b3VsZCBpbnB1dCB0aGUgZGF0YSBmb3IgdGhlIGVzdGltYXRlZCBMT0MsIHNlcGFyYXRlZCBieSBhIGNvbW1hLCBhbmQKLWZvbGxvd2VkIGJ5IHRoZSBhY3R1YWwgTE9DLiAgVGhlIHJlc3VsdCB3b3VsZCBiZSB0aGUgcmVncmVzc2lvbiBjYWxjdWxhdGlvbi4KLTxQUkU+Ci0lamF2YSBSZWdyZXNzaW9uIDEzMCA2NTAgOTkgMTUwICwgMTg2IDY5OSAxMzIgMjcyIAotCi1YIERhdGEgPSBbIDEzMC4wIDY1MC4wIDk5LjAgMTUwLjAgXQotWSBEYXRhID0gWyAxODYuMCA2OTkuMCAxMzIuMCAyNzIuMCBdCi1OID0gNAotQmV0YTAgPSA3Mi42OTA1MDMwNzgwMzYxCi1CZXRhMSA9IDAuOTcwMTA0OTQ0MzAzMDY2NwotclNxdWFyZWQgPSAyMjEyLjUwNDY5NzY3MzY4OQotPC9QUkU+Ci0KLTwvTEk+PC9VTD4KLQotPEhSPgotPEgyPiBLbm93bGVkZ2UgPC9IMj4KLTxVTD4KLTxMST48QSBocmVmPSJ2aW0uaHRtbCI+IDxJPiBFc3BvdXNpbmcgbXkgbG92ZQotZm9yIHZpbSEgPC9JPjwvQT4gdmltIGp1c3Qgcm9ja3MsIG9rYXkuICBSZWFsbHkuICBJZiBJIGhhZCB0byBjaG9vc2UgYmV0d2VlbiwKLWxpa2UsIHNleCwgb3IgdXNpbmcgdmltLS1sZXQncyBqdXN0IHNheSBJJ2QgYmUgb25lIG1hc3RlcmZ1bC1lZGl0aW5nIG1vbmsuIAotPEJSPjxCUj4KLQotCi08L0xJPjxMST4KLTxBIGhyZWY9Ik1CUi1MSUxPLnR4dCI+IAotPEk+IExvc3QgTElMTz8gIFJlY292ZXIuPC9JPiAgPC9BPiBJZiB5b3UgaGF2ZSBMaW51eCBpbnN0YWxsZWQgaW4gYSBtdWx0aS1ib290Ci1lbnZpcm9ubWVudCwgYW5kIHlvdSBvdmVyd3JpdGUgeW91ciBNQlIsIHlvdSBjYW4gbG9zZSBMSUxPLiAgSSByZWluc3RhbGxlZAotV2luZG93cyAoaGV5LCBJIG5lZWRlZCB0byBwbGF5IEZpbmFsIEZhbnRhc3kgVklJSSEpIGFuZCBjb3VsZG4ndCBib290IGludG8KLUxpbnV4LiAgSGVyZSdzIGhvdyBJIHJlY292ZXJlZC4KLTxCUj48QlI+Ci0KLQotCi08L0xJPjwvVUw+PC9ib2R5PgotPGh0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9lbXB0eS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9lbXB0eS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvZW1wdHkueG1sCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2lubGluZUNvbW1lbnRzLmFmdGVyRGVmYXVsdEZvcm1hdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbmxpbmVDb21tZW50cy5hZnRlckRlZmF1bHRGb3JtYXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzIyZDRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2lubGluZUNvbW1lbnRzLmFmdGVyRGVmYXVsdEZvcm1hdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08cm9vdD4KLQk8ZGVzYz5XYXJtZWQgbGVlayBzYWxhZDwvZGVzYz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQk8ZGVzYz5XYXJtZWQgbGVlayBzYWxhZDwvZGVzYz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRleHQgLS0+Ci0JPHByaWNlIHVuaXRzPSJ1c2QiPjYuOTU8IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRleHQgLS0+PC9wcmljZT4KLQk8cHJpY2UgdW5pdHM9InVzZCI+Ci0JCTxudW1iZXIgLz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQk8L3ByaWNlPgotCTxwcmljZSB1bml0cz0idXNkIj4KLQkJPG51bWJlciAvPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotCTwvcHJpY2U+Ci0JPHByaWNlIHVuaXRzPSJ1c2QiPgotCQk8bnVtYmVyIC8+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci0JPC9wcmljZT4KLQk8cHJpY2UgdW5pdHM9InVzZCIgdW5pdHM9InVzZCI+Ni45NTwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCAtLT48L3ByaWNlPgotCTxwcmljZSB1bml0cz0idXNkIiB1bml0cz0idXNkIj42Ljk1PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0ZXh0IGFuZCBmb2xsb3dlZCBieSB0ZXh0IC0tPgotCQlkb2xsYXJzCi0JPC9wcmljZT4KLQk8cHJpY2UgdW5pdHM9InVzZCIgdW5pdHM9InVzZCI+Ci0JCTxudW1iZXIgLz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQkJPHVuaXQgLz4KLQk8L3ByaWNlPgotCTxwcmljZT4KLQkJPG51bWJlciAvPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotCQk8dW5pdCAvPgotCTwvcHJpY2U+Ci0JPHByaWNlPgotCQk8bnVtYmVyIC8+Ci0JCTwhLS0gY29tbWVudCBvbiBhIG5ldyBsaW5lIC0tPgotCQk8dW5pdCAvPgotCTwvcHJpY2U+Ci0JPHByaWNlPjwhLS0gaW5saW5lIGNvbW1lbnQgLS0+PC9wcmljZT4KLQk8dGg+Ci0JCTxiPkZhaHJlbmhlaXQ8IS0tIHRlc3RpbmcgLS0+PC9iPgotCTwvdGg+Ci08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW5saW5lQ29tbWVudHMuYWZ0ZXJTcGxpdExpbmVzU3BsaXRNdWx0aUF0dHJzRm9ybWF0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2lubGluZUNvbW1lbnRzLmFmdGVyU3BsaXRMaW5lc1NwbGl0TXVsdGlBdHRyc0Zvcm1hdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZGRhZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW5saW5lQ29tbWVudHMuYWZ0ZXJTcGxpdExpbmVzU3BsaXRNdWx0aUF0dHJzRm9ybWF0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLTxyb290PgotCTxkZXNjPldhcm1lZCBsZWVrIHNhbGFkPC9kZXNjPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotCTxkZXNjPldhcm1lZCBsZWVrIHNhbGFkPC9kZXNjPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCAtLT4KLQk8cHJpY2UgdW5pdHM9InVzZCI+Ni45NTwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCAtLT48L3ByaWNlPgotCTxwcmljZSB1bml0cz0idXNkIj4KLQkJPG51bWJlciAvPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotCTwvcHJpY2U+Ci0JPHByaWNlIHVuaXRzPSJ1c2QiPgotCQk8bnVtYmVyIC8+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci0JPC9wcmljZT4KLQk8cHJpY2UgdW5pdHM9InVzZCI+Ci0JCTxudW1iZXIgLz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQk8L3ByaWNlPgotCTxwcmljZQotCQl1bml0cz0idXNkIgotCQl1bml0cz0idXNkIj4KLQkJNi45NTwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCAtLT4KLQk8L3ByaWNlPgotCTxwcmljZQotCQl1bml0cz0idXNkIgotCQl1bml0cz0idXNkIj4KLQkJNi45NTwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCBhbmQgZm9sbG93ZWQgYnkgdGV4dCAtLT4KLQkJZG9sbGFycwotCTwvcHJpY2U+Ci0JPHByaWNlCi0JCXVuaXRzPSJ1c2QiCi0JCXVuaXRzPSJ1c2QiPgotCQk8bnVtYmVyIC8+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci0JCTx1bml0IC8+Ci0JPC9wcmljZT4KLQk8cHJpY2U+Ci0JCTxudW1iZXIgLz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQkJPHVuaXQgLz4KLQk8L3ByaWNlPgotCTxwcmljZT4KLQkJPG51bWJlciAvPgotCQk8IS0tIGNvbW1lbnQgb24gYSBuZXcgbGluZSAtLT4KLQkJPHVuaXQgLz4KLQk8L3ByaWNlPgotCTxwcmljZT48IS0tIGlubGluZSBjb21tZW50IC0tPjwvcHJpY2U+Ci0JPHRoPgotCQk8Yj5GYWhyZW5oZWl0PCEtLSB0ZXN0aW5nIC0tPjwvYj4KLQk8L3RoPgotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2lubGluZUNvbW1lbnRzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2lubGluZUNvbW1lbnRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFhMTFiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbmxpbmVDb21tZW50cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08cm9vdD48ZGVzYz5XYXJtZWQgbGVlayBzYWxhZDwvZGVzYz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLTxkZXNjPldhcm1lZCBsZWVrIHNhbGFkPC9kZXNjPiAgIDwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCAtLT4KLTxwcmljZSB1bml0cz0idXNkIj42Ljk1PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0ZXh0IC0tPjwvcHJpY2U+Ci08cHJpY2UgdW5pdHM9InVzZCI+PG51bWJlci8+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+PC9wcmljZT4KLTxwcmljZSB1bml0cz0idXNkIj48bnVtYmVyLz4gICA8IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT48L3ByaWNlPgotPHByaWNlIHVuaXRzPSJ1c2QiPiAgIDxudW1iZXIvPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPjwvcHJpY2U+Ci08cHJpY2UgdW5pdHM9InVzZCIgdW5pdHM9InVzZCI+Ni45NTwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCAtLT48L3ByaWNlPgotPHByaWNlIHVuaXRzPSJ1c2QiIHVuaXRzPSJ1c2QiPjYuOTU8IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRleHQgYW5kIGZvbGxvd2VkIGJ5IHRleHQgLS0+ZG9sbGFyczwvcHJpY2U+Ci08cHJpY2UgdW5pdHM9InVzZCIgdW5pdHM9InVzZCI+PG51bWJlci8+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+PHVuaXQvPjwvcHJpY2U+Ci08cHJpY2U+PG51bWJlci8+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+PHVuaXQvPjwvcHJpY2U+Ci08cHJpY2U+PG51bWJlci8+Ci08IS0tIGNvbW1lbnQgb24gYSBuZXcgbGluZSAtLT48dW5pdC8+PC9wcmljZT4KLTxwcmljZT48IS0tIGlubGluZSBjb21tZW50IC0tPjwvcHJpY2U+Ci08dGg+PGI+RmFocmVuaGVpdCA8IS0tIHRlc3RpbmcgLS0+PC9iPjwvdGg+Ci08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW52b2ljZS5hZnRlckNsZWFudXBJbnNlcnRUYWdzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2ludm9pY2UuYWZ0ZXJDbGVhbnVwSW5zZXJ0VGFncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxMmM5ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW52b2ljZS5hZnRlckNsZWFudXBJbnNlcnRUYWdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgSW52b2ljZSBQVUJMSUMgIkludm9pY2VJZCIgIkludm9pY2UuZHRkIiA+Ci08SW52b2ljZT4KLSAgPEhlYWRlciBpbnZvaWNlTnVtYmVyPTEyMzQ1PgotICAgIDxEYXRlPgotICAgICAgPE1vbnRoPkp1bHk8L01vbnRoPgotICAgICAgPERheT4xNTwvRGF5PgotICAgICAgPFllYXI+MjAwMQotICAgIDwvWWVhcj48L0RhdGU+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyPS8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyPSAgIC8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyICAgPS8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyICAgPSAgIC8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyIG5hbWU9Q3JhaWcgICAgcGhvbmUgPSAgICAgNDE2LTQ0OC00NDE0IC8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyICAgPSAgIFg1NzM5IG5hbWUgICAgcGhvbmUgPSAgICAgNDE2LTQ0OC00NDE0IC8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyICAgPSAgIFg1NzM5IG5hbWUgICA9IENyYWlnICAgIHBob25lLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgbmFtZSBwaG9uZS8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyICAgPSAgIFg1NzM5IG5hbWU9IkNyYWlnIFNhbHRlciIgcGhvbmU9NDE2LTQ0OC00NDE0PgotICAgICAgPEFkZHJlc3M+Ci0gICAgICAgIDxzdHJlZXQxPklCTTwvc3RyZWV0MT4KLSAgICAgICAgPHN0cmVldDI+MTE1MCBFZ2xpbnRvbiBBdmUgRWFzdDwvc3RyZWV0Mj4KLSAgICAgICAgPGNpdHk+VG9yb250bzwvY2l0eT4KLSAgICAgICAgPHN0YXRlPk9udGFyaW88L3N0YXRlPgotICAgICAgICA8emlwPk0zQyAxSDc8L3ppcD4KLSAgICAgICAgPGNvdW50cnk+Q2FuYWRhCi0gIDwvY291bnRyeT48L0FkZHJlc3M+PC9CaWxsVG8+PC9IZWFkZXI+Ci0gIDxJdGVtIGRpc2NvdW50PXByb21vdGlvbiBwcmljZT01Nz4KLSAgICA8ZGVzY3JpcHRpb24+QSB3ZWRkaW5nIHJpbmc8L2Rlc2NyaXB0aW9uPjwvSXRlbT48L0ludm9pY2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW52b2ljZS5hZnRlckNsZWFudXBJbnNlcnRUYWdzUXVvdGVBdHRycy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbnZvaWNlLmFmdGVyQ2xlYW51cEluc2VydFRhZ3NRdW90ZUF0dHJzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU3ODEyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbnZvaWNlLmFmdGVyQ2xlYW51cEluc2VydFRhZ3NRdW90ZUF0dHJzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgSW52b2ljZSBQVUJMSUMgIkludm9pY2VJZCIgIkludm9pY2UuZHRkIiA+Ci08SW52b2ljZT4KLSAgPEhlYWRlciBpbnZvaWNlTnVtYmVyPSIxMjM0NSI+Ci0gICAgPERhdGU+Ci0gICAgICA8TW9udGg+SnVseTwvTW9udGg+Ci0gICAgICA8RGF5PjE1PC9EYXk+Ci0gICAgICA8WWVhcj4yMDAxCi0gICAgPC9ZZWFyPjwvRGF0ZT4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXI9ImN1c3ROdW1iZXIiLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXI9ICAgImN1c3ROdW1iZXIiLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgICA9ImN1c3ROdW1iZXIiLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgICA9ICAgImN1c3ROdW1iZXIiLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXI9ImN1c3ROdW1iZXIiIG5hbWU9IkNyYWlnIiAgICBwaG9uZSA9ICAgICAiNDE2LTQ0OC00NDE0IiAvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlciAgID0gICAiWDU3MzkiIG5hbWU9Im5hbWUiICAgIHBob25lID0gICAgICI0MTYtNDQ4LTQ0MTQiIC8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyICAgPSAgICJYNTczOSIgbmFtZSAgID0gIkNyYWlnIiAgICBwaG9uZT0icGhvbmUiLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXI9ImN1c3ROdW1iZXIiIG5hbWU9Im5hbWUiIHBob25lPSJwaG9uZSIvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlciAgID0gICAiWDU3MzkiIG5hbWU9IkNyYWlnIFNhbHRlciIgcGhvbmU9IjQxNi00NDgtNDQxNCI+Ci0gICAgICA8QWRkcmVzcz4KLSAgICAgICAgPHN0cmVldDE+SUJNPC9zdHJlZXQxPgotICAgICAgICA8c3RyZWV0Mj4xMTUwIEVnbGludG9uIEF2ZSBFYXN0PC9zdHJlZXQyPgotICAgICAgICA8Y2l0eT5Ub3JvbnRvPC9jaXR5PgotICAgICAgICA8c3RhdGU+T250YXJpbzwvc3RhdGU+Ci0gICAgICAgIDx6aXA+TTNDIDFINzwvemlwPgotICAgICAgICA8Y291bnRyeT5DYW5hZGEKLSAgPC9jb3VudHJ5PjwvQWRkcmVzcz48L0JpbGxUbz48L0hlYWRlcj4KLSAgPEl0ZW0gZGlzY291bnQ9InByb21vdGlvbiIgcHJpY2U9IjU3Ij4KLSAgICA8ZGVzY3JpcHRpb24+QSB3ZWRkaW5nIHJpbmc8L2Rlc2NyaXB0aW9uPjwvSXRlbT48L0ludm9pY2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW52b2ljZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbnZvaWNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhhMjZiNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbnZvaWNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgSW52b2ljZSBQVUJMSUMgIkludm9pY2VJZCIgIkludm9pY2UuZHRkIiA+Ci08SW52b2ljZT4KLSAgPEhlYWRlciBpbnZvaWNlTnVtYmVyPTEyMzQ1PgotICAgIDxEYXRlPgotICAgICAgPE1vbnRoPkp1bHk8L01vbnRoPgotICAgICAgPERheT4xNTwvRGF5PgotICAgICAgPFllYXI+MjAwMQotICAgIDwvRGF0ZT4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXI9Lz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXI9ICAgLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgICA9Lz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgICA9ICAgLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgbmFtZT1DcmFpZyAgICBwaG9uZSA9ICAgICA0MTYtNDQ4LTQ0MTQgLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgICA9ICAgWDU3MzkgbmFtZSAgICBwaG9uZSA9ICAgICA0MTYtNDQ4LTQ0MTQgLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgICA9ICAgWDU3MzkgbmFtZSAgID0gQ3JhaWcgICAgcGhvbmUvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlciBuYW1lIHBob25lLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgICA9ICAgWDU3MzkgbmFtZT0iQ3JhaWcgU2FsdGVyIiBwaG9uZT00MTYtNDQ4LTQ0MTQ+Ci0gICAgICA8QWRkcmVzcz4KLSAgICAgICAgPHN0cmVldDE+SUJNPC9zdHJlZXQxPgotICAgICAgICA8c3RyZWV0Mj4xMTUwIEVnbGludG9uIEF2ZSBFYXN0PC9zdHJlZXQyPgotICAgICAgICA8Y2l0eT5Ub3JvbnRvPC9jaXR5PgotICAgICAgICA8c3RhdGU+T250YXJpbzwvc3RhdGU+Ci0gICAgICAgIDx6aXA+TTNDIDFINzwvemlwPgotICAgICAgICA8Y291bnRyeT5DYW5hZGEKLSAgPC9IZWFkZXI+Ci0gIDxJdGVtIGRpc2NvdW50PXByb21vdGlvbiBwcmljZT01Nz4KLSAgICA8ZGVzY3JpcHRpb24+QSB3ZWRkaW5nIHJpbmcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9sb2dpbi5hZnRlckNsZWFudXAuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvbG9naW4uYWZ0ZXJDbGVhbnVwLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U5MDZjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9sb2dpbi5hZnRlckNsZWFudXAuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotPEhUTUw+DQotPEhFQUQ+DQotPFRJVExFPkxvZ2luPC9USVRMRT4NCi08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08L0hFQUQ+DQotPEJPRFkgYmdjb2xvcj0iI2ZmZmZjYyI+DQotPFNDUklQVD4NCi0gICAgICBmdW5jdGlvbiBzdWJtaXRGb3JtKGRlc3Qpew0KLSAgICAgICAgIGRvY3VtZW50Lm15Rm9ybS5hY3Rpb24gPSBkZXN0DQotICAgICAgICAgZG9jdW1lbnQubXlGb3JtLnN1Ym1pdCgpDQotICAgICAgfQ0KLSAgICAgIDwvU0NSSVBUPg0KLTxDRU5URVI+DQotPEgxPkRhdGFiYXNlIENvbm5lY3Rpdml0eTwvSDE+DQotPEhSPg0KLTwvQ0VOVEVSPg0KLTxQPkVudGVyIHRoZSB1c2VybmFtZSAmYW1wOyBwYXNzd29yZCB0byBjb25uZWN0IHRvIHRoZSBkYXRhYmFzZS48QlI+DQotVGhpcyB1c2VybmFtZSAmYW1wOyBwYXNzd29yZCBzaG91bGQgYmUgdGhlIG9uZSB1c2VkIHdoaWxlIGNyZWF0aW5nIHRoZQ0KLWRhdGFiYXNlLjwvUD4NCi08JSBpZihzZXNzaW9uLmdldEF0dHJpYnV0ZSgiZXJyb3JfbWVzc2FnZSIpICE9IG51bGwpIHsgJT4NCi08UD4qIEluY29ycmVjdCBMb2dpbiBvciBQYXNzd29yZDwvUD4NCi08JSAgc2Vzc2lvbi5yZW1vdmVBdHRyaWJ1dGUoImVycm9yX21lc3NhZ2UiKTsNCi0gICAgICB9ICAlPg0KLTxGT1JNIG5hbWU9Im15Rm9ybSIgbWV0aG9kPSJQT1NUIiBhY3Rpb249Ii4uL0xvZ2luL0xvZ29uU2VydmxldCI+PElOUFVUDQotCXR5cGU9ImhpZGRlbiIgbmFtZT0iY29tbWFuZCINCi0JdmFsdWU9JzwlPXNlc3Npb24uZ2V0QXR0cmlidXRlKCJmaW5hbF9wYWdlIikgJT4nPiA8SU5QVVQgdHlwZT0iaGlkZGVuIg0KLQluYW1lPSJwcmV2aW91c19wYWdlIiB2YWx1ZT0iTG9naW4vTG9naW4uanNwIj4gPEENCi0JaHJlZj0iamF2YXNjcmlwdDpzdWJtaXRGb3JtKCcuLi9Mb2dpbi9Mb2dvblNlcnZsZXQnKSI+T0s8L0E+DQotPFRBQkxFIGJvcmRlcj0iMCI+DQotCTxUQk9EWT4NCi0JCTxUUj4NCi0JCQk8VEQ+PEZPTlQgY29sb3I9IiM5OTMzMzMiPiB1c2VybmFtZTogPC9GT05UPjwvVEQ+DQotCQkJPFREPjxJTlBVVCBuYW1lPSJ1c2VySUQiIHR5cGU9InRleHQiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjQwIj48L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEQ+PEZPTlQgY29sb3I9IiM5OTMzMzMiPiBwYXNzd29yZDogPC9GT05UPjwvVEQ+DQotCQkJPFREPjxJTlBVVCBuYW1lPSJwYXNzd29yZCIgdHlwZT0icGFzc3dvcmQiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjQwIj48L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEQ+PEZPTlQgY29sb3I9IiM5OTMzMzMiPiBkcml2ZXJuYW1lOiA8L0ZPTlQ+PC9URD4NCi0JCQk8VEQ+PElOUFVUIG5hbWU9ImRyaXZlciIgdHlwZT0idGV4dCIgc2l6ZT0iMzAiIG1heGxlbmd0aD0iNDAiDQotCQkJCXZhbHVlPSJDT00uaWJtLmRiMi5qZGJjLmFwcC5EQjJEcml2ZXIiPjwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxURD48Rk9OVCBjb2xvcj0iIzk5MzMzMyI+IHVybDogPC9GT05UPjwvVEQ+DQotCQkJPFREPjxJTlBVVCBuYW1lPSJ1cmwiIHR5cGU9InRleHQiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjQwIg0KLQkJCQl2YWx1ZT0iamRiYzpkYjI6V1NTQU1QTEUiPjwvVEQ+DQotCQk8L1RSPg0KLQk8L1RCT0RZPg0KLTwvVEFCTEU+DQotPC9GT1JNPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvbG9naW4uanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvbG9naW4uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzlhNjdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2xvZ2luLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTxUSVRMRT5Mb2dpbjwvVElUTEU+DQotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPC9IRUFEPg0KLTxCT0RZIGJnY29sb3I9IiNmZmZmY2MiPg0KLTxTQ1JJUFQ+DQotICAgICAgZnVuY3Rpb24gc3VibWl0Rm9ybShkZXN0KXsNCi0gICAgICAgICBkb2N1bWVudC5teUZvcm0uYWN0aW9uID0gZGVzdA0KLSAgICAgICAgIGRvY3VtZW50Lm15Rm9ybS5zdWJtaXQoKQ0KLSAgICAgIH0NCi0gICAgICA8L1NDUklQVD4NCi08Q0VOVEVSPg0KLTxIMT5EYXRhYmFzZSBDb25uZWN0aXZpdHk8L0gxPg0KLTxIUj4NCi08L0NFTlRFUj4NCi08UD5FbnRlciB0aGUgdXNlcm5hbWUgJmFtcDsgcGFzc3dvcmQgdG8gY29ubmVjdCB0byB0aGUgZGF0YWJhc2UuPEJSPg0KLVRoaXMgdXNlcm5hbWUgJmFtcDsgcGFzc3dvcmQgc2hvdWxkIGJlIHRoZSBvbmUgdXNlZCB3aGlsZSBjcmVhdGluZyB0aGUgZGF0YWJhc2UuPC9QPg0KLTwlIGlmKHNlc3Npb24uZ2V0QXR0cmlidXRlKCJlcnJvcl9tZXNzYWdlIikgIT0gbnVsbCkgeyAlPg0KLTxQPiogSW5jb3JyZWN0IExvZ2luIG9yIFBhc3N3b3JkPC9QPg0KLTwlICBzZXNzaW9uLnJlbW92ZUF0dHJpYnV0ZSgiZXJyb3JfbWVzc2FnZSIpOw0KLSAgICAgIH0gICU+DQotPEZPUk0gbmFtZT0ibXlGb3JtIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iLi4vTG9naW4vTG9nb25TZXJ2bGV0Ij48SU5QVVQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjb21tYW5kIiB2YWx1ZT0nPCU9c2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImZpbmFsX3BhZ2UiKSAlPic+IDxJTlBVVCB0eXBlPSJoaWRkZW4iIG5hbWU9InByZXZpb3VzX3BhZ2UiIHZhbHVlPSJMb2dpbi9Mb2dpbi5qc3AiPiA8QSBocmVmPSJqYXZhc2NyaXB0OnN1Ym1pdEZvcm0oJy4uL0xvZ2luL0xvZ29uU2VydmxldCcpIj5PSzwvQT4NCi08VEFCTEUgYm9yZGVyPSIwIj4NCi0JPFRCT0RZPg0KLQkJPFRSPg0KLQkJCTxURD48Rk9OVCBjb2xvcj0iIzk5MzMzMyI+IHVzZXJuYW1lOiA8L0ZPTlQ+PC9URD4NCi0JCQk8VEQ+PElOUFVUIG5hbWU9InVzZXJJRCIgdHlwZT0idGV4dCIgc2l6ZT0iMzAiIG1heGxlbmd0aD0iNDAiPjwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxURD48Rk9OVCBjb2xvcj0iIzk5MzMzMyI+IHBhc3N3b3JkOiA8L0ZPTlQ+PC9URD4NCi0JCQk8VEQ+PElOUFVUIG5hbWU9InBhc3N3b3JkIiB0eXBlPSJwYXNzd29yZCIgc2l6ZT0iMzAiIG1heGxlbmd0aD0iNDAiPjwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxURD48Rk9OVCBjb2xvcj0iIzk5MzMzMyI+IGRyaXZlcm5hbWU6IDwvRk9OVD48L1REPg0KLQkJCTxURD48SU5QVVQgbmFtZT0iZHJpdmVyIiB0eXBlPSJ0ZXh0IiBzaXplPSIzMCIgbWF4bGVuZ3RoPSI0MCIgdmFsdWU9IkNPTS5pYm0uZGIyLmpkYmMuYXBwLkRCMkRyaXZlciI+PC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFREPjxGT05UIGNvbG9yPSIjOTkzMzMzIj4gdXJsOiA8L0ZPTlQ+PC9URD4NCi0JCQk8VEQ+PElOUFVUIG5hbWU9InVybCIgdHlwZT0idGV4dCIgc2l6ZT0iMzAiIG1heGxlbmd0aD0iNDAiIHZhbHVlPSJqZGJjOmRiMjpXU1NBTVBMRSI+PC9URD4NCi0JCTwvVFI+DQotCTwvVEJPRFk+DQotPC9UQUJMRT4NCi08L0ZPUk0+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9vbmVDaGFyLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL29uZUNoYXIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTY1ZWZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL29uZUNoYXIueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL29uZVNwYWNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL29uZVNwYWNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDUxOWVjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9vbmVTcGFjZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwuYWZ0ZXJDb21wcmVzc0VtcHR5RWxlbWVudFRhZ3MueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwuYWZ0ZXJDb21wcmVzc0VtcHR5RWxlbWVudFRhZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmE5YzdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NtYWxsLmFmdGVyQ29tcHJlc3NFbXB0eUVsZW1lbnRUYWdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxYTUkgeG1pLnZlcnNpb249IjEuMCIgdGltZXN0YW1wPSJUdWUgTm92IDI4IDA4OjE5OjIxIEVTVCAyMDAwIj4KLQotCTxYTUkuaGVhZGVyPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyPlhNSSBUb29sa2l0PC9YTUkuZXhwb3J0ZXI+Ci0KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjEuMDU8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIC8+Ci0JCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIC8+Ci0JCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj4xLjA1PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj4xLjA1PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZT0iVU1MIiB4bWkudmVyc2lvbj0iMS4xIiAvPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZT0iVU1MIiB4bWkudmVyc2lvbj0iMS4xIiAvPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZT0iVU1MIiB4bWkudmVyc2lvbj0iMS4xIj4KLQkJCQkJMS4wNQotCQkJCTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWU9IlVNTCIgeG1pLnZlcnNpb249IjEuMSI+Ci0JCQkJCTEuMDUKLQkJCQk8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5tZXRhbW9kZWwgeG1pLm5hbWU9IlVNTCIgeG1pLnZlcnNpb249IjEuMSIgLz4KLQk8L1hNSS5oZWFkZXI+Ci0KLQk8WE1JLmNvbnRlbnQ+Ci0JCTxNb2RlbF9NYW5hZ2VtZW50LlBhY2thZ2UgeG1pLmlkPSJfMSIgeG1pLnV1aWQ9Ik5hbWU6ZWpiIj4KLQkJCTxGb3VuZGF0aW9uLkNvcmUuTW9kZWxFbGVtZW50Lm5hbWU+Ci0JCQkJZWpiCi0JCQk8L0ZvdW5kYXRpb24uQ29yZS5Nb2RlbEVsZW1lbnQubmFtZT4KLQkJCTxGb3VuZGF0aW9uLkNvcmUuTW9kZWxFbGVtZW50LnZpc2liaWxpdHkgeG1pLnZhbHVlPSJwdWJsaWMiIC8+Ci0JCQk8WE1JLmV4dGVuc2lvbiB4bWkuZXh0ZW5kZXI9IklYVCIgeG1pLmV4dGVuZGVySUQ9IiI+Ci0JCQkJPGl4dHMgcz0iSURMIj4KLQkJCQkJPGl4dHR2IHQ9InV1aWQiCi0JCQkJCQl2PSJEQ0U6ZDhhMjU2NjAtODgyNi0xMWUxLTAwMDAtMDA1ZDllNmFkZWM0OjEiIC8+Ci0JCQkJPC9peHRzPgotCQkJCTxpeHRzIHM9IlJvc2UiPgotCQkJCQk8aXh0dHYgdD0icXVpZCIgdj0iMzc4MEUyNzIwMzJEIiAvPgotCQkJCQk8aXh0dHYgdD0iaXNfdW5pdCIgdj0iVFJVRSIgLz4KLQkJCQkJPGl4dHR2IHQ9ImZpbGVfbmFtZSIKLQkJCQkJCXY9IiYjMzQ7JEVDTElQU0VfUkVTT1VSQ0VTXFxlVG9vbHMgRUpCIGxpYnJhcmllc1xcZWpic2NoZW1hLmNhdCYjMzQ7IiAvPgotCQkJCQk8aXh0dHYgdD0iaXNfbG9hZGVkIiB2PSJUUlVFIiAvPgotCQkJCTwvaXh0cz4KLQkJCQk8aXh0cyBzPSJSb3NlUGV0YWwiPgotCQkJCQk8aXh0dHYgdD0iY2hhclNldCIgdj0iMCIgLz4KLQkJCQkJPGl4dHR2IHQ9InZlcnNpb24iIHY9IjQzIiAvPgotCQkJCQk8aXh0dHYgdD0iX3dyaXR0ZW4iIHY9IiYjMzQ7Um9zZSA2LjUuOTIzMi4xMCYjMzQ7IiAvPgotCQkJCTwvaXh0cz4KLQkJCTwvWE1JLmV4dGVuc2lvbj4KLQkJPC9Nb2RlbF9NYW5hZ2VtZW50LlBhY2thZ2U+Ci0JPC9YTUkuY29udGVudD4KLQotPC9YTUk+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwuYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NtYWxsLmFmdGVyRGVmYXVsdEZvcm1hdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNjZiYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwuYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxYTUkgeG1pLnZlcnNpb249IjEuMCIgdGltZXN0YW1wPSJUdWUgTm92IDI4IDA4OjE5OjIxIEVTVCAyMDAwIj4KLQotCTxYTUkuaGVhZGVyPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyPlhNSSBUb29sa2l0PC9YTUkuZXhwb3J0ZXI+Ci0KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjEuMDU8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24+MS4wNTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24+MS4wNTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWU9IlVNTCIgeG1pLnZlcnNpb249IjEuMSI+PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZT0iVU1MIiB4bWkudmVyc2lvbj0iMS4xIj48L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIHhtaS5uYW1lPSJVTUwiIHhtaS52ZXJzaW9uPSIxLjEiPjEuMDU8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIHhtaS5uYW1lPSJVTUwiIHhtaS52ZXJzaW9uPSIxLjEiPjEuMDU8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5tZXRhbW9kZWwgeG1pLm5hbWU9IlVNTCIgeG1pLnZlcnNpb249IjEuMSIgLz4KLQk8L1hNSS5oZWFkZXI+Ci0KLQk8WE1JLmNvbnRlbnQ+Ci0JCTxNb2RlbF9NYW5hZ2VtZW50LlBhY2thZ2UgeG1pLmlkPSJfMSIgeG1pLnV1aWQ9Ik5hbWU6ZWpiIj4KLQkJCTxGb3VuZGF0aW9uLkNvcmUuTW9kZWxFbGVtZW50Lm5hbWU+ZWpiPC9Gb3VuZGF0aW9uLkNvcmUuTW9kZWxFbGVtZW50Lm5hbWU+Ci0JCQk8Rm91bmRhdGlvbi5Db3JlLk1vZGVsRWxlbWVudC52aXNpYmlsaXR5IHhtaS52YWx1ZT0icHVibGljIiAvPgotCQkJPFhNSS5leHRlbnNpb24geG1pLmV4dGVuZGVyPSJJWFQiIHhtaS5leHRlbmRlcklEPSIiPgotCQkJCTxpeHRzIHM9IklETCI+Ci0JCQkJCTxpeHR0diB0PSJ1dWlkIiB2PSJEQ0U6ZDhhMjU2NjAtODgyNi0xMWUxLTAwMDAtMDA1ZDllNmFkZWM0OjEiIC8+Ci0JCQkJPC9peHRzPgotCQkJCTxpeHRzIHM9IlJvc2UiPgotCQkJCQk8aXh0dHYgdD0icXVpZCIgdj0iMzc4MEUyNzIwMzJEIiAvPgotCQkJCQk8aXh0dHYgdD0iaXNfdW5pdCIgdj0iVFJVRSIgLz4KLQkJCQkJPGl4dHR2IHQ9ImZpbGVfbmFtZSIgdj0iJiMzNDskRUNMSVBTRV9SRVNPVVJDRVNcXGVUb29scyBFSkIgbGlicmFyaWVzXFxlamJzY2hlbWEuY2F0JiMzNDsiIC8+Ci0JCQkJCTxpeHR0diB0PSJpc19sb2FkZWQiIHY9IlRSVUUiIC8+Ci0JCQkJPC9peHRzPgotCQkJCTxpeHRzIHM9IlJvc2VQZXRhbCI+Ci0JCQkJCTxpeHR0diB0PSJjaGFyU2V0IiB2PSIwIiAvPgotCQkJCQk8aXh0dHYgdD0idmVyc2lvbiIgdj0iNDMiIC8+Ci0JCQkJCTxpeHR0diB0PSJfd3JpdHRlbiIgdj0iJiMzNDtSb3NlIDYuNS45MjMyLjEwJiMzNDsiIC8+Ci0JCQkJPC9peHRzPgotCQkJPC9YTUkuZXh0ZW5zaW9uPgotCQk8L01vZGVsX01hbmFnZW1lbnQuUGFja2FnZT4KLQk8L1hNSS5jb250ZW50PgotCi08L1hNST4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zbWFsbC5hZnRlclNwbGl0TGluZXNGb3JtYXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwuYWZ0ZXJTcGxpdExpbmVzRm9ybWF0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcwOGY2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zbWFsbC5hZnRlclNwbGl0TGluZXNGb3JtYXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPFhNSSB4bWkudmVyc2lvbj0iMS4wIiB0aW1lc3RhbXA9IlR1ZSBOb3YgMjggMDg6MTk6MjEgRVNUIDIwMDAiPgotCi0JPFhNSS5oZWFkZXI+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXI+WE1JIFRvb2xraXQ8L1hNSS5leHBvcnRlcj4KLQotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+MS4wNTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj48L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj4xLjA1PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj4xLjA1PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZT0iVU1MIiB4bWkudmVyc2lvbj0iMS4xIj48L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIHhtaS5uYW1lPSJVTUwiIHhtaS52ZXJzaW9uPSIxLjEiPjwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWU9IlVNTCIgeG1pLnZlcnNpb249IjEuMSI+Ci0JCQkJCTEuMDUKLQkJCQk8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIHhtaS5uYW1lPSJVTUwiIHhtaS52ZXJzaW9uPSIxLjEiPgotCQkJCQkxLjA1Ci0JCQkJPC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkubWV0YW1vZGVsIHhtaS5uYW1lPSJVTUwiIHhtaS52ZXJzaW9uPSIxLjEiIC8+Ci0JPC9YTUkuaGVhZGVyPgotCi0JPFhNSS5jb250ZW50PgotCQk8TW9kZWxfTWFuYWdlbWVudC5QYWNrYWdlIHhtaS5pZD0iXzEiIHhtaS51dWlkPSJOYW1lOmVqYiI+Ci0JCQk8Rm91bmRhdGlvbi5Db3JlLk1vZGVsRWxlbWVudC5uYW1lPgotCQkJCWVqYgotCQkJPC9Gb3VuZGF0aW9uLkNvcmUuTW9kZWxFbGVtZW50Lm5hbWU+Ci0JCQk8Rm91bmRhdGlvbi5Db3JlLk1vZGVsRWxlbWVudC52aXNpYmlsaXR5IHhtaS52YWx1ZT0icHVibGljIiAvPgotCQkJPFhNSS5leHRlbnNpb24geG1pLmV4dGVuZGVyPSJJWFQiIHhtaS5leHRlbmRlcklEPSIiPgotCQkJCTxpeHRzIHM9IklETCI+Ci0JCQkJCTxpeHR0diB0PSJ1dWlkIgotCQkJCQkJdj0iRENFOmQ4YTI1NjYwLTg4MjYtMTFlMS0wMDAwLTAwNWQ5ZTZhZGVjNDoxIiAvPgotCQkJCTwvaXh0cz4KLQkJCQk8aXh0cyBzPSJSb3NlIj4KLQkJCQkJPGl4dHR2IHQ9InF1aWQiIHY9IjM3ODBFMjcyMDMyRCIgLz4KLQkJCQkJPGl4dHR2IHQ9ImlzX3VuaXQiIHY9IlRSVUUiIC8+Ci0JCQkJCTxpeHR0diB0PSJmaWxlX25hbWUiCi0JCQkJCQl2PSImIzM0OyRFQ0xJUFNFX1JFU09VUkNFU1xcZVRvb2xzIEVKQiBsaWJyYXJpZXNcXGVqYnNjaGVtYS5jYXQmIzM0OyIgLz4KLQkJCQkJPGl4dHR2IHQ9ImlzX2xvYWRlZCIgdj0iVFJVRSIgLz4KLQkJCQk8L2l4dHM+Ci0JCQkJPGl4dHMgcz0iUm9zZVBldGFsIj4KLQkJCQkJPGl4dHR2IHQ9ImNoYXJTZXQiIHY9IjAiIC8+Ci0JCQkJCTxpeHR0diB0PSJ2ZXJzaW9uIiB2PSI0MyIgLz4KLQkJCQkJPGl4dHR2IHQ9Il93cml0dGVuIiB2PSImIzM0O1Jvc2UgNi41LjkyMzIuMTAmIzM0OyIgLz4KLQkJCQk8L2l4dHM+Ci0JCQk8L1hNSS5leHRlbnNpb24+Ci0JCTwvTW9kZWxfTWFuYWdlbWVudC5QYWNrYWdlPgotCTwvWE1JLmNvbnRlbnQ+Ci0KLTwvWE1JPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NtYWxsLmFmdGVyU3BsaXRMaW5lc1NwbGl0TXVsdGlBdHRyc0Zvcm1hdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zbWFsbC5hZnRlclNwbGl0TGluZXNTcGxpdE11bHRpQXR0cnNGb3JtYXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTViYmYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NtYWxsLmFmdGVyU3BsaXRMaW5lc1NwbGl0TXVsdGlBdHRyc0Zvcm1hdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPFhNSQotCXhtaS52ZXJzaW9uPSIxLjAiCi0JdGltZXN0YW1wPSJUdWUgTm92IDI4IDA4OjE5OjIxIEVTVCAyMDAwIj4KLQotCTxYTUkuaGVhZGVyPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyPlhNSSBUb29sa2l0PC9YTUkuZXhwb3J0ZXI+Ci0KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjEuMDU8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24+MS4wNTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24+MS4wNTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24KLQkJCQkJeG1pLm5hbWU9IlVNTCIKLQkJCQkJeG1pLnZlcnNpb249IjEuMSI+Ci0JCQkJPC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbgotCQkJCQl4bWkubmFtZT0iVU1MIgotCQkJCQl4bWkudmVyc2lvbj0iMS4xIj4KLQkJCQk8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uCi0JCQkJCXhtaS5uYW1lPSJVTUwiCi0JCQkJCXhtaS52ZXJzaW9uPSIxLjEiPgotCQkJCQkxLjA1Ci0JCQkJPC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbgotCQkJCQl4bWkubmFtZT0iVU1MIgotCQkJCQl4bWkudmVyc2lvbj0iMS4xIj4KLQkJCQkJMS4wNQotCQkJCTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLm1ldGFtb2RlbAotCQkJCXhtaS5uYW1lPSJVTUwiCi0JCQkJeG1pLnZlcnNpb249IjEuMSIgLz4KLQk8L1hNSS5oZWFkZXI+Ci0KLQk8WE1JLmNvbnRlbnQ+Ci0JCTxNb2RlbF9NYW5hZ2VtZW50LlBhY2thZ2UKLQkJCXhtaS5pZD0iXzEiCi0JCQl4bWkudXVpZD0iTmFtZTplamIiPgotCQkJPEZvdW5kYXRpb24uQ29yZS5Nb2RlbEVsZW1lbnQubmFtZT4KLQkJCQllamIKLQkJCTwvRm91bmRhdGlvbi5Db3JlLk1vZGVsRWxlbWVudC5uYW1lPgotCQkJPEZvdW5kYXRpb24uQ29yZS5Nb2RlbEVsZW1lbnQudmlzaWJpbGl0eSB4bWkudmFsdWU9InB1YmxpYyIgLz4KLQkJCTxYTUkuZXh0ZW5zaW9uCi0JCQkJeG1pLmV4dGVuZGVyPSJJWFQiCi0JCQkJeG1pLmV4dGVuZGVySUQ9IiI+Ci0JCQkJPGl4dHMgcz0iSURMIj4KLQkJCQkJPGl4dHR2Ci0JCQkJCQl0PSJ1dWlkIgotCQkJCQkJdj0iRENFOmQ4YTI1NjYwLTg4MjYtMTFlMS0wMDAwLTAwNWQ5ZTZhZGVjNDoxIiAvPgotCQkJCTwvaXh0cz4KLQkJCQk8aXh0cyBzPSJSb3NlIj4KLQkJCQkJPGl4dHR2Ci0JCQkJCQl0PSJxdWlkIgotCQkJCQkJdj0iMzc4MEUyNzIwMzJEIiAvPgotCQkJCQk8aXh0dHYKLQkJCQkJCXQ9ImlzX3VuaXQiCi0JCQkJCQl2PSJUUlVFIiAvPgotCQkJCQk8aXh0dHYKLQkJCQkJCXQ9ImZpbGVfbmFtZSIKLQkJCQkJCXY9IiYjMzQ7JEVDTElQU0VfUkVTT1VSQ0VTXFxlVG9vbHMgRUpCIGxpYnJhcmllc1xcZWpic2NoZW1hLmNhdCYjMzQ7IiAvPgotCQkJCQk8aXh0dHYKLQkJCQkJCXQ9ImlzX2xvYWRlZCIKLQkJCQkJCXY9IlRSVUUiIC8+Ci0JCQkJPC9peHRzPgotCQkJCTxpeHRzIHM9IlJvc2VQZXRhbCI+Ci0JCQkJCTxpeHR0dgotCQkJCQkJdD0iY2hhclNldCIKLQkJCQkJCXY9IjAiIC8+Ci0JCQkJCTxpeHR0dgotCQkJCQkJdD0idmVyc2lvbiIKLQkJCQkJCXY9IjQzIiAvPgotCQkJCQk8aXh0dHYKLQkJCQkJCXQ9Il93cml0dGVuIgotCQkJCQkJdj0iJiMzNDtSb3NlIDYuNS45MjMyLjEwJiMzNDsiIC8+Ci0JCQkJPC9peHRzPgotCQkJPC9YTUkuZXh0ZW5zaW9uPgotCQk8L01vZGVsX01hbmFnZW1lbnQuUGFja2FnZT4KLQk8L1hNSS5jb250ZW50PgotCi08L1hNST4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zbWFsbC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zbWFsbC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyOTVkNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPFhNSSB4bWkudmVyc2lvbj0iMS4wIiB0aW1lc3RhbXA9IlR1ZSBOb3YgMjggMDg6MTk6MjEgRVNUIDIwMDAiPgotCi0JPFhNSS5oZWFkZXI+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXI+Ci0JCQlYTUkgVG9vbGtpdAotCQkJPC9YTUkuZXhwb3J0ZXI+Ci0JCQkKLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPiAgICAxLjA1ICAgIDwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPjwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjwvWE1JLmV4cG9ydGVyVmVyc2lvbj4gPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj4gICAgMS4wNSAgICA8L1hNSS5leHBvcnRlclZlcnNpb24+PC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+ICAgIDEuMDUgICAgPC9YTUkuZXhwb3J0ZXJWZXJzaW9uPiA8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZSA9CSJVTUwiIHhtaS52ZXJzaW9uID0gIjEuMSI+PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPjwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIHhtaS5uYW1lID0JIlVNTCIgeG1pLnZlcnNpb24gPSAiMS4xIj48L1hNSS5leHBvcnRlclZlcnNpb24+IDwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIHhtaS5uYW1lID0JIlVNTCIgeG1pLnZlcnNpb24gPSAiMS4xIj4gICAgMS4wNSAgICA8L1hNSS5leHBvcnRlclZlcnNpb24+PC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWUgPQkiVU1MIiB4bWkudmVyc2lvbiA9ICIxLjEiPiAgICAxLjA1ICAgIDwvWE1JLmV4cG9ydGVyVmVyc2lvbj4gPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5tZXRhbW9kZWwgeG1pLm5hbWUgICAgPQkJCSJVTUwiIHhtaS52ZXJzaW9uCi0JCT0KLQkJIjEuMSIgLz4KLQk8L1hNSS5oZWFkZXI+Ci0KLQk8WE1JLmNvbnRlbnQ+Ci0JCTxNb2RlbF9NYW5hZ2VtZW50LlBhY2thZ2UKLQkJCXhtaS5pZD0iXzEiCQkJCQl4bWkudXVpZD0iTmFtZTplamIiPgotCQkJPEZvdW5kYXRpb24uQ29yZS5Nb2RlbEVsZW1lbnQubmFtZT5lamIgICAgPC9Gb3VuZGF0aW9uLkNvcmUuTW9kZWxFbGVtZW50Lm5hbWU+Ci0JCQk8Rm91bmRhdGlvbi5Db3JlLk1vZGVsRWxlbWVudC52aXNpYmlsaXR5IHhtaS52YWx1ZT0icHVibGljIi8+Ci0JCQk8WE1JLmV4dGVuc2lvbiB4bWkuZXh0ZW5kZXI9IklYVCIgeG1pLmV4dGVuZGVySUQ9IiI+Ci0JCQkJPGl4dHMgcz0iSURMIj4KLQkJCQkJPGl4dHR2IHQ9InV1aWQiIHY9IkRDRTpkOGEyNTY2MC04ODI2LTExZTEtMDAwMC0wMDVkOWU2YWRlYzQ6MSIKLQkJCQkJLz4KLQkJCQk8L2l4dHM+Ci0JCQkJPGl4dHMgcz0iUm9zZSI+Ci0JCQkJCTxpeHR0dgotCQkJCQkJdD0icXVpZCIKLQkJCQkJCXY9IjM3ODBFMjcyMDMyRCIKLQkJCQkJCS8+Ci0JCQkJCTxpeHR0dgotCQkJCQl0PSJpc191bml0IgotCQkJCQl2PSJUUlVFIgotCQkJCQkvPgotCQkJCQk8aXh0dHYgdD0iZmlsZV9uYW1lIgotCQkJCQkJdj0iJiMzNDskRUNMSVBTRV9SRVNPVVJDRVNcXGVUb29scyBFSkIgbGlicmFyaWVzXFxlamJzY2hlbWEuY2F0JiMzNDsiCi0JCQkJCQkJCQkvPgotCQkJCQk8aXh0dHYgdD0iaXNfbG9hZGVkIiB2PSJUUlVFIiAvPgotCQkJCTwvaXh0cz4KLQkJCQk8aXh0cyBzPSJSb3NlUGV0YWwiPgotCQkJCQk8aXh0dHYgdD0iY2hhclNldCIgdj0iMCIgLz4KLQkJCQkJCQk8aXh0dHYgdD0idmVyc2lvbiIgdj0iNDMiIC8+Ci0JPGl4dHR2IHQ9Il93cml0dGVuIiB2PSImIzM0O1Jvc2UgNi41LjkyMzIuMTAmIzM0OyIgLz48L2l4dHM+PC9YTUkuZXh0ZW5zaW9uPgotCQk8L01vZGVsX01hbmFnZW1lbnQuUGFja2FnZT4KLQk8L1hNSS5jb250ZW50PgotCi08L1hNST4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zcGFjZXMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc3BhY2VzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFhZDJmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zcGFjZXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc3BhY2VzQW5kQ2hhcnMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc3BhY2VzQW5kQ2hhcnMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzA0ZWI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NwYWNlc0FuZENoYXJzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSAgIGFiYyAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3N1YnNjcmlwdGlvbi5hZnRlckNsZWFudXAuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc3Vic2NyaXB0aW9uLmFmdGVyQ2xlYW51cC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjNTdmZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc3Vic2NyaXB0aW9uLmFmdGVyQ2xlYW51cC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDtjaGFyc2V0PVVURi04IiBsYW5ndWFnZT0iamF2YSIlPg0KLTwlQCB0YWdsaWIgdXJpPSIvV0VCLUlORi9hcHAudGxkIiBwcmVmaXg9ImFwcCIlPg0KLTwlQCB0YWdsaWIgdXJpPSIvV0VCLUlORi9zdHJ1dHMtYmVhbi50bGQiIHByZWZpeD0iYmVhbiIlPg0KLTwlQCB0YWdsaWIgdXJpPSIvV0VCLUlORi9zdHJ1dHMtaHRtbC50bGQiIHByZWZpeD0iaHRtbCIlPg0KLTwlQCB0YWdsaWIgdXJpPSIvV0VCLUlORi9zdHJ1dHMtbG9naWMudGxkIiBwcmVmaXg9ImxvZ2ljIiU+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+Ci08dGFnID4gPC90YWcgPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NvbnRlbnR0eXBlaWRlbnRpZmllci9jb250ZW50c3BlY2lmaWMvTnVsbFN0cmVhbS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY29udGVudHR5cGVpZGVudGlmaWVyL2NvbnRlbnRzcGVjaWZpYy9OdWxsU3RyZWFtLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMTZmODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY29udGVudHR5cGVpZGVudGlmaWVyL2NvbnRlbnRzcGVjaWZpYy9OdWxsU3RyZWFtLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLmNvbnRlbnR0eXBlaWRlbnRpZmllci5jb250ZW50c3BlY2lmaWM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLQotcHVibGljIGNsYXNzIE51bGxTdHJlYW0gZXh0ZW5kcyBJbnB1dFN0cmVhbSB7Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI3JlYWQoKQotCSAqLwotCXB1YmxpYyBpbnQgcmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jb250ZW50dHlwZWlkZW50aWZpZXIvY29udGVudHNwZWNpZmljL1Rlc3RDb250ZW50VHlwZUhhbmRsZXJzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jb250ZW50dHlwZWlkZW50aWZpZXIvY29udGVudHNwZWNpZmljL1Rlc3RDb250ZW50VHlwZUhhbmRsZXJzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmZTQ4NzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY29udGVudHR5cGVpZGVudGlmaWVyL2NvbnRlbnRzcGVjaWZpYy9UZXN0Q29udGVudFR5cGVIYW5kbGVycy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLmNvbnRlbnR0eXBlaWRlbnRpZmllci5jb250ZW50c3BlY2lmaWM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JDU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIHRvIHRlc3QgdmVyeSBiYXNpY3Mgb2YgY29udGVudCB0eXBlIGhhbmRsZXJzLgotICogCi0gKiBJdCB0ZXN0cyB0aGF0Ci0gKiAKLSAqIEJWVDogY29udGVudCByZWdpc3RyeSBjYW4gYmUgLyBpcyBjcmVhdGVkIDUgZXhwZWN0ZWQgY29udGVudFR5cGVJZGVudGlmaWVycwotICogY2FuIGJlIGNyZWF0ZWQvZm91bmQgYmFzZWQgb24gaWQuIHRoZXJlIGlzIG9uZSBhbmQgb25seSBvbmUgZGVmYXVsdCBjb250ZW50Ci0gKiB0eXBlIGhhbmRsZXIuCi0gKiAKLSAqIAotICogCi0gKiAgCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudFR5cGVIYW5kbGVycyBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwdWJsaWMgVGVzdENvbnRlbnRUeXBlSGFuZGxlcnMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgSUNvbnRlbnRUeXBlTWFuYWdlciBnZXRDb250ZW50VHlwZVJlZ2lzdHJ5KCkgewotCQlJQ29udGVudFR5cGVNYW5hZ2VyIHJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCk7Ci0JCXJldHVybiByZWdpc3RyeTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRpb24oKSB7Ci0JCUlDb250ZW50VHlwZU1hbmFnZXIgcmVnaXN0cnkgPSBnZXRDb250ZW50VHlwZVJlZ2lzdHJ5KCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgdHlwZSBpZGVudGlmZXIgcmVnaXN0cnkgbXVzdCBleGlzdCIsIHJlZ2lzdHJ5ICE9IG51bGwpOwotCQlpZiAoREVCVUcpIHsKLQkJCUlDb250ZW50VHlwZVtdIGFsbFR5cGVzID0gcmVnaXN0cnkuZ2V0QWxsQ29udGVudFR5cGVzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGFsbFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKGFsbFR5cGVzW2ldKTsKLQotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTEV4aXN0cygpIHsKLQkJU3RyaW5nIGlkID0gQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1NTRVhNTDsKLQkJSUNvbnRlbnRUeXBlTWFuYWdlciByZWdpc3RyeSA9IGdldENvbnRlbnRUeXBlUmVnaXN0cnkoKTsKLQkJSUNvbnRlbnRUeXBlIGlkZW50aWZpZXIgPSByZWdpc3RyeS5nZXRDb250ZW50VHlwZShpZCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgdHlwZSBpZGVudGlmaWVyICIgKyBpZCArICIgZG9lcyBub3QgaGF2ZSBjdXN0b20gWE1MIHR5cGUgIiwgaWRlbnRpZmllciAhPSBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SFRNTEV4aXN0cygpIHsKLQkJU3RyaW5nIGlkID0gQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MOwotCQlJQ29udGVudFR5cGVNYW5hZ2VyIHJlZ2lzdHJ5ID0gZ2V0Q29udGVudFR5cGVSZWdpc3RyeSgpOwotCQlJQ29udGVudFR5cGUgaWRlbnRpZmllciA9IHJlZ2lzdHJ5LmdldENvbnRlbnRUeXBlKGlkKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCB0eXBlIGlkZW50aWZpZXIgIiArIGlkICsgIiBkb2VzIG5vdCBoYXZlIEhUTUwgdHlwZSAiLCBpZGVudGlmaWVyICE9IG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BFeGlzdHMoKSB7Ci0JCVN0cmluZyBpZCA9IENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1A7Ci0JCUlDb250ZW50VHlwZU1hbmFnZXIgcmVnaXN0cnkgPSBnZXRDb250ZW50VHlwZVJlZ2lzdHJ5KCk7Ci0JCUlDb250ZW50VHlwZSBpZGVudGlmaWVyID0gcmVnaXN0cnkuZ2V0Q29udGVudFR5cGUoaWQpOwotCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaWRlbnRpZmllciAiICsgaWQgKyAiIGRvZXMgbm90IGhhdmUgSlNQIHR5cGUgIiwgaWRlbnRpZmllciAhPSBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q1NTRXhpc3RzKCkgewotCQlTdHJpbmcgaWQgPSBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTOwotCQlJQ29udGVudFR5cGVNYW5hZ2VyIHJlZ2lzdHJ5ID0gZ2V0Q29udGVudFR5cGVSZWdpc3RyeSgpOwotCQlJQ29udGVudFR5cGUgaWRlbnRpZmllciA9IHJlZ2lzdHJ5LmdldENvbnRlbnRUeXBlKGlkKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCB0eXBlIGlkZW50aWZpZXIgIiArIGlkICsgIiBkb2VzIG5vdCBoYXZlIENTUyB0eXBlICIsIGlkZW50aWZpZXIgIT0gbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERUREV4aXN0cygpIHsKLQkJU3RyaW5nIGlkID0gIm9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5kdGRzb3VyY2UiOwotCQlJQ29udGVudFR5cGVNYW5hZ2VyIHJlZ2lzdHJ5ID0gZ2V0Q29udGVudFR5cGVSZWdpc3RyeSgpOwotCQlJQ29udGVudFR5cGUgaWRlbnRpZmllciA9IHJlZ2lzdHJ5LmdldENvbnRlbnRUeXBlKGlkKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCB0eXBlIGlkZW50aWZpZXIgIiArIGlkICsgIiBkb2VzIG5vdCBoYXZlIERURCB0eXBlICIsIGlkZW50aWZpZXIgIT0gbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTEV4aXN0c0J5RmlsZUV4dGVuc2lvbigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9ICJ0ZXN0LnhtbCI7Ci0JCUlDb250ZW50VHlwZU1hbmFnZXIgcmVnaXN0cnkgPSBnZXRDb250ZW50VHlwZVJlZ2lzdHJ5KCk7Ci0JCUlDb250ZW50VHlwZSBpZGVudGlmaWVyID0gcmVnaXN0cnkuZ2V0RGVzY3JpcHRpb25Gb3IobmV3IE51bGxTdHJlYW0oKSwgZmlsZW5hbWUsIElDb250ZW50RGVzY3JpcHRpb24uQUxMKS5nZXRDb250ZW50VHlwZSgpOwotCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaWRlbnRpZmllciBmb3IgIiArIGZpbGVuYW1lICsgIiBkb2VzIG5vdCBoYXZlIFhNTCB0eXBlICIsIGlkZW50aWZpZXIgIT0gbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEhUTUxFeGlzdHNCeUZpbGVFeHRlbnNpb24oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSAidGVzdC5odG1sIjsKLQkJSUNvbnRlbnRUeXBlTWFuYWdlciByZWdpc3RyeSA9IGdldENvbnRlbnRUeXBlUmVnaXN0cnkoKTsKLQkJSUNvbnRlbnRUeXBlIGlkZW50aWZpZXIgPSByZWdpc3RyeS5nZXREZXNjcmlwdGlvbkZvcihuZXcgTnVsbFN0cmVhbSgpLCBmaWxlbmFtZSwgSUNvbnRlbnREZXNjcmlwdGlvbi5BTEwpLmdldENvbnRlbnRUeXBlKCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgdHlwZSBpZGVudGlmaWVyIGZvciAiICsgZmlsZW5hbWUgKyAiIGRvZXMgbm90IGhhdmUgSFRNTCB0eXBlICIsIGlkZW50aWZpZXIgIT0gbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUEV4aXN0c0J5RmlsZUV4dGVuc2lvbigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9ICJ0ZXN0LmpzcCI7Ci0JCUlDb250ZW50VHlwZU1hbmFnZXIgcmVnaXN0cnkgPSBnZXRDb250ZW50VHlwZVJlZ2lzdHJ5KCk7Ci0JCUlDb250ZW50VHlwZSBpZGVudGlmaWVyID0gcmVnaXN0cnkuZ2V0RGVzY3JpcHRpb25Gb3IobmV3IE51bGxTdHJlYW0oKSwgZmlsZW5hbWUsIElDb250ZW50RGVzY3JpcHRpb24uQUxMKS5nZXRDb250ZW50VHlwZSgpOwotCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaWRlbnRpZmllciBmb3IgIiArIGZpbGVuYW1lICsgIiBkb2VzIG5vdCBoYXZlIEpTUCB0eXBlICIsIGlkZW50aWZpZXIgIT0gbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENTU0V4aXN0c0J5RmlsZUV4dGVuc2lvbigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9ICJ0ZXN0LmNzcyI7Ci0JCUlDb250ZW50VHlwZU1hbmFnZXIgcmVnaXN0cnkgPSBnZXRDb250ZW50VHlwZVJlZ2lzdHJ5KCk7Ci0JCUlDb250ZW50VHlwZSBpZGVudGlmaWVyID0gcmVnaXN0cnkuZ2V0RGVzY3JpcHRpb25Gb3IobmV3IE51bGxTdHJlYW0oKSwgZmlsZW5hbWUsIElDb250ZW50RGVzY3JpcHRpb24uQUxMKS5nZXRDb250ZW50VHlwZSgpOwotCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaWRlbnRpZmllciBmb3IgIiArIGZpbGVuYW1lICsgIiBkb2VzIG5vdCBoYXZlIENTUyB0eXBlICIsIGlkZW50aWZpZXIgIT0gbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERUREV4aXN0c0J5RmlsZUV4dGVuc2lvbigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9ICJ0ZXN0LmR0ZCI7Ci0JCUlDb250ZW50VHlwZU1hbmFnZXIgcmVnaXN0cnkgPSBnZXRDb250ZW50VHlwZVJlZ2lzdHJ5KCk7Ci0JCUlDb250ZW50VHlwZSBpZGVudGlmaWVyID0gcmVnaXN0cnkuZ2V0RGVzY3JpcHRpb25Gb3IobmV3IE51bGxTdHJlYW0oKSwgZmlsZW5hbWUsIElDb250ZW50RGVzY3JpcHRpb24uQUxMKS5nZXRDb250ZW50VHlwZSgpOwotCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaWRlbnRpZmllciBmb3IgIiArIGZpbGVuYW1lICsgIiBkb2VzIG5vdCBoYXZlIERURCB0eXBlICIsIGlkZW50aWZpZXIgIT0gbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE11bHRpcGxlRGVmaW5pdGlvbnMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgaWQgPSBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTOwotCQlTdHJpbmcgZmlsZW5hbWUgPSAidGVzdC5jc3MiOwotCQlJQ29udGVudFR5cGVNYW5hZ2VyIHJlZ2lzdHJ5ID0gZ2V0Q29udGVudFR5cGVSZWdpc3RyeSgpOwotCQlJQ29udGVudFR5cGUgaWRlbnRpZmllcjEgPSByZWdpc3RyeS5nZXRDb250ZW50VHlwZShpZCk7Ci0JCUlDb250ZW50VHlwZSBpZGVudGlmaWVyMiA9IHJlZ2lzdHJ5LmdldERlc2NyaXB0aW9uRm9yKG5ldyBOdWxsU3RyZWFtKCksIGZpbGVuYW1lLCBJQ29udGVudERlc2NyaXB0aW9uLkFMTCkuZ2V0Q29udGVudFR5cGUoKTsKLQkJYXNzZXJ0VHJ1ZSgibXVsaXRwbGUgY29udGVudCB0eXBlIGlkZW50aWZpZXJzIG5lZWQgdG8gYmUgZXF1YWwgKGJ1dCBub3Qgc2FtZSBpbnN0YW5jZSkgIiwgaWRlbnRpZmllcjEuZXF1YWxzKGlkZW50aWZpZXIyKSk7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY29udGVudHR5cGVpZGVudGlmaWVyL2NvbnRlbnRzcGVjaWZpYy9UZXN0TW9kZWxIYW5kbGVycy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY29udGVudHR5cGVpZGVudGlmaWVyL2NvbnRlbnRzcGVjaWZpYy9UZXN0TW9kZWxIYW5kbGVycy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjBmZmI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NvbnRlbnR0eXBlaWRlbnRpZmllci9jb250ZW50c3BlY2lmaWMvVGVzdE1vZGVsSGFuZGxlcnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jb250ZW50dHlwZWlkZW50aWZpZXIuY29udGVudHNwZWNpZmljOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yQ1NTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5tb2RlbGhhbmRsZXIuSU1vZGVsSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlclJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotCi1wdWJsaWMgY2xhc3MgVGVzdE1vZGVsSGFuZGxlcnMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgTW9kZWxIYW5kbGVyUmVnaXN0cnkgZ2V0TW9kZWxIYW5kbGVyUmVnaXN0cnkoKSB7Ci0JCU1vZGVsSGFuZGxlclJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gTW9kZWxIYW5kbGVyUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKLQkJcmV0dXJuIHJlZ2lzdHJ5OwotCX0KLQotCXB1YmxpYyBUZXN0TW9kZWxIYW5kbGVycygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRpb24oKSB7Ci0JCU1vZGVsSGFuZGxlclJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0TW9kZWxIYW5kbGVyUmVnaXN0cnkoKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgaGFuZGxlciByZWdpc3RyeSBtdXN0IGV4aXN0IiwgcmVnaXN0cnkgIT0gbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENTU0V4aXN0cygpIHsKLQkJU3RyaW5nIGlkID0gQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUzsgIAotCQlNb2RlbEhhbmRsZXJSZWdpc3RyeSByZWdpc3RyeSA9IGdldE1vZGVsSGFuZGxlclJlZ2lzdHJ5KCk7Ci0JCUlNb2RlbEhhbmRsZXIgaGFuZGxlciA9IHJlZ2lzdHJ5LmdldEhhbmRsZXJGb3JDb250ZW50VHlwZUlkKGlkKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgaGFuZGxlciByZWdpc3RyeSBkb2VzIG5vdCBoYXZlIENTUyB0eXBlICIsIGhhbmRsZXIgIT0gbnVsbCAmJiBoYW5kbGVyLmdldEFzc29jaWF0ZWRDb250ZW50VHlwZUlkKCkuZXF1YWxzKGlkKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENTU0V4aXN0c0Zyb21GaWxlbmFtZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9ICJ0ZXN0LmNzcyI7Ci0JCU1vZGVsSGFuZGxlclJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0TW9kZWxIYW5kbGVyUmVnaXN0cnkoKTsKLQkJSU1vZGVsSGFuZGxlciBoYW5kbGVyID0gcmVnaXN0cnkuZ2V0SGFuZGxlckZvcihmaWxlbmFtZSwgbnVsbCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGhhbmRsZXIgcmVnaXN0cnkgZG9lcyBub3QgaGF2ZSBDU1MgdHlwZSAiLCBoYW5kbGVyICE9IG51bGwgJiYgaGFuZGxlci5nZXRBc3NvY2lhdGVkQ29udGVudFR5cGVJZCgpLmVxdWFscyhDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERUREV4aXN0cygpIHsKLQkJU3RyaW5nIGlkID0gIm9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5kdGRzb3VyY2UiOyAKLQkJTW9kZWxIYW5kbGVyUmVnaXN0cnkgcmVnaXN0cnkgPSBnZXRNb2RlbEhhbmRsZXJSZWdpc3RyeSgpOwotCQlJTW9kZWxIYW5kbGVyIGhhbmRsZXIgPSByZWdpc3RyeS5nZXRIYW5kbGVyRm9yQ29udGVudFR5cGVJZChpZCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGhhbmRsZXIgcmVnaXN0cnkgZG9lcyBub3QgaGF2ZSBEVEQgdHlwZSAiLCBoYW5kbGVyICE9IG51bGwgJiYgaGFuZGxlci5nZXRBc3NvY2lhdGVkQ29udGVudFR5cGVJZCgpLmVxdWFscyhpZCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REVERFeGlzdHNGcm9tRmlsZW5hbWUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSAidGVzdC5kdGQiOwotCQlNb2RlbEhhbmRsZXJSZWdpc3RyeSByZWdpc3RyeSA9IGdldE1vZGVsSGFuZGxlclJlZ2lzdHJ5KCk7Ci0JCUlNb2RlbEhhbmRsZXIgaGFuZGxlciA9IHJlZ2lzdHJ5LmdldEhhbmRsZXJGb3IoZmlsZW5hbWUsIG51bGwpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBoYW5kbGVyIHJlZ2lzdHJ5IGRvZXMgbm90IGhhdmUgRFREIHR5cGUgIiwgaGFuZGxlciAhPSBudWxsICYmIGhhbmRsZXIuZ2V0QXNzb2NpYXRlZENvbnRlbnRUeXBlSWQoKS5lcXVhbHMoIm9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5kdGRzb3VyY2UiKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEhUTUxFeGlzdHMoKSB7Ci0JCVN0cmluZyBpZCA9IENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTDsKLQkJTW9kZWxIYW5kbGVyUmVnaXN0cnkgcmVnaXN0cnkgPSBnZXRNb2RlbEhhbmRsZXJSZWdpc3RyeSgpOwotCQlJTW9kZWxIYW5kbGVyIGhhbmRsZXIgPSByZWdpc3RyeS5nZXRIYW5kbGVyRm9yQ29udGVudFR5cGVJZChpZCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGhhbmRsZXIgcmVnaXN0cnkgZG9lcyBub3QgaGF2ZSBIVE1MIHR5cGUgIiwgaGFuZGxlciAhPSBudWxsICYmIGhhbmRsZXIuZ2V0QXNzb2NpYXRlZENvbnRlbnRUeXBlSWQoKS5lcXVhbHMoaWQpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SFRNTEV4aXN0c0Zyb21GaWxlbmFtZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9ICJ0ZXN0Lmh0bWwiOwotCQlNb2RlbEhhbmRsZXJSZWdpc3RyeSByZWdpc3RyeSA9IGdldE1vZGVsSGFuZGxlclJlZ2lzdHJ5KCk7Ci0JCUlNb2RlbEhhbmRsZXIgaGFuZGxlciA9IHJlZ2lzdHJ5LmdldEhhbmRsZXJGb3IoZmlsZW5hbWUsIG51bGwpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBoYW5kbGVyIHJlZ2lzdHJ5IGRvZXMgbm90IGhhdmUgSFRNTCB0eXBlICIsIGhhbmRsZXIgIT0gbnVsbCAmJiBoYW5kbGVyLmdldEFzc29jaWF0ZWRDb250ZW50VHlwZUlkKCkuZXF1YWxzKENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BFeGlzdHMoKSB7Ci0JCVN0cmluZyBpZCA9IENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1A7Ci0JCU1vZGVsSGFuZGxlclJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0TW9kZWxIYW5kbGVyUmVnaXN0cnkoKTsKLQkJSU1vZGVsSGFuZGxlciBoYW5kbGVyID0gcmVnaXN0cnkuZ2V0SGFuZGxlckZvckNvbnRlbnRUeXBlSWQoaWQpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBoYW5kbGVyIHJlZ2lzdHJ5IGRvZXMgbm90IGhhdmUgSlNQIHR5cGUgIiwgaGFuZGxlciAhPSBudWxsICYmIGhhbmRsZXIuZ2V0QXNzb2NpYXRlZENvbnRlbnRUeXBlSWQoKS5lcXVhbHMoaWQpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQRXhpc3RzRnJvbUZpbGVuYW1lKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gInRlc3QuanNwIjsKLQkJTW9kZWxIYW5kbGVyUmVnaXN0cnkgcmVnaXN0cnkgPSBnZXRNb2RlbEhhbmRsZXJSZWdpc3RyeSgpOwotCQlJTW9kZWxIYW5kbGVyIGhhbmRsZXIgPSByZWdpc3RyeS5nZXRIYW5kbGVyRm9yKGZpbGVuYW1lLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgaGFuZGxlciByZWdpc3RyeSBkb2VzIG5vdCBoYXZlIEpTUCB0eXBlICIsIGhhbmRsZXIgIT0gbnVsbCAmJiBoYW5kbGVyLmdldEFzc29jaWF0ZWRDb250ZW50VHlwZUlkKCkuZXF1YWxzKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MRXhpc3RzKCkgewotCQlTdHJpbmcgaWQgPSBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MOwotCQlNb2RlbEhhbmRsZXJSZWdpc3RyeSByZWdpc3RyeSA9IGdldE1vZGVsSGFuZGxlclJlZ2lzdHJ5KCk7Ci0JCUlNb2RlbEhhbmRsZXIgaGFuZGxlciA9IHJlZ2lzdHJ5LmdldEhhbmRsZXJGb3JDb250ZW50VHlwZUlkKGlkKTsKLQkJYXNzZXJ0RXF1YWxzKCJtb2RlbCBoYW5kbGVyIHJlZ2lzdHJ5IGRvZXMgbm90IGhhdmUgWE1MIHR5cGUgIiwgaWQsIGhhbmRsZXIuZ2V0QXNzb2NpYXRlZENvbnRlbnRUeXBlSWQoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTEV4aXN0c0Zyb21GaWxlbmFtZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9ICJ0ZXN0LnhtbCI7Ci0JCU1vZGVsSGFuZGxlclJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0TW9kZWxIYW5kbGVyUmVnaXN0cnkoKTsKLQkJSU1vZGVsSGFuZGxlciBoYW5kbGVyID0gcmVnaXN0cnkuZ2V0SGFuZGxlckZvcihmaWxlbmFtZSwgbnVsbCk7Ci0JCWFzc2VydEVxdWFscygibW9kZWwgaGFuZGxlciByZWdpc3RyeSBkb2VzIG5vdCBoYXZlIFhNTCB0eXBlICIsIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwsIGhhbmRsZXIuZ2V0QXNzb2NpYXRlZENvbnRlbnRUeXBlSWQoKSk7Ci0JfQotCi0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9kb20vVGVzdE9ycGhhbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvZG9tL1Rlc3RPcnBoYW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ0Mzc0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9kb20vVGVzdE9ycGhhbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLmRvbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuQXR0ckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIFRoaXMgdGVzdCB3aWxsIGNhdXNlIGEgInJlZ2lvbiBtYW5hZ2VtZW50IGVycm9yIiB0byBiZSB0aHJvd24gaW4gRE9NIHBhcnNlcgotICogKGFuZCBpdHMgc3Vic2VxdWVudCAnaGFuZGxlUmVmcmVzaCcgdG8gYmUgY2FsbGVkKS4gVGhpcyBpcyAibm9ybWFsIiBpbiB0aGlzCi0gKiBlcnJvciBjYXNlLCBvZiBhcHBlbmRpbmcgYW4ganNwIGVsZW1lbnQgdG8gYW4gaHRtbCBkb2N1bWVudC4gVGhpcwotICogZXJyb3IvZXhjZXB0aW9uIGlzIG5vdCBub3JtYWxseSBwcmludGVkIG91dCwgYnV0IGlzIGlmICdkZWJ1ZycgaXMgdHVybmVkIG9uLgotICovCi0KLXB1YmxpYyBjbGFzcyBUZXN0T3JwaGFuIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGZDYXRlZ29yeSA9ICJ1bml0dGVzdHMiOwotCi0JcHVibGljIFRlc3RPcnBoYW4oU3RyaW5nIG5hbWUpIHsKLQotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwcml2YXRlIERvY3VtZW50IGdldEpTUERvYygpIHsKLQkJSURPTU1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlEb2N1bWVudCBkb2MgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJcmV0dXJuIGRvYzsKLQl9Ci0KLQlwcml2YXRlIERvY3VtZW50IGdldEhUTUxEb2MoKSB7Ci0KLQkJSURPTU1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCURvY3VtZW50IGRvYyA9IHN0cnVjdHVyZWRNb2RlbC5nZXREb2N1bWVudCgpOwotCQlyZXR1cm4gZG9jOwotCX0KLQotCXByaXZhdGUgRWxlbWVudCBtYWtlRWxlbWVudChEb2N1bWVudCBkb2N1bWVudCkgewotCi0JCUVsZW1lbnQgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklNRyIpOwotCQllbGVtZW50LnNldEF0dHJpYnV0ZSgic3JjIiwgIjxiZWFuOm1lc3NhZ2UgLz4iKTsKLQkJcmV0dXJuIGVsZW1lbnQ7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbk9ycGhhbkluSFRNTERvYygpIHsKLQotCQlMb2dnZXIudHJhY2UoZkNhdGVnb3J5LCAidGVzdE5vbk9ycGhhbkluSFRNTERvYyIpOwotCQlEb2N1bWVudCBkb2MgPSBnZXRIVE1MRG9jKCk7Ci0JCUVsZW1lbnQgZWxlbWVudCA9IG1ha2VFbGVtZW50KGRvYyk7Ci0JCUF0dHJJbXBsIGF0dHIgPSAoQXR0ckltcGwpIGVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZSgic3JjIik7Ci0JCVN0cmluZyBhdHRyVmFsdWUgPSBhdHRyLmdldFZhbHVlKCk7Ci0JCUxvZ2dlci50cmFjZShmQ2F0ZWdvcnksICJhdHRyVmFsdWU6ICIgKyBhdHRyVmFsdWUpOwotCQlkb2MuYXBwZW5kQ2hpbGQoZWxlbWVudCk7Ci0JCWJvb2xlYW4gaXNKc3BWYWx1ZSA9IGF0dHIuaGFzTmVzdGVkVmFsdWUoKTsKLQkJTG9nZ2VyLnRyYWNlKGZDYXRlZ29yeSwgImlzSnNwVmFsdWU6ICIgKyBpc0pzcFZhbHVlKTsKLQkJYXNzZXJ0RmFsc2UoaXNKc3BWYWx1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbk9ycGhhbkluSlNQRG9jKCkgewotCi0JCUxvZ2dlci50cmFjZShmQ2F0ZWdvcnksICJ0ZXN0Tm9uT3JwaGFuSW5KU1BEb2MiKTsKLQkJRG9jdW1lbnQgZG9jID0gZ2V0SlNQRG9jKCk7Ci0JCUVsZW1lbnQgZWxlbWVudCA9IG1ha2VFbGVtZW50KGRvYyk7Ci0JCUF0dHJJbXBsIGF0dHIgPSAoQXR0ckltcGwpIGVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZSgic3JjIik7Ci0JCVN0cmluZyBhdHRyVmFsdWUgPSBhdHRyLmdldFZhbHVlKCk7Ci0JCUxvZ2dlci50cmFjZShmQ2F0ZWdvcnksICJhdHRyVmFsdWU6ICIgKyBhdHRyVmFsdWUpOwotCQlkb2MuYXBwZW5kQ2hpbGQoZWxlbWVudCk7Ci0JCWJvb2xlYW4gaXNKc3BWYWx1ZSA9IGF0dHIuaGFzTmVzdGVkVmFsdWUoKTsKLQkJTG9nZ2VyLnRyYWNlKGZDYXRlZ29yeSwgImlzSnNwVmFsdWU6ICIgKyBpc0pzcFZhbHVlKTsKLQkJYXNzZXJ0VHJ1ZShpc0pzcFZhbHVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uT3JwaGFuSW5Cb3RoKCkgewotCi0JCUxvZ2dlci50cmFjZShmQ2F0ZWdvcnksICJ0ZXN0Tm9uT3JwaGFuSW5Cb3RoIik7Ci0JCURvY3VtZW50IGpzcERvYyA9IGdldEpTUERvYygpOwotCQlFbGVtZW50IGNvbW1vbkVsZW1lbnQgPSBtYWtlRWxlbWVudChqc3BEb2MpOwotCQlBdHRySW1wbCBhdHRyID0gKEF0dHJJbXBsKSBjb21tb25FbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoInNyYyIpOwotCQlTdHJpbmcgYXR0clZhbHVlID0gYXR0ci5nZXRWYWx1ZSgpOwotCQlMb2dnZXIudHJhY2UoZkNhdGVnb3J5LCAiYXR0clZhbHVlOiAiICsgYXR0clZhbHVlKTsKLQkJanNwRG9jLmFwcGVuZENoaWxkKGNvbW1vbkVsZW1lbnQpOwotCQlib29sZWFuIGlzSnNwVmFsdWUgPSBhdHRyLmhhc05lc3RlZFZhbHVlKCk7Ci0JCUxvZ2dlci50cmFjZShmQ2F0ZWdvcnksICJpc0pzcFZhbHVlOiAiICsgaXNKc3BWYWx1ZSk7Ci0JCWFzc2VydFRydWUoaXNKc3BWYWx1ZSk7Ci0JCURvY3VtZW50IGh0bWxEb2MgPSBnZXRIVE1MRG9jKCk7Ci0JCS8vIHRoaXMgdGVzdCB3aWxsIGNhdXNlIGEgInJlZ2lvbiBtYW5hZ2VtZW50IGVycm9yIiB0byBiZQotCQkvLyB0aHJvd24gaW4gcGFyc2VyIChhbmQgaXRzIHN1YnNlcXVlbnQgJ2hhbmRsZVJlZnJlc2gnKS4KLQkJLy8gdGhpcyBpcyAibm9ybWFsIiBpbiB0aGlzIGVycm9yIGNhc2UsIG9mIGFwcGVuZGluZyBhbiBqc3AKLQkJLy8gZWxlbWVudCB0byBhbiBodG1sIGRvY3VtZW50LiBUaGlzIGVycm9yL2V4Y2VwdGlvbiBpcyBub3QKLQkJLy8gbm9ybWFsbHkgcHJpbnRlZCBvdXQsIGJ1dCBpcyBpZiAnZGVidWcnIGlzIHR1cm5lZCBvbi4KLQkJaHRtbERvYy5hcHBlbmRDaGlsZChjb21tb25FbGVtZW50KTsKLQkJaXNKc3BWYWx1ZSA9IGF0dHIuaGFzTmVzdGVkVmFsdWUoKTsKLQkJTG9nZ2VyLnRyYWNlKGZDYXRlZ29yeSwgImlzSnNwVmFsdWU6ICIgKyBpc0pzcFZhbHVlKTsKLQkJYXNzZXJ0RmFsc2UoaXNKc3BWYWx1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbk9ycGhhbkluQm90aFJldmVyc2VkT3JkZXIoKSB7Ci0KLQkJTG9nZ2VyLnRyYWNlKGZDYXRlZ29yeSwgInRlc3ROb25PcnBoYW5JbkJvdGhSZXZlcnNlZE9yZGVyIik7Ci0JCURvY3VtZW50IGh0bWxEb2MgPSBnZXRIVE1MRG9jKCk7Ci0JCUVsZW1lbnQgY29tbW9uRWxlbWVudCA9IG1ha2VFbGVtZW50KGh0bWxEb2MpOwotCQlBdHRySW1wbCBhdHRyID0gKEF0dHJJbXBsKSBjb21tb25FbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoInNyYyIpOwotCQlTdHJpbmcgYXR0clZhbHVlID0gYXR0ci5nZXRWYWx1ZSgpOwotCQlMb2dnZXIudHJhY2UoZkNhdGVnb3J5LCAiYXR0clZhbHVlOiAiICsgYXR0clZhbHVlKTsKLQkJaHRtbERvYy5hcHBlbmRDaGlsZChjb21tb25FbGVtZW50KTsKLQkJYm9vbGVhbiBpc0pzcFZhbHVlID0gYXR0ci5oYXNOZXN0ZWRWYWx1ZSgpOwotCQlMb2dnZXIudHJhY2UoZkNhdGVnb3J5LCAiaXNKc3BWYWx1ZTogIiArIGlzSnNwVmFsdWUpOwotCQlhc3NlcnRGYWxzZShpc0pzcFZhbHVlKTsKLQkJRG9jdW1lbnQganNwRG9jID0gZ2V0SlNQRG9jKCk7Ci0JCS8vIHRoaXMgbGl0dGxlIHRlc3Qgc2hvd3MgaXRzIGltcG9ydGFudCB0bwotCQkvLyBhY3R1YWxseSBjcmVhdGUgdGhlIGVsZW1lbnQgd2l0aCB0aGUgcmlnaHQga2luZCBvZgotCQkvLyBkb2N1bWVudCwgbm90IGp1c3QgYXBwZW5kLgotCQkvLyAoYW5kLCBhcHBlbmQgaXMgbmVlZGVkIHRvbywgYXMgY2FuIGJlIHNlZW4gYnkKLQkJLy8gY29tbWVudGluZyBvdXQgb25lIG9yIHRoZSBvdGhlciBvZiB0aGUgZm9sbG93aW5nCi0JCS8vIHR3byBsaW5lcy4KLQkJY29tbW9uRWxlbWVudCA9IG1ha2VFbGVtZW50KGpzcERvYyk7Ci0JCWpzcERvYy5hcHBlbmRDaGlsZChjb21tb25FbGVtZW50KTsKLQkJLy8KLQkJYXR0ciA9IChBdHRySW1wbCkgY29tbW9uRWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKCJzcmMiKTsKLQkJYXR0clZhbHVlID0gYXR0ci5nZXRWYWx1ZSgpOwotCQlMb2dnZXIudHJhY2UoZkNhdGVnb3J5LCAiYXR0clZhbHVlOiAiICsgYXR0clZhbHVlKTsKLQkJaXNKc3BWYWx1ZSA9IGF0dHIuaGFzTmVzdGVkVmFsdWUoKTsKLQkJTG9nZ2VyLnRyYWNlKGZDYXRlZ29yeSwgImlzSnNwVmFsdWU6ICIgKyBpc0pzcFZhbHVlKTsKLQkJYXNzZXJ0VHJ1ZShpc0pzcFZhbHVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkb0JvdGhUZXN0cygpIHsKLQotCQl0ZXN0Tm9uT3JwaGFuSW5IVE1MRG9jKCk7Ci0JCXRlc3ROb25PcnBoYW5JbkpTUERvYygpOwotCQl0ZXN0Tm9uT3JwaGFuSW5Cb3RoKCk7Ci0JCXRlc3ROb25PcnBoYW5JbkJvdGhSZXZlcnNlZE9yZGVyKCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbEFkYXB0ZXJzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxBZGFwdGVycy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjg5OTZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbEFkYXB0ZXJzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnNzZW1vZGVscXVlcnkuTW9kZWxRdWVyeUFkYXB0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0TW9kZWxBZGFwdGVycyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQTW9kZWwoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IGdldE1vZGVsTWFuYWdlcigpOwotCQlJRE9NTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gKElET01Nb2RlbCkgbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJdHJ5IHsKLQkJCWJvb2xlYW4gdGVzdCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRJZCgpLmVxdWFscyhJTW9kZWxNYW5hZ2VyLlVOTUFOQUdFRF9NT0RFTCk7Ci0JCQlhc3NlcnRUcnVlKHRlc3QpOwotCQkJTW9kZWxRdWVyeUFkYXB0ZXIgbW9kZWxRdWVyeUFkYXB0ZXIgPSAoTW9kZWxRdWVyeUFkYXB0ZXIpIHN0cnVjdHVyZWRNb2RlbC5nZXRBZGFwdGVyKE1vZGVsUXVlcnlBZGFwdGVyLmNsYXNzKTsKLQkJCWFzc2VydE5vdE51bGwoImluaXRpYWwgbW9kZWxRdWVyeUFkYXB0ZXIgc2hvdWxkIG5vdCBiZSBudWxsIiwgbW9kZWxRdWVyeUFkYXB0ZXIpOwotCQkJSVN0cnVjdHVyZWRNb2RlbCBuZXdNb2RlbCA9IHN0cnVjdHVyZWRNb2RlbC5uZXdJbnN0YW5jZSgpOwotCQkJLy8gSURPTURvY3VtZW50IG5ld0RvY3VtZW50ID0gKChJRE9NTW9kZWwpCi0JCQkvLyBuZXdNb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJCS8vIElOb2RlTm90aWZpZXIgbm90aWZpZXIgPSBuZXdEb2N1bWVudDsKLQkJCU1vZGVsUXVlcnlBZGFwdGVyIHJlc3VsdCA9IChNb2RlbFF1ZXJ5QWRhcHRlcikgbmV3TW9kZWwuZ2V0QWRhcHRlcihNb2RlbFF1ZXJ5QWRhcHRlci5jbGFzcyk7Ci0JCQlhc3NlcnROb3ROdWxsKCJuZXdJbnN0YW5jZSBtb2RlbFF1ZXJ5QWRhcHRlciBzaG91bGQgbm90IGJlIG51bGwiLCByZXN1bHQpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQkvLyBldmVuIHRob3VnaCBtb2RlbCBpcyB1bm1hbmFnZWQsIHJlbGVhc2Ugc3RpbGwgcmVxdWlyZWQsIHNpbmNlCi0JCQkvLyBhZGFwdGVyIGZhY3RvcmllcywgZXRjLiwgbWF5IGJlIGRlcGVuZGluZyBvbiBpdC4KLQkJCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCS8vIGlmIGFib3ZlIGNvbXBsZXRlJ3Mgbm9ybWFsbHkgKHdpdGggbm8gZXhjZXB0aW9ucykKLQkJCS8vIGNvbnNpZGVyIHBhc3NlZC4KLQkJCWFzc2VydFRydWUodHJ1ZSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIElNb2RlbE1hbmFnZXIgZ2V0TW9kZWxNYW5hZ2VyKCkgewotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCXJldHVybiBtb2RlbE1hbmFnZXI7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsSW5jbHVkZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbEluY2x1ZGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYzBhNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsSW5jbHVkZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudGxkLnByb3Zpc2lvbmFsLlRMREVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5JSlNQVHJhbnNsYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSlNQVHJhbnNsYXRpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0aW9uQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLnRhZ2xpYmluZGV4LkJ1bmRsZVJlc291cmNlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50bW9kZWwuQ01Ob2RlV3JhcHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLS8qKgotICogVGVzdHMgZm9yIEpTUCBpbmNsdWRlIGRpcmVjdGl2ZXMKLSAqLwotcHVibGljIGNsYXNzIFRlc3RNb2RlbEluY2x1ZGVzIGV4dGVuZHMgVGVzdENhc2UgewotCVN0cmluZyB3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUgPSBudWxsOwotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJU3RyaW5nIG5vbmludGVyYWN0aXZlID0gU3lzdGVtLmdldFByb3BlcnR5KCJ3dHAuYXV0b3Rlc3Qubm9uaW50ZXJhY3RpdmUiKTsKLQkJaWYgKG5vbmludGVyYWN0aXZlICE9IG51bGwpCi0JCQl3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUgPSBub25pbnRlcmFjdGl2ZTsKLQkJU3lzdGVtLnNldFByb3BlcnR5KCJ3dHAuYXV0b3Rlc3Qubm9uaW50ZXJhY3RpdmUiLCAidHJ1ZSIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCWlmICh3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkKLQkJCVN5c3RlbS5zZXRQcm9wZXJ0eSgid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIiwgd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyB0aGUgY3VzdG9tIHRhZyBjb250ZW50IG1vZGVsIHdoZW4gc2luZ2xlIGxpbmUgZnJhZ21lbnRzIGFyZSB1c2VkCi0JICogd2l0aG91dCB0cmFpbGluZyB3aGl0ZSBzcGFjZQotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdENvbnRlbnRNb2RlbFNpbmdsZUxpbmVJbmNsdWRlZEZpbGVXaXRoTm9TcGFjZXNCdXRXaXRoVGFnbGliSW5JbmNsdWRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBwcm9qZWN0TmFtZSA9ICJwcmoxMTk1NzZfYSI7Ci0KLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QocHJvamVjdE5hbWUsIG51bGwsIG51bGwpOwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyBwcm9qZWN0TmFtZSwgIi8iICsgcHJvamVjdE5hbWUpOwotCQlhc3NlcnRUcnVlKCJwcm9qZWN0IGNvdWxkIG5vdCBiZSBjcmVhdGVkIiwgUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKS5leGlzdHMoKSk7Ci0KLQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aCgiL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvYm9keTIuanNwIikpOwotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yUmVhZChmaWxlKTsKLQkJCWFzc2VydFRydWUoIm1vZGVsIGhhcyBubyBjb250ZW50IiwgbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0TGVuZ3RoKCkgPiAwKTsKLQotCQkJRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpIG1vZGVsLmdldEluZGV4ZWRSZWdpb24oNzUpOwotCQkJQ01FbGVtZW50RGVjbGFyYXRpb24gZWQgPSBNb2RlbFF1ZXJ5VXRpbC5nZXRNb2RlbFF1ZXJ5KG1vZGVsKS5nZXRDTUVsZW1lbnREZWNsYXJhdGlvbihlbGVtZW50KTsKLQkJCWFzc2VydFRydWUoIm5vdCBhIHdyYXBwaW5nIGNvbnRlbnQgbW9kZWwgZWxlbWVudCBkZWNsYXJhdGlvbjogIiArIGVkLmdldE5vZGVOYW1lKCksIGVkIGluc3RhbmNlb2YgQ01Ob2RlV3JhcHBlcik7Ci0JCQlhc3NlcnRUcnVlKCJub3QgYSB0YWdsaWIgY29udGVudCBtb2RlbCBlbGVtZW50IGRlY2xhcmF0aW9uOiAiICsgZWQuZ2V0Tm9kZU5hbWUoKSwgKChDTU5vZGVXcmFwcGVyKSBlZCkuZ2V0T3JpZ2luTm9kZSgpIGluc3RhbmNlb2YgVExERWxlbWVudERlY2xhcmF0aW9uKTsKLQkJCVN0cmluZyB0YWdDbGFzc05hbWUgPSAoKFRMREVsZW1lbnREZWNsYXJhdGlvbikgKChDTU5vZGVXcmFwcGVyKSBlZCkuZ2V0T3JpZ2luTm9kZSgpKS5nZXRUYWdjbGFzcygpOwotCQkJYXNzZXJ0Tm90TnVsbCgibm8gdGFnIGNsYXNzIG5hbWUgZm91bmQiLCB0YWdDbGFzc05hbWUpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBWZXJpZnkgaW5jbHVkZWQgZmlsZXMgYXJlIHRyYW5zbGF0ZWQgcHJvcGVybHkgd2hlbiB0aGV5IGNvbnRhaW4gYQotCSAqIG11bHRpcGxlIGxpbmVzCi0JICogCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VHJhbnNsYXRlTXVsdGlMaW5lSW5jbHVkZWRGaWxlV2l0aFNwYWNlc0FuZFNjcmlwdGxldEluSW5jbHVkZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgcHJvamVjdE5hbWUgPSAicHJqMTE5NTc2X2MiOwotCi0JCUJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KHByb2plY3ROYW1lLCBudWxsLCBudWxsKTsKLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy8iICsgcHJvamVjdE5hbWUsICIvIiArIHByb2plY3ROYW1lKTsKLQkJYXNzZXJ0VHJ1ZSgicHJvamVjdCBjb3VsZCBub3QgYmUgY3JlYXRlZCIsIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSkuZXhpc3RzKCkpOwotCi0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoIi8iICsgcHJvamVjdE5hbWUgKyAiL1dlYkNvbnRlbnQvYm9keTMuanNwIikpOwotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yUmVhZChmaWxlKTsKLQkJCWFzc2VydFRydWUoIm1vZGVsIGhhcyBubyBjb250ZW50IiwgbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0TGVuZ3RoKCkgPiAwKTsKLQotCQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeSBmYWN0b3J5ID0gbmV3IEpTUFRyYW5zbGF0aW9uQWRhcHRlckZhY3RvcnkoKTsKLQkJCW1vZGVsLmdldEZhY3RvcnlSZWdpc3RyeSgpLmFkZEZhY3RvcnkoZmFjdG9yeSk7Ci0KLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKU1BUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCQlTdHJpbmcgc291cmNlID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpLmdldEphdmFUZXh0KCk7Ci0JCQlhc3NlcnRUcnVlKCJzY3JpcHRsZXQgd2l0aCB2YXJpYWJsZSBkZWNsYXJhdGlvbiBub3QgZm91bmRcbiIgKyBzb3VyY2UsIHNvdXJjZS5pbmRleE9mKCJqYXZhLnV0aWwuRGF0ZSBoZWFkZXJEYXRlIikgPiAtMSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFZlcmlmeSBpbmNsdWRlZCBmaWxlcyBhcmUgdHJhbnNsYXRlZCBwcm9wZXJseSB3aGVuIHRoZXkgY29udGFpbiBhCi0JICogc2luZ2xlIGxpbmUgYW5kIGRvY3VtZW50IHJlZ2lvbiBhbmQgbm8gdHJhaWxpbmcgd2hpdGUgc3BhY2UuCi0JICogCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VHJhbnNsYXRlU2luZ2xlTGluZUluY2x1ZGVkRmlsZVdpdGhOb1NwYWNlc0J1dFNjcmlwdGxldEluSW5jbHVkZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgcHJvamVjdE5hbWUgPSAicHJqMTE5NTc2X2IiOwotCi0JCUJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KHByb2plY3ROYW1lLCBudWxsLCBudWxsKTsKLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy8iICsgcHJvamVjdE5hbWUsICIvIiArIHByb2plY3ROYW1lKTsKLQkJYXNzZXJ0VHJ1ZSgicHJvamVjdCBjb3VsZCBub3QgYmUgY3JlYXRlZCIsIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSkuZXhpc3RzKCkpOwotCi0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoIi8iICsgcHJvamVjdE5hbWUgKyAiL1dlYkNvbnRlbnQvYm9keTMuanNwIikpOwotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yUmVhZChmaWxlKTsKLQkJCWFzc2VydFRydWUoIm1vZGVsIGhhcyBubyBjb250ZW50IiwgbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0TGVuZ3RoKCkgPiAwKTsKLQotCQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeSBmYWN0b3J5ID0gbmV3IEpTUFRyYW5zbGF0aW9uQWRhcHRlckZhY3RvcnkoKTsKLQkJCW1vZGVsLmdldEZhY3RvcnlSZWdpc3RyeSgpLmFkZEZhY3RvcnkoZmFjdG9yeSk7Ci0KLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKU1BUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCQlTdHJpbmcgc291cmNlID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpLmdldEphdmFUZXh0KCk7Ci0JCQlhc3NlcnRUcnVlKCJzY3JpcHRsZXQgd2l0aCB2YXJpYWJsZSBkZWNsYXJhdGlvbiBub3QgZm91bmQiLCBzb3VyY2UuaW5kZXhPZigiamF2YS51dGlsLkRhdGUgaGVhZGVyRGF0ZSIpID4gLTEpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsUmVsZWFzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsUmVsZWFzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjEzNzYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbFJlbGVhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi1wdWJsaWMgY2xhc3MgVGVzdE1vZGVsUmVsZWFzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQotCQotCQotCXB1YmxpYyB2b2lkIHRlc3RKU1BNb2RlbCgpIHsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBnZXRNb2RlbE1hbmFnZXIoKTsKLQkJSURPTU1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IChJRE9NTW9kZWwpIG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWJvb2xlYW4gdGVzdCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRJZCgpLmVxdWFscyhJTW9kZWxNYW5hZ2VyLlVOTUFOQUdFRF9NT0RFTCk7Ci0JCWFzc2VydFRydWUodGVzdCk7Ci0JCS8vIGV2ZW4gdGhvdWdoIG1vZGVsIGlzIHVubWFuYWdlZCwgcmVsZWFzZSBzdGlsbCByZXF1aXJlZCwgc2luY2UgCi0JCS8vIGFkYXB0ZXIgZmFjdG9yaWVzLCBldGMuLCBtYXkgYmUgZGVwZW5kaW5nIG9uIGl0LiAKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkvLyBpZiBhYm92ZSBjb21wbGV0ZSdzIG5vcm1hbGx5ICh3aXRoIG5vIGV4Y2VwdGlvbnMpIAotCQkvLyBjb25zaWRlciBwYXNzZWQuIAotCQlhc3NlcnRUcnVlKHRydWUpOwotCX0KLQotCXByaXZhdGUgSU1vZGVsTWFuYWdlciBnZXRNb2RlbE1hbmFnZXIoKSB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJcmV0dXJuIG1vZGVsTWFuYWdlcjsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxXaXRoTm9GaWxlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxXaXRoTm9GaWxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NGJlZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsV2l0aE5vRmlsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLkpTUENvcmVUZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi1wdWJsaWMgY2xhc3MgVGVzdE1vZGVsV2l0aE5vRmlsZSBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BNb2RlbCgpIHsKLQkJSURPTU1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlib29sZWFuIHRlc3QgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0SWQoKS5lcXVhbHMoSU1vZGVsTWFuYWdlci5VTk1BTkFHRURfTU9ERUwpOwotCQlhc3NlcnRUcnVlKHRlc3QpOwotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCWFzc2VydFRydWUodHJ1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzExNjA2Nl8xKCkgewotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCi0JCS8vIENyZWF0ZSBuZXcgcHJvamVjdAotCQlJUHJvamVjdCBwcm9qZWN0ID0gY3JlYXRlU2ltcGxlUHJvamVjdCgiYnVnMTE2MDY2XzEiLCBudWxsLCBudWxsKTsKLQotCQlJRmlsZSB0ZXN0RmlsZSA9IHByb2plY3QuZ2V0RmlsZSgibm9uRXhpc3RhbnQuanNwIik7Ci0JCWFzc2VydEZhbHNlKCJub25FeGlzdGFudC5qc3AgdGVzdCBmaWxlIGFscmVhZHkgZXhpc3RzIChub3QgYSBjbGVhbiB3b3Jrc3BhY2UpPyIsIHRlc3RGaWxlLmV4aXN0cygpKTsKLQotCQkvLyBHZXQgdGhlIG1vZGVsIGFuZCBzZXQgYSByZWZlcmVuY2UgdG8gdGhhdCB0YWcgbGlicmFyeSBpbnRvIGl0Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXROZXdNb2RlbEZvckVkaXQodGVzdEZpbGUsIGZhbHNlKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGdldCBuZXcgbW9kZWwgZm9yICIgKyB0ZXN0RmlsZS5nZXRGdWxsUGF0aCgpLCBtb2RlbCk7Ci0JCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoIjwlQHRhZ2xpYiBwcmVmaXg9XCJ0YWdkZXBlbmRlbnRcIiB1cmk9XCJ0YWdkZXBlbmRlbnRcIj5cbjx0YWdkZXBlbmRlbnQ6Y29kZT4gPDw8IDwvdGFnZGVwZW5kZW50OmNvZGU+Iik7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCdWcxMTYwNjZfMigpIHsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQotCQkvLyBDcmVhdGUgbmV3IHByb2plY3QKLQkJSVByb2plY3QgcHJvamVjdCA9IGNyZWF0ZVNpbXBsZVByb2plY3QoImJ1ZzExNjA2Nl8yIiwgbnVsbCwgbnVsbCk7Ci0JCS8vIENvcHkgYSBUTEQgaW50byB0aGUgcHJvamVjdAotCQlJRmlsZSB0bGQgPSBjb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLzExNjA2Ni90YWdkZXAudGxkIiwgIi9idWcxMTYwNjZfMi90YWdkZXAudGxkIik7Ci0JCWFzc2VydE5vdE51bGwoIlRMRCBlbnRyeSB3YXMgbm90IGNvcGllZCBwcm9wZXJseSIsIHRsZCk7Ci0JCWFzc2VydFRydWUoIlRMRCBJRmlsZSBkb2VzIG5vdCBleGlzdCIsIHRsZC5leGlzdHMoKSk7Ci0KLQkJSUZpbGUgdGVzdEZpbGUgPSBwcm9qZWN0LmdldEZpbGUoIm5vbkV4aXN0YW50LmpzcCIpOwotCQlhc3NlcnRGYWxzZSgibm9uRXhpc3RhbnQuanNwIHRlc3QgZmlsZSBhbHJlYWR5IGV4aXN0cyAobm90IGEgY2xlYW4gd29ya3NwYWNlKT8iLCB0ZXN0RmlsZS5leGlzdHMoKSk7Ci0KLQkJLy8gR2V0IHRoZSBtb2RlbCBhbmQgc2V0IGEgcmVmZXJlbmNlIHRvIHRoYXQgdGFnIGxpYnJhcnkgaW50byBpdAotCQl0cnkgewotCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TmV3TW9kZWxGb3JFZGl0KHRlc3RGaWxlLCBmYWxzZSk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZG4ndCBnZXQgbmV3IG1vZGVsIGZvciAiICsgdGVzdEZpbGUuZ2V0RnVsbFBhdGgoKSwgbW9kZWwpOwotCQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KCI8JUB0YWdsaWIgcHJlZml4PVwidGFnZGVwZW5kZW50XCIgdXJpPVwidGFnZGVwZW5kZW50XCI+XG48dGFnZGVwZW5kZW50OmNvZGU+IDw8PCA8L3RhZ2RlcGVuZGVudDpjb2RlPiIpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIElGaWxlIGNvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoU3RyaW5nIGVudHJ5bmFtZSwgU3RyaW5nIGZ1bGxQYXRoKSB7Ci0JCUlGaWxlIGZpbGUgPSBudWxsOwotCQlVUkwgZW50cnkgPSBKU1BDb3JlVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KGVudHJ5bmFtZSk7Ci0JCWlmIChlbnRyeSAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCWJ5dGVbXSBiID0gbmV3IGJ5dGVbMjA0OF07Ci0JCQkJSW5wdXRTdHJlYW0gaW5wdXQgPSBlbnRyeS5vcGVuU3RyZWFtKCk7Ci0JCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCQlpbnQgaSA9IC0xOwotCQkJCXdoaWxlICgoaSA9IGlucHV0LnJlYWQoYikpID4gLTEpIHsKLQkJCQkJb3V0cHV0LndyaXRlKGIsIDAsIGkpOwotCQkJCX0KLQkJCQlmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZ1bGxQYXRoKSk7Ci0JCQkJaWYgKGZpbGUgIT0gbnVsbCkgewotCQkJCQlmaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBmaWxlOwotCX0KLQotCXByaXZhdGUgSVByb2plY3QgY3JlYXRlU2ltcGxlUHJvamVjdChTdHJpbmcgbmFtZSwgSVBhdGggbG9jYXRpb24sIFN0cmluZ1tdIG5hdHVyZUlkcykgewotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihuYW1lKTsKLQkJaWYgKGxvY2F0aW9uICE9IG51bGwpIHsKLQkJCWRlc2NyaXB0aW9uLnNldExvY2F0aW9uKGxvY2F0aW9uKTsKLQkJfQotCQlpZiAobmF0dXJlSWRzICE9IG51bGwpIHsKLQkJCWRlc2NyaXB0aW9uLnNldE5hdHVyZUlkcyhuYXR1cmVJZHMpOwotCQl9Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QobmFtZSk7Ci0JCXRyeSB7Ci0JCQlwcm9qZWN0LmNyZWF0ZShkZXNjcmlwdGlvbiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQlhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3Q7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3NvdXJjZS9KU1BUb2tlbml6ZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9zb3VyY2UvSlNQVG9rZW5pemVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTliNmY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3NvdXJjZS9KU1BUb2tlbml6ZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuc291cmNlOwotCi0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wYXJzZXIuaW50ZXJuYWwuSlNQVG9rZW5pemVyOwotCi1wdWJsaWMgY2xhc3MgSlNQVG9rZW5pemVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIEpTUFRva2VuaXplciB0b2tlbml6ZXIgPSBudWxsOwotCi0JcHJpdmF0ZSB2b2lkIHJlc2V0KFJlYWRlciBpbikgewotCQl0b2tlbml6ZXIucmVzZXQoaW4pOwotCX0KLQotCXByaXZhdGUgdm9pZCByZXNldChTdHJpbmcgZmlsZW5hbWUpIHsKLQkJUmVhZGVyIGZpbGVSZWFkZXIgPSBudWxsOwotCQl0cnkgewotCQkJZmlsZVJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpLCAidXRmOCIpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCX0KLQkJaWYgKGZpbGVSZWFkZXIgPT0gbnVsbCkgewotCQkJZmFpbCgpOwotCQl9Ci0JCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihmaWxlUmVhZGVyKTsKLQkJcmVzZXQocmVhZGVyKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQl0b2tlbml6ZXIgPSBuZXcgSlNQVG9rZW5pemVyKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJdG9rZW5pemVyID0gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MTQ0ODA3X0F0dHJOYW1lKCkgewotCQlTdHJpbmcgaW5wdXQgPSAiIjsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCA0MDA7IGkrKykgewotCQkJaW5wdXQgPSBpbnB1dCArPSAiPGEgIjsKLQkJfQotCQl0cnkgewotCQkJcmVzZXQobmV3IFN0cmluZ1JlYWRlcihpbnB1dCkpOwotCQkJYXNzZXJ0VHJ1ZSgiZW1wdHkgaW5wdXQiLCB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCkgIT0gbnVsbCk7Ci0JCQl3aGlsZSAodG9rZW5pemVyLmdldE5leHRUb2tlbigpICE9IG51bGwpIHsKLQkJCQkvLyByZWFsbHksIHdlIGp1c3Qgd2FudCB0byBsb29wCi0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDE0NDgwN19BdHRyVmFsdWUoKSB7Ci0JCVN0cmluZyBpbnB1dCA9ICI8YSBiPSI7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgNDAwOyBpKyspIHsKLQkJCWlucHV0ID0gaW5wdXQgKz0gIjxhICI7Ci0JCX0KLQkJdHJ5IHsKLQkJCXJlc2V0KG5ldyBTdHJpbmdSZWFkZXIoaW5wdXQpKTsKLQkJCWFzc2VydFRydWUoImVtcHR5IGlucHV0IiwgdG9rZW5pemVyLmdldE5leHRUb2tlbigpICE9IG51bGwpOwotCQkJd2hpbGUgKHRva2VuaXplci5nZXROZXh0VG9rZW4oKSAhPSBudWxsKSB7Ci0JCQkJLy8gcmVhbGx5LCB3ZSBqdXN0IHdhbnQgdG8gbG9vcAotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QxNDQ4MDdfRXF1YWxzKCkgewotCQlTdHJpbmcgaW5wdXQgPSAiPGEgYiI7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgNDAwOyBpKyspIHsKLQkJCWlucHV0ID0gaW5wdXQgKz0gIjxhICI7Ci0JCX0KLQkJdHJ5IHsKLQkJCXJlc2V0KG5ldyBTdHJpbmdSZWFkZXIoaW5wdXQpKTsKLQkJCWFzc2VydFRydWUoImVtcHR5IGlucHV0IiwgdG9rZW5pemVyLmdldE5leHRUb2tlbigpICE9IG51bGwpOwotCQkJd2hpbGUgKHRva2VuaXplci5nZXROZXh0VG9rZW4oKSAhPSBudWxsKSB7Ci0JCQkJLy8gcmVhbGx5LCB3ZSBqdXN0IHdhbnQgdG8gbG9vcAotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRDb21tZW50KCkgewotCQlyZXNldCgianNwY29tbWVudDAxLmpzcCIpOwotCQl0cnkgewotCQkJYXNzZXJ0VHJ1ZSgiZW1wdHkgaW5wdXQiLCB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCkgIT0gbnVsbCk7Ci0JCQl3aGlsZSAodG9rZW5pemVyLmdldE5leHRUb2tlbigpICE9IG51bGwpIHsKLQkJCQkvLyByZWFsbHksIHdlIGp1c3Qgd2FudCB0byBsb29wCi0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJfQotCQljYXRjaCAoU3RhY2tPdmVyZmxvd0Vycm9yIGUpIHsKLQkJCWZhaWwoZS5nZXRNZXNzYWdlKCkpOwotCQkJcmV0dXJuOwotCQl9Ci0JCS8vIHN1Y2Nlc3MgaWYgU3RhY2tPdmVyRmxvd0Vycm9yIGRvZXMgbm90IG9jY3VyIHdpdGggdG9rZW5pemVyLgotCQlhc3NlcnRUcnVlKHRydWUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3NvdXJjZS9qc3Bjb21tZW50MDEuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvc291cmNlL2pzcGNvbW1lbnQwMS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYThjMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvc291cmNlL2pzcGNvbW1lbnQwMS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMjIgKzAsMCBAQAotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgotPCUtLSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgLS0lPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdGFnbGliaW5kZXgvQnVuZGxlUmVzb3VyY2VVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy90YWdsaWJpbmRleC9CdW5kbGVSZXNvdXJjZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI1OTM5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy90YWdsaWJpbmRleC9CdW5kbGVSZXNvdXJjZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy50YWdsaWJpbmRleDsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJ1bm5hYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLkpTUENvcmVUZXN0c1BsdWdpbjsKLQotcHVibGljIGNsYXNzIEJ1bmRsZVJlc291cmNlVXRpbCB7Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgX2NvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgcm9vdEVudHJ5LCBmaW5hbCBTdHJpbmcgZnVsbFRhcmdldFBhdGgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJRW51bWVyYXRpb24gZW50cmllcyA9IEpTUENvcmVUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnlQYXRocyhyb290RW50cnkpOwotCQl3aGlsZSAoZW50cmllcyAhPSBudWxsICYmIGVudHJpZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLQkJCVN0cmluZyBlbnRyeVBhdGggPSBlbnRyaWVzLm5leHRFbGVtZW50KCkudG9TdHJpbmcoKTsKLQkJCVN0cmluZyB0YXJnZXRQYXRoID0gbmV3IFBhdGgoZnVsbFRhcmdldFBhdGggKyAiLyIgKyBlbnRyeVBhdGguc3Vic3RyaW5nKHJvb3RFbnRyeS5sZW5ndGgoKSkpLnRvU3RyaW5nKCk7Ci0JCQlpZiAoZW50cnlQYXRoLmVuZHNXaXRoKCIvIikpIHsKLQkJCQlJRm9sZGVyIGZvbGRlciA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0Rm9sZGVyKG5ldyBQYXRoKHRhcmdldFBhdGgpKTsKLQkJCQlpZiAoIWZvbGRlci5leGlzdHMoKSkgewotCQkJCQlmb2xkZXIuY3JlYXRlKHRydWUsIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCX0KLQkJCQlfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGVudHJ5UGF0aCwgdGFyZ2V0UGF0aCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShlbnRyeVBhdGgsIHRhcmdldFBhdGgpOwotCQkJfQotCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKGVudHJ5UGF0aCArICIgLT4gIiArIHRhcmdldFBhdGgpOwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJRmlsZSBfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShTdHJpbmcgZW50cnluYW1lLCBTdHJpbmcgZnVsbFBhdGgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IG51bGw7Ci0JCVVSTCBlbnRyeSA9IEpTUENvcmVUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoZW50cnluYW1lKTsKLQkJaWYgKGVudHJ5ICE9IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJYnl0ZVtdIGIgPSBuZXcgYnl0ZVsyMDQ4XTsKLQkJCQlJbnB1dFN0cmVhbSBpbnB1dCA9IGVudHJ5Lm9wZW5TdHJlYW0oKTsKLQkJCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJCWludCBpID0gLTE7Ci0JCQkJd2hpbGUgKChpID0gaW5wdXQucmVhZChiKSkgPiAtMSkgewotCQkJCQlvdXRwdXQud3JpdGUoYiwgMCwgaSk7Ci0JCQkJfQotCQkJCWZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZnVsbFBhdGgpKTsKLQkJCQlpZiAoZmlsZSAhPSBudWxsKSB7Ci0JCQkJCWlmICghZmlsZS5leGlzdHMoKSkgewotCQkJCQkJZmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG91dHB1dC50b0J5dGVBcnJheSgpKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQlmaWxlLnNldENvbnRlbnRzKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShvdXRwdXQudG9CeXRlQXJyYXkoKSksIHRydWUsIGZhbHNlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jawotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jawotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZpbGU7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgcm9vdEVudHJ5LCBmaW5hbCBTdHJpbmcgZnVsbFRhcmdldFBhdGgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSVdvcmtzcGFjZVJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQlfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKHJvb3RFbnRyeSwgZnVsbFRhcmdldFBhdGgpOwotCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5jaGVja3BvaW50KFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5pc0F1dG9CdWlsZGluZygpKTsKLQkJCX0KLQkJfTsKLQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJRmlsZSBjb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyBlbnRyeW5hbWUsIGZpbmFsIFN0cmluZyBmdWxsUGF0aCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlmaW5hbCBJRmlsZSBmaWxlW10gPSBuZXcgSUZpbGVbMV07Ci0JCUlXb3Jrc3BhY2VSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBJV29ya3NwYWNlUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJZmlsZVswXSA9IF9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGVudHJ5bmFtZSwgZnVsbFBhdGgpOwotCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5jaGVja3BvaW50KFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5pc0F1dG9CdWlsZGluZygpKTsKLQkJCX0KLQkJfTsKLQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCXJldHVybiBmaWxlWzBdOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBzaW1wbGUgcHJvamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZSAtCi0JICogICAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdAotCSAqIEBwYXJhbSBsb2NhdGlvbiAtCi0JICogICAgICAgICAgICB0aGUgbG9jYXRpb24gb2YgdGhlIHByb2plY3QsIG9yIG51bGwgaWYgdGhlIGRlZmF1bHQgb2YKLQkgKiAgICAgICAgICAgICIvbmFtZSIgd2l0aGluIHRoZSB3b3Jrc3BhY2UgaXMgdG8gYmUgdXNlZAotCSAqIEBwYXJhbSBuYXR1cmVJZHMgLQotCSAqICAgICAgICAgICAgYW4gYXJyYXkgb2YgbmF0dXJlcyBJRHMgdG8gc2V0IG9uIHRoZSBwcm9qZWN0LCBudWxsIGlmIG5vbmUKLQkgKiAgICAgICAgICAgIHNob3VsZCBiZSBzZXQKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJUHJvamVjdCBjcmVhdGVTaW1wbGVQcm9qZWN0KFN0cmluZyBuYW1lLCBJUGF0aCBsb2NhdGlvbiwgU3RyaW5nW10gbmF0dXJlSWRzKSB7Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKG5hbWUpOwotCQlpZiAobG9jYXRpb24gIT0gbnVsbCkgewotCQkJZGVzY3JpcHRpb24uc2V0TG9jYXRpb24obG9jYXRpb24pOwotCQl9Ci0JCWlmIChuYXR1cmVJZHMgIT0gbnVsbCkgewotCQkJZGVzY3JpcHRpb24uc2V0TmF0dXJlSWRzKG5hdHVyZUlkcyk7Ci0JCX0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChuYW1lKTsKLQkJdHJ5IHsKLQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBwcm9qZWN0OwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3RhZ2xpYmluZGV4L1Rlc3RJbmRleC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdGFnbGliaW5kZXgvVGVzdEluZGV4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MWI0ZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdGFnbGliaW5kZXgvVGVzdEluZGV4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy50YWdsaWJpbmRleDsKLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50YWdsaWIuSVRhZ2xpYlJlY29yZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGFnbGliLklVUkxSZWNvcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRhZ2xpYi5UYWdsaWJJbmRleDsKLQotLyoqCi0gKiBUZXN0cyBmb3IgdGhlIFRhZ2xpYkluZGV4LgotICovCi1wdWJsaWMgY2xhc3MgVGVzdEluZGV4IGV4dGVuZHMgVGVzdENhc2UgewotCVN0cmluZyB3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUgPSBudWxsOwotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJU3RyaW5nIG5vbmludGVyYWN0aXZlID0gU3lzdGVtLmdldFByb3BlcnR5KCJ3dHAuYXV0b3Rlc3Qubm9uaW50ZXJhY3RpdmUiKTsKLQkJaWYgKG5vbmludGVyYWN0aXZlICE9IG51bGwpCi0JCQl3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUgPSBub25pbnRlcmFjdGl2ZTsKLQkJU3lzdGVtLnNldFByb3BlcnR5KCJ3dHAuYXV0b3Rlc3Qubm9uaW50ZXJhY3RpdmUiLCAidHJ1ZSIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCWlmICh3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkKLQkJCVN5c3RlbS5zZXRQcm9wZXJ0eSgid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIiwgd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVnMTE4MjUxX2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHVybCA9ICJodHRwOi8vZXhhbXBsZS5jb20vc2FtcGxlMl9mb3JfMTE4MjUxLWUiOwotCi0JCS8vIENyZWF0ZSBuZXcgcHJvamVjdAotCQlJUHJvamVjdCBwcm9qZWN0ID0gQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QoImJ1Z18xMTgyNTEtZSIsIG51bGwsIG51bGwpOwotCQlhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotCQlJVGFnbGliUmVjb3JkW10gcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi9idWdfMTE4MjUxLWUiKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHRhZ2xpYiByZWNvcmRzIGZvdW5kIGJlZm9yZSB1bnBhY2tpbmciLCAwLCByZWNvcmRzLmxlbmd0aCk7Ci0KLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUiLCAiL2J1Z18xMTgyNTEtZSIpOwotCQkvLyBidWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKLQkJLy8gYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkCi0JCS8vIGJ1Z18xMTgyNTEtZS9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCi0JCS8vIGJ1Z18xMTgyNTEtZS9XZWJDb250ZW50L3Rlc3QxLmpzcAotCQkvLyBidWdfMTE4MjUxLWUvLmNsYXNzcGF0aAotCQkvLyBidWdfMTE4MjUxLWUvLnByb2plY3QKLQkJSVRhZ2xpYlJlY29yZCB0YWdsaWJSZWNvcmQgPSBUYWdsaWJJbmRleC5yZXNvbHZlKCIvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvdGVzdDEuanNwIiwgdXJsLCBmYWxzZSk7Ci0JCWFzc2VydE5vdE51bGwoInJlY29yZCBmb3VuZCBmb3IgIiArIHVybCwgdGFnbGliUmVjb3JkKTsKLQotCQlyZWNvcmRzID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50LyIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgdGFnbGliIHJlY29yZHMgZm91bmQgYWZ0ZXIgdW5wYWNraW5nIGJ1dCBiZWZvcmUgY29weWluZyIsIDIsIHJlY29yZHMubGVuZ3RoKTsKLQotCQkvKgotCQkgKiBpbmNyZWFzZSBieSA8Yj5vbmU8L2I+IGZvciB0aGUgVVJMIHRvIHRoZSBUTEQgaW4gdGhlIGphciAob25lCi0JCSAqIGltcGxpY2l0IGZvciB0aGUgVExEIGluIHRoZSBqYXIgYXMgYSByZXNvdXJjZSBhbmQgYW5vdGhlciBpbXBsaWNpdAotCQkgKiBvdmVyd3JpdGluZyBpdCB3aXRoIHRoZSBzYW1lIFVSTCB0byB0aGUgVExEIGluIHRoZSBqYXIgb24gdGhlCi0JCSAqIGNsYXNzcGF0aCkKLQkJICovCi0JCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzL2J1Z18xMTgyNTEtc2FtcGxlL3NhbXBsZV90bGQuamFyIiwgIi9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL3NhbXBsZV90bGQuamFyIik7Ci0KLQkJdXJsID0gImh0dHA6Ly9leGFtcGxlLmNvbS9zYW1wbGUtdGFnbGliIjsKLQkJdGFnbGliUmVjb3JkID0gVGFnbGliSW5kZXgucmVzb2x2ZSgiL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L3Rlc3QxLmpzcCIsIHVybCwgZmFsc2UpOwotCQlhc3NlcnROb3ROdWxsKCJubyByZWNvcmQgZm91bmQgZm9yICIgKyB1cmwsIHRhZ2xpYlJlY29yZCk7Ci0KLQkJcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi9idWdfMTE4MjUxLWUvV2ViQ29udGVudC8iKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHRhZ2xpYiByZWNvcmRzIGZvdW5kIGFmdGVyIGNvcHlpbmciLCAzLCByZWNvcmRzLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzExODI1MV9mKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIENyZWF0ZSBuZXcgcHJvamVjdAotCQlJUHJvamVjdCBwcm9qZWN0ID0gQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QoImJ1Z18xMTgyNTEtZiIsIG51bGwsIG51bGwpOwotCQlhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotCQlJVGFnbGliUmVjb3JkW10gcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi9idWdfMTE4MjUxLWYiKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHRhZ2xpYiByZWNvcmRzIGZvdW5kIGJlZm9yZSB1bnBhY2tpbmciLCAwLCByZWNvcmRzLmxlbmd0aCk7Ci0KLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYiLCAiL2J1Z18xMTgyNTEtZiIpOwotCQkvLyBidWdfMTE4MjUxLWYvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKLQkJLy8gYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkCi0JCS8vIGJ1Z18xMTgyNTEtZi9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCi0JCS8vIGJ1Z18xMTgyNTEtZi9XZWJDb250ZW50L3Rlc3QxLmpzcAotCQkvLyBidWdfMTE4MjUxLWYvLmNsYXNzcGF0aAotCQkvLyBidWdfMTE4MjUxLWYvLnByb2plY3QKLQkJU3RyaW5nIHVybCA9ICJodHRwOi8vZXhhbXBsZS5jb20vc2FtcGxlLXRhZ2xpYiI7Ci0JCUlUYWdsaWJSZWNvcmQgdGFnbGliUmVjb3JkID0gVGFnbGliSW5kZXgucmVzb2x2ZSgiL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L3Rlc3QxLmpzcCIsIHVybCwgZmFsc2UpOwotCQlhc3NlcnROdWxsKCJyZWNvcmQgZm91bmQgZm9yICIgKyB1cmwsIHRhZ2xpYlJlY29yZCk7Ci0KLQkJcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi9idWdfMTE4MjUxLWYvV2ViQ29udGVudC8iKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHRhZ2xpYiByZWNvcmRzIGZvdW5kIGFmdGVyIHVucGFja2luZyBidXQgYmVmb3JlIGNvcHlpbmciLCAzLCByZWNvcmRzLmxlbmd0aCk7Ci0KLQkJLyoKLQkJICogaW5jcmVhc2UgYnkgPGI+b25lPC9iPiBmb3IgdGhlIFVSTCB0byB0aGUgVExEIGluIHRoZSBqYXIgKG9uZQotCQkgKiBpbXBsaWNpdCBmb3IgdGhlIFRMRCBpbiB0aGUgamFyIGFzIGEgcmVzb3VyY2UgYW5kIGFub3RoZXIgaW1wbGljaXQKLQkJICogb3ZlcndyaXRpbmcgaXQgd2l0aCB0aGUgc2FtZSBVUkwgdG8gdGhlIFRMRCBpbiB0aGUgamFyIG9uIHRoZQotCQkgKiBjbGFzc3BhdGgpCi0JCSAqLwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy9idWdfMTE4MjUxLXNhbXBsZS9zYW1wbGVfdGxkLmphciIsICIvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvc2FtcGxlX3RsZC5qYXIiKTsKLQotCQl0YWdsaWJSZWNvcmQgPSBUYWdsaWJJbmRleC5yZXNvbHZlKCIvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvdGVzdDEuanNwIiwgdXJsLCBmYWxzZSk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIHJlY29yZCBmb3VuZCBmb3IgIiArIHVybCwgdGFnbGliUmVjb3JkKTsKLQkJYXNzZXJ0VHJ1ZSgicmVjb3JkIGZvdW5kIHdhcyB3cm9uZyB0eXBlIiwgdGFnbGliUmVjb3JkIGluc3RhbmNlb2YgSVVSTFJlY29yZCk7Ci0JCWFzc2VydE5vdE51bGwoInJlY29yZCBoYXMgbm8gYmFzZSBsb2NhdGlvbiIsICgoSVVSTFJlY29yZCkgdGFnbGliUmVjb3JkKS5nZXRCYXNlTG9jYXRpb24oKSk7Ci0JCWFzc2VydEVxdWFscygicmVjb3JkIGhhcyB3cm9uZyBzaG9ydCBuYW1lIiwgInNhbXBsZSIsICgoSVVSTFJlY29yZCkgdGFnbGliUmVjb3JkKS5nZXRTaG9ydE5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygicmVjb3JkIGhhcyB3cm9uZyBVUkkiLCB1cmwsICgoSVVSTFJlY29yZCkgdGFnbGliUmVjb3JkKS5nZXRVUkkoKSk7Ci0JCVVSTCByZWNvcmRVUkwgPSAoKElVUkxSZWNvcmQpIHRhZ2xpYlJlY29yZCkuZ2V0VVJMKCk7Ci0JCWFzc2VydE5vdE51bGwoInJlY29yZCBoYXMgbm8gVVJMIiwgcmVjb3JkVVJMKTsKLQkJYXNzZXJ0VHJ1ZSgicmVjb3JkIGhhcyB3cm9uZyBVUkwiLCByZWNvcmRVUkwudG9TdHJpbmcoKS5sZW5ndGgoKSA+IDQpOwotCQlhc3NlcnRFcXVhbHMoInJlY29yZCBoYXMgd3JvbmcgVVJMIHByb3RvY29sIiwgImphcjoiLCByZWNvcmRVUkwudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgNCkpOwotCQlhc3NlcnRFcXVhbHMoInJlY29yZCBoYXMgd3JvbmcgVVJMIiwgIi9idWdfMTE4MjUxLWYvV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciEvZm9sZGVyL3NhbXBsZV9mb3JfMTE4MjUxLnRsZCIsIHJlY29yZFVSTC50b1N0cmluZygpLnN1YnN0cmluZyhyZWNvcmRVUkwudG9TdHJpbmcoKS5sZW5ndGgoKSAtIDgxKSk7Ci0KLQkJcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi9idWdfMTE4MjUxLWYvV2ViQ29udGVudC8iKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHRhZ2xpYiByZWNvcmRzIGZvdW5kIGFmdGVyIGNvcHlpbmciLCA0LCByZWNvcmRzLmxlbmd0aCk7Ci0JCXJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQiKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHRhZ2xpYiByZWNvcmRzIGZvdW5kIGFmdGVyIGNvcHlpbmciLCA0LCByZWNvcmRzLmxlbmd0aCk7Ci0JCXJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORiIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgdGFnbGliIHJlY29yZHMgZm91bmQgYWZ0ZXIgY29weWluZyIsIDQsIHJlY29yZHMubGVuZ3RoKTsKLQkJcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi9idWdfMTE4MjUxLWYvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwiKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHRhZ2xpYiByZWNvcmRzIGZvdW5kIGFmdGVyIGNvcHlpbmciLCA0LCByZWNvcmRzLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzExODI1MV9nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIENyZWF0ZSBuZXcgcHJvamVjdAotCQlJUHJvamVjdCBwcm9qZWN0ID0gQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QoImJ1Z18xMTgyNTEtZyIsIG51bGwsIG51bGwpOwotCQlhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotCQlJVGFnbGliUmVjb3JkW10gcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi9idWdfMTE4MjUxLWciKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHRhZ2xpYiByZWNvcmRzIGZvdW5kIGJlZm9yZSB1bnBhY2tpbmciLCAwLCByZWNvcmRzLmxlbmd0aCk7Ci0KLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWciLCAiL2J1Z18xMTgyNTEtZyIpOwotCQkvLyBidWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORi93ZWIueG1sCi0JCS8vIGJ1Z18xMTgyNTEtZy9XZWIgQ29udGVudC9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQKLQkJLy8gYnVnXzExODI1MS1nL1dlYiBDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCi0JCS8vIGJ1Z18xMTgyNTEtZy9XZWIgQ29udGVudC90ZXN0MS5qc3AKLQkJLy8gYnVnXzExODI1MS1nLy5jbGFzc3BhdGgKLQkJLy8gYnVnXzExODI1MS1nLy5wcm9qZWN0Ci0JCVN0cmluZyB1cmwgPSAiaHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZS10YWdsaWIiOwotCQlJVGFnbGliUmVjb3JkIHRhZ2xpYlJlY29yZCA9IFRhZ2xpYkluZGV4LnJlc29sdmUoIi9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvdGVzdDEuanNwIiwgdXJsLCBmYWxzZSk7Ci0JCWFzc2VydE51bGwoInJlY29yZCBmb3VuZCBmb3IgIiArIHVybCwgdGFnbGliUmVjb3JkKTsKLQotCQlyZWNvcmRzID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL2J1Z18xMTgyNTEtZy9XZWIgQ29udGVudC8iKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHRhZ2xpYiByZWNvcmRzIGZvdW5kIGFmdGVyIHVucGFja2luZyBidXQgYmVmb3JlIGNvcHlpbmciLCAzLCByZWNvcmRzLmxlbmd0aCk7Ci0KLQkJLyoKLQkJICogaW5jcmVhc2UgYnkgPGI+b25lPC9iPiBmb3IgdGhlIFVSTCB0byB0aGUgVExEIGluIHRoZSBqYXIgKG9uZQotCQkgKiBpbXBsaWNpdCBmb3IgdGhlIFRMRCBpbiB0aGUgamFyIGFzIGEgcmVzb3VyY2UgYW5kIGFub3RoZXIgaW1wbGljaXQKLQkJICogb3ZlcndyaXRpbmcgaXQgd2l0aCB0aGUgc2FtZSBVUkwgdG8gdGhlIFRMRCBpbiB0aGUgamFyIG9uIHRoZQotCQkgKiBjbGFzc3BhdGgpCi0JCSAqLwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy9idWdfMTE4MjUxLXNhbXBsZS9zYW1wbGVfdGxkLmphciIsICIvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L1dFQi1JTkYvbGliL3NhbXBsZV90bGQuamFyIik7Ci0KLQkJdGFnbGliUmVjb3JkID0gVGFnbGliSW5kZXgucmVzb2x2ZSgiL2J1Z18xMTgyNTEtZy9XZWIgQ29udGVudC90ZXN0MS5qc3AiLCB1cmwsIGZhbHNlKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gcmVjb3JkIGZvdW5kIGZvciAiICsgdXJsLCB0YWdsaWJSZWNvcmQpOwotCQlhc3NlcnRUcnVlKCJyZWNvcmQgZm91bmQgd2FzIHdyb25nIHR5cGUiLCB0YWdsaWJSZWNvcmQgaW5zdGFuY2VvZiBJVVJMUmVjb3JkKTsKLQkJYXNzZXJ0Tm90TnVsbCgicmVjb3JkIGhhcyBubyBiYXNlIGxvY2F0aW9uIiwgKChJVVJMUmVjb3JkKSB0YWdsaWJSZWNvcmQpLmdldEJhc2VMb2NhdGlvbigpKTsKLQkJYXNzZXJ0RXF1YWxzKCJyZWNvcmQgaGFzIHdyb25nIHNob3J0IG5hbWUiLCAic2FtcGxlIiwgKChJVVJMUmVjb3JkKSB0YWdsaWJSZWNvcmQpLmdldFNob3J0TmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJyZWNvcmQgaGFzIHdyb25nIFVSSSIsIHVybCwgKChJVVJMUmVjb3JkKSB0YWdsaWJSZWNvcmQpLmdldFVSSSgpKTsKLQkJVVJMIHJlY29yZFVSTCA9ICgoSVVSTFJlY29yZCkgdGFnbGliUmVjb3JkKS5nZXRVUkwoKTsKLQkJYXNzZXJ0Tm90TnVsbCgicmVjb3JkIGhhcyBubyBVUkwiLCByZWNvcmRVUkwpOwotCQlhc3NlcnRUcnVlKCJyZWNvcmQgaGFzIHdyb25nIFVSTCIsIHJlY29yZFVSTC50b1N0cmluZygpLmxlbmd0aCgpID4gNCk7Ci0JCWFzc2VydEVxdWFscygicmVjb3JkIGhhcyB3cm9uZyBVUkwgcHJvdG9jb2wiLCAiamFyOiIsIHJlY29yZFVSTC50b1N0cmluZygpLnN1YnN0cmluZygwLCA0KSk7Ci0JCWFzc2VydEVxdWFscygicmVjb3JkIGhhcyB3cm9uZyBVUkwiLCAiL2J1Z18xMTgyNTEtZy9XZWIgQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciEvZm9sZGVyL3NhbXBsZV9mb3JfMTE4MjUxLnRsZCIsIHJlY29yZFVSTC50b1N0cmluZygpLnN1YnN0cmluZyhyZWNvcmRVUkwudG9TdHJpbmcoKS5sZW5ndGgoKSAtIDgyKSk7Ci0KLQkJcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvIikpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiB0YWdsaWIgcmVjb3JkcyBmb3VuZCBhZnRlciBjb3B5aW5nIiwgNCwgcmVjb3Jkcy5sZW5ndGgpOwotCQlyZWNvcmRzID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL2J1Z18xMTgyNTEtZy9XZWIgQ29udGVudCIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgdGFnbGliIHJlY29yZHMgZm91bmQgYWZ0ZXIgY29weWluZyIsIDQsIHJlY29yZHMubGVuZ3RoKTsKLQkJcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORiIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgdGFnbGliIHJlY29yZHMgZm91bmQgYWZ0ZXIgY29weWluZyIsIDQsIHJlY29yZHMubGVuZ3RoKTsKLQkJcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORi93ZWIueG1sIikpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiB0YWdsaWIgcmVjb3JkcyBmb3VuZCBhZnRlciBjb3B5aW5nIiwgNCwgcmVjb3Jkcy5sZW5ndGgpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy90cmFuc2xhdGlvbi9KU1BKYXZhVHJhbnNsYXRvckNvcmVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy90cmFuc2xhdGlvbi9KU1BKYXZhVHJhbnNsYXRvckNvcmVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NzU2ZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdHJhbnNsYXRpb24vSlNQSmF2YVRyYW5zbGF0b3JDb3JlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudHJhbnNsYXRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5JSlNQVHJhbnNsYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSlNQVHJhbnNsYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSlNQVHJhbnNsYXRpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0aW9uQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLnRhZ2xpYmluZGV4LkJ1bmRsZVJlc291cmNlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBKU1BKYXZhVHJhbnNsYXRvckNvcmVUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0Jc3RhdGljIGZpbmFsIFN0cmluZyBXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUgPSAid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIjsKLQotCXB1YmxpYyBKU1BKYXZhVHJhbnNsYXRvckNvcmVUZXN0KCkgewotCX0KLQotCXB1YmxpYyBKU1BKYXZhVHJhbnNsYXRvckNvcmVUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCVN0cmluZyB3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUgPSBudWxsOwotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJU3RyaW5nIG5vbmludGVyYWN0aXZlID0gU3lzdGVtLmdldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSk7Ci0JCWlmIChub25pbnRlcmFjdGl2ZSAhPSBudWxsKQotCQkJd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlID0gbm9uaW50ZXJhY3RpdmU7Ci0JCVN5c3RlbS5zZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUsICJ0cnVlIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJaWYgKHd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSAhPSBudWxsKQotCQkJU3lzdGVtLnNldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSwgd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0XzEwNzMzOCgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgcHJvamVjdE5hbWUgPSAiYnVnXzEwNzMzOCI7Ci0JCS8vIENyZWF0ZSBuZXcgcHJvamVjdAotCQlJUHJvamVjdCBwcm9qZWN0ID0gQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QocHJvamVjdE5hbWUsIG51bGwsIG51bGwpOwotCQlhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyBwcm9qZWN0TmFtZSwgIi8iICsgcHJvamVjdE5hbWUpOwotCQlJRmlsZSBmaWxlID0gcHJvamVjdC5nZXRGaWxlKCJXZWJDb250ZW50L3Rlc3QxMDczMzguanNwIik7Ci0JCWFzc2VydFRydWUoZmlsZS5leGlzdHMoKSk7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JSZWFkKGZpbGUpOwotCQlJRE9NTW9kZWwganNwTW9kZWwgPSAoSURPTU1vZGVsKSBtb2RlbDsKLQotCQlTdHJpbmcganNwU291cmNlID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCQotCQlhc3NlcnRUcnVlKCJsaW5lIGRlbGltaXRlcnMgaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byBXaW5kb3dzIFtDUkxGXSIsIGpzcFNvdXJjZS5pbmRleE9mKCJcclxuIikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgibGluZSBkZWxpbWl0ZXJzIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gTWFjIFtDUl0iLCBqc3BTb3VyY2UuaW5kZXhPZigiXHIiKSA8IDApOwotCi0JCWlmIChtb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5nZXRGYWN0b3J5Rm9yKElKU1BUcmFuc2xhdGlvbi5jbGFzcykgPT0gbnVsbCkgewotCQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeSBmYWN0b3J5ID0gbmV3IEpTUFRyYW5zbGF0aW9uQWRhcHRlckZhY3RvcnkoKTsKLQkJCW1vZGVsLmdldEZhY3RvcnlSZWdpc3RyeSgpLmFkZEZhY3RvcnkoZmFjdG9yeSk7Ci0JCX0KLQkJSURPTURvY3VtZW50IHhtbERvYyA9IGpzcE1vZGVsLmdldERvY3VtZW50KCk7Ci0JCUpTUFRyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSlNQVHJhbnNsYXRpb25BZGFwdGVyKSB4bWxEb2MuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQlKU1BUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uQWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkvLyBTeXN0ZW0uZXJyLnByaW50KHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCkpOwotCi0JCWFzc2VydFRydWUoIm5ldy1saW5lIGJlZ2lubmluZyBzY3JpcHRsZXQgbWlzc2luZyBmcm9tIHRyYW5zbGF0aW9uIiwgdHJhbnNsYXRpb24uZ2V0SmF2YVRleHQoKS5pbmRleE9mKCJpbnQgaSA9IDA7IikgPj0gMCk7Ci0KLQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvc291cmNlL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZjOTc1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvc291cmNlL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jc3MuY29yZS50ZXN0cy5zb3VyY2U7Ci0KLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuTnVsbElucHV0U3RyZWFtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uTGlzdDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0vKioKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGSUxFU19ESVIgPSAic3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNVTFRTX0RJUiA9ICJzcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9ERV9PUEVOID0gIk1PREVfT1BFTiI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9ERV9BUFBFTkQgPSAiTU9ERV9BUFBFTkQiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1PREVfSU5TRVJUID0gIk1PREVfSU5TRVJUIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBjb21tb25FT0wgPSAiXHJcbiI7Ly8kTk9OLU5MUy0xJAotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW4xKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDEuanNwIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQxKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDEuanNwIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDEoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMS5qc3AiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW4yKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDIuanNwIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDIuanNwIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW4zKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDMuanNwIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDMuanNwIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCS8qCi0JICogVGhlIGZvbGxvd2luZyB0ZXN0IGNhc2UgZmFpbHMgd2l0aCBXVFAgMS41IFJDMiwgYnV0LCBpZ25vcmUgdGhpcyByZWxlYXNlLgotCSAqIAotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDIuanNwIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDMuanNwIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQ2KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDYuanNwIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQ4KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDIuanNwZiIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0OSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAzLmpzcGYiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDEyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDYuanNwZiIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkqCi0JKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNC5qc3AiLCBNT0RFX09QRU4pOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNC5qc3AiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0NCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA0LmpzcCIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNS5qc3AiLCBNT0RFX09QRU4pOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNS5qc3AiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0NSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA1LmpzcCIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjYoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNi5qc3AiLCBNT0RFX09QRU4pOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDYoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNi5qc3AiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMS5qc3BmIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQ3KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDEuanNwZiIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQ3KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDEuanNwZiIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjgoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMi5qc3BmIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kOCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAyLmpzcGYiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjkoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMy5qc3BmIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQ5KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDMuanNwZiIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuMTAoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNC5qc3BmIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQxMCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA0LmpzcGYiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0MTAoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNC5qc3BmIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuMTEoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNS5qc3BmIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQxMSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA1LmpzcGYiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0MTEoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNS5qc3BmIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuMTIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNi5qc3BmIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kMTIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNi5qc3BmIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW4xMygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA3LmpzcGYiLCBNT0RFX09QRU4pOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDEzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDcuanNwZiIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQxMygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA3LmpzcGYiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW4xNCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA3LmpzcCIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kMTQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNy5qc3AiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0MTQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNy5qc3AiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gc2V0IGNzc2pzcHRlc3RYLmpzcChmKSBmaWxlIGFzIGNzcyBqc3AuCi0JCUlDb250ZW50VHlwZSBjdCA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpLmdldENvbnRlbnRUeXBlKCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuY3NzanNwc291cmNlIik7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MC5qc3AiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDEuanNwIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QyLmpzcCIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0My5qc3AiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDQuanNwIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3Q1LmpzcCIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0Ni5qc3AiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDcuanNwIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3Q4LmpzcCIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0OS5qc3AiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDEwLmpzcCIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MTEuanNwIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QxMi5qc3AiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDEzLmpzcCIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MTQuanNwIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QxNS5qc3AiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDE2LmpzcCIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MTcuanNwIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QxOC5qc3AiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDE5LmpzcCIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MjAuanNwIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QgPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKS5nZXRDb250ZW50VHlwZSgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmNzc2pzcGZyYWdtZW50c291cmNlIik7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MC5qc3BmIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QxLmpzcGYiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDIuanNwZiIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0My5qc3BmIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3Q0LmpzcGYiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDUuanNwZiIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0Ni5qc3BmIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3Q3LmpzcGYiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDguanNwZiIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0OS5qc3BmIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QxMC5qc3BmIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QxMS5qc3BmIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QxMi5qc3BmIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QxMy5qc3BmIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QxNC5qc3BmIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QxNS5qc3BmIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QxNi5qc3BmIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QxNy5qc3BmIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QxOC5qc3BmIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QxOS5qc3BmIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QyMC5qc3BmIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQl9Ci0KLQlzdGF0aWMgaW50IGluZGV4X2pzcCA9IDA7Ci0Jc3RhdGljIGludCBpbmRleF9qc3BmID0gMDsKLQlwcml2YXRlIElDU1NNb2RlbCBjcmVhdGVNb2RlbChib29sZWFuIGlzRnJhZ21lbnQpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQltb2RlbCA9ICFpc0ZyYWdtZW50ID8gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdCgiY3NzanNwdGVzdCIgKyBpbmRleF9qc3ArKyArICIuanNwIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKSA6IC8vJE5PTi1OTFMtMSQKLQkJCQkJCQkJCW1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoImNzc2pzcHRlc3QiICsgaW5kZXhfanNwZisrICsgIi5qc3BmIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0TGluZURlbGltaXRlcihjb21tb25FT0wpOy8vJE5PTi1OTFMtMSQKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIChJQ1NTTW9kZWwpIG1vZGVsOwotCi0JfQotCXByaXZhdGUgRmlsZSBjcmVhdGVGaWxlKFN0cmluZyBkaXJlY3RvcnksIFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZSgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzIik7IC8vJE5PTi1OTFMtMSQKLQkJVVJMIHVybCA9IGJ1bmRsZS5nZXRFbnRyeSgiLyIpOyAvLyROT04tTkxTLTEkCi0JCVVSTCBsb2NhbFVSTCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTCh1cmwpOwotCQlTdHJpbmcgaW5zdGFsbFBhdGggPSBsb2NhbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyB0b3RhbERpcmVjdG9yeSA9IGluc3RhbGxQYXRoICsgZGlyZWN0b3J5OwotCQlTdHJpbmcgdG90YWxQYXRoID0gdG90YWxEaXJlY3RvcnkgKyAiLyIgKyBmaWxlbmFtZTsgLy8kTk9OLU5MUy0xJAotCQlVUkwgdG90YWxVUkwgPSBuZXcgVVJMKHVybCwgdG90YWxQYXRoKTsKLQkJU3RyaW5nIGZpbmFsRmlsZSA9IHRvdGFsVVJMLmdldEZpbGUoKTsKLQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmluYWxGaWxlKTsKLQkJcmV0dXJuIGZpbGU7Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nIGNyZWF0ZVN0cmluZyhTdHJpbmcgZGlyZWN0b3J5LCBTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJUmVhZGVyIGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcihjcmVhdGVGaWxlKGRpcmVjdG9yeSwgZmlsZW5hbWUpKTsKLQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGZpbGVSZWFkZXIpOwotCQlTdHJpbmcgbGluZTsKLQkJd2hpbGUgKChsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKLQkJCWJ1Zi5hcHBlbmQobGluZSk7Ci0JCQlidWYuYXBwZW5kKGNvbW1vbkVPTCk7Ci0JCX0KLQkJcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgc291cmNlUGFyc2VyVGVzdChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBtb2RlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBudWxsOwotCQlpZiAobW9kZS5lcXVhbHMoTU9ERV9PUEVOKSkgewotCQkJbW9kZWwgPSByZWFkTW9kZWxPcGVuKGZpbGVuYW1lKTsKLQkJfQotCQllbHNlIGlmIChtb2RlLmVxdWFscyhNT0RFX0FQUEVORCkpIHsKLQkJCW1vZGVsID0gcmVhZE1vZGVsQXBwZW5kKGZpbGVuYW1lKTsKLQkJfQotCQllbHNlIGlmIChtb2RlLmVxdWFscyhNT0RFX0lOU0VSVCkpIHsKLQkJCW1vZGVsID0gcmVhZE1vZGVsSW5zZXJ0KGZpbGVuYW1lKTsKLQkJfQotCQlTdHJpbmcgcmVzdWx0ID0gZHVtcFJlZ2lvbnMobW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkpOwotCQljb21wYXJlUmVzdWx0KHJlc3VsdCwgIkpTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC0iICsgZmlsZW5hbWUpOyAvLyROT04tTkxTLTEkCi0JCWNsb3NlTW9kZWwobW9kZWwpOwotCX0KLQotCXByaXZhdGUgSUNTU01vZGVsIHJlYWRNb2RlbE9wZW4oU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgc291cmNlID0gY3JlYXRlU3RyaW5nKEZJTEVTX0RJUiwgZmlsZW5hbWUpOwotCQlJQ1NTTW9kZWwgbW9kZWwgPSBjcmVhdGVNb2RlbChmaWxlbmFtZS5lbmRzV2l0aCgianNwZiIpKTsvLyROT04tTkxTLTEkCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJZG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgc291cmNlKTsKLQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JcHJpdmF0ZSBJQ1NTTW9kZWwgcmVhZE1vZGVsQXBwZW5kKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHNvdXJjZSA9IGNyZWF0ZVN0cmluZyhGSUxFU19ESVIsIGZpbGVuYW1lKTsKLQkJSUNTU01vZGVsIG1vZGVsID0gY3JlYXRlTW9kZWwoZmlsZW5hbWUuZW5kc1dpdGgoImpzcGYiKSk7Ly8kTk9OLU5MUy0xJAotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aCgpOyBpKyspIHsKLQkJCWRvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIGksIDAsIHNvdXJjZS5zdWJzdHJpbmcoaSwgaSArIDEpKTsKLQkJfQotCi0JCXJldHVybiBtb2RlbDsKLQl9Ci0KLQlwcml2YXRlIElDU1NNb2RlbCByZWFkTW9kZWxJbnNlcnQoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgc291cmNlID0gY3JlYXRlU3RyaW5nKEZJTEVTX0RJUiwgZmlsZW5hbWUpOwotCQlJQ1NTTW9kZWwgbW9kZWwgPSBjcmVhdGVNb2RlbChmaWxlbmFtZS5lbmRzV2l0aCgianNwZiIpKTsvLyROT04tTkxTLTEkCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoKCk7IGkrKykgewotCQkJaW50IHRleHRJbmRleCA9IHNvdXJjZS5sZW5ndGgoKSAtIGkgLSAxOwotCQkJZG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgc291cmNlLnN1YnN0cmluZyh0ZXh0SW5kZXgsIHRleHRJbmRleCArIDEpKTsKLQkJfQotCi0JCXJldHVybiBtb2RlbDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2xvc2VNb2RlbChJQ1NTTW9kZWwgbW9kZWwpIHsKLQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZHVtcFJlZ2lvbnMoSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCkgewotCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlidWYuYXBwZW5kKGR1bXBSZWdpb25zKGRvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkpKTsKLQkJcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGR1bXBSZWdpb25zKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uKSB7Ci0JCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXdoaWxlIChyZWdpb24gIT0gbnVsbCl7Ci0JCQlidWYuYXBwZW5kKGR1bXBPbmVSZWdpb24ocmVnaW9uKSk7Ci0JCQlyZWdpb24gPSByZWdpb24uZ2V0TmV4dCgpOwotCQl9Ci0KLQkJYnVmLmFwcGVuZChjb21tb25FT0wgKyAiLS0tLS0tLSIgKyBjb21tb25FT0wpOyAvLyROT04tTkxTLTEkCi0KLQkJcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGR1bXBPbmVSZWdpb24oSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbikgewotCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0JCWJ1Zi5hcHBlbmQoZG9jdW1lbnRSZWdpb24udG9TdHJpbmcoKSk7Ci0JCWJ1Zi5hcHBlbmQoY29tbW9uRU9MICsgIiAgICAiKTsgLy8kTk9OLU5MUy0xJAotCi0JCUlUZXh0UmVnaW9uTGlzdCByZWdpb25MaXN0ID0gZG9jdW1lbnRSZWdpb24uZ2V0UmVnaW9ucygpOwotCQlJdGVyYXRvciBpID0gcmVnaW9uTGlzdC5pdGVyYXRvcigpOwotCQl3aGlsZSAoaS5oYXNOZXh0KCkpIHsKLQkJCUlUZXh0UmVnaW9uIHRleHRSZWdpb24gPSAoSVRleHRSZWdpb24pIGkubmV4dCgpOwotCQkJYnVmLmFwcGVuZCh0ZXh0UmVnaW9uLnRvU3RyaW5nKCkpOwotCQkJYnVmLmFwcGVuZCgiLCAiKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCWJ1Zi5hcHBlbmQoY29tbW9uRU9MKTsgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm4gYnVmLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNvbXBhcmVSZXN1bHQoU3RyaW5nIGFjdHVhbCwgU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgcmVzdWx0ID0gY3JlYXRlU3RyaW5nKFJFU1VMVFNfRElSLCBmaWxlbmFtZSk7Ci0JCWFzc2VydEVxdWFscyhyZXN1bHQsIGFjdHVhbCk7Ci0JfQotCi0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDEuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNGI3MDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1bMCwgNzNdICg8JUAgcGFnZSBzZXNzaW9uPSJmYWxzZSIgY29udGVudFR5cGU9InRleHQvY3NzO2NoYXJzZXQ9SVNPLTg4NTktMSIgJT4NCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gQ1NTX0pTUF9ESVJFQ1RJVkU6IDAtNjkvNzMsIA0KLVs3MywgMTQzXSAoPCVAIHRhZ2xpYiB1cmk9Imh0dHA6Ly9qYXZhLnN1bi5jb20vanN0bC9jb3JlX3J0IiBwcmVmaXg9ImMtcnQiICU+DQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IENTU19KU1BfRElSRUNUSVZFOiAwLTY2LzcwLCANCi1bMTQzLCAxODhdICg8JUAgaW5jbHVkZSBmaWxlPSIuL2Nzc2pzcGZyYWdtZW50LmpzcGYiICU+DQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IENTU19KU1BfRElSRUNUSVZFOiAwLTQzLzQ1LCANCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMS5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMS5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWFiNGRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDEuanNwZgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotWzAsIDcwXSAoPCVAIHRhZ2xpYiB1cmk9Imh0dHA6Ly9qYXZhLnN1bi5jb20vanN0bC9jb3JlX3J0IiBwcmVmaXg9ImMtcnQiICU+Ci0KLSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IENTU19KU1BfRElSRUNUSVZFOiAwLTY2LzcwLCAKLVs3MCwgMTE1XSAoPCVAIGluY2x1ZGUgZmlsZT0iLi9jc3Nqc3BmcmFnbWVudC5qc3BmIiAlPgotKQotICAgIENvbnRleHRSZWdpb24tLT4gQ1NTX0pTUF9ESVJFQ1RJVkU6IDAtNDMvNDUsIAotCi0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAyLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmY1ZTdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotWzAsIDczXSAoPCVAIHBhZ2Ugc2Vzc2lvbj0iZmFsc2UiIGNvbnRlbnRUeXBlPSJ0ZXh0L2NzcztjaGFyc2V0PUlTTy04ODU5LTEiICU+DQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IENTU19KU1BfRElSRUNUSVZFOiAwLTY5LzczLCANCi1bNzMsIDc5XSAoLmhvZ2UgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAwLTUvNiwgDQotWzc5LCA4M10gKHsNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzQsIA0KLVs4MywgOTddIChmbG9hdCA6ICR7WFhYfSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBGT1JFSUdOX0VMRU1FTlQ6IDgtMTQsIA0KLVs5NywgOThdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bOTgsIDEwMV0gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMTAxLCAxMjBdIChib3JkZXItJHtYWFh9LWNvbG9yKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTcsIENvbnRleHRSZWdpb24tLT4gRk9SRUlHTl9FTEVNRU5UOiA3LTEzLCBDb250ZXh0UmVnaW9uLS0+IFVOS05PV046IDEzLTE5LCANCi1bMTIwLCAxMjZdICggOiByZWQpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMS0yLzMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDMtNiwgDQotWzEyNiwgMTI3XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzEyNywgMTI5XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEyOSwgMTMwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEzMCwgMTMyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDIuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDIuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU0YTZlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAyLmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi1bMCwgNF0gKAotCi0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIAotWzQsIDEwXSAoLmhvZ2UgKQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDAtNS82LCAKLVsxMCwgMTRdICh7Ci0JKQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNCwgCi1bMTQsIDI4XSAoZmxvYXQgOiAke1hYWH0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBGT1JFSUdOX0VMRU1FTlQ6IDgtMTQsIAotWzI4LCAyOV0gKDspCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgCi1bMjksIDMyXSAoCi0JKQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCAKLVszMiwgNTFdIChib3JkZXItJHtYWFh9LWNvbG9yKQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNywgQ29udGV4dFJlZ2lvbi0tPiBGT1JFSUdOX0VMRU1FTlQ6IDctMTMsIENvbnRleHRSZWdpb24tLT4gVU5LTk9XTjogMTMtMTksIAotWzUxLCA1N10gKCA6IHJlZCkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEtMi8zLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAzLTYsIAotWzU3LCA1OF0gKDspCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgCi1bNTgsIDYwXSAoCi0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIAotWzYwLCA2MV0gKH0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgCi1bNjEsIDYzXSAoCi0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIAotCi0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAzLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzZhYWEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotWzAsIDczXSAoPCVAIHBhZ2Ugc2Vzc2lvbj0iZmFsc2UiIGNvbnRlbnRUeXBlPSJ0ZXh0L2NzcztjaGFyc2V0PUlTTy04ODU5LTEiICU+DQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IENTU19KU1BfRElSRUNUSVZFOiAwLTY5LzczLCANCi1bNzMsIDc5XSAoLmhvZ2UgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAwLTUvNiwgDQotWzc5LCA4M10gKHsNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzQsIA0KLVs4MywgOTddIChjb2xvciA6ICR7WFhYfSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBGT1JFSUdOX0VMRU1FTlQ6IDgtMTQsIA0KLVs5NywgOThdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bOTgsIDEwMV0gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMTAxLCAxMjZdIChib3JkZXItY29sb3IgOiA8JT0gWVlZICU+KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTMtMTQvMTUsIENvbnRleHRSZWdpb24tLT4gQ1NTX0pTUF9FWFA6IDE1LTI1LCANCi1bMTI2LCAxMjddICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTI3LCAxMjldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTI5LCAxMzBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTMwLCAxMzJdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMy5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMy5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWI2NDgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDMuanNwZgorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLVswLCA0XSAoCi0KLSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgCi1bNCwgMTBdICguaG9nZSApCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMC01LzYsIAotWzEwLCAxNF0gKHsKLQkpCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS80LCAKLVsxNCwgMjhdIChjb2xvciA6ICR7WFhYfSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IEZPUkVJR05fRUxFTUVOVDogOC0xNCwgCi1bMjgsIDI5XSAoOykKLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCAKLVsyOSwgMzJdICgKLQkpCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTMsIAotWzMyLCA1N10gKGJvcmRlci1jb2xvciA6IDwlPSBZWVkgJT4pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEzLTE0LzE1LCBDb250ZXh0UmVnaW9uLS0+IENTU19KU1BfRVhQOiAxNS0yNSwgCi1bNTcsIDU4XSAoOykKLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCAKLVs1OCwgNjBdICgKLSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgCi1bNjAsIDYxXSAofSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCAKLVs2MSwgNjNdICgKLSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgCi0KLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNzYwZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1bMCwgNzNdICg8JUAgcGFnZSBzZXNzaW9uPSJmYWxzZSIgY29udGVudFR5cGU9InRleHQvY3NzO2NoYXJzZXQ9SVNPLTg4NTktMSIgJT4NCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gQ1NTX0pTUF9ESVJFQ1RJVkU6IDAtNjkvNzMsIA0KLVs3MywgNzldICgucHVnZSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDAtNS82LCANCi1bNzksIDgzXSAoew0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNCwgDQotWzgzLCA4OV0gKCR7WFhYfSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBGT1JFSUdOX0VMRU1FTlQ6IDAtNiwgDQotWzg5LCA5MF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs5MCwgOTNdICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzkzLCAxMTFdIChib3JkZXItY29sb3IgOiByZWQpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMy0xNC8xNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTUtMTgsIA0KLVsxMTEsIDExMl0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxMTIsIDExNF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMTQsIDExNV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMTUsIDExN10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA0LmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA0LmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkNDA1NzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNC5qc3BmCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotWzAsIDZdICgucHVnZSApCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMC01LzYsIAotWzYsIDEwXSAoewotCSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzQsIAotWzEwLCAxNl0gKCR7WFhYfSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IEZPUkVJR05fRUxFTUVOVDogMC02LCAKLVsxNiwgMTddICg7KQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIAotWzE3LCAyMF0gKAotCSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgCi1bMjAsIDM4XSAoYm9yZGVyLWNvbG9yIDogcmVkKQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMy0xNC8xNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTUtMTgsIAotWzM4LCAzOV0gKDspCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgCi1bMzksIDQxXSAoCi0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIAotWzQxLCA0Ml0gKH0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgCi1bNDIsIDQ0XSAoCi0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIAotCi0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA1LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGQ5OTkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotWzAsIDcxXSAoPCVAIHBhZ2Ugc2Vzc2lvbj0iZmFsc2UiIGNvbnRlbnRUeXBlPSJ0ZXh0L2NzcztjaGFyc2V0PUlTTy04ODU5LTEiICU+DQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IENTU19KU1BfRElSRUNUSVZFOiAwLTY5LzcxLCANCi1bNzEsIDEwMF0gKDwlLS0gDQotanNwIA0KLWNvbW1lbnQgDQotLS0lPg0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBDT01NRU5UOiAwLTI3LzI5LCANCi1bMTAwLCAxMDNdIChIMSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIvMywgDQotWzEwMywgMTA3XSAoew0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNCwgDQotWzEwNywgMTMwXSAoYmFja2dyb3VuZC1jb2xvciA6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTYvMTcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNy0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTktMjMsIA0KLVsxMzAsIDEzMV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxMzEsIDEzM10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMzMsIDEzNF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMzQsIDEzNl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA1LmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA1LmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZmZmMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNS5qc3BmCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotWzAsIDMxXSAoCi08JS0tIAotanNwIAotY29tbWVudCAKLS0tJT4KLSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgQ29udGV4dFJlZ2lvbi0tPiBDT01NRU5UOiAyLTI5LzMxLCAKLVszMSwgMzRdIChIMSApCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMi8zLCAKLVszNCwgMzhdICh7Ci0JKQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNCwgCi1bMzgsIDYxXSAoYmFja2dyb3VuZC1jb2xvciA6IGJsdWUpCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xNi8xNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDE3LTE4LzE5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxOS0yMywgCi1bNjEsIDYyXSAoOykKLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCAKLVs2MiwgNjRdICgKLSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgCi1bNjQsIDY1XSAofSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCAKLVs2NSwgNjddICgKLSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgCi0KLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDYuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYWM3YzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1bMCwgNzNdICg8JUAgcGFnZSBzZXNzaW9uPSJmYWxzZSIgY29udGVudFR5cGU9InRleHQvY3NzO2NoYXJzZXQ9SVNPLTg4NTktMSIgJT4NCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gQ1NTX0pTUF9ESVJFQ1RJVkU6IDAtNjkvNzMsIA0KLVs3MywgNzZdIChIMSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIvMywgDQotWzc2LCA4MF0gKHsNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzQsIA0KLVs4MCwgMTExXSAoYm9yZGVyLSR7WFhYfSA6IDBweCwgc29saWQsIHJlZCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC03LCBDb250ZXh0UmVnaW9uLS0+IEZPUkVJR05fRUxFTUVOVDogNy0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDE0LTE1LzE2LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTYtMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDE5LTIwLzIxLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAyMS0yNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjYtMjcvMjgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDI4LTMxLCANCi1bMTExLCAxMTJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTEyLCAxMTRdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTE0LCAxMTVdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTE1LCAxMTddICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNi5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNi5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzFkNzFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDYuanNwZgorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLVswLCA0XSAoCi0KLSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgCi1bNCwgN10gKEgxICkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLzMsIAotWzcsIDExXSAoewotCSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzQsIAotWzExLCA0Ml0gKGJvcmRlci0ke1hYWH0gOiAwcHgsIHNvbGlkLCByZWQpCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC03LCBDb250ZXh0UmVnaW9uLS0+IEZPUkVJR05fRUxFTUVOVDogNy0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDE0LTE1LzE2LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTYtMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDE5LTIwLzIxLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAyMS0yNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjYtMjcvMjgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDI4LTMxLCAKLVs0MiwgNDNdICg7KQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIAotWzQzLCA0NV0gKAotKQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCAKLVs0NSwgNDZdICh9KQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIAotWzQ2LCA0OF0gKAotKQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCAKLQotLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI2NzhmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA3LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDcuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDcuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU1ZjJhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA3LmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLQotLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAxLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk3MjNjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAxLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPCVAIHBhZ2Ugc2Vzc2lvbj0iZmFsc2UiIGNvbnRlbnRUeXBlPSJ0ZXh0L2NzcztjaGFyc2V0PUlTTy04ODU5LTEiICU+DQotDQotPCVAIHRhZ2xpYiB1cmk9Imh0dHA6Ly9qYXZhLnN1bi5jb20vanN0bC9jb3JlX3J0IiBwcmVmaXg9ImMtcnQiICU+DQotDQotPCVAIGluY2x1ZGUgZmlsZT0iLi9jc3Nqc3BmcmFnbWVudC5qc3BmIiAlPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDEuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDEuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg2YWVlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAxLmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTwlQCB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzdGwvY29yZV9ydCIgcHJlZml4PSJjLXJ0IiAlPgotCi08JUAgaW5jbHVkZSBmaWxlPSIuL2Nzc2pzcGZyYWdtZW50LmpzcGYiICU+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAyLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDBkNWI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08JUAgcGFnZSBzZXNzaW9uPSJmYWxzZSIgY29udGVudFR5cGU9InRleHQvY3NzO2NoYXJzZXQ9SVNPLTg4NTktMSIgJT4NCi0NCi0uaG9nZSB7DQotCWZsb2F0IDogJHtYWFh9Ow0KLQlib3JkZXItJHtYWFh9LWNvbG9yIDogcmVkOw0KLX0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAyLmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAyLmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzOGFkOWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMi5qc3BmCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0KLQotLmhvZ2UgewotCWZsb2F0IDogJHtYWFh9OwotCWJvcmRlci0ke1hYWH0tY29sb3IgOiByZWQ7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAzLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGRkYjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08JUAgcGFnZSBzZXNzaW9uPSJmYWxzZSIgY29udGVudFR5cGU9InRleHQvY3NzO2NoYXJzZXQ9SVNPLTg4NTktMSIgJT4NCi0NCi0uaG9nZSB7DQotCWNvbG9yIDogJHtYWFh9Ow0KLQlib3JkZXItY29sb3IgOiA8JT0gWVlZICU+Ow0KLX0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAzLmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAzLmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlNjM4MzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMy5qc3BmCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0KLQotLmhvZ2UgewotCWNvbG9yIDogJHtYWFh9OwotCWJvcmRlci1jb2xvciA6IDwlPSBZWVkgJT47Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODcwOWE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08JUAgcGFnZSBzZXNzaW9uPSJmYWxzZSIgY29udGVudFR5cGU9InRleHQvY3NzO2NoYXJzZXQ9SVNPLTg4NTktMSIgJT4NCi0NCi0ucHVnZSB7DQotCSR7WFhYfTsNCi0JYm9yZGVyLWNvbG9yIDogcmVkOw0KLX0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA0LmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA0LmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmMDNkNWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNC5qc3BmCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0ucHVnZSB7Ci0JJHtYWFh9OwotCWJvcmRlci1jb2xvciA6IHJlZDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMzllNTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTwlQCBwYWdlIHNlc3Npb249ImZhbHNlIiBjb250ZW50VHlwZT0idGV4dC9jc3M7Y2hhcnNldD1JU08tODg1OS0xIiAlPg0KLTwlLS0gDQotanNwIA0KLWNvbW1lbnQgDQotLS0lPg0KLUgxIHsNCi0JYmFja2dyb3VuZC1jb2xvciA6IGJsdWU7DQotfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDUuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDUuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk4YTI1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA1LmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLQotPCUtLSAKLWpzcCAKLWNvbW1lbnQgCi0tLSU+Ci1IMSB7Ci0JYmFja2dyb3VuZC1jb2xvciA6IGJsdWU7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA2LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDYuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWIzNDRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDYuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08JUAgcGFnZSBzZXNzaW9uPSJmYWxzZSIgY29udGVudFR5cGU9InRleHQvY3NzO2NoYXJzZXQ9SVNPLTg4NTktMSIgJT4NCi0NCi1IMSB7DQotCWJvcmRlci0ke1hYWH0gOiAwcHgsIHNvbGlkLCByZWQ7DQotfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDYuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDYuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIxNmNlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA2LmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLQotCi1IMSB7Ci0JYm9yZGVyLSR7WFhYfSA6IDBweCwgc29saWQsIHJlZDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNy5qc3AKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNy5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNy5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDcuanNwZgorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwOWUyOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0Ci0JbmFtZT0idGVzdHN1aXRlIgotCWRlZmF1bHQ9InJ1biIKLQliYXNlZGlyPSIuIj4KLQk8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotCTwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0JPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIgLz4gLS0+Ci0KLQk8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgcGx1Z2luLW5hbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9InBsdWdpbi1uYW1lIgotCQl2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzIiAvPgotCTxwcm9wZXJ0eQotCQluYW1lPSJsaWJyYXJ5LWZpbGUiCi0JCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotCi0JPGVjaG8gbWVzc2FnZT0iYmFzZWRpciAke2Jhc2VkaXJ9IiAvPgotCTxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UgcGxhY2UgJHtlY2xpcHNlLWhvbWV9IiAvPgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLQkJPHRzdGFtcCAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQKLQkJCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLQkJCQlpbmNsdWRlcz0ib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLip4bWwiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLQk8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQkJPHByb3BlcnR5Ci0JCQluYW1lPSJ3c3QtZm9sZGVyIgotCQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93c3RfZm9sZGVyIiAvPgotCQk8ZGVsZXRlCi0JCQlkaXI9IiR7d3N0LWZvbGRlcn0iCi0JCQlxdWlldD0idHJ1ZSIgLz4KLQkJPGFudAotCQkJdGFyZ2V0PSJjb3JlLXRlc3QiCi0JCQlhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0JCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJkYXRhLWRpciIKLQkJCQl2YWx1ZT0iJHt3c3QtZm9sZGVyfSIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9InBsdWdpbi1uYW1lIgotCQkJCXZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImNsYXNzbmFtZSIKLQkJCQl2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLkpTUENvcmVUZXN0U3VpdGUiIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJwbHVnaW4tcGF0aCIKLQkJCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0JCTwvYW50PgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0JPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotCTwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLQk8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotCQk8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLQk8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0JPHRhcmdldAotCQluYW1lPSJydW4iCi0JCWRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0JCTxhbnQKLQkJCXRhcmdldD0iY29sbGVjdCIKLQkJCWFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImluY2x1ZGVzIgotCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuKnhtbCIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9Im91dHB1dC1maWxlIgotCQkJCXZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0JCTwvYW50PgotCTwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy8xMTYwNjYvdGFnZGVwLnRsZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvMTE2MDY2L3RhZ2RlcC50bGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGQ2NzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy8xMTYwNjYvdGFnZGVwLnRsZAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLTw/eG1sIHZlcnNpb24gPSAiMS4wIiA/PgotPCFET0NUWVBFIHRhZ2xpYiBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBKU1AgVGFnIExpYnJhcnkgMS4xLy9FTiIgImh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS9kdGRzL3dlYi1qc3B0YWdsaWJfMV8yLmR0ZCI+Ci08dGFnbGliPgotCTx0bGliLXZlcnNpb24+MS4xPC90bGliLXZlcnNpb24+Ci0JPGpzcC12ZXJzaW9uPjEuMTwvanNwLXZlcnNpb24+Ci0JPHVyaT50YWdkZXBlbmRlbnQ8L3VyaT4KLQk8c2hvcnQtbmFtZT50YWdkZXBlbmRlbnQ8L3Nob3J0LW5hbWU+Ci0JPGRlc2NyaXB0aW9uPgotCQlUaGlzIHRhZyBsaWJyYXJ5IGRlbW9uc3RyYXRlcyB0YWdkZXBlbmRlbnQgdGFnIGhhbmRsaW5nCi0JCXVzaW5nIGl0cyAiY29kZSIgdGFnLgotCTwvZGVzY3JpcHRpb24+Ci0JPHRhZz4KLQkJPG5hbWU+Y29kZTwvbmFtZT4KLQkJPHRhZy1jbGFzcz5jb20uZXhhbXBsZS50YWdkZXAuQ29kZVRhZzwvdGFnLWNsYXNzPgotCQk8Ym9keS1jb250ZW50PnRhZ2RlcGVuZGVudDwvYm9keS1jb250ZW50PgotCQk8YXR0cmlidXRlPgotCQkJPG5hbWU+Zm9udE5hbWU8L25hbWU+Ci0JCQk8cmVxdWlyZWQ+dHJ1ZTwvcmVxdWlyZWQ+Ci0JCQk8dHlwZT5qYXZhLmxhbmcuU3RyaW5nPC90eXBlPgotCQk8L2F0dHJpYnV0ZT4KLQkJPGF0dHJpYnV0ZT4KLQkJCTxuYW1lPmJvbGQ8L25hbWU+Ci0JCQk8dHlwZT5ib29sZWFuPC90eXBlPgotCQk8L2F0dHJpYnV0ZT4KLQkJPGF0dHJpYnV0ZT4KLQkJCTxuYW1lPml0YWxpYzwvbmFtZT4KLQkJCTx0eXBlPmJvb2xlYW48L3R5cGU+Ci0JCTwvYXR0cmlidXRlPgotCTwvdGFnPgotCTxzbWFsbC1pY29uPmJyb3dzZXJfZWRpdG9yLmdpZjwvc21hbGwtaWNvbj4KLTwvdGFnbGliPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4Ly5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVjM2IzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMiLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4Ly5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4Ly5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzc1NjI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPmJ1Z18xMDczMzg8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4L1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0MjcyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1DbGFzcy1QYXRoOiAKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4L1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4L1dlYkNvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAzMTk0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLQk8ZGlzcGxheS1uYW1lPjEwNzMzODwvZGlzcGxheS1uYW1lPgotCTx3ZWxjb21lLWZpbGUtbGlzdD4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvV2ViQ29udGVudC90ZXN0MTA3MzM4LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9XZWJDb250ZW50L3Rlc3QxMDczMzguanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjBmNWQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9XZWJDb250ZW50L3Rlc3QxMDczMzguanNwCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08c2NyaXB0PgotPCUKLSAgaW50IGkgPSAwOwotJT48JT1pJT48JQotIAotJT4KLTwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9idWlsZC9jbGFzc2VzLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9idWlsZC9jbGFzc2VzLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4L3NyYy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4L3NyYy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9zcmMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVjM2IzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJXZWJDb250ZW50L1dFQi1JTkYvY2xhc3NlcyIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTA4ZGJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+YnVnXzExODI1MS1lPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24udmFsaWRhdGlvbmJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTQyNzJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQ2xhc3MtUGF0aDogCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L1dFQi1JTkYvdGxkL3NhbXBsZTJfZm9yXzExODI1MS1lLnRsZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGY5YmM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPHRhZ2xpYj4KLQotICAgICA8dGxpYnZlcnNpb24+MC4wLjE8L3RsaWJ2ZXJzaW9uPgotICAgICA8anNwdmVyc2lvbj4xLjI8L2pzcHZlcnNpb24+Ci0gICAgIDxzaG9ydG5hbWU+c2FtcGxlPC9zaG9ydG5hbWU+Ci0gICAgIDx1cmk+aHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZTJfZm9yXzExODI1MS1lPC91cmk+Ci0gICAgIDxpbmZvPgotICAgICAgICBUaGlzIHRhZyBsaWJyYXJ5IGNvbnRhaW5zIGp1c3Qgb25lIHRhZy4gIEhhIGhhISAKLSAgICAgPC9pbmZvPgotCi0gICAgIDx0YWc+Ci0gICAgICAgPG5hbWU+Y29kZTwvbmFtZT4KLSAgICAgICA8dGFnY2xhc3M+c2FtcGxlLnRhZ2xpYi5Db2RlVGFnPC90YWdjbGFzcz4KLSAgICAgICA8Ym9keWNvbnRlbnQ+dGFnZGVwZW5kZW50PC9ib2R5Y29udGVudD4KLSAgICAgICA8YXR0cmlidXRlPgotICAgICAgICAgPG5hbWU+Zm9udEF0dHJpYnV0ZXM8L25hbWU+Ci0gICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgPGF0dHJpYnV0ZT4KLSAgICAgICAgIDxuYW1lPmNvbW1lbnRDb2xvcjwvbmFtZT4KLSAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICA8YXR0cmlidXRlPgotICAgICAgICAgPG5hbWU+c3RyaW5nQ29sb3I8L25hbWU+Ci0gICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgIDwvdGFnPgotICAgPC90YWdsaWI+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzFlNTc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci0JPGRpc3BsYXktbmFtZT4KLQl0ZXN0MTwvZGlzcGxheS1uYW1lPgotCTx3ZWxjb21lLWZpbGUtbGlzdD4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L3Rlc3QxLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvdGVzdDEuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmUwMGNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvdGVzdDEuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPCVAdGFnbGliIHVyaT0iaHR0cDovL2phdmEuc3VuLmNvbS9qc2YvY29yZSIgcHJlZml4PSJjIiU+Ci08JUB0YWdsaWIgcHJlZml4PSJzYW1wbGUiIHVyaT0iaHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZS10YWdsaWIiICU+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxzYW1wbGU6Y29kZT4gYXNkZ2phbHNramdhICA8PCA8L3NhbXBsZTpjb2RlPgotCi08YzpvdXQgdmFsdWU9IiI+PC9jOm91dD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL2J1aWxkL2NsYXNzZXMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL2J1aWxkL2NsYXNzZXMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9idWlsZC9jbGFzc2VzLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvc3JjLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9zcmMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9zcmMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE5ZjJiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ibGliIiBwYXRoPSJXZWJDb250ZW50L1dFQi1JTkYvbGliL3NhbXBsZV90bGQuamFyIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMiLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJlNTUwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPmJ1Z18xMTgyNTEtZjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRpb25idWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0MjcyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUNsYXNzLVBhdGg6IAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvV2ViQ29udGVudC9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L1dFQi1JTkYvdGxkL3NhbXBsZTJfZm9yXzExODI1MS1lLnRsZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRmOWJjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L1dFQi1JTkYvdGxkL3NhbXBsZTJfZm9yXzExODI1MS1lLnRsZAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTx0YWdsaWI+Ci0KLSAgICAgPHRsaWJ2ZXJzaW9uPjAuMC4xPC90bGlidmVyc2lvbj4KLSAgICAgPGpzcHZlcnNpb24+MS4yPC9qc3B2ZXJzaW9uPgotICAgICA8c2hvcnRuYW1lPnNhbXBsZTwvc2hvcnRuYW1lPgotICAgICA8dXJpPmh0dHA6Ly9leGFtcGxlLmNvbS9zYW1wbGUyX2Zvcl8xMTgyNTEtZTwvdXJpPgotICAgICA8aW5mbz4KLSAgICAgICAgVGhpcyB0YWcgbGlicmFyeSBjb250YWlucyBqdXN0IG9uZSB0YWcuICBIYSBoYSEgCi0gICAgIDwvaW5mbz4KLQotICAgICA8dGFnPgotICAgICAgIDxuYW1lPmNvZGU8L25hbWU+Ci0gICAgICAgPHRhZ2NsYXNzPnNhbXBsZS50YWdsaWIuQ29kZVRhZzwvdGFnY2xhc3M+Ci0gICAgICAgPGJvZHljb250ZW50PnRhZ2RlcGVuZGVudDwvYm9keWNvbnRlbnQ+Ci0gICAgICAgPGF0dHJpYnV0ZT4KLSAgICAgICAgIDxuYW1lPmZvbnRBdHRyaWJ1dGVzPC9uYW1lPgotICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgIDxhdHRyaWJ1dGU+Ci0gICAgICAgICA8bmFtZT5jb21tZW50Q29sb3I8L25hbWU+Ci0gICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgPGF0dHJpYnV0ZT4KLSAgICAgICAgIDxuYW1lPnN0cmluZ0NvbG9yPC9uYW1lPgotICAgICAgIDwvYXR0cmlidXRlPgotICAgICA8L3RhZz4KLSAgIDwvdGFnbGliPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNkMDdmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+Ci0JdGVzdDE8L2Rpc3BsYXktbmFtZT4KLQk8d2VsY29tZS1maWxlLWxpc3Q+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5qc3A8L3dlbGNvbWUtZmlsZT4KLQk8L3dlbGNvbWUtZmlsZS1saXN0PgotCTx0YWdsaWI+Ci0JICA8dGFnbGliLXVyaT4vdGFncy9zYW1wbGUyPC90YWdsaWItdXJpPgotCSAgPHRhZ2xpYi1sb2NhdGlvbj4vV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkPC90YWdsaWItbG9jYXRpb24+Ci0JPC90YWdsaWI+Ci08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L3Rlc3QxLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvdGVzdDEuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmUwMGNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvdGVzdDEuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPCVAdGFnbGliIHVyaT0iaHR0cDovL2phdmEuc3VuLmNvbS9qc2YvY29yZSIgcHJlZml4PSJjIiU+Ci08JUB0YWdsaWIgcHJlZml4PSJzYW1wbGUiIHVyaT0iaHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZS10YWdsaWIiICU+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxzYW1wbGU6Y29kZT4gYXNkZ2phbHNramdhICA8PCA8L3NhbXBsZTpjb2RlPgotCi08YzpvdXQgdmFsdWU9IiI+PC9jOm91dD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL3NyYy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvc3JjLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvc3JjLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkNWY1ZDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImxpYiIgcGF0aD0iV2ViIENvbnRlbnQvV0VCLUlORi9saWIvc2FtcGxlX3RsZC5qYXIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJXZWIgQ29udGVudC9XRUItSU5GL2NsYXNzZXMiLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA0MWIyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPmJ1Z18xMTgyNTEtZzwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRpb25idWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy9XZWIgQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTQyNzJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUNsYXNzLVBhdGg6IAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy9XZWIgQ29udGVudC9XRUItSU5GL2NsYXNzZXMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy9XZWIgQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGY5YmM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L1dFQi1JTkYvdGxkL3NhbXBsZTJfZm9yXzExODI1MS1lLnRsZAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTx0YWdsaWI+Ci0KLSAgICAgPHRsaWJ2ZXJzaW9uPjAuMC4xPC90bGlidmVyc2lvbj4KLSAgICAgPGpzcHZlcnNpb24+MS4yPC9qc3B2ZXJzaW9uPgotICAgICA8c2hvcnRuYW1lPnNhbXBsZTwvc2hvcnRuYW1lPgotICAgICA8dXJpPmh0dHA6Ly9leGFtcGxlLmNvbS9zYW1wbGUyX2Zvcl8xMTgyNTEtZTwvdXJpPgotICAgICA8aW5mbz4KLSAgICAgICAgVGhpcyB0YWcgbGlicmFyeSBjb250YWlucyBqdXN0IG9uZSB0YWcuICBIYSBoYSEgCi0gICAgIDwvaW5mbz4KLQotICAgICA8dGFnPgotICAgICAgIDxuYW1lPmNvZGU8L25hbWU+Ci0gICAgICAgPHRhZ2NsYXNzPnNhbXBsZS50YWdsaWIuQ29kZVRhZzwvdGFnY2xhc3M+Ci0gICAgICAgPGJvZHljb250ZW50PnRhZ2RlcGVuZGVudDwvYm9keWNvbnRlbnQ+Ci0gICAgICAgPGF0dHJpYnV0ZT4KLSAgICAgICAgIDxuYW1lPmZvbnRBdHRyaWJ1dGVzPC9uYW1lPgotICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgIDxhdHRyaWJ1dGU+Ci0gICAgICAgICA8bmFtZT5jb21tZW50Q29sb3I8L25hbWU+Ci0gICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgPGF0dHJpYnV0ZT4KLSAgICAgICAgIDxuYW1lPnN0cmluZ0NvbG9yPC9uYW1lPgotICAgICAgIDwvYXR0cmlidXRlPgotICAgICA8L3RhZz4KLSAgIDwvdGFnbGliPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORi93ZWIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2QwN2YwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+Ci0JdGVzdDE8L2Rpc3BsYXktbmFtZT4KLQk8d2VsY29tZS1maWxlLWxpc3Q+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5qc3A8L3dlbGNvbWUtZmlsZT4KLQk8L3dlbGNvbWUtZmlsZS1saXN0PgotCTx0YWdsaWI+Ci0JICA8dGFnbGliLXVyaT4vdGFncy9zYW1wbGUyPC90YWdsaWItdXJpPgotCSAgPHRhZ2xpYi1sb2NhdGlvbj4vV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkPC90YWdsaWItbG9jYXRpb24+Ci0JPC90YWdsaWI+Ci08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy9XZWIgQ29udGVudC90ZXN0MS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy9XZWIgQ29udGVudC90ZXN0MS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZTAwY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvdGVzdDEuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPCVAdGFnbGliIHVyaT0iaHR0cDovL2phdmEuc3VuLmNvbS9qc2YvY29yZSIgcHJlZml4PSJjIiU+Ci08JUB0YWdsaWIgcHJlZml4PSJzYW1wbGUiIHVyaT0iaHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZS10YWdsaWIiICU+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxzYW1wbGU6Y29kZT4gYXNkZ2phbHNramdhICA8PCA8L3NhbXBsZTpjb2RlPgotCi08YzpvdXQgdmFsdWU9IiI+PC9jOm91dD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nL3NyYy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvc3JjLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvc3JjLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLXNhbXBsZS9zYW1wbGVfdGxkLmphciBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1zYW1wbGUvc2FtcGxlX3RsZC5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhOThjNDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLXNhbXBsZS9zYW1wbGVfdGxkLmphcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1zYW1wbGUvc2FtcGxlX3RsZC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtc2FtcGxlL3NhbXBsZV90bGQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODAzMDMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1zYW1wbGUvc2FtcGxlX3RsZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLVRoZSBhY2NvbXBhbnlpbmcgamFyIGNvbnRhaW5zIGEgVExEIHdpdGggYSBVUkkgc3BlY2lmaWVkIGluCi1pdCBhcyB3ZWxsIGFzIGEgYmlnIGxvbmcgZmlsZSB0aGF0IHNob3VsZCBzbG93IGRvd24gdGhlCi10YWdsaWIgaW5kZXhpbmcuCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMmFlNDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUuY29udGFpbmVyIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwud2ViLmNvbnRhaW5lciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJ1aWxkL2NsYXNzZXMiLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyMjVmYWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPnByajExOTU3Nl9hPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi52YWxpZGF0aW9uYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUubmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZS5Nb2R1bGVDb3JlTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaC5KYXZhRU1GTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZThiYzlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jTW9uIE1heSAwMSAxMzo0MToxOCBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qc3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmMwMTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jTW9uIE1heSAwMSAxMzo0MToyNCBFRFQgMjAwNgotY2xhc3NwYXRoLmhlbHBlci9vcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVJcOlw6b3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlXDpcOjEuNS4wXzAzL293bmVycz1qc3QuamF2YVw6NS4wCi1jbGFzc3BhdGguaGVscGVyL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5jb250YWluZXJcOlw6b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZVRhcmdldFw6XDpBcGFjaGVcIFRvbWNhdFwgdjUuNS45L293bmVycz1qc3Qud2ViXDoyLjQKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWUwYzE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50CisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QtbW9kdWxlcyBpZD0ibW9kdWxlQ29yZUlkIiBwcm9qZWN0LXZlcnNpb249IjEuNS4wIj4KLTx3Yi1tb2R1bGUgZGVwbG95LW5hbWU9IkNsZWFuVGVzdFdlYiI+Ci08d2ItcmVzb3VyY2UgZGVwbG95LXBhdGg9Ii8iIHNvdXJjZS1wYXRoPSIvV2ViQ29udGVudCIvPgotPHdiLXJlc291cmNlIGRlcGxveS1wYXRoPSIvV0VCLUlORi9jbGFzc2VzIiBzb3VyY2UtcGF0aD0iL3NyYyIvPgotPHByb3BlcnR5IG5hbWU9ImNvbnRleHQtcm9vdCIgdmFsdWU9IkNsZWFuVGVzdFdlYiIvPgotPHByb3BlcnR5IG5hbWU9ImphdmEtb3V0cHV0LXBhdGgiIHZhbHVlPSJidWlsZC9jbGFzc2VzIi8+Ci08L3diLW1vZHVsZT4KLTwvcHJvamVjdC1tb2R1bGVzPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWI5YjRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmYWNldGVkLXByb2plY3Q+Ci0gIDxydW50aW1lIG5hbWU9IkFwYWNoZSBUb21jYXQgdjUuNS45Ii8+Ci0gIDxmaXhlZCBmYWNldD0ianN0LmphdmEiLz4KLSAgPGZpeGVkIGZhY2V0PSJqc3Qud2ViIi8+Ci0gIDxpbnN0YWxsZWQgZmFjZXQ9ImpzdC5qYXZhIiB2ZXJzaW9uPSI1LjAiLz4KLSAgPGluc3RhbGxlZCBmYWNldD0ianN0LndlYiIgdmVyc2lvbj0iMi40Ii8+Ci08L2ZhY2V0ZWQtcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0MjcyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQ2xhc3MtUGF0aDogCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE5OGM0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvc2FtcGxlX3RsZC5qYXIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYyMzI3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJwcmoxMTk1NzZfYSIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLQk8ZGlzcGxheS1uYW1lPnByajExOTU3Nl9hPC9kaXNwbGF5LW5hbWU+Ci0JPHdlbGNvbWUtZmlsZS1saXN0PgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuanNwPC93ZWxjb21lLWZpbGU+Ci0JPC93ZWxjb21lLWZpbGUtbGlzdD4KLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC9ib2R5LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC9ib2R5LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc5YTQ0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvYm9keS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08JUAgaW5jbHVkZSBmaWxlID0gImhlYWRlci5qc3AiICU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L2JvZHkxLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC9ib2R5MS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NTQ5YjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L2JvZHkxLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTwlQCBpbmNsdWRlIGZpbGUgPSAidGFnbGliLmpzcGYiICU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L2JvZHkyLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC9ib2R5Mi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ZGI1YmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L2JvZHkyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPCVAIGluY2x1ZGUgZmlsZSA9ICJib2R5LmpzcCIgJT4KLTwlQCBpbmNsdWRlIGZpbGUgPSAiYm9keTEuanNwIiAlPgotPHNhbXBsZTpjb2RlLz4KLTwlIGphdmEudXRpbC5EYXRlIGJvZHlEYXRlID0gaGVhZGVyRGF0ZTsgJT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC9oZWFkZXIuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L2hlYWRlci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MzlmZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L2hlYWRlci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi1wYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwlIGphdmEudXRpbC5EYXRlIGhlYWRlckRhdGUgPSBudWxsOyAlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC90YWdsaWIuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC90YWdsaWIuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmMyZDg2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvdGFnbGliLmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08JUB0YWdsaWIgdXJpPSJodHRwOi8vZXhhbXBsZS5jb20vc2FtcGxlLXRhZ2xpYiIgcHJlZml4PSJzYW1wbGUiICU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L3Rlc3QxLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC90ZXN0MS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjZGI1NDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L3Rlc3QxLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTwlPSJIZWxsbywgV29ybGQhIiU+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9iaW4vLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvYmluLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9iaW4vLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL2J1aWxkL2NsYXNzZXMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2Evc3JjLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL3NyYy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2Evc3JjLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzJhZTQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLmNvbnRhaW5lciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLndlYi5jb250YWluZXIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJidWlsZC9jbGFzc2VzIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjI1ZmFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5wcmoxMTk1NzZfYTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24udmFsaWRhdGlvbmJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLm5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLm1vZHVsZWNvcmUuTW9kdWxlQ29yZU5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2guSmF2YUVNRk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU4YmM5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI01vbiBNYXkgMDEgMTM6NDE6MTggRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuanN0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qc3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZjMDEyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qc3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI01vbiBNYXkgMDEgMTM6NDE6MjQgRURUIDIwMDYKLWNsYXNzcGF0aC5oZWxwZXIvb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSXDpcOm9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZVw6XDoxLjUuMF8wMy9vd25lcnM9anN0LmphdmFcOjUuMAotY2xhc3NwYXRoLmhlbHBlci9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUuY29udGFpbmVyXDpcOm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWVUYXJnZXRcOlw6QXBhY2hlXCBUb21jYXRcIHY1LjUuOS9vd25lcnM9anN0LndlYlw6Mi40Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVlMGMxNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0LW1vZHVsZXMgaWQ9Im1vZHVsZUNvcmVJZCIgcHJvamVjdC12ZXJzaW9uPSIxLjUuMCI+Ci08d2ItbW9kdWxlIGRlcGxveS1uYW1lPSJDbGVhblRlc3RXZWIiPgotPHdiLXJlc291cmNlIGRlcGxveS1wYXRoPSIvIiBzb3VyY2UtcGF0aD0iL1dlYkNvbnRlbnQiLz4KLTx3Yi1yZXNvdXJjZSBkZXBsb3ktcGF0aD0iL1dFQi1JTkYvY2xhc3NlcyIgc291cmNlLXBhdGg9Ii9zcmMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0LXJvb3QiIHZhbHVlPSJDbGVhblRlc3RXZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJqYXZhLW91dHB1dC1wYXRoIiB2YWx1ZT0iYnVpbGQvY2xhc3NlcyIvPgotPC93Yi1tb2R1bGU+Ci08L3Byb2plY3QtbW9kdWxlcz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzliOWI0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmFjZXRlZC1wcm9qZWN0PgotICA8cnVudGltZSBuYW1lPSJBcGFjaGUgVG9tY2F0IHY1LjUuOSIvPgotICA8Zml4ZWQgZmFjZXQ9ImpzdC5qYXZhIi8+Ci0gIDxmaXhlZCBmYWNldD0ianN0LndlYiIvPgotICA8aW5zdGFsbGVkIGZhY2V0PSJqc3QuamF2YSIgdmVyc2lvbj0iNS4wIi8+Ci0gIDxpbnN0YWxsZWQgZmFjZXQ9ImpzdC53ZWIiIHZlcnNpb249IjIuNCIvPgotPC9mYWNldGVkLXByb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUNsYXNzLVBhdGg6IAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvc2FtcGxlX3RsZC5qYXIgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvc2FtcGxlX3RsZC5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhOThjNDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9XZWJDb250ZW50L1dFQi1JTkYvbGliL3NhbXBsZV90bGQuamFyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiYThiZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0icHJqMTE5NTc2X2IiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci0JPGRpc3BsYXktbmFtZT5wcmoxMTk1NzZfYjwvZGlzcGxheS1uYW1lPgotCTx3ZWxjb21lLWZpbGUtbGlzdD4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL1dlYkNvbnRlbnQvYm9keTEuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9XZWJDb250ZW50L2JvZHkxLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc5YTQ0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL1dlYkNvbnRlbnQvYm9keTEuanNwCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPCVAIGluY2x1ZGUgZmlsZSA9ICJoZWFkZXIuanNwIiAlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvV2ViQ29udGVudC9ib2R5My5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL1dlYkNvbnRlbnQvYm9keTMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjhkMjQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvV2ViQ29udGVudC9ib2R5My5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08JUBpbmNsdWRlIGZpbGUgPSAiYm9keTEuanNwIiAlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvV2ViQ29udGVudC9oZWFkZXIuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9XZWJDb250ZW50L2hlYWRlci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlY2YyN2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9XZWJDb250ZW50L2hlYWRlci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi1wYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwlQHRhZ2xpYiB1cmk9Imh0dHA6Ly9leGFtcGxlLmNvbS9zYW1wbGUtdGFnbGliIiBwcmVmaXg9InNhbXBsZSIgJT4KLTwlIGphdmEudXRpbC5EYXRlIGhlYWRlckRhdGUgPSBudWxsOyAlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvYmluLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL2Jpbi8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvYmluLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9idWlsZC9jbGFzc2VzLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL2J1aWxkL2NsYXNzZXMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL2J1aWxkL2NsYXNzZXMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL3NyYy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9zcmMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL3NyYy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MyYWU0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5jb250YWluZXIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC53ZWIuY29udGFpbmVyIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYnVpbGQvY2xhc3NlcyIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ5ZjRiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+cHJqMTE5NTc2X2M8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5idWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5uYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5tb2R1bGVjb3JlLk1vZHVsZUNvcmVOYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoLkphdmFFTUZOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlOGJjOWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNNb24gTWF5IDAxIDEzOjQxOjE4IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuanN0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYzAxMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuanN0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNNb24gTWF5IDAxIDEzOjQxOjI0IEVEVCAyMDA2Ci1jbGFzc3BhdGguaGVscGVyL29yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUlw6XDpvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGVcOlw6MS41LjBfMDMvb3duZXJzPWpzdC5qYXZhXDo1LjAKLWNsYXNzcGF0aC5oZWxwZXIvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLmNvbnRhaW5lclw6XDpvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5ydW50aW1lVGFyZ2V0XDpcOkFwYWNoZVwgVG9tY2F0XCB2NS41Ljkvb3duZXJzPWpzdC53ZWJcOjIuNAotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlZTBjMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnQKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdC1tb2R1bGVzIGlkPSJtb2R1bGVDb3JlSWQiIHByb2plY3QtdmVyc2lvbj0iMS41LjAiPgotPHdiLW1vZHVsZSBkZXBsb3ktbmFtZT0iQ2xlYW5UZXN0V2ViIj4KLTx3Yi1yZXNvdXJjZSBkZXBsb3ktcGF0aD0iLyIgc291cmNlLXBhdGg9Ii9XZWJDb250ZW50Ii8+Ci08d2ItcmVzb3VyY2UgZGVwbG95LXBhdGg9Ii9XRUItSU5GL2NsYXNzZXMiIHNvdXJjZS1wYXRoPSIvc3JjIi8+Ci08cHJvcGVydHkgbmFtZT0iY29udGV4dC1yb290IiB2YWx1ZT0iQ2xlYW5UZXN0V2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iamF2YS1vdXRwdXQtcGF0aCIgdmFsdWU9ImJ1aWxkL2NsYXNzZXMiLz4KLTwvd2ItbW9kdWxlPgotPC9wcm9qZWN0LW1vZHVsZXM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YjliNGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZhY2V0ZWQtcHJvamVjdD4KLSAgPHJ1bnRpbWUgbmFtZT0iQXBhY2hlIFRvbWNhdCB2NS41LjkiLz4KLSAgPGZpeGVkIGZhY2V0PSJqc3QuamF2YSIvPgotICA8Zml4ZWQgZmFjZXQ9ImpzdC53ZWIiLz4KLSAgPGluc3RhbGxlZCBmYWNldD0ianN0LmphdmEiIHZlcnNpb249IjUuMCIvPgotICA8aW5zdGFsbGVkIGZhY2V0PSJqc3Qud2ViIiB2ZXJzaW9uPSIyLjQiLz4KLTwvZmFjZXRlZC1wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTQyNzJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1DbGFzcy1QYXRoOiAKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9XZWJDb250ZW50L1dFQi1JTkYvbGliL3NhbXBsZV90bGQuamFyIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9XZWJDb250ZW50L1dFQi1JTkYvbGliL3NhbXBsZV90bGQuamFyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTk4YzQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzU2MGY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9InByajExOTU3Nl9jIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+cHJqMTE5NTc2X2M8L2Rpc3BsYXktbmFtZT4KLQk8d2VsY29tZS1maWxlLWxpc3Q+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5qc3A8L3dlbGNvbWUtZmlsZT4KLQk8L3dlbGNvbWUtZmlsZS1saXN0PgotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9XZWJDb250ZW50L2JvZHkxLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvV2ViQ29udGVudC9ib2R5MS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhYTIyODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9XZWJDb250ZW50L2JvZHkxLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPCVAIGluY2x1ZGUgZmlsZSA9ICJoZWFkZXIuanNwIiAlPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL1dlYkNvbnRlbnQvYm9keTMuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9XZWJDb250ZW50L2JvZHkzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFjNzNjZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL1dlYkNvbnRlbnQvYm9keTMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08JUBpbmNsdWRlIGZpbGUgPSAiYm9keTEuanNwIiAlPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL1dlYkNvbnRlbnQvaGVhZGVyLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvV2ViQ29udGVudC9oZWFkZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDNjN2EwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvV2ViQ29udGVudC9oZWFkZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUB0YWdsaWIgdXJpPSJodHRwOi8vZXhhbXBsZS5jb20vc2FtcGxlLXRhZ2xpYiIgcHJlZml4PSJzYW1wbGUiICU+Ci08JSBqYXZhLnV0aWwuRGF0ZSBoZWFkZXJEYXRlID0gbnVsbDsgJT4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9iaW4vLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvYmluLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9iaW4vLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL2J1aWxkL2NsYXNzZXMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2Mvc3JjLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL3NyYy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2Mvc3JjLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTFjOGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY4MmM3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotanNwZW5jb2Rpbmd0ZXN0cy5qYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWE2MWQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZDhiNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU3VuIEFwciAxNiAxNDozNzoyMSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjJhYzY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5lbmFibGUucHJvamVjdC5yZWZhY3RvcmluZy5oaXN0b3J5PWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MjQ5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6MDU6MjkgRURUIDIwMDYKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MTM0NWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAKLUJ1bmRsZS1DbGFzc1BhdGg6IGpzcGVuY29kaW5ndGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLkpTUEVuY29kaW5nVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5qc3AKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuanVuaXQsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlYzU5ODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+TWF5IDIsIDIwMDY8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDMwNGI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXNvdXJjZS5qc3BlbmNvZGluZ3Rlc3RzLmphciA9IHNyYy8KLW91dHB1dC5qc3BlbmNvZGluZ3Rlc3RzLmphciA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IGpzcGVuY29kaW5ndGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHRlc3RmaWxlcy8sXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLXNyYy5pbmNsdWRlcyA9IHRlc3RmaWxlcy8sXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThiMWI3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZS5vcmcKLUJ1bmRsZS1OYW1lLjAgPSBKU1AgRW5jb2RpbmcgVGVzdHMgUGx1Zy1pbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvSlNQRW5jb2RpbmdUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvSlNQRW5jb2RpbmdUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdjZmFhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL0pTUEVuY29kaW5nVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5qc3AuSlNQRW5jb2RpbmdUZXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLmpzcC5KU1BIZWFkVG9rZW5pemVyVGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuanNwLlRlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckpTUDsKLQotcHVibGljIGNsYXNzIEpTUEVuY29kaW5nVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQotCXByaXZhdGUgc3RhdGljIENsYXNzW10gY2xhc3NlcyA9IG5ldyBDbGFzc1tde0pTUEVuY29kaW5nVGVzdHMuY2xhc3MsIEpTUEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIFRlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckpTUC5jbGFzc307Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgSlNQRW5jb2RpbmdUZXN0U3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgSlNQRW5jb2RpbmdUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJKU1AgRW5jb2RpbmcgVGVzdCBTdWl0ZSIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKyspIHsKLQkJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShjbGFzc2VzW2ldLCBjbGFzc2VzW2ldLmdldE5hbWUoKSkpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRoZUNsYXNzCi0JICovCi0JcHVibGljIEpTUEVuY29kaW5nVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzKSB7Ci0JCXN1cGVyKHRoZUNsYXNzKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGhlQ2xhc3MKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBKU1BFbmNvZGluZ1Rlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcywgU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIodGhlQ2xhc3MsIG5hbWUpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEpTUEVuY29kaW5nVGVzdFN1aXRlKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL0pTUEVuY29kaW5nVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvSlNQRW5jb2RpbmdUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGUwYzY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvSlNQRW5jb2RpbmdUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIEpTUEVuY29kaW5nVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgSlNQRW5jb2RpbmdUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLQlwdWJsaWMgc3RhdGljIExpc3QgZ2V0QWxsVGVzdEZpbGVzKFN0cmluZyB0b3BEaXJOYW1lKSB7Ci0JCUxpc3QgcmVzdWx0ID0gbnVsbDsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIHRvcERpck5hbWU7Ci0JCUZpbGUgdG9wRGlyID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlpZiAoIXRvcERpci5pc0RpcmVjdG9yeSgpKSB7Ci0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKHRvcERpck5hbWUgKyAiIGlzIG5vdCBhIGRpcmVjdG9yeSIpOwotCQl9Ci0KLQkJcmVzdWx0ID0gZ2V0RmlsZXNJbkRpcih0b3BEaXIpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEpTUEVuY29kaW5nVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBMaXN0IGdldEZpbGVzSW5EaXIoRmlsZSB0b3BEaXIpIHsKLQkJTGlzdCBmaWxlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJRmlsZVtdIHRvcEZpbGVzID0gdG9wRGlyLmxpc3RGaWxlcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRvcEZpbGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlGaWxlIGZpbGUgPSB0b3BGaWxlc1tpXTsKLQkJCWlmIChmaWxlLmlzRmlsZSgpKSB7Ci0JCQkJZmlsZXMuYWRkKGZpbGUpOwotCQkJfQotCQkJZWxzZSBpZiAoZmlsZS5pc0RpcmVjdG9yeSgpICYmICFmaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgiQ1ZTIikpIHsKLQkJCQlMaXN0IGlubmVyRmlsZXMgPSBnZXRGaWxlc0luRGlyKGZpbGUpOwotCQkJCWZpbGVzLmFkZEFsbChpbm5lckZpbGVzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZXM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBVUkwgZ2V0SW5zdGFsbExvY2F0aW9uKCkgewotCQlVUkwgaW5zdGFsbExvY2F0aW9uID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nIikuZ2V0RW50cnkoIi8iKTsKLQkJVVJMIHJlc29sdmVkTG9jYXRpb24gPSBudWxsOwotCQl0cnkgewotCQkJcmVzb2x2ZWRMb2NhdGlvbiA9IEZpbGVMb2NhdG9yLnJlc29sdmUoaW5zdGFsbExvY2F0aW9uKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gaW1wb3NzaWJsZQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCXJldHVybiByZXNvbHZlZExvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsIG9yICdrZXknIGlmIG5vdAotCSAqIGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gSlNQRW5jb2RpbmdUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXkpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBnZXRUZXN0RmlsZShTdHJpbmcgZmlsZXBhdGgpIHsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIGZpbGVwYXRoOwotCQlGaWxlIHJlc3VsdCA9IG5ldyBGaWxlKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFJlYWRlciBnZXRUZXN0UmVhZGVyKFN0cmluZyBmaWxlcGF0aCkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJUmVhZGVyIHJlc3VsdCA9IG5ldyBGaWxlUmVhZGVyKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB3b3Jrc3BhY2UgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBJV29ya3NwYWNlIGdldFdvcmtzcGFjZSgpIHsKLQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEpTUEVuY29kaW5nVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9qc3AvSlNQRW5jb2RpbmdUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9qc3AvSlNQRW5jb2RpbmdUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWQ5MzRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvanNwL0pTUEVuY29kaW5nVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuanNwOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0RGVjb2RlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNvZGluZ0Vycm9yQWN0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLkpTUEVuY29kaW5nVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkVuY29kaW5nTWVtZW50bzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuSVJlc291cmNlQ2hhcnNldERldGVjdG9yOwotCi1wdWJsaWMgY2xhc3MgSlNQRW5jb2RpbmdUZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKgotCSAqIEVuc3VyZXMgdGhhdCBhbiBJbnB1dFN0cmVhbSBoYXMgbWFyay9yZXNldCBzdXBwb3J0LgotCSAqLwotCXByaXZhdGUgc3RhdGljIElucHV0U3RyZWFtIGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oSW5wdXRTdHJlYW0gb3JpZ2luYWwpIHsKLQkJaWYgKG9yaWdpbmFsID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJaWYgKG9yaWdpbmFsLm1hcmtTdXBwb3J0ZWQoKSkKLQkJCXJldHVybiBvcmlnaW5hbDsKLQkJcmV0dXJuIG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG9yaWdpbmFsKTsKLQl9Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZURpciA9ICJqc3AvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlSG9tZSA9ICJ0ZXN0ZmlsZXMvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlTG9jYXRpb24gPSBmaWxlSG9tZSArIGZpbGVEaXI7Ci0JcHJpdmF0ZSBpbnQgUkVBRF9CVUZGRVJfU0laRSA9IDgwMDA7Ci0KLQlwdWJsaWMgSlNQRW5jb2RpbmdUZXN0cyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZVN0cmVhbShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZElBTkFFbmNvZGluZywgSVJlc291cmNlQ2hhcnNldERldGVjdG9yIGRldGVjdG9yKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlGaWxlIGZpbGUgPSBKU1BFbmNvZGluZ1Rlc3RzUGx1Z2luLmdldFRlc3RGaWxlKGZpbGVuYW1lKTsKLQkJaWYgKCFmaWxlLmV4aXN0cygpKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihmaWxlbmFtZSArICIgd2FzIG5vdCBmb3VuZCIpOwotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7Ci0JCS8vIElucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJSW5wdXRTdHJlYW0gaXN0cmVhbSA9IGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oaW5wdXRTdHJlYW0pOwotCQl0cnkgewotCQkJZGV0ZWN0b3Iuc2V0KGlzdHJlYW0pOwotCQkJRW5jb2RpbmdNZW1lbnRvIGVuY29kaW5nTWVtZW50byA9ICgoSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKWRldGVjdG9yKS5nZXRFbmNvZGluZ01lbWVudG8oKTsKLQkJCVN0cmluZyBmb3VuZElBTkFFbmNvZGluZyA9IGVuY29kaW5nTWVtZW50by5nZXRKYXZhQ2hhcnNldE5hbWUoKTsKLQkJCS8vIEkgY2hhbmdlZCBtYW55ICJlcXVhbHMiIHRvICJlcXVhbHNJZ25vcmVDYXNlIiBvbiAxMS80LzIwMDIsCi0JCQkvLyBzaW5jZQotCQkJLy8gc29tZSBpc3N1ZXMgd2l0aCBTSElGVF9KSVMgdnMuIFNoaWZ0X0pJUyB3ZXJlIGNhdXNpbmcgZmFpbHVyZXMuCi0JCQkvLyBXZSBkbyB3YW50IHRvIGJlIHRvbGVyYW50IG9uIGlucHV0LCBhbmQgYWNjZXB0IGVpdGhlciwgYnV0IEkKLQkJCS8vIHRoaW5rCi0JCQkvLyB0aGF0IFN1cHBvcnRlZEphdmFFbmNvZGluZ3MgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byAicmVjb21tZW5kIgotCQkJLy8gU2hpZnRfSklTLgotCQkJYm9vbGVhbiBleHBlY3RlZElBTkFSZXN1bHQgPSBmYWxzZTsKLQkJCWV4cGVjdGVkSUFOQVJlc3VsdCA9IGV4cGVjdGVkSUFOQUVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoZm91bmRJQU5BRW5jb2RpbmcpOwotCi0JCQlhc3NlcnRUcnVlKCJlbmNvZGluZyB0ZXN0IGZpbGUgIiArIGZpbGVuYW1lICsgIiBleHBlY3RlZDogIiArIGV4cGVjdGVkSUFOQUVuY29kaW5nICsgIiBmb3VuZDogIiArIGZvdW5kSUFOQUVuY29kaW5nLCBleHBlY3RlZElBTkFSZXN1bHQpOwotCQkJLy8gYSB2ZXJ5IHNpbXBsZSByZWFkIHRlc3QgLi4uIHdpbGwgY2F1c2UgSlVuaXQgZXJyb3IgKG5vdCBmYWlsKQotCQkJLy8gaWYgdGhyb3dzIGV4Y2VwdGlvbi4KLQkJCWVuc3VyZUNhblJlYWQoZmlsZW5hbWUsIGZvdW5kSUFOQUVuY29kaW5nLCBpc3RyZWFtKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChpc3RyZWFtICE9IG51bGwpIHsKLQkJCQlpc3RyZWFtLmNsb3NlKCk7Ci0JCQl9Ci0JCQlpZiAoaW5wdXRTdHJlYW0gIT0gbnVsbCkgewotCQkJCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBqdXN0IHJlYWRzIHRvIHN0cmVhbSwgdG8gYmUgc3VyZSBpdCBjYW4gYmUgcmVhZCBwZXIKLQkgKiBlbmNvZGluZywgd2l0aG91dCBleGNlcHRpb24uCi0JICovCi0JcHJpdmF0ZSB2b2lkIGVuc3VyZUNhblJlYWQoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZW5jb2RpbmcsIElucHV0U3RyZWFtIGluU3RyZWFtKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlDaGFyc2V0IGNoYXJzZXQgPSBDaGFyc2V0LmZvck5hbWUoZW5jb2RpbmcpOwotCQlDaGFyc2V0RGVjb2RlciBjaGFyc2V0RGVjb2RlciA9IGNoYXJzZXQubmV3RGVjb2RlcigpOwotCQljaGFyc2V0RGVjb2Rlci5vbk1hbGZvcm1lZElucHV0KENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0JCWNoYXJzZXREZWNvZGVyLm9uVW5tYXBwYWJsZUNoYXJhY3RlcihDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCi0JCUlucHV0U3RyZWFtUmVhZGVyIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpblN0cmVhbSwgY2hhcnNldERlY29kZXIpOwotCQlTdHJpbmdCdWZmZXIgc3RyaW5nQnVmZmVyID0gcmVhZElucHV0U3RyZWFtKHJlYWRlcik7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZmlsZW5hbWUpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKHN0cmluZ0J1ZmZlci50b1N0cmluZygpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgU3RyaW5nQnVmZmVyIHJlYWRJbnB1dFN0cmVhbShSZWFkZXIgcmVhZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBudW1SZWFkID0gMDsKLQkJY2hhciB0QnVmZltdID0gbmV3IGNoYXJbUkVBRF9CVUZGRVJfU0laRV07Ci0JCXdoaWxlICgobnVtUmVhZCA9IHJlYWRlci5yZWFkKHRCdWZmLCAwLCB0QnVmZi5sZW5ndGgpKSAhPSAtMSkgewotCQkJYnVmZmVyLmFwcGVuZCh0QnVmZiwgMCwgbnVtUmVhZCk7Ci0JCX0KLQkJcmV0dXJuIGJ1ZmZlcjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0ZGVmZWN0NDIwNXdwc2pzcCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJkZWZlY3RfNDIwNV93cHMuanNwIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi04IiwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQRW1wdHlGaWxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIkVtcHR5RmlsZS5qc3AiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiSVNPLTg4NTktMSIsIG5ldyBKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JLyoqCi0JICogQ2F1dGlvbiwgd2hlbiB0aGlzIGZpbGUgcHJpbnRzIG91dCBpbiBjb25zb2xlICh3aGVuIGRlYnVnIHNldCB0byB0cnVlLAotCSAqIGl0IGFwcGVhcnMgaW5jb3JyZWN0IChkdWUgdG8gZm9udCBwcm9ibGVtcyBpbiBjb25zb2xlKS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTYoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdFVURjE2LmpzcCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTZCRSIsIG5ldyBKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyB0ZXN0IHNob3dzIHVuaWNvZGUgQk9NIHNob3VsZCB0YWtlIHByaW9yaXR5IG92ZXIgc2V0dGluZ3MvZGVmYXVsdHMKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi5qc3AiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2IiwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIHRlc3Qgc2hvd3MgdW5pY29kZSBCT00gc2hvdWxkIHRha2UgcHJpb3JpdHkgb3ZlciBzZXR0aW5ncy9kZWZhdWx0cwotCSAqIE5vdGU6IFVURi0xNiA9PSBVVEYtMTZCRQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RVdGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLmpzcCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTZCRSIsIG5ldyBKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFVURjE2V2l0aEphcGFuZXNlQ2hhcnMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZXaXRoSmFwYW5lc2VDaGFycy5qc3AiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2QkUiLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RVVEY4M0J5dGVCT00oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiVVRGOFdpdGgzQnl0ZUJPTS5qc3AiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTgiLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIklsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIjsKLQkJU3RyaW5nIGlhbmFJbkZpbGUgPSAiSVNPLTg4NTktOCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsIGlhbmFJbkZpbGUsIG5ldyBKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTE5vRW5jb2RpbmcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9FbmNvZGluZy5qc3AiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiSVNPLTg4NTktMSIsIG5ldyBKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTE5vcm1hbE5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9ybWFsTm9uRGVmYXVsdC5qc3AiOwotCQlTdHJpbmcgaWFuYUluRmlsZSA9ICJJU08tODg1OS04IjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgaWFuYUluRmlsZSwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9KU1BIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9KU1BIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjYjNkYjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9qc3AvSlNQSGVhZFRva2VuaXplclRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLmpzcDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSGVhZFBhcnNlclRva2VuOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5KU1BIZWFkVG9rZW5pemVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5KU1BIZWFkVG9rZW5pemVyQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuSlNQRW5jb2RpbmdUZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuRW5jb2RpbmdQYXJzZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLlhNTEhlYWRUb2tlbml6ZXJDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBKU1BIZWFkVG9rZW5pemVyVGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCXByaXZhdGUgU3RyaW5nIGZDaGFyc2V0OwotCXByaXZhdGUgU3RyaW5nIGZDb250ZW50VHlwZTsKLQlwcml2YXRlIFN0cmluZyBmQ29udGVudFR5cGVWYWx1ZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlRGlyID0gImpzcC8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVIb21lID0gInRlc3RmaWxlcy8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVIb21lICsgZmlsZURpcjsKLQlwcml2YXRlIFN0cmluZyBmUGFnZUVuY29kaW5nVmFsdWUgPSBudWxsOwotCXByaXZhdGUgU3RyaW5nIGZYTUxEZWNFbmNvZGluZ05hbWU7Ci0JcHJpdmF0ZSBTdHJpbmcgZkxhbmd1YWdlOwotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZXhwZWN0ZWROYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBleHBlY3RlZE5hbWUsIG51bGwsIG51bGwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkTmFtZSwgU3RyaW5nIGZpbmFsVG9rZW5UeXBlLCBTdHJpbmcgZXhwZWN0ZWRDb250ZW50VHlwZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSlNQSGVhZFRva2VuaXplciB0b2tlbml6ZXIgPSBudWxsOwotCQlSZWFkZXIgZmlsZVJlYWRlciA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAiICsgZmlsZW5hbWUpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJfQotCQkJZmlsZVJlYWRlciA9IEpTUEVuY29kaW5nVGVzdHNQbHVnaW4uZ2V0VGVzdFJlYWRlcihmaWxlbmFtZSk7Ci0JCQl0b2tlbml6ZXIgPSBuZXcgSlNQSGVhZFRva2VuaXplcihmaWxlUmVhZGVyKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciBvcGVuaW5nIGZpbGUgXCIiICsgZmlsZW5hbWUgKyAiXCIiKTsKLQkJfQotCi0JCUhlYWRQYXJzZXJUb2tlbiB0b2tlbiA9IHBhcnNlSGVhZGVyKHRva2VuaXplcik7Ci0JCVN0cmluZyByZXN1bHRWYWx1ZSA9IGdldEFwcHJvcHJpYXRlRW5jb2RpbmcoKTsKLQkJZmlsZVJlYWRlci5jbG9zZSgpOwotCQlpZiAoZmluYWxUb2tlblR5cGUgIT0gbnVsbCkgewotCQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBlbmQgYXMgZXhwZWN0ZWQuIGZvdW5kOiAgIiArIHRva2VuLmdldFR5cGUoKSwgZmluYWxUb2tlblR5cGUuZXF1YWxzKHRva2VuLmdldFR5cGUoKSkpOwotCQl9Ci0KLQkJaWYgKGV4cGVjdGVkTmFtZSA9PSBudWxsKSB7Ci0JCQlhc3NlcnRUcnVlKCJleHBlY3RlZCBubyBlbmNvZGluZywgYnV0IGZvdW5kOiAiICsgcmVzdWx0VmFsdWUsIHJlc3VsdFZhbHVlID09IG51bGwpOwotCQl9Ci0JCWVsc2UgewotCQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgIiArIGV4cGVjdGVkTmFtZSArICIgYnV0IGZvdW5kICIgKyByZXN1bHRWYWx1ZSwgZXhwZWN0ZWROYW1lLmVxdWFscyhyZXN1bHRWYWx1ZSkpOwotCQl9Ci0KLQkJU3RyaW5nIGZvdW5kQ29udGVudFR5cGUgPSBnZXRDb250ZW50VHlwZSgpOwotCQlpZiAoZXhwZWN0ZWRDb250ZW50VHlwZSA9PSBudWxsKSB7Ci0JCQlhc3NlcnRUcnVlKCJleHBlY3RlZCBubyBjb250ZW50VHlwZSwgYnV0IGZvdW5kOiAiICsgZm91bmRDb250ZW50VHlwZSwgZm91bmRDb250ZW50VHlwZSA9PSBudWxsKTsKLQkJfQotCQllbHNlIHsKLQkJCWFzc2VydFRydWUoImV4cGVjdGVkICIgKyBleHBlY3RlZENvbnRlbnRUeXBlICsgIiBidXQgZm91bmQgIiArIGZvdW5kQ29udGVudFR5cGUsIGV4cGVjdGVkQ29udGVudFR5cGUuZXF1YWxzKGZvdW5kQ29udGVudFR5cGUpKTsKLQkJfQotCi0JfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdE1hbGZvcm1lZE5vRW5jb2RpbmcoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk1hbGZvcm1lZE5vRW5jb2RpbmcuanNwIjsKLQkvLyBkb1Rlc3RGaWxlKGZpbGVuYW1lKTsKLQkvLyB9Ci0JLy8gcHVibGljIHZvaWQgdGVzdE1hbGZvcm1lZE5vRW5jb2RpbmdYU0woKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk1hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwIjsKLQkvLyBkb1Rlc3RGaWxlKGZpbGVuYW1lKTsKLQkvLyB9Ci0JLy8gcHVibGljIHZvaWQgdGVzdE5vRW5jb2RpbmcoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk5vRW5jb2RpbmcuanNwIjsKLQkvLyBkb1Rlc3RGaWxlKGZpbGVuYW1lKTsKLQkvLyB9Ci0JcHVibGljIHZvaWQgdGVzdE5vcm1hbE5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9ybWFsTm9uRGVmYXVsdC5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktOCIpOwotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk5vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdC5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0ZGVmZWN0MjIzMzY1KCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJTZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvKioKLQkgKiByZXR1cm5zIGVuY29kaW5nIGFjY29yZGluZyB0byBwcmlvcml0eTogMS4gWE1MIERlY2xhcmF0aW9uIDIuIHBhZ2UKLQkgKiBkaXJlY3RpdmUgcGFnZUVuY29kaW5nIG5hbWUgMy4gcGFnZSBkaXJlY3RpdmUgY29udGVudFR5cGUgY2hhcnNldCBuYW1lCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0QXBwcm9wcmlhdGVFbmNvZGluZygpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0JCWlmIChmWE1MRGVjRW5jb2RpbmdOYW1lICE9IG51bGwpCi0JCQlyZXN1bHQgPSBmWE1MRGVjRW5jb2RpbmdOYW1lOwotCQllbHNlIGlmIChmUGFnZUVuY29kaW5nVmFsdWUgIT0gbnVsbCkKLQkJCXJlc3VsdCA9IGZQYWdlRW5jb2RpbmdWYWx1ZTsKLQkJZWxzZSBpZiAoZkNoYXJzZXQgIT0gbnVsbCkKLQkJCXJlc3VsdCA9IGZDaGFyc2V0OwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGdldENvbnRlbnRUeXBlKCkgewotCQlyZXR1cm4gZkNvbnRlbnRUeXBlOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0xlZ2FsU3RyaW5nKFN0cmluZyB0b2tlblR5cGUpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkJaWYgKHRva2VuVHlwZSAhPSBudWxsKSB7Ci0JCQlyZXN1bHQgPSB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLlN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLlVuRGVsaW1pdGVkU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuSW52YWxpZFRlcm1pbmF0ZWRTdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5JbnZhbGlkVGVybWludGF0ZWRVbkRlbGltaXRlZFN0cmluZ1ZhbHVlKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBleGFjdGx5IHRoZSBzYW1lIGFzIHdoYXQgaXMgaW4KLQkgKiBKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IKLQkgKiAKLQkgKiBAcGFyYW0gY29udGVudFR5cGUKLQkgKi8KLQlwcml2YXRlIHZvaWQgcGFyc2VDb250ZW50VHlwZVZhbHVlKFN0cmluZyBjb250ZW50VHlwZSkgewotCQlQYXR0ZXJuIHBhdHRlcm4gPSBQYXR0ZXJuLmNvbXBpbGUoIjtcXHMqY2hhcnNldFxccyo9XFxzKiIpOyAvLyROT04tTkxTLTEkCi0JCVN0cmluZ1tdIHBhcnRzID0gcGF0dGVybi5zcGxpdChjb250ZW50VHlwZSk7Ci0JCWlmIChwYXJ0cy5sZW5ndGggPiAwKSB7Ci0JCQkvLyBpZiBvbmx5IG9uZSBpdGVtLCBpdCBjYW4gc3RpbGwgYmUgY2hhcnNldCBpbnN0ZWFkIG9mCi0JCQkvLyBjb250ZW50VHlwZQotCQkJaWYgKHBhcnRzLmxlbmd0aCA9PSAxKSB7Ci0JCQkJaWYgKHBhcnRzWzBdLmxlbmd0aCgpID4gNikgewotCQkJCQlTdHJpbmcgY2hlY2tGb3JDaGFyc2V0ID0gcGFydHNbMF0uc3Vic3RyaW5nKDAsIDcpOwotCQkJCQlpZiAoY2hlY2tGb3JDaGFyc2V0LmVxdWFsc0lnbm9yZUNhc2UoImNoYXJzZXQiKSkgewotCQkJCQkJaW50IGVxcG9zID0gcGFydHNbMF0uaW5kZXhPZignPScpOwotCQkJCQkJZXFwb3MgPSBlcXBvcyArIDE7Ci0JCQkJCQlpZiAoZXFwb3MgPCBwYXJ0c1swXS5sZW5ndGgoKSkgewotCQkJCQkJCWZDaGFyc2V0ID0gcGFydHNbMF0uc3Vic3RyaW5nKGVxcG9zKTsKLQkJCQkJCQlmQ2hhcnNldCA9IGZDaGFyc2V0LnRyaW0oKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCWZDb250ZW50VHlwZSA9IHBhcnRzWzBdOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJZkNvbnRlbnRUeXBlID0gcGFydHNbMF07Ci0JCQl9Ci0JCX0KLQkJaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHsKLQkJCWZDaGFyc2V0ID0gcGFydHNbMV07Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBHaXZlJ3MgcHJpb3JpdHkgdG8gZW5jb2RpbmcgdmFsdWUsIGlmIGZvdW5kIGVsc2UsIGxvb2tzIGZvciBjb250ZW50VHlwZQotCSAqIHZhbHVlOwotCSAqLwotCXByaXZhdGUgSGVhZFBhcnNlclRva2VuIHBhcnNlSGVhZGVyKEpTUEhlYWRUb2tlbml6ZXIgdG9rZW5pemVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlmUGFnZUVuY29kaW5nVmFsdWUgPSBudWxsOwotCQlmQ2hhcnNldCA9IG51bGw7Ci0JCWZDb250ZW50VHlwZSA9IG51bGw7Ci0JCUhlYWRQYXJzZXJUb2tlbiB0b2tlbiA9IG51bGw7Ci0JCUhlYWRQYXJzZXJUb2tlbiBmaW5hbFRva2VuID0gbnVsbDsKLQkJZG8gewotCQkJdG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQlTdHJpbmcgdG9rZW5UeXBlID0gdG9rZW4uZ2V0VHlwZSgpOwotCi0JCQlpZiAodG9rZW5UeXBlID09IFhNTEhlYWRUb2tlbml6ZXJDb25zdGFudHMuWE1MRGVsRW5jb2RpbmcpIHsKLQkJCQlpZiAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCQlIZWFkUGFyc2VyVG9rZW4gdmFsdWVUb2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKLQkJCQkJU3RyaW5nIHZhbHVlVG9rZW5UeXBlID0gdmFsdWVUb2tlbi5nZXRUeXBlKCk7Ci0JCQkJCWlmIChpc0xlZ2FsU3RyaW5nKHZhbHVlVG9rZW5UeXBlKSkgewotCQkJCQkJZlhNTERlY0VuY29kaW5nTmFtZSA9IHZhbHVlVG9rZW4uZ2V0VGV4dCgpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZiAodG9rZW5UeXBlID09IEpTUEhlYWRUb2tlbml6ZXJDb25zdGFudHMuUGFnZUVuY29kaW5nKSB7Ci0JCQkJaWYgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQkJSGVhZFBhcnNlclRva2VuIHZhbHVlVG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQkJCVN0cmluZyB2YWx1ZVRva2VuVHlwZSA9IHZhbHVlVG9rZW4uZ2V0VHlwZSgpOwotCQkJCQlpZiAoaXNMZWdhbFN0cmluZyh2YWx1ZVRva2VuVHlwZSkpIHsKLQkJCQkJCWZQYWdlRW5jb2RpbmdWYWx1ZSA9IHZhbHVlVG9rZW4uZ2V0VGV4dCgpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZiAodG9rZW5UeXBlID09IEpTUEhlYWRUb2tlbml6ZXJDb25zdGFudHMuUGFnZUNvbnRlbnRUeXBlKSB7Ci0JCQkJaWYgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQkJSGVhZFBhcnNlclRva2VuIHZhbHVlVG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQkJCVN0cmluZyB2YWx1ZVRva2VuVHlwZSA9IHZhbHVlVG9rZW4uZ2V0VHlwZSgpOwotCQkJCQlpZiAoaXNMZWdhbFN0cmluZyh2YWx1ZVRva2VuVHlwZSkpIHsKLQkJCQkJCWZDb250ZW50VHlwZVZhbHVlID0gdmFsdWVUb2tlbi5nZXRUZXh0KCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIGlmICh0b2tlblR5cGUgPT0gSlNQSGVhZFRva2VuaXplckNvbnN0YW50cy5QYWdlTGFuZ3VhZ2UpIHsKLQkJCQlpZiAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCQlIZWFkUGFyc2VyVG9rZW4gdmFsdWVUb2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKLQkJCQkJU3RyaW5nIHZhbHVlVG9rZW5UeXBlID0gdmFsdWVUb2tlbi5nZXRUeXBlKCk7Ci0JCQkJCWlmIChpc0xlZ2FsU3RyaW5nKHZhbHVlVG9rZW5UeXBlKSkgewotCQkJCQkJZkxhbmd1YWdlID0gdmFsdWVUb2tlbi5nZXRUZXh0KCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpOwotCQlpZiAoZkNvbnRlbnRUeXBlVmFsdWUgIT0gbnVsbCkgewotCQkJcGFyc2VDb250ZW50VHlwZVZhbHVlKGZDb250ZW50VHlwZVZhbHVlKTsKLQkJfQotCQlmaW5hbFRva2VuID0gdG9rZW47Ci0JCXJldHVybiBmaW5hbFRva2VuOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCZXN0Q2FzZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub21hbERpcmVjdGl2ZUNhc2UuanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTIiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1pbmltYWxQYWdlRGlyZWN0aXZlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIm1pbmltYWxQYWdlRGlyZWN0aXZlLmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsRm9ybWVkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RJbGxGb3JtZWQuanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdElsbEZvcm1lZDIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdElsbEZvcm1lZDIuanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi04Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdElsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktOCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1wdHlGaWxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIkVtcHR5RmlsZS5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXgoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTIiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vUGFnZURpcmVjdGl2ZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb3JtYWxQYWdlRGlyZWN0aXZlV2l0aFhNTERlY2woKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9tYWxEaXJlY3RpdmVDYXNld2l0aFhNTERlY2wuanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTEiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMiIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9QYWdlRGlyZWN0aXZlSW5MYXJnZUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwsIEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLk1BWF9DSEFSU19SRUFDSEVELCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsQ2FzZVdpdGhOZWl0aGVyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIm5vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vcm1hbENoYXJzZXQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS0zIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TGFuZ3VhZ2UoKSB7Ci0JCXJldHVybiBmTGFuZ3VhZ2U7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9qc3AvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySlNQLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JKU1AuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUxMTNkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JKU1AuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5qc3A7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnREZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQuVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySlNQIGV4dGVuZHMgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uIHsKLQotCXByb3RlY3RlZCB2b2lkIGRvVGVzdChTdHJpbmcgZXhwZWN0ZWRDb250ZW50VHlwZSwgU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZEV4Y2VwdGlvbiwgU3RyaW5nIGV4cGVjdGVkSlNQQ29udGVudFR5cGUpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCXN1cGVyLmRvVGVzdChleHBlY3RlZENvbnRlbnRUeXBlLCBmaWxlUGF0aCwgZXhwZWN0ZWRFeGNlcHRpb24pOwotCQkKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZ2V0VGVzdFByb2plY3QoKS5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiRXJyb3IgaW4gdGVzdCBjYXNlOiBmaWxlIG5vdCBmb3VuZDogIiArIGZpbGVQYXRoLCBmaWxlKTsKLQotCi0JCUlDb250ZW50RGVzY3JpcHRpb24gc3RyZWFtQ29udGVudERlc2NyaXB0aW9uID0gZG9HZXRDb250ZW50VHlwZUJhc2VkT25TdHJlYW0oZmlsZSk7Ci0JCUlDb250ZW50RGVzY3JpcHRpb24gZmlsZUNvbnRlbnREZXNjcmlwdGlvbiA9IGRvR2V0Q29udGVudFR5cGVCYXNlZE9uRmlsZShmaWxlKTsKLQotCQlTdHJpbmcgc3RyZWFtSlNQQ29udGVudFR5cGUgPSAoU3RyaW5nKSBzdHJlYW1Db250ZW50RGVzY3JpcHRpb24uZ2V0UHJvcGVydHkoSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUC5DT05URU5UX1RZUEVfQVRUUklCVVRFKTsKLQotCQljaGVja1Jlc3VsdHMoZXhwZWN0ZWRKU1BDb250ZW50VHlwZSwgc3RyZWFtSlNQQ29udGVudFR5cGUpOwotCQkKLQkJCi0JCVN0cmluZyBmaWxlSlNQQ29udGVudFR5cGUgPSAoU3RyaW5nKSBmaWxlQ29udGVudERlc2NyaXB0aW9uLmdldFByb3BlcnR5KElDb250ZW50RGVzY3JpcHRpb25Gb3JKU1AuQ09OVEVOVF9UWVBFX0FUVFJJQlVURSk7Ci0JCWNoZWNrUmVzdWx0cyhleHBlY3RlZEpTUENvbnRlbnRUeXBlLCBmaWxlSlNQQ29udGVudFR5cGUpOwotCi0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tSZXN1bHRzKFN0cmluZyBleHBlY3RlZEpTUENvbnRlbnRUeXBlLCBTdHJpbmcgZm91bmRKU1BDb250ZW50VHlwZSkgewotCQlpZiAoZXhwZWN0ZWRKU1BDb250ZW50VHlwZSA9PSBudWxsKSB7Ci0JCQlhc3NlcnRUcnVlKCJleHBlY3RlZCBubyBjb250ZW50VHlwZSwgYnV0IGZvdW5kOiAiICsgZm91bmRKU1BDb250ZW50VHlwZSwgZm91bmRKU1BDb250ZW50VHlwZSA9PSBudWxsKTsKLQkJfQotCQllbHNlIHsKLQkJCWFzc2VydFRydWUoImV4cGVjdGVkICIgKyBleHBlY3RlZEpTUENvbnRlbnRUeXBlICsgIiBidXQgZm91bmQgIiArIGZvdW5kSlNQQ29udGVudFR5cGUsIGV4cGVjdGVkSlNQQ29udGVudFR5cGUuZXF1YWxzKGZvdW5kSlNQQ29udGVudFR5cGUpKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm1CLmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjQyOTMvdGVzdHNoaWZ0amlzWG1sU3ludGF4LmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL0VtcHR5RmlsZS5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL2luVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcCIsIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9qYXZhRW5jb2RpbmdWYWx1ZS5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9Ob0VuY29kaW5naW5YTUxEZWNsLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheC5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHQuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHRXaXRoWE1MRGVjbC5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCXB1YmxpYyB2b2lkIG5vbWFsRGlyZWN0aXZlQ2FzZXdpdGhYTUxEZWNsKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNld2l0aFhNTERlY2wuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC90ZXN0QnJva2VuTGluZS5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYUp1bmsuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYVZhbGlkU3R1ZmYuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdFVURjE2LmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9VVEY4V2l0aDNCeXRlQk9NLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9XZWxsRm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M4MGJkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0Ci0JbmFtZT0idGVzdHN1aXRlIgotCWRlZmF1bHQ9InJ1biIKLQliYXNlZGlyPSIuIj4KLQotCTwhLS0gQ29uZmlndXJhYmxlIFByb3BlcnRpZXMgLS0+Ci0KLQk8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotCTwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0JPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIgLz4gLS0+Ci0KLQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JPGVjaG8gbWVzc2FnZT0iZWNsaXBzZSBwbGFjZSAke2VjbGlwc2UtaG9tZX0iIC8+Ci0KLQk8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgcGx1Z2luLW5hbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9InBsdWdpbi1uYW1lIgotCQl2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZyIgLz4KLQk8cHJvcGVydHkKLQkJbmFtZT0ibGlicmFyeS1maWxlIgotCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLQk8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotCTwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotCTx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldAotCQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9IgotCQkJCWluY2x1ZGVzPSJvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLip4bWwiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLQk8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQkJPHByb3BlcnR5Ci0JCQluYW1lPSJ3c3QtZm9sZGVyIgotCQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93c3RfZm9sZGVyIiAvPgotCQk8ZGVsZXRlCi0JCQlkaXI9IiR7d3N0LWZvbGRlcn0iCi0JCQlxdWlldD0idHJ1ZSIgLz4KLQkJPGFudAotCQkJdGFyZ2V0PSJjb3JlLXRlc3QiCi0JCQlhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0JCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJkYXRhLWRpciIKLQkJCQl2YWx1ZT0iJHt3c3QtZm9sZGVyfSIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9InBsdWdpbi1uYW1lIgotCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iY2xhc3NuYW1lIgotCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLkpTUEVuY29kaW5nVGVzdFN1aXRlIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0icGx1Z2luLXBhdGgiCi0JCQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLQk8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLQkJPCEtLTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPi0tPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLQk8dGFyZ2V0Ci0JCW5hbWU9InJ1biIKLQkJZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLQkJPGFudAotCQkJdGFyZ2V0PSJjb2xsZWN0IgotCQkJYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iaW5jbHVkZXMiCi0JCQkJdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuKnhtbCIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9Im91dHB1dC1maWxlIgotCQkJCXZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0JCTwvYW50PgotCQk8IS0tPGVtYWlsUmVzdWx0cyByZXN1bHRzRmlsZT0iJHtidWlsZC1yZXN1bHRzLWhvbWV9LyR7cGx1Z2luLW5hbWV9LnhtbCIgYWRkcmVzc2xpc3Q9ImRhdmlkX3dpbGxpYW1zQHVzLmlibS5jb20iIC8+IC0tPgotCTwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL0VtcHR5RmlsZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvRW1wdHlGaWxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvRW1wdHlGaWxlLmpzcAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmZDBlNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS04Pz4NCi08JUBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktNyU+DQotPHRlc3Q+DQotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY1ZWIxNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IiI/Pg0KLTx0YWc+DQotQXVzdHJhbGnrDQotPC90YWc+DQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzMzNTlkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nWFNMLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iIj8+DQotPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIg0KLSAgICB2ZXJzaW9uPSIxLjAiDQotICAgIHhtbG5zOnhhbGFuPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdCI+DQotPHhzbDp2YXJpYWJsZSBuYW1lPSJiYWRFbmNvZGluZyI+DQotQXVzdHJhbGnrDQotPC94c2w6dmFyaWFibGU+DQotPC94c2w6c3R5bGVzaGVldD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9FbmNvZGluZ2luWE1MRGVjbC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9FbmNvZGluZ2luWE1MRGVjbC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1Y2U3NmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vRW5jb2RpbmdpblhNTERlY2wuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTg5ZTY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iOTkiIGVuY29kaW5nPSJJU08tODg1OS04Ij8+DQotPHRlc3Q+DQotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0V2l0aFhNTERlY2wuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHRXaXRoWE1MRGVjbC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NjI0OGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHRXaXRoWE1MRGVjbC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTgiPz4NCi08JUBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIHBhZ2V0RW5jb2Rpbmc9IklTTy04ODU5LTciJT4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYyN2JiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotDQotPCVAcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTciICU+DQotPHRlc3Q+DQotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODM3ZWU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+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+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1VURjhXaXRoM0J5dGVCT00uanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1VURjhXaXRoM0J5dGVCT00uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWEzOWNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9VVEY4V2l0aDNCeXRlQk9NLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1dlbGxGb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9XZWxsRm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmMjk2NTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1dlbGxGb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktOCI/Pg0KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktNyIlPg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvZGVmZWN0XzQyMDVfd3BzLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9kZWZlY3RfNDIwNV93cHMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGRiZDZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9kZWZlY3RfNDIwNV93cHMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPCVAIHBhZ2Ugc2Vzc2lvbj0iZmFsc2UiIGJ1ZmZlcj0ibm9uZSIgJT4NCi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDtjaGFyc2V0PXV0Zi04IiU+DQotPCVAIHRhZ2xpYiB1cmk9Ii9XRUItSU5GL3RsZC9lbmdpbmUudGxkIiBwcmVmaXg9IndwcyIgJT4NCi08d3BzOmNvbnN0YW50cy8+DQotDQotPHRhYmxlPg0KLTx0cj48dGQ+PGltZyBhbHQ9IiIgdGl0bGU9IiIgc3JjPSc8JT0gd3BzQmFzZVVSTCAlPi9pbWFnZXMvd2VsY29tZV81LmdpZicgYm9yZGVyPSIwIiBhbGlnbj0ibGVmdCIgLz48L3RkPjwvdHI+DQotPHRyPjx0ZD4NCi08c3BhbiBjbGFzcz0id3BzVGlueVRleHQiPjxiPjwlPSBWZXJzaW9uLlNFUlZFUl9OQU1FICU+IDwlPSBWZXJzaW9uLlNFUlZFUl9WRVJTSU9OICU+PC9iPjxici8+DQot5bu6572u5bGk5qyh77yaPCU9IFZlcnNpb24uQlVJTERfTlVNQkVSICU+IDwlPSBWZXJzaW9uLkJVSUxEX0RBVEUgJT4gPCU9IFZlcnNpb24uQlVJTERfVElNRSAlPjxici8+DQotPGJyLz4NCi1MaWNlbnNlZCBNYXRlcmlhbHMgLSBQcm9wZXJ0eSBvZiBJQk08YnIvPg0KLTwlPSBWZXJzaW9uLlBST0RVQ1RfTlVNQkVSICU+PGJyLz4NCi0oQykgQ29weXJpZ2h0IElCTSBDb3JwLiA8JT0gQ29weXJpZ2h0LllFQVJTICU+IEFsbCBSaWdodHMgUmVzZXJ2ZWQuPC9zcGFuPjwvdGQ+PC90cj4NCi08L3RhYmxlPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvaW5WYWxpZEVuY29kaW5nVmFsdWUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDA5MmUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08SFRNTD4NCi08SEVBRD4NCi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PWFiYyINCi0lPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4NCi08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08VElUTEU+aW5WYWxpZEVuY29kaW5nVmFsdWUuanNwPC9USVRMRT4NCi08L0hFQUQ+DQotPEJPRFk+DQotPFA+UGxhY2UgaW5WYWxpZEVuY29kaW5nVmFsdWUuanNwJ3MgY29udGVudCBoZXJlLjwvUD4NCi08L0JPRFk+DQotPC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9qYXZhRW5jb2RpbmdWYWx1ZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvamF2YUVuY29kaW5nVmFsdWUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWM2ZDE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9qYXZhRW5jb2RpbmdWYWx1ZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08SFRNTD4NCi08SEVBRD4NCi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSIgIA0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9Q3AxMjUyIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxUSVRMRT5pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSBpblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AncyBjb250ZW50IGhlcmUuPC9QPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL21pbmltYWxQYWdlRGlyZWN0aXZlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9taW5pbWFsUGFnZURpcmVjdGl2ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YTIyYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL21pbmltYWxQYWdlRGlyZWN0aXZlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWwiICU+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDlkMDRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub0VuY29kaW5nLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWwiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+DQotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPFRJVExFPm5vRW5jb2RpbmcuanNwPC9USVRMRT4NCi08L0hFQUQ+DQotPEJPRFk+DQotPFA+UGxhY2Ugbm9FbmNvZGluZy5qc3AncyBjb250ZW50IGhlcmUuPC9QPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI0MzJmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPCVAIHBhZ2UNCi1wYWdlRW5jb2Rpbmc9ICJJU08tODg1OS0yIg0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMyINCi0lPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY1NjkwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlTm9FbmNvZGluZy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLSU+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nQ2hhcnNldC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRkOTA4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0zIg0KLSU+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NzRhMDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPGpzcDpkaXJlY3RpdmUucGFnZSANCi1wYWdlRW5jb2Rpbmc9IklTTy04ODU5LTIiDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0zIi8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZXdpdGhYTUxEZWNsLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2V3aXRoWE1MRGVjbC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxY2IwNDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZXdpdGhYTUxEZWNsLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pg0KLTwlQCBwYWdlDQotcGFnZUVuY29kaW5nPSAiSVNPLTg4NTktMiINCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTMiDQotJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RCcm9rZW5MaW5lLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI2Nzk4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiICANCi0NCi1lbmNvZGluZz0iSVNPLTg4NTktMyIgDQotDQotID8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWYyODdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InRlc3RqdW5rIj8+DQotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotPEhUTUw+DQotPEhFQUQ+DQotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dGVzdGp1bmsiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxUSVRMRT50ZXN0RGVmYXVsdEVuY29kaW5nLmpzcDwvVElUTEU+DQotPC9IRUFEPg0KLTxCT0RZPg0KLTxQPlBsYWNlIHRlc3REZWZhdWx0RW5jb2RpbmcuanNwJ3MgY29udGVudCBoZXJlLjwvUD4NCi08L0JPRFk+DQotPC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nV2l0aEp1bmsuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNDg2ODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ0ZXN0anVuayI/Pg0KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSINCi0lPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXRlc3RqdW5rIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4NCi08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08VElUTEU+dGVzdERlZmF1bHRFbmNvZGluZy5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSB0ZXN0RGVmYXVsdEVuY29kaW5nLmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPCUNCi1TeXN0ZW0ub3V0LnByaW50bG4oInRlc3QiKTsNCi0lPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYUp1bmsuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYUp1bmsuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTdmOTU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFKdW5rLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiAgYWJjZD0iZWZjIg0KLQ0KLWVuY29kaW5nPSJJU08tODg1OS0xIiANCi0NCi0gPz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3ZDBhM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYVZhbGlkU3R1ZmYuanNwCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZiZjkwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAgZW5jb2Rpbmc9VVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkMi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZDIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzhlYzJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkMi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9VVRGLTggDQotPHRlc3Q+DQotPC90ZXN0Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNkMGMxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vRW5jb2RpbmdWYWx1ZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiICAgID8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTAxNzRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPHRlc3Q+DQotDQotPC90ZXN0Pg0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUF0Rmlyc3QuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWEwYzNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTx0ZXN0Pg0KLSA8JUAgcGFnZSANCi1wYWdlRW5jb2Rpbmc9IklTTy04ODU5LTIiDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0zIg0KLSU+DQotPC90ZXN0Pg0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlSW5MYXJnZUZpbGUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczNDYzNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNTYgKzAsMCBAQAotPHRlc3Q+DQotDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLTwvdGVzdD4NCi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vcm1hbENhc2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTJjNDJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuRnJvbU5vdGVwYWRqc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdFVURjE2LkZyb21Ob3RlcGFkanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWI5ODUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuRnJvbU5vdGVwYWRqc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdFVURjE2LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDllODE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZTY5MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZmZkNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkYmE5YmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTFjOGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E1ZTkzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLWJpbgotYmluLnByb2plY3QKLWJ1aWxkLnhtbAotZGV2LnByb3BlcnRpZXMKLW9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHNfMS4wLjAuamFyCi1qc3B1aXRlc3RzLmphcgotdGVtcC5mb2xkZXIKLVBlcmZvcm1hbmNlUmVzdWx0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYTUwZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkOGI1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjM3OjIxIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFjNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyNDk1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jU3VuIEFwciAxNiAxNDowNToyOSBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZiNzQxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHM7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4wCi1CdW5kbGUtQ2xhc3NQYXRoOiBqc3B1aXRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5KU1BVSVRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGFzc2lzdCwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmNvbnRlbnRhc3Npc3QudGVzdGZpbGVzLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGRlc2NyaXB0aW9uLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuZG9jdW1lbnQsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5leGFtcGxlcywKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm1vZGVsLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMubW9kZWxxdWVyeSwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm90aGVyLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMucGFnZWRpcmVjdGl2ZSwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnBhcnRpdGlvbmluZywKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnBhcnRpdGlvbmluZy50ZXN0ZmlsZXMuanNwLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMucmVnaXN0cnksCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5zZWFyY2gsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy50aHJlYWRlZCwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWwsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy52aWV3ZXIKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LAotIG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLmpkdC5jb3JlLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWksCi0gb3JnLmp1bml0LAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS51aSwKLSBvcmcuZWNsaXBzZS51aS5pZGUsCi0gb3JnLmVjbGlwc2UudWkuZWRpdG9ycywKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gudGV4dGVkaXRvciwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUsCi0gb3JnLmVjbGlwc2UudWkudmlld3MsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLndzdC54bWwudWksCi0gY29tLmlibS5pY3UKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlYzU5ODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+TWF5IDIsIDIwMDY8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmEzYzczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RmaWxlcy56aXAsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgcHJvamVjdHRlc3RmaWxlcy8sXAotICAgICAgICAgICAgICAgdGVzdGZpbGVzLyxcCi0gICAgICAgICAgICAgICBqc3B1aXRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotamFycy5jb21waWxlLm9yZGVyID0ganNwdWl0ZXN0cy5qYXIKLXNvdXJjZS5qc3B1aXRlc3RzLmphciA9IHNyYy8KLW91dHB1dC5qc3B1aXRlc3RzLmphciA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVlYmRiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ1YjQxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZS5vcmcKLUJ1bmRsZS1OYW1lLjAgPSBTdHJ1Y3R1cmVkIFNvdXJjZSBFZGl0b3IgZm9yIEpTUCBUZXN0cwotdmlldy5uYW1lLjAgPSBFbWJlZGRlZCBKU1AgU3RydWN0dXJlZCBUZXh0IFZpZXdlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGUwNTYzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzIj4KLQkJPHZpZXcKLQkJCW5hbWU9IiV2aWV3Lm5hbWUuMCIKLQkJCWljb249IiRubCQvaWNvbnMvc291cmNlRWRpdG9yLmdpZiIKLQkJCWNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudmlld2VyLlZpZXdlclRlc3RKU1AiCi0JCQlpZD0ib3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy52aWV3ZXIuVmlld2VyVGVzdEpTUCIgLz4KLQk8L2V4dGVuc2lvbj4KLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvYmVhbmluZm9fdGVzdHMuemlwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL2JlYW5pbmZvX3Rlc3RzLnppcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUwYTlhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvYmVhbmluZm9fdGVzdHMuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL2luY2x1ZGVzX3Rlc3RzLnppcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9pbmNsdWRlc190ZXN0cy56aXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMjA0ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL2luY2x1ZGVzX3Rlc3RzLnppcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9qc3BzZWFyY2hfdGVzdHMuemlwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL2pzcHNlYXJjaF90ZXN0cy56aXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3M2EzMDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL2pzcHNlYXJjaF90ZXN0cy56aXAKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFVJUHJlZmVyZW5jZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFVJUHJlZmVyZW5jZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyMTU2YzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9KU1BVSVByZWZlcmVuY2VzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS5pbnRlcm5hbC5KU1BVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLmludGVybmFsLnByZWZlcmVuY2VzLkpTUFVJUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUgSlNQIFNvdXJjZQotICogZWRpdG9yIHByZWZlcmVuY2VzLiBUZXN0cyBpbmNsdWRlIHNldHRpbmcvZ2V0dGluZyBwcmVmZXJlbmNlcy4KLSAqIAotICogTk9URTogVGhpcyB0ZXN0IHNob3VsZCBiZSBwcmVmb3JtZWQgb24gYSBjbGVhbiB3b3Jrc3BhY2UuIElmIHBlcmZvcm1lZCBvbgotICogYW4gZXhpc3Rpbmcgd29ya3NwYWNlLCB0aGlzIHRlc3Qgd2lsbCBtYW5pcHVsYXRlIHByZWZlcmVuY2VzIGluIHRoZQotICogd29ya3NwYWNlLCB0aG91Z2ggYXR0ZW1wdHMgd2lsbCBiZSBtYWRlIHRvIHJlc3RvcmUgb3JpZ2luYWwgdmFsdWVzIGFmdGVyCi0gKiB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgSlNQVUlQcmVmZXJlbmNlc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqCi0JICogVGVzdHMgZXhpc3RhbmNlIG9mIHByZWZlcmVuY2UgdmFsdWVzIHdoZW4gZ2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcwotCSAqIHRocm91Z2ggUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QnVuZGxlR2V0UHJlZmVyZW5jZXMoKSB7Ci0JCWZpbmFsIFN0cmluZyBidW5kbGVOYW1lID0gIm9yZy5lY2xpcHNlLndzdC5odG1sLnVpIjsKLQotCQkvLyBuZWVkIHRvIHN0YXJ0IHVwIGJ1bmRsZSBmb3IgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgbG9hZGVkCi0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlTmFtZSk7Ci0JCXRyeSB7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpCi0JCQkJYnVuZGxlLnN0YXJ0KCk7Ci0JCQllbHNlCi0JCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2UgY291bGQgbm90IGZpbmQgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSk7Ci0JCX0gY2F0Y2ggKEJ1bmRsZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBvZiBleGNlcHRpb24gc3RhcnRpbmcgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSArICIgZXhjZXB0aW9uOiAiICsgZSk7Ci0JCX0KLQotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIEpTUFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRSk7Ci0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgSlNQVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFX0NPREUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBidW5kbGVHZXRQcmVmZXJlbmNlKFN0cmluZyBidW5kbGVOYW1lLCBTdHJpbmcgcHJlZktleSkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7IC8vIHJhbmRvbQotCQkJCQkJCQkJCQkJCQkJCQkJCS8vIHN0cmluZwotCi0JCVN0cmluZyB2YWx1ZSA9IFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpLmdldFN0cmluZyhidW5kbGVOYW1lLCBwcmVmS2V5LCBkZWZhdWx0VmFsdWUsIG51bGwpOwotCQlhc3NlcnROb3RTYW1lKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlLiBLZXk6ICIgKyBwcmVmS2V5LCBkZWZhdWx0VmFsdWUsIHZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBkZWZhdWx0IHZhbHVlcyBvZiBwcmVmZXJlbmNlcy4KLQkgKiAKLQkgKiBOT1RFOiBFeHBlY3RlZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFyZC1jb2RlZCwgc28gaWYgZGVmYXVsdCB2YWx1ZXMgZG8KLQkgKiBnZXQgY2hhbmdlZCwgYXNzZXJ0aW9ucyBuZWVkIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZXMoKSB7Ci0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBKU1BVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0KLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uoc3RvcmUsIEpTUFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRSwgQm9vbGVhbi50b1N0cmluZyh0cnVlKSk7Ci0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKHN0b3JlLCBKU1BVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0VfQ09ERSwgIjwiKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2UoSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXksIFN0cmluZyBleHBlY3RlZCkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gc3RvcmUuZ2V0RGVmYXVsdFN0cmluZyhwcmVmS2V5KTsKLQkJYXNzZXJ0RXF1YWxzKCJHZXQgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5LCBleHBlY3RlZCwgZGVmYXVsdFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzIGJ5IHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZSB0byBiZSBhCi0JICogY2VydGFpbiB2YWx1ZSwgdGhlbiBnZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHZhbHVlIHRvIHZlcmlmeSBpdCB3YXMgc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5TZXRQcmVmZXJlbmNlcygpIHsKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IEpTUFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihzdG9yZSwgSlNQVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFKTsKLQkJcGx1Z2luU2V0UHJlZmVyZW5jZVN0cmluZyhzdG9yZSwgSlNQVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFX0NPREUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihJUHJlZmVyZW5jZVN0b3JlIHN0b3JlLCBTdHJpbmcgcHJlZktleSkgewotCQlib29sZWFuIG9yaWdpbmFsVmFsdWUgPSBzdG9yZS5nZXRCb29sZWFuKHByZWZLZXkpOwotCQlib29sZWFuIGV4cGVjdGVkVmFsdWUgPSAhb3JpZ2luYWxWYWx1ZTsKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCWJvb2xlYW4gZm91bmRWYWx1ZSA9IHN0b3JlLmdldEJvb2xlYW4ocHJlZktleSk7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXkgKyAiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgb3JpZ2luYWxWYWx1ZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpblNldFByZWZlcmVuY2VTdHJpbmcoSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJU3RyaW5nIG9yaWdpbmFsVmFsdWUgPSBzdG9yZS5nZXRTdHJpbmcocHJlZktleSk7Ci0JCVN0cmluZyBleHBlY3RlZFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7IC8vIHJhbmRvbQotCQkJCQkJCQkJCQkJCQkJCQkJCS8vIHN0cmluZwotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJU3RyaW5nIGZvdW5kVmFsdWUgPSBzdG9yZS5nZXRTdHJpbmcocHJlZktleSk7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXkgKyAiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgb3JpZ2luYWxWYWx1ZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9KU1BVSVRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9KU1BVSVRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjQxYTE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmNvbnRlbnRhc3Npc3QuQmVhbkluZm9Qcm92aWRlclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5jb250ZW50YXNzaXN0LkpTUEphdmFUcmFuc2xhdG9yVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmNvbnRlbnRhc3Npc3QuSlNQVHJhbnNsYXRpb25UZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGRlc2NyaXB0aW9uLlRlc3RDb250ZW50RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5kb2N1bWVudC5GaWxlQnVmZmVyRG9jdW1lbnRUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5tb2RlbC5UZXN0TW9kZWxzRnJvbUZpbGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5VGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXIuU2Nhbm5lclVuaXRUZXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm90aGVyLlVuaXRUZXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnBhZ2VkaXJlY3RpdmUuVGVzdFBhZ2VEaXJlY3RpdmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5wYXJ0aXRpb25pbmcuVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UmVnaXN0cnlUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudmlld2VyLlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uSlNQOwotCi0KLQotCi1wdWJsaWMgY2xhc3MgSlNQVUlUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBKU1BVSVRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBKU1BVSVRlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIlNTRSBKU1AgVUkgVGVzdCBTdWl0ZSIpOwotCQkKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFNjYW5uZXJVbml0VGVzdHMuY2xhc3MsICJTY2FubmVyVW5pdFRlc3RzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVW5pdFRlc3RzLmNsYXNzLCAiVW5pdFRlc3RzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckpTUC5jbGFzcywgIlRlc3RTdHJ1Y3R1cmVkUGFydGlvbmVyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoTW9kZWxRdWVyeVRlc3Rlci5jbGFzcywgIk1vZGVsUXVlcnlUZXN0ZXIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BKYXZhVHJhbnNsYXRvclRlc3QuY2xhc3MsICJKU1BKYXZhVHJhbnNsYXRvclRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0RW1haWxOb3RpY2UuY2xhc3MsICJUZXN0RW1haWxOb3RpY2UiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShCZWFuSW5mb1Byb3ZpZGVyVGVzdC5jbGFzcywgIkJlYW5JbmZvUHJvdmlkZXJUZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoSlNQVHJhbnNsYXRpb25UZXN0LmNsYXNzLCAiSlNQVHJhbnNsYXRpb25UZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoQWRhcHRlckZhY3RvcnlSZWdpc3RyeVRlc3QuY2xhc3MsICJBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5VGV4dCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEpTUFVJUHJlZmVyZW5jZXNUZXN0LmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkpTUC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25KU1AuY2xhc3MpKTsKLQkJCi0JCS8vIG1vdmVkIGZyb20ganNwIGNvcmUgdGVzdHMgYmVjYXVzZSB0aGV5IHJlcXVpcmUgVUkKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RQYWdlRGlyZWN0aXZlLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShGaWxlQnVmZmVyRG9jdW1lbnRUZXN0ZXIuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RNb2RlbENsb25lLmNsYXNzKSk7Ci0JCQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdE1vZGVsc0Zyb21GaWxlcy5jbGFzcywgIlRlc3RNb2RlbHNGcm9tRmlsZXMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0TW9kZWxFbWJlZGRlZENvbnRlbnRUeXBlLmNsYXNzLCAiVGVzdE1vZGVsRW1iZWRkZWRDb250ZW50VHlwZSIpKTsKLQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdENvbnRlbnREZXNjcmlwdGlvbi5jbGFzcywgIkNvbnRlbnQgRGVzY3JpcHRpb24gVGVzdHMiKSk7Ci0JCS8vIHBhX1RPRE8gZml4IHRoaXMgdGVzdAotCQkvL2FkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BTZWFyY2hUZXN0cy5jbGFzcykpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFVJVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWMxYjY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgSlNQVUlUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIEpTUFVJVGVzdHNQbHVnaW4gcGx1Z2luOwotCS8vUmVzb3VyY2UgYnVuZGxlLgotCXByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAib3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cyI7Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEpTUFVJVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JCXRyeSB7Ci0JCQlyZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgib3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5TU0VGb3JKU1BUZXN0c1BsdWdpblJlc291cmNlcyIpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSlNQVUlUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gSlNQVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBVUkwgZ2V0SW5zdGFsbExvY2F0aW9uKCkgewotCQlVUkwgaW5zdGFsbExvY2F0aW9uID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzIikuZ2V0RW50cnkoIi8iKTsKLQkJVVJMIHJlc29sdmVkTG9jYXRpb24gPSBudWxsOwotCQl0cnkgewotCQkJcmVzb2x2ZWRMb2NhdGlvbiA9IEZpbGVMb2NhdG9yLnJlc29sdmUoaW5zdGFsbExvY2F0aW9uKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gaW1wb3NzaWJsZQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCXJldHVybiByZXNvbHZlZExvY2F0aW9uOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIEZpbGUgZ2V0VGVzdEZpbGUoU3RyaW5nIGZpbGVwYXRoKSB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIGZpbGVwYXRoOwotCQlGaWxlIHJlc3VsdCA9IG5ldyBGaWxlKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9Mb2dnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZGJkMjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9Mb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogU21hbGwgY29udmVuaWVuY2UgY2xhc3MgdG8gbG9nIG1lc3NhZ2VzIHRvIHBsdWdpbidzIGxvZyBmaWxlIGFuZCBhbHNvLCBpZiBkZXNpcmVkLAotICogdGhlIGNvbnNvbGUuIFRoaXMgY2xhc3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBjbGFzc2VzIGluIHRoaXMgcGx1Z2luLiBPdGhlcgotICogcGx1Z2lucyBzaG91bGQgbWFrZSB0aGVpciBvd24gY29weSwgd2l0aCBhcHByb3ByaWF0ZSBJRC4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNFRklMVEVSX0xPQ0FUSU9OID0gIi9kZWJ1Zy90cmFjZWZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gSVN0YXR1cy5PSzsgLy8gMAotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk8gPSBJU3RhdHVzLklORk87IC8vIDEKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gSVN0YXR1cy5XQVJOSU5HOyAvLyAyCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSBJU3RhdHVzLkVSUk9SOyAvLyA0Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19ERUJVRyA9IDIwMCArIE9LOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fREVCVUcgPSAyMDAgKyBJTkZPOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkdfREVCVUcgPSAyMDAgKyBXQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RFQlVHID0gMjAwICsgRVJST1I7Ci0KLQkvKioKLQkgKiBBZGRzIG1lc3NhZ2UgdG8gbG9nLgotCSAqIEBwYXJhbSBsZXZlbCBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoT0ssIElORk8sIFdBUk5JTkcsIEVSUk9SLCBPS19ERUJVRywgSU5GT19ERUJVRywgV0FSTklOR19ERUJVRywgRVJST1JfREVCVUcpCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBhZGQgdG8gdGhlIGxvZwotCSAqIEBwYXJhbSBleGNlcHRpb24gZXhjZXB0aW9uIHRocm93bgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGxldmVsID09IE9LX0RFQlVHIHx8IGxldmVsID09IElORk9fREVCVUcgfHwgbGV2ZWwgPT0gV0FSTklOR19ERUJVRyB8fCBsZXZlbCA9PSBFUlJPUl9ERUJVRykgewotCQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJCXJldHVybjsKLQkJfQotCi0JCWludCBzZXZlcml0eSA9IElTdGF0dXMuT0s7Ci0JCXN3aXRjaCAobGV2ZWwpIHsKLQkJCWNhc2UgSU5GT19ERUJVRyA6Ci0JCQljYXNlIElORk8gOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5JTkZPOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXQVJOSU5HX0RFQlVHIDoKLQkJCWNhc2UgV0FSTklORyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLldBUk5JTkc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEVSUk9SX0RFQlVHIDoKLQkJCWNhc2UgRVJST1IgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5FUlJPUjsKLQkJfQotCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKHNldmVyaXR5LCBQTFVHSU5fSUQsIHNldmVyaXR5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQl9Ci0KLQkvKioKLQkgKiBQcmludHMgbWVzc2FnZSB0byBsb2cgaWYgY2F0ZWdvcnkgbWF0Y2hlcyAvZGVidWcvdHJhY2VmaWx0ZXIgb3B0aW9uLgotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gcHJpbnQKLQkgKiBAcGFyYW0gY2F0ZWdvcnkgY2F0ZWdvcnkgb2YgdGhlIG1lc3NhZ2UsIHRvIGJlIGNvbXBhcmVkIHdpdGggL2RlYnVnL3RyYWNlZmlsdGVyCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF90cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChpc1RyYWNpbmcoY2F0ZWdvcnkpKSB7Ci0JCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBQTFVHSU5fSUQsIElTdGF0dXMuT0ssIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybSBpcyBkZWJ1Z2dpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEZWJ1Z2dpbmcoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybS5pbkRlYnVnTW9kZSgpOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgaWYgY3VycmVudGx5IHRyYWNpbmcgYSBjYXRlZ29yeQotCSAqIEBwYXJhbSBjYXRlZ29yeQotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0cmFjaW5nIGNhdGVnb3J5LCBmYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcmFjaW5nKFN0cmluZyBjYXRlZ29yeSkgewotCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIHRyYWNlRmlsdGVyID0gUGxhdGZvcm0uZ2V0RGVidWdPcHRpb24oUExVR0lOX0lEICsgVFJBQ0VGSUxURVJfTE9DQVRJT04pOwotCQlpZiAodHJhY2VGaWx0ZXIgIT0gbnVsbCkgewotCQkJU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhY2VGaWx0ZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJU3RyaW5nIGNhdCA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7Ci0JCQkJaWYgKGNhdGVnb3J5LmVxdWFscyhjYXQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkpTUC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkpTUC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2U0OGJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25KU1AuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKiAKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS52aWV3cy5jb250ZW50b3V0bGluZS5KU1BDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5FeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudmlld3MucHJvcGVydGllcy5YTUxQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbjsKLQotLyoqCi0gKiBUZXN0cyByZXRyaWV2aW5nIGVkaXRvciBjb250cmlidXRpb25zIGZvciBqc3AgY29udGVudCB0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkpTUCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U291cmNlVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLlNPVVJDRVZJRVdFUkNPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnROb3ROdWxsKCJubyBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQLCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIHNvdXJjZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1AsIG8uZ2V0Q2xhc3MoKSwgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudE91dGxpbmVWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuQ09OVEVOVE9VVExJTkVDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gY29udGVudCBvdXRsaW5lIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBjb250ZW50IG91dGxpbmUgdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQLCBvLmdldENsYXNzKCksIEpTUENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbi5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuUFJPUEVSVFlTSEVFVENPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnROb3ROdWxsKCJubyBwcm9wZXJ0eSBzaGVldCBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBwcm9wZXJ0eSBzaGVldCBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCwgby5nZXRDbGFzcygpLCBYTUxQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbi5jbGFzcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0RW1haWxOb3RpY2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvVGVzdEVtYWlsTm90aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NDE1NmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0RW1haWxOb3RpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIFRlc3RFbWFpbE5vdGljZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIGJvb2xlYW4gc2VuZE5vdGlmaWNhdGlvbnMgPSBmYWxzZTsKLQotCXB1YmxpYyBUZXN0RW1haWxOb3RpY2UoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIFRlc3RFbWFpbE5vdGljZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1haWwoKSB7Ci0JCWFzc2VydEZhbHNlKCJTaW1wbGUgdGVzdCB0byBiZSBzdXJlIGVtYWlsIGdldHMgc2VudCBvbiBmYWlsdXJlIiwgc2VuZE5vdGlmaWNhdGlvbnMpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RNb2RlbENsb25lLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RNb2RlbENsb25lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhYWE1NDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0TW9kZWxDbG9uZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5QYWdlRGlyZWN0aXZlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5FbWJlZGRlZEhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLm1vZGVsaGFuZGxlci5FbWJlZGRlZFR5cGVIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuRW1iZWRkZWRYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotLyoqCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIFRlc3RNb2RlbENsb25lIGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFRlc3RNb2RlbENsb25lLgotCSAqLwotCXB1YmxpYyBUZXN0TW9kZWxDbG9uZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3QgZ2V0VGVzdCgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0TW9kZWxDbG9uZSgidGVzdENyZWF0ZVN0cnVjdHVyZWRNb2RlbEpTUCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbG9uZVN0cnVjdHVyZWRNb2RlbFhNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBjbG9uZWRNb2RlbCA9IG1vZGVsLm5ld0luc3RhbmNlKCk7Ci0JCWFzc2VydFRydWUoImNsb25lZCBtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBjbG9uZWRNb2RlbCAhPSBudWxsKTsKLQkJLy8gbWFrZSBzdXJlIHRoZSBjcml0aWNhbCB2YXJpYWJsZXMgYXJlIE5PVCBpZGVudGljYWwsIGJ1dCB0aGF0IG5ldyBpbnN0YW5jZXMgCi0JCS8vIGhhdmUgYmVlbiBtYWRlCi0JCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQkJLy8JCWlmIChjbG9uZWRNb2RlbC5nZXRFbmNvZGluZ01lbWVudG8oKSA9PSBtb2RlbC5nZXRFbmNvZGluZ01lbWVudG8oKSkgcGFzc2VkID0gZmFsc2U7Ci0JCS8vCQlpZiAoY2xvbmVkTW9kZWwuZ2V0UGFyc2VyKCkgPT0gbW9kZWwuZ2V0UGFyc2VyKCkpIHBhc3NlZCA9IGZhbHNlOwotCQkvLwkJaWYgKGNsb25lZE1vZGVsLmdldFJlUGFyc2VyKCkgPT0gbW9kZWwuZ2V0UmVQYXJzZXIoKSkgcGFzc2VkID0gZmFsc2U7Ci0JCWFzc2VydFRydWUoIm5ld0luc3RhbmNlIG9mIHN0cnVjdHVyZWQgbW9kZWwgaXMgbm90IGNvcnJlY3QiLCBwYXNzZWQpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdENsb25lU3RydWN0dXJlZE1vZGVsSFRNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQlJU3RydWN0dXJlZE1vZGVsIGNsb25lZE1vZGVsID0gbW9kZWwubmV3SW5zdGFuY2UoKTsKLQkJYXNzZXJ0VHJ1ZSgiY2xvbmVkIG1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIGNsb25lZE1vZGVsICE9IG51bGwpOwotCQkvLyBtYWtlIHN1cmUgdGhlIGNyaXRpY2FsIHZhcmlhYmxlcyBhcmUgTk9UIGlkZW50aWNhbCwgYnV0IHRoYXQgbmV3IGluc3RhbmNlcyAKLQkJLy8gaGF2ZSBiZWVuIG1hZGUKLQkJYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCQkvLwkJaWYgKGNsb25lZE1vZGVsLmdldEVuY29kaW5nTWVtZW50bygpID09IG1vZGVsLmdldEVuY29kaW5nTWVtZW50bygpKSBwYXNzZWQgPSBmYWxzZTsKLQkJLy8JCWlmIChjbG9uZWRNb2RlbC5nZXRQYXJzZXIoKSA9PSBtb2RlbC5nZXRQYXJzZXIoKSkgcGFzc2VkID0gZmFsc2U7Ci0JCS8vCQlpZiAoY2xvbmVkTW9kZWwuZ2V0UmVQYXJzZXIoKSA9PSBtb2RlbC5nZXRSZVBhcnNlcigpKSBwYXNzZWQgPSBmYWxzZTsKLQkJYXNzZXJ0VHJ1ZSgibmV3SW5zdGFuY2Ugb2Ygc3RydWN0dXJlZCBtb2RlbCBpcyBub3QgY29ycmVjdCIsIHBhc3NlZCk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xvbmVTdHJ1Y3R1cmVkTW9kZWxKU1AoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIG1vZGVsICE9IG51bGwpOwotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgY2xvbmVkTW9kZWwgPSBtb2RlbC5uZXdJbnN0YW5jZSgpOwotCQlhc3NlcnRUcnVlKCJjbG9uZWQgbW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgY2xvbmVkTW9kZWwgIT0gbnVsbCk7Ci0JCS8vIG1ha2Ugc3VyZSB0aGUgZW1iZWRkZWQgdHlwZSBpcyBjb3JyZWN0Ci0JCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQkJRG9jdW1lbnQgZG9jID0gKChJRE9NTW9kZWwpIGNsb25lZE1vZGVsKS5nZXREb2N1bWVudCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgKChJTm9kZU5vdGlmaWVyKSBkb2MpLmdldEV4aXN0aW5nQWRhcHRlcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCWFzc2VydE5vdE51bGwoImNsb25lZCBtb2RlbCBkaWQgbm90IGhhdmUgZW1iZWRkZWQgYWRhcHRlciIsIHBhZ2VEaXJlY3RpdmVBZGFwdGVyKTsKLQotCQlFbWJlZGRlZFR5cGVIYW5kbGVyIGVtYmVkZGVkSGFuZGxlciA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldEVtYmVkZGVkVHlwZSgpOwotCQlhc3NlcnROb3ROdWxsKCJjbG9uZWQgbW9kZWwgZGlkIG5vdCBoYXZlIGVtYmVkZGVkIGhhbmRsZXIiLCBlbWJlZGRlZEhhbmRsZXIpOwotCi0JCS8vCQlpZiAoY2xvbmVkTW9kZWwuZ2V0RW5jb2RpbmdNZW1lbnRvKCkgPT0gbW9kZWwuZ2V0RW5jb2RpbmdNZW1lbnRvKCkpIHBhc3NlZCA9IGZhbHNlOwotCQkvLwkJaWYgKGNsb25lZE1vZGVsLmdldFBhcnNlcigpID09IG1vZGVsLmdldFBhcnNlcigpKSBwYXNzZWQgPSBmYWxzZTsKLQkJLy8JCWlmIChjbG9uZWRNb2RlbC5nZXRSZVBhcnNlcigpID09IG1vZGVsLmdldFJlUGFyc2VyKCkpIHBhc3NlZCA9IGZhbHNlOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbG9uZVN0cnVjdHVyZWRNb2RlbEpTUFhNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0JCS8vIG5vdGUsIHdlIGluaXRpYWx5IGV4cGVjdCBIVE1MLCBzaW5jZSB0aGVyZSBpcyBub3QgY29udGVudAotCQljaGVja0VtYmVkZGVkVHlwZShtb2RlbCwgRW1iZWRkZWRIVE1MLmNsYXNzKTsKLQotCQlTdHJpbmcgdGVzdENvbnRlbnQgPSAiPCVAIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L3htbFwiICU+IjsKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0VGV4dCh0aGlzLCB0ZXN0Q29udGVudCk7Ci0KLQkJLy8gbW9kaWZpZWQgZm9yIGRlc2lnbiBjaGFuZ2UsIHdoZXJlIHJlLWluaXQgc2hvdWxkIGJlIGhhbmRsZWQgYmVmb3JlIAotCQkvLyBzZXQgcmV0dXJucy4KLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgc2hvdWxkIG5vdCBuZWVkIHJlaW5pdCIsICFtb2RlbC5pc1JlaW5pdGlhbGl6YXRpb25OZWVkZWQoKSk7Ci0KLQkJLy8JCWJ1dCBpZiBpdCBkaWQgbmVlZCByZS1pbml0LCBoZXJlJ3MgdGhlIHJpZ2h0IGNhbGxpbmcgc2VxdWVuY2UJCQotCQkvLwkJaWYgKG1vZGVsLmlzUmVpbml0aWFsaXphdGlvbk5lZWRlZCgpKSB7Ci0JCS8vCQkJbW9kZWwuYWJvdXRUb0NoYW5nZU1vZGVsKCk7Ci0JCS8vCQkJbW9kZWwgPSBtb2RlbC5yZWluaXQoKTsKLQkJLy8JCQltb2RlbC5jaGFuZ2VkTW9kZWwoKTsKLQkJLy8JCX0KLQotCQljaGVja0VtYmVkZGVkVHlwZShtb2RlbCwgRW1iZWRkZWRYTUwuY2xhc3MpOwotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgY2xvbmVkTW9kZWwgPSBtb2RlbC5uZXdJbnN0YW5jZSgpOwotCQlhc3NlcnRUcnVlKCJjbG9uZWQgbW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgY2xvbmVkTW9kZWwgIT0gbnVsbCk7Ci0JCWNoZWNrRW1iZWRkZWRUeXBlKGNsb25lZE1vZGVsLCBFbWJlZGRlZFhNTC5jbGFzcyk7Ci0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tFbWJlZGRlZFR5cGUoSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCwgQ2xhc3MgZXhwZWN0ZWRUeXBlKSB7Ci0JCURvY3VtZW50IGRvYyA9ICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgcGFnZURpcmVjdGl2ZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpICgoSU5vZGVOb3RpZmllcikgZG9jKS5nZXRFeGlzdGluZ0FkYXB0ZXIoUGFnZURpcmVjdGl2ZUFkYXB0ZXIuY2xhc3MpOwotCQlhc3NlcnROb3ROdWxsKCJtb2RlbCBkaWQgbm90IGhhdmUgZW1iZWRkZWQgYWRhcHRlciIsIHBhZ2VEaXJlY3RpdmVBZGFwdGVyKTsKLQotCQlFbWJlZGRlZFR5cGVIYW5kbGVyIGVtYmVkZGVkSGFuZGxlciA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldEVtYmVkZGVkVHlwZSgpOwotCQlhc3NlcnROb3ROdWxsKCJtb2RlbCBkaWQgbm90IGhhdmUgZW1iZWRkZWQgaGFuZGxlciIsIGVtYmVkZGVkSGFuZGxlcik7Ci0KLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkVHlwZSwgZW1iZWRkZWRIYW5kbGVyLmdldENsYXNzKCkpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZVN0cnVjdHVyZWRNb2RlbEpTUCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0KLQkJQXJyYXlMaXN0IGZhY3RvcmllcyA9IChBcnJheUxpc3QpIG1vZGVsLmdldEZhY3RvcnlSZWdpc3RyeSgpLmdldEZhY3RvcmllcygpOwotCQlmYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBmYWN0b3JpZXMuY2xvbmUoKTsKLQotCQlJU3RydWN0dXJlZE1vZGVsIGNsb25lZE1vZGVsID0gbW9kZWwubmV3SW5zdGFuY2UoKTsKLQkJaWYgKG1vZGVsLmdldE1vZGVsSGFuZGxlcigpID09IG51bGwpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJYXNzZXJ0VHJ1ZShmYWxzZSk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgiY2xvbmVkIG1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIGNsb25lZE1vZGVsICE9IG51bGwpOwotCQkvLyBtYWtlIHN1cmUgdGhlIGNyaXRpY2FsIHZhcmlhYmxlcyBhcmUgY29ycmVjdC4KLQotCQlBcnJheUxpc3QgbmV3RmFjdG9yaWVzID0gKEFycmF5TGlzdCkgY2xvbmVkTW9kZWwuZ2V0RmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RmFjdG9yaWVzKCk7Ci0JCW5ld0ZhY3RvcmllcyA9IChBcnJheUxpc3QpIG5ld0ZhY3Rvcmllcy5jbG9uZSgpOwotCi0JCWJvb2xlYW4gcGFzc2VkID0gY2hlY2tGYWN0b3JpZXNMaXN0Rm9ySWRlbnRpdHkoZmFjdG9yaWVzLCBuZXdGYWN0b3JpZXMpOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCQlwYXNzZWQgPSBjaGVja0ZvclNhbWVFbWJlZGRlZEZhY3Rvcmllcyhtb2RlbCwgY2xvbmVkTW9kZWwpOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCQkvLyBOb3csIGFzc2lnbmluZyBzb21lIGNvbnRlbnQgc2hvdWxkbid0IGNoYW5nZSB0aGUgZmFjdG9yaWVzCi0JCWNsb25lZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnJlcGxhY2VUZXh0KHRoaXMsIDAsIDAsICI8c2FtcGxlPiB0ZXh0Iik7Ci0JCUFycmF5TGlzdCB0d29GYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBjbG9uZWRNb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5nZXRGYWN0b3JpZXMoKTsKLQkJdHdvRmFjdG9yaWVzID0gKEFycmF5TGlzdCkgdHdvRmFjdG9yaWVzLmNsb25lKCk7Ci0KLQkJcGFzc2VkID0gY2hlY2tGYWN0b3JpZXNMaXN0Rm9ySWRlbnRpdHkoZmFjdG9yaWVzLCB0d29GYWN0b3JpZXMpOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCQlwYXNzZWQgPSBjaGVja0ZvclNhbWVFbWJlZGRlZEZhY3Rvcmllcyhtb2RlbCwgY2xvbmVkTW9kZWwpOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCi0JCS8vIE5vdywgYXNzaWduaW5nIHVzZSBhIHBhZ2UgZGlyZWN0aXZlLCBidXQgbGVhdmluZyBlbWJlZGRlZCB0eXBlIHRoZSBzYW1lIGFzIGRlZmF1bHQKLQkJY2xvbmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0VGV4dCh0aGlzLCAiPCVAIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L2h0bWxcIiIpOwotCQlBcnJheUxpc3QgdGhyZWVGYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBjbG9uZWRNb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5nZXRGYWN0b3JpZXMoKTsKLQkJdGhyZWVGYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSB0aHJlZUZhY3Rvcmllcy5jbG9uZSgpOwotCi0JCXBhc3NlZCA9IGNoZWNrRmFjdG9yaWVzTGlzdEZvcklkZW50aXR5KGZhY3RvcmllcywgdGhyZWVGYWN0b3JpZXMpOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCQlwYXNzZWQgPSBjaGVja0ZvclNhbWVFbWJlZGRlZEZhY3Rvcmllcyhtb2RlbCwgY2xvbmVkTW9kZWwpOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCi0JfQotCi0JLyoqCi0JICogTWV0aG9kIGNoZWNrRW1iZWRkZWRGYWN0b3JpZXMuCi0JICogQHBhcmFtIG1vZGVsCi0JICogQHBhcmFtIGNsb25lZE1vZGVsCi0JICogQHJldHVybiBib29sZWFuCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGNoZWNrRm9yU2FtZUVtYmVkZGVkRmFjdG9yaWVzKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwsIElTdHJ1Y3R1cmVkTW9kZWwgY2xvbmVkTW9kZWwpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCi0KLQkJRW1iZWRkZWRUeXBlSGFuZGxlciBvbGRFbWJlZGRlZFR5cGUgPSBnZXRFbWJlZGRlZFR5cGUobW9kZWwpOwotCQlFbWJlZGRlZFR5cGVIYW5kbGVyIG5ld0VtYmVkZGVkVHlwZSA9IGdldEVtYmVkZGVkVHlwZShjbG9uZWRNb2RlbCk7Ci0JCS8vIGV4cGVjdCB0byBiZSB0aGUgc2FtZSB0eXBlCi0JCWlmICghb2xkRW1iZWRkZWRUeXBlLmdldENsYXNzKCkuZXF1YWxzKG5ld0VtYmVkZGVkVHlwZS5nZXRDbGFzcygpKSkgewotCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCQlhc3NlcnRUcnVlKHJlc3VsdCk7Ci0JCX0KLQotCQlMaXN0IG9sZEZhY3RvcmllcyA9IG9sZEVtYmVkZGVkVHlwZS5nZXRBZGFwdGVyRmFjdG9yaWVzKCk7Ci0JCUxpc3QgbmV3RmFjdG9yaWVzID0gbmV3RW1iZWRkZWRUeXBlLmdldEFkYXB0ZXJGYWN0b3JpZXMoKTsKLQkJcmVzdWx0ID0gY2hlY2tGYWN0b3JpZXNMaXN0Rm9yRXF1aXZhbGVuY2Uob2xkRmFjdG9yaWVzLCBuZXdGYWN0b3JpZXMpOwotCi0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwcml2YXRlIEVtYmVkZGVkVHlwZUhhbmRsZXIgZ2V0RW1iZWRkZWRUeXBlKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwpIHsKLQkJRG9jdW1lbnQgZG9jID0gKChJRE9NTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgKChJTm9kZU5vdGlmaWVyKSBkb2MpLmdldEV4aXN0aW5nQWRhcHRlcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCWFzc2VydE5vdE51bGwoIm1vZGVsIGRpZCBub3QgaGF2ZSBlbWJlZGRlZCBhZGFwdGVyIiwgcGFnZURpcmVjdGl2ZUFkYXB0ZXIpOwotCi0JCUVtYmVkZGVkVHlwZUhhbmRsZXIgZW1iZWRkZWRIYW5kbGVyID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0RW1iZWRkZWRUeXBlKCk7Ci0JCWFzc2VydE5vdE51bGwoIm1vZGVsIGRpZCBub3QgaGF2ZSBlbWJlZGRlZCBoYW5kbGVyIiwgZW1iZWRkZWRIYW5kbGVyKTsKLQotCQlyZXR1cm4gZW1iZWRkZWRIYW5kbGVyOwotCX0KLQotCi0JLyoqCi0JICogTWV0aG9kIGNoZWNrRmFjdG9yaWVzTGlzdC4KLQkgKiBAcGFyYW0gZmFjdG9yaWVzCi0JICogQHBhcmFtIG5ld0ZhY3RvcmllcwotCSAqIEByZXR1cm4gYm9vbGVhbgotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBjaGVja0ZhY3Rvcmllc0xpc3RGb3JJZGVudGl0eShMaXN0IGZhY3RvcmllcywgTGlzdCBuZXdGYWN0b3JpZXMpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCQlpZiAoZmFjdG9yaWVzLnNpemUoKSAhPSBuZXdGYWN0b3JpZXMuc2l6ZSgpKSB7Ci0JCQlyZXN1bHQgPSBmYWxzZTsKLQkJfQotCQllbHNlIHsKLQkJCS8vIG5uZWQgbm90IGJlIGlkZW50aWNhbCwgbm9yIHNhbWUgb3JkZXIKLQkJCS8vCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmYWN0b3JpZXMuc2l6ZSgpOyBpKyspIHsKLQkJCS8vCQkJCWlmICghKGZhY3Rvcmllcy5nZXQoaSkgPT0gbmV3RmFjdG9yaWVzLmdldChpKSkpIHsKLQkJCS8vCQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCS8vCQkJCQlicmVhazsKLQkJCS8vCQkJCX0KLQkJCS8vCQkJfQotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGNoZWNrRmFjdG9yaWVzTGlzdEZvckVxdWl2YWxlbmNlKExpc3QgZmFjdG9yaWVzLCBMaXN0IG5ld0ZhY3RvcmllcykgewotCQlib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0JCWlmIChmYWN0b3JpZXMuc2l6ZSgpICE9IG5ld0ZhY3Rvcmllcy5zaXplKCkpIHsKLQkJCXJlc3VsdCA9IGZhbHNlOwotCQl9Ci0JCWVsc2UgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmYWN0b3JpZXMuc2l6ZSgpOyBpKyspIHsKLQkJCQlpZiAoIWZhY3Rvcmllcy5nZXQoaSkuZ2V0Q2xhc3MoKS5lcXVhbHMobmV3RmFjdG9yaWVzLmdldChpKS5nZXRDbGFzcygpKSkgewotCQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlU3RydWN0dXJlZE1vZGVsSFRNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQlBcnJheUxpc3QgZmFjdG9yaWVzID0gKEFycmF5TGlzdCkgbW9kZWwuZ2V0RmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RmFjdG9yaWVzKCk7Ci0JCWZhY3RvcmllcyA9IChBcnJheUxpc3QpIGZhY3Rvcmllcy5jbG9uZSgpOwotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgY2xvbmVkTW9kZWwgPSBtb2RlbC5uZXdJbnN0YW5jZSgpOwotCQlhc3NlcnRUcnVlKCJjbG9uZWQgbW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgY2xvbmVkTW9kZWwgIT0gbnVsbCk7Ci0JCS8vIG1ha2Ugc3VyZSB0aGUgY3JpdGljYWwgdmFyaWFibGVzIGFyZSBjb3JyZWN0LgotCi0JCUFycmF5TGlzdCBuZXdGYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBjbG9uZWRNb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5nZXRGYWN0b3JpZXMoKTsKLQkJbmV3RmFjdG9yaWVzID0gKEFycmF5TGlzdCkgbmV3RmFjdG9yaWVzLmNsb25lKCk7Ci0KLQkJYm9vbGVhbiBwYXNzZWQgPSBjaGVja0ZhY3Rvcmllc0xpc3RGb3JJZGVudGl0eShmYWN0b3JpZXMsIG5ld0ZhY3Rvcmllcyk7Ci0KLQkJYXNzZXJ0VHJ1ZSgibmV3SW5zdGFuY2Ugb2Ygc3RydWN0dXJlZCBtb2RlbCBpcyBub3QgY29ycmVjdCIsIHBhc3NlZCk7Ci0KLQkJLy8gTm93LCBhc3NpZ25pbmcgc29tZSBjb250ZW50IHNob3VsZG4ndCBjaGFuZ2UgdGhlIGZhY3RvcmllcwotCQljbG9uZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRUZXh0KHRoaXMsICI8c2FtcGxlPiB0ZXh0Iik7Ci0JCUFycmF5TGlzdCB0d29GYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBjbG9uZWRNb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5nZXRGYWN0b3JpZXMoKTsKLQkJdHdvRmFjdG9yaWVzID0gKEFycmF5TGlzdCkgdHdvRmFjdG9yaWVzLmNsb25lKCk7Ci0KLQkJcGFzc2VkID0gY2hlY2tGYWN0b3JpZXNMaXN0Rm9ySWRlbnRpdHkoZmFjdG9yaWVzLCBuZXdGYWN0b3JpZXMpOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCX0KLQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0TW9kZWxFbWJlZGRlZENvbnRlbnRUeXBlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RNb2RlbEVtYmVkZGVkQ29udGVudFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg4OWU1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RNb2RlbEVtYmVkZGVkQ29udGVudFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmRvY3VtZW50LlBhZ2VEaXJlY3RpdmVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5tb2RlbGhhbmRsZXIuRW1iZWRkZWRUeXBlSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlclV0aWxpdHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICogCi0gKiBUbyBjaGFuZ2UgdGhpcyBnZW5lcmF0ZWQgY29tbWVudCBlZGl0IHRoZSB0ZW1wbGF0ZSB2YXJpYWJsZSAidHlwZWNvbW1lbnQiOgotICogV2luZG93PlByZWZlcmVuY2VzPkphdmE+VGVtcGxhdGVzLiBUbyBlbmFibGUgYW5kIGRpc2FibGUgdGhlIGNyZWF0aW9uIG9mCi0gKiB0eXBlIGNvbW1lbnRzIGdvIHRvIFdpbmRvdz5QcmVmZXJlbmNlcz5KYXZhPkNvZGUgR2VuZXJhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RNb2RlbEVtYmVkZGVkQ29udGVudFR5cGUgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVGVzdE1vZGVsQ2xvbmUuCi0JICovCi0JcHVibGljIFRlc3RNb2RlbEVtYmVkZGVkQ29udGVudFR5cGUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCX0KLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBnZXRUZXN0KCkgewotCQlyZXR1cm4gbmV3IFRlc3RNb2RlbEVtYmVkZGVkQ29udGVudFR5cGUoInRlc3RTdHJ1Y3R1cmVkTW9kZWxFbWJlZGRlZEpTUENoYW5nZSIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNoZWNrRW1iZWRkZWRUeXBlKElTdHJ1Y3R1cmVkTW9kZWwgY2xvbmVkTW9kZWwsIE9iamVjdCBleHBlY3RlZFR5cGUpIHsKLQkJRG9jdW1lbnQgZG9jID0gKChJRE9NTW9kZWwpIGNsb25lZE1vZGVsKS5nZXREb2N1bWVudCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBlbWJlZGRlZFR5cGVBZGFwdGVyID0gKFBhZ2VEaXJlY3RpdmVBZGFwdGVyKSAoKElOb2RlTm90aWZpZXIpIGRvYykuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCWFzc2VydE5vdE51bGwoImNsb25lZCBtb2RlbCBkaWQgbm90IGhhdmUgZW1iZWRkZWQgYWRhcHRlciIsIGVtYmVkZGVkVHlwZUFkYXB0ZXIpOwotCi0JCUVtYmVkZGVkVHlwZUhhbmRsZXIgZW1iZWRkZWRIYW5kbGVyID0gZW1iZWRkZWRUeXBlQWRhcHRlci5nZXRFbWJlZGRlZFR5cGUoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiY2xvbmVkIG1vZGVsIGRpZCBub3QgaGF2ZSBlbWJlZGRlZCBoYW5kbGVyIiwgZW1iZWRkZWRIYW5kbGVyKTsKLQotCQlhc3NlcnRUcnVlKCJjbG9uZWQgbW9kZWwgZW1iZWRkZWRIYW5kbGVyIGlzIHdyb25nIHR5cGUiLCBlbWJlZGRlZEhhbmRsZXIuZXF1YWxzKGV4cGVjdGVkVHlwZSkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTdHJ1Y3R1cmVkTW9kZWxFbWJlZGRlZFhNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0KLQkJLy8gWE1MIHNob3VsZCBOT1QgaGF2ZSBhbiBlbWJlZGRlZCB0eXBlCi0JCURvY3VtZW50IGRvYyA9ICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJRW1iZWRkZWRUeXBlSGFuZGxlciBlbWJlZGRlZEhhbmRsZXIgPSAoRW1iZWRkZWRUeXBlSGFuZGxlcikgKChJTm9kZU5vdGlmaWVyKSBkb2MpLmdldEFkYXB0ZXJGb3IoRW1iZWRkZWRUeXBlSGFuZGxlci5jbGFzcyk7Ci0JCWFzc2VydFRydWUoImVtYmVkZWRIYW5sZGVyIHNob3VsZCBiZSBudWxsIGZvciBYTUwiLCBlbWJlZGRlZEhhbmRsZXIgPT0gbnVsbCk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3RydWN0dXJlZE1vZGVsRW1iZWRkZWRIVE1MKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIG1vZGVsICE9IG51bGwpOwotCi0JCS8vIHNob3VsZCBOT1QgaGF2ZSBhbiBlbWJlZGRlZCB0eXBlCi0JCURvY3VtZW50IGRvYyA9ICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJRW1iZWRkZWRUeXBlSGFuZGxlciBlbWJlZGRlZEhhbmRsZXIgPSAoRW1iZWRkZWRUeXBlSGFuZGxlcikgKChJTm9kZU5vdGlmaWVyKSBkb2MpLmdldEFkYXB0ZXJGb3IoRW1iZWRkZWRUeXBlSGFuZGxlci5jbGFzcyk7Ci0JCWFzc2VydFRydWUoImVtYmVkZWRIYW5sZGVyIHNob3VsZCBiZSBudWxsIGZvciBIVE1MIiwgZW1iZWRkZWRIYW5kbGVyID09IG51bGwpOwotCi0JfQotCi0JcHJvdGVjdGVkIElTdHJ1Y3R1cmVkTW9kZWwgZG9TdHJ1Y3R1cmVkTW9kZWxFbWJlZGRlZEpTUCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0KLQkJLy8gc2hvdWxkIGhhdmUgYW4gZW1iZWRkZWQgdHlwZQotCQlEb2N1bWVudCBkb2MgPSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCVBhZ2VEaXJlY3RpdmVBZGFwdGVyIGVtYmVkZGVkSGFuZGxlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgKChJTm9kZU5vdGlmaWVyKSBkb2MpLmdldEFkYXB0ZXJGb3IoUGFnZURpcmVjdGl2ZUFkYXB0ZXIuY2xhc3MpOwotCQlhc3NlcnRUcnVlKCJlbWJlZGVkSGFubGRlciBzaG91bGQgTk9UIGJlIG51bGwgZm9yIEpTUCIsIGVtYmVkZGVkSGFuZGxlciAhPSBudWxsKTsKLQotCQkvLyBlbWJlZGRlZCB0eXBlIHNob3VsZCBiZSBIVE1MIHNpbmNlIG5vIGNvbnRlbnQKLQkJY2hlY2tFbWJlZGRlZFR5cGUobW9kZWwsIE1vZGVsSGFuZGxlclV0aWxpdHkuZ2V0RGVmYXVsdEVtYmVkZGVkVHlwZSgpKTsKLQotCQlTdHJpbmcgdGVzdENvbnRlbnQgPSAiPCVAIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L2h0bWxcIiAlPiI7Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnJlcGxhY2VUZXh0KHRoaXMsIDAsIDAsIHRlc3RDb250ZW50KTsKLQkJYXNzZXJ0VHJ1ZSgicmVpbml0IHNob3VsZCBOT1QgYmUgbmVlZGVkIGluIHRoaXMgY2FzZSIsICFtb2RlbC5pc1JlaW5pdGlhbGl6YXRpb25OZWVkZWQoKSk7Ci0KLQkJLy8gZW1iZWRkZWQgdHlwZSBzaG91bGQgU1RJTEwgYmUgSFRNTCBzaW5jZSBubyBjb250ZW50VHlwZSB3YXMKLQkJLy8gdGV4dC9odG1sCi0JCWNoZWNrRW1iZWRkZWRUeXBlKG1vZGVsLCBNb2RlbEhhbmRsZXJVdGlsaXR5LmdldERlZmF1bHRFbWJlZGRlZFR5cGUoKSk7Ci0KLQkJcmV0dXJuIG1vZGVsOwotCQkvLwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTdHJ1Y3R1cmVkTW9kZWxFbWJlZGRlZEpTUCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWRvU3RydWN0dXJlZE1vZGVsRW1iZWRkZWRKU1AoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3RydWN0dXJlZE1vZGVsRW1iZWRkZWRKU1BDaGFuZ2UoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0JCS8vIHN0YXJ0IHdpdGggdGhlIGZ1bGwgdGVzdCBjYXNlCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBkb1N0cnVjdHVyZWRNb2RlbEVtYmVkZGVkSlNQKCk7Ci0JCS8vIGNoYW5nZSAiaHRtbCIgdG8gInhtbCIKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkucmVwbGFjZVRleHQodGhpcywgMjcsIDQsICJ4bWwiKTsKLQkJLy8gd2l0aCByZWluaXQgaW4gWE1MIG1vZGVsIC4uLiBpdHMgYWxyZWFkeSBiZWVuIHJlLWluaXRpYWxpemVkCi0JCS8vIGFzc2VydFRydWUoInJlaW5pdCBTSE9VTEQgYmUgbmVlZGVkIGluIHRoaXMgY2FzZSIsCi0JCS8vIG1vZGVsLmlzUmVpbmlpdGlhbGl6YXRpb25OZWVkZWQoKSk7Ci0KLQkJaWYgKG1vZGVsLmlzUmVpbml0aWFsaXphdGlvbk5lZWRlZCgpKSB7Ci0JCQltb2RlbC5yZWluaXQoKTsKLQkJfQotCi0JCS8vIGVtYmVkZGVkIHR5cGUgc2hvdWxkIG5vdyBiZSBYTUwKLQkJY2hlY2tFbWJlZGRlZFR5cGUobW9kZWwsIE1vZGVsSGFuZGxlclV0aWxpdHkuZ2V0RW1iZWRkZWRDb250ZW50VHlwZUZvcigidGV4dC94bWwiKSk7Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L0JlYW5JbmZvUHJvdmlkZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvQmVhbkluZm9Qcm92aWRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVkY2E4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvQmVhbkluZm9Qcm92aWRlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGFzc2lzdDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JT3BlbmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVBhY2thZ2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JUGFja2FnZUZyYWdtZW50Um9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JUGFyZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQmVhbkluZm9Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuSUphdmFQcm9wZXJ0eURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZS5kYXRhbG9jYXRpb24uTG9jYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5JT3ZlcndyaXRlUXVlcnk7Ci0KLS8qKgotICogVGhpcyBjbGFzcyB0ZXN0cyB0aGUgQmVhbkluZm9Qcm92aWRlci4gQ3VycmVudGx5IHRlc3Qgd29ya3NwYWNlIE1VU1QgcG9pbnQKLSAqIHRvIHRoZSBzcGVjaWZpYyBvbmUgZm9yIHRoaXMgdGVzdC4KLSAqIAotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIEJlYW5JbmZvUHJvdmlkZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCWNsYXNzIE92ZXJ3cml0ZU5vbmUgaW1wbGVtZW50cyBJT3ZlcndyaXRlUXVlcnkgewotCQlwdWJsaWMgU3RyaW5nIHF1ZXJ5T3ZlcndyaXRlKFN0cmluZyBwYXRoU3RyaW5nKSB7Ci0JCQlyZXR1cm4gSU92ZXJ3cml0ZVF1ZXJ5LkFMTDsKLQkJfQotCX0KLQotCXByaXZhdGUgSVJlc291cmNlIGZSZXNvdXJjZTsKLQlwcml2YXRlIEJlYW5JbmZvUHJvdmlkZXIgZlByb3ZpZGVyOwotCXByaXZhdGUgSGFzaFNldCBmQWxyZWFkeU9wZW4gPSBuZXcgSGFzaFNldCgpOwotCXByaXZhdGUgUHJvamVjdFVuemlwVXRpbGl0eSBmUHJvalV0aWwgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBmSXNTZXR1cCA9IGZhbHNlOwotCi0JcHVibGljIEJlYW5JbmZvUHJvdmlkZXJUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmICghdGhpcy5mSXNTZXR1cCkgewotCQkJaW5pdGlhbGl6ZVJlc291cmNlKCk7Ci0JCQl0aGlzLmZJc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBpbml0aWFsaXplUmVzb3VyY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZlByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJLy8gcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCUxvY2F0aW9uIHBsYXRmb3JtTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCk7Ci0JCS8vIHBsYXRmb3JtIGxvY2F0aW9uIG1heSBiZSBudWxsIC0tIGRlcGVuZHMgb24gIm1vZGUiIG9mIHBsYXRmb3JtCi0JCWlmIChwbGF0Zm9ybUxvY2F0aW9uICE9IG51bGwpIHsKLQkJCUZpbGUgemlwRmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUiwgImJlYW5pbmZvX3Rlc3RzLnppcCIsIFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUik7Ci0JCQlmUHJvalV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgcGxhdGZvcm1Mb2NhdGlvbi5nZXRVUkwoKS5nZXRQYXRoKCkpOwotCQkJZlByb2pVdGlsLmluaXRKYXZhUHJvamVjdCgiQkVBTklORk8iKTsKLQkJCUlXb3Jrc3BhY2VSb290IHJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQkJU3RyaW5nIHdvcmtzcGFjZVJlbGF0aXZlTG9jYXRpb24gPSAiL0JFQU5JTkZPL0JFQU5fVEVTVFMvYmVhbkluZm9fdGVzdC5qc3AiOwotCQkJZlJlc291cmNlID0gcm9vdC5nZXRGaWxlKG5ldyBQYXRoKHdvcmtzcGFjZVJlbGF0aXZlTG9jYXRpb24pKTsKLQkJCUlKYXZhUHJvamVjdCBqYXZhUHJvaiA9IEphdmFDb3JlLmNyZWF0ZShmUmVzb3VyY2UuZ2V0UHJvamVjdCgpKTsKLQkJCW9wZW5QYXRoKGphdmFQcm9qKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBGaWxlIGdldFNvdXJjZURpcmVjdG9yeShTdHJpbmcgYWJzb2x1dGVTb3VyY2VEaXJlY3RvcnlQYXRoKSB7Ci0JCUZpbGUgc291cmNlRGlyZWN0b3J5ID0gbmV3IEZpbGUoYWJzb2x1dGVTb3VyY2VEaXJlY3RvcnlQYXRoKTsKLQkJaWYgKCFzb3VyY2VEaXJlY3RvcnkuZXhpc3RzKCkgfHwgIXNvdXJjZURpcmVjdG9yeS5pc0RpcmVjdG9yeSgpKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlyZXR1cm4gc291cmNlRGlyZWN0b3J5OwotCX0KLQotCXByaXZhdGUgdm9pZCBvcGVuUGF0aChJSmF2YVByb2plY3QgamF2YVByb2opIHsKLQkJdHJ5IHsKLQkJCWlmIChqYXZhUHJvai5leGlzdHMoKSAmJiAhamF2YVByb2ouaXNPcGVuKCkpIHsKLQkJCQlqYXZhUHJvai5vcGVuKG51bGwpOwotCQkJfQotCQkJSVBhY2thZ2VGcmFnbWVudFJvb3Qgcm9vdCA9IGphdmFQcm9qLmdldFBhY2thZ2VGcmFnbWVudFJvb3QoZlJlc291cmNlLmdldFByb2plY3QoKSk7Ci0JCQlpZiAoIXJvb3QuaXNPcGVuKCkpCi0JCQkJcm9vdC5vcGVuKG51bGwpOwotCQkJSVBhY2thZ2VGcmFnbWVudCBmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJCRUFOX1RFU1RTIik7Ci0JCQlvcGVuQWxsKGZyYWcpOwotCQkJZnJhZyA9IGdldFBhY2thZ2VGcmFnbWVudChyb290LCAib3JnIik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCQlmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJvcmcuZWNsaXBzZSIpOwotCQkJaWYgKGZyYWcgIT0gbnVsbCAmJiAhZnJhZy5pc09wZW4oKSkKLQkJCQlvcGVuQWxsKGZyYWcpOwotCQkJZnJhZyA9IGdldFBhY2thZ2VGcmFnbWVudChyb290LCAib3JnLmVjbGlwc2UuanN0Iik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCQlmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJvcmcuZWNsaXBzZS5qc3QuanNwIik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCQlmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJvcmcuZWNsaXBzZS5qc3QuanNwLnVpIik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCQlmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzIik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCX0KLQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBJUGFja2FnZUZyYWdtZW50IGdldFBhY2thZ2VGcmFnbWVudChJUGFja2FnZUZyYWdtZW50Um9vdCByb290LCBTdHJpbmcgZnJhZ21lbnROYW1lKSB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIHsKLQkJSVBhY2thZ2VGcmFnbWVudCBmcmFnID0gbnVsbDsKLQkJSUphdmFFbGVtZW50W10gY2hpbGRyZW4gPSByb290LmdldENoaWxkcmVuKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLQkJCWlmIChjaGlsZHJlbltpXS5nZXRFbGVtZW50TmFtZSgpLmVxdWFscyhmcmFnbWVudE5hbWUpKSB7Ci0JCQkJZnJhZyA9IChJUGFja2FnZUZyYWdtZW50KSBjaGlsZHJlbltpXTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZnJhZzsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgb3BlbkFsbChJSmF2YUVsZW1lbnQgamF2YUVsZW0pIHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gewotCQlpZiAoamF2YUVsZW0gaW5zdGFuY2VvZiBJT3BlbmFibGUpIHsKLQkJCWlmICghKChJT3BlbmFibGUpIGphdmFFbGVtKS5pc09wZW4oKSkKLQkJCQkoKElPcGVuYWJsZSkgamF2YUVsZW0pLm9wZW4obnVsbCk7Ci0JCX0KLQkJaWYgKGphdmFFbGVtIGluc3RhbmNlb2YgSVBhcmVudCAmJiAoKElQYXJlbnQpIGphdmFFbGVtKS5oYXNDaGlsZHJlbigpKSB7Ci0JCQlJSmF2YUVsZW1lbnRbXSBjaGlsZHJlbiA9ICgoSVBhcmVudCkgamF2YUVsZW0pLmdldENoaWxkcmVuKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0JCQkJaWYgKCFmQWxyZWFkeU9wZW4uY29udGFpbnMoY2hpbGRyZW5baV0uZ2V0RWxlbWVudE5hbWUoKSkpIHsKLQkJCQkJZkFscmVhZHlPcGVuLmFkZChjaGlsZHJlbltpXS5nZXRFbGVtZW50TmFtZSgpKTsKLQkJCQkJb3BlbkFsbChjaGlsZHJlbltpXSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFsbCgpIHsKLQkJYmVhbk9uQ2xhc3NwYXRoKCk7Ci0JCWJlYW5JblByb2plY3QoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYmVhbk9uQ2xhc3NwYXRoKCkgewotCQkvLyBwYV9UT0RPIGRvbid0IHVzZSBKQnV0dG9uLCBwcm9wZXJ0aWVzIGNoYW5nZQotCQkvLyB1c2Ugc29tZXRoaW5nIG1vcmUgc3RhdGljCi0JCUlKYXZhUHJvcGVydHlEZXNjcmlwdG9yW10gZGVzY3JpcHRvcnMgPSBnZXRQcm92aWRlcigpLmdldFJ1bnRpbWVQcm9wZXJ0aWVzKGZSZXNvdXJjZSwgImphdmF4LnN3aW5nLkpCdXR0b24iKTsKLQkJLy8JCWFzc2VydEVxdWFscygiTnVtYmVyIG9mIHByb3BlcnRpZXMgZm9yIEpCdXR0b246IiwgMTIyLCBkZXNjcmlwdG9ycy5sZW5ndGgpOwotCQlhc3NlcnROb3ROdWxsKCJkZXNjcmlwdG9ycyBzaG91bGRuJ3QgYmUgbnVsbCIsIGRlc2NyaXB0b3JzKTsKLQotCQkvLwkJTGlzdCBnZXRPbmx5ID0gbmV3IEFycmF5TGlzdCgpOwotCQkvLwkJTGlzdCBzZXRPbmx5ID0gbmV3IEFycmF5TGlzdCgpOwotCQkvLwkJTGlzdCBib3RoID0gbmV3IEFycmF5TGlzdCgpOwotCQkvLwkJSUphdmFQcm9wZXJ0eURlc2NyaXB0b3IganBkID0gbnVsbDsKLQkJLy8JCWZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcnMubGVuZ3RoOyBpKyspIHsKLQkJLy8JCQlqcGQgPSBkZXNjcmlwdG9yc1tpXTsKLQkJLy8JCQlpZiAoanBkLmdldFJlYWRhYmxlKCkgJiYganBkLmdldFdyaXRlYWJsZSgpKQotCQkvLwkJCQlib3RoLmFkZChqcGQpOwotCQkvLwkJCWVsc2UgaWYgKGpwZC5nZXRSZWFkYWJsZSgpICYmICFqcGQuZ2V0V3JpdGVhYmxlKCkpCi0JCS8vCQkJCWdldE9ubHkuYWRkKGpwZCk7Ci0JCS8vCQkJZWxzZQotCQkvLwkJCQlzZXRPbmx5LmFkZChqcGQpOwotCQkvLwkJfQotCQkvLwkJYXNzZXJ0RXF1YWxzKCJOdW1iZXIgb2YgZ2V0T25seSBwcm9wZXJ0aWVzOiIsIDYyLCBnZXRPbmx5LnNpemUoKSk7Ci0JCS8vYXNzZXJ0RXF1YWxzKCJOdW1iZXIgb2Ygc2V0T25seSBwcm9wZXJ0aWVzOiIsIDAsIHNldE9ubHkuc2l6ZSgpKTsKLQkJLy9hc3NlcnRFcXVhbHMoIk51bWJlciBvZiBnZXQgJiBzZXQgcHJvcGVydGllcyB0aGF0OiIsIDU5LAotCQkvLyBib3RoLnNpemUoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJlYW5JblByb2plY3QoKSB7Ci0JCUlKYXZhUHJvcGVydHlEZXNjcmlwdG9yW10gZGVzY3JpcHRvcnMgPSBnZXRQcm92aWRlcigpLmdldFJ1bnRpbWVQcm9wZXJ0aWVzKGZSZXNvdXJjZSwgIm9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuQmFzZUFsYnVtQ29sbGVjdGlvbkJlYW4iKTsKLQkJYXNzZXJ0RXF1YWxzKCJOdW1iZXIgb2YgcHJvcGVydGllcyBmb3IgQmFzZUFsYnVtQ29sbGVjdGlvbkJlYW46IiwgNCwgZGVzY3JpcHRvcnMubGVuZ3RoKTsKLQkJTGlzdCBnZXRPbmx5ID0gbmV3IEFycmF5TGlzdCgpOwotCQlMaXN0IHNldE9ubHkgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUxpc3QgYm90aCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJSUphdmFQcm9wZXJ0eURlc2NyaXB0b3IganBkID0gbnVsbDsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9ycy5sZW5ndGg7IGkrKykgewotCQkJanBkID0gZGVzY3JpcHRvcnNbaV07Ci0JCQlpZiAoanBkLmdldFJlYWRhYmxlKCkgJiYganBkLmdldFdyaXRlYWJsZSgpKQotCQkJCWJvdGguYWRkKGpwZCk7Ci0JCQllbHNlIGlmIChqcGQuZ2V0UmVhZGFibGUoKSAmJiAhanBkLmdldFdyaXRlYWJsZSgpKQotCQkJCWdldE9ubHkuYWRkKGpwZCk7Ci0JCQllbHNlCi0JCQkJc2V0T25seS5hZGQoanBkKTsKLQkJfQotCQlhc3NlcnRFcXVhbHMoIk51bWJlciBvZiBnZXRPbmx5IHByb3BlcnRpZXM6IiwgMSwgZ2V0T25seS5zaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoIk51bWJlciBvZiBzZXRPbmx5IHByb3BlcnRpZXM6IiwgMSwgc2V0T25seS5zaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoIk51bWJlciBvZiBnZXQgJiBzZXQgcHJvcGVydGllcyB0aGF0OiIsIDIsIGJvdGguc2l6ZSgpKTsKLQkJLy8gZ2V0IG9ubHkKLQkJanBkID0gKElKYXZhUHJvcGVydHlEZXNjcmlwdG9yKSBnZXRPbmx5LmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKCJnZXQgcmVhZGFibGUgZm9yIGdldCBvbmx5IHByb3BlcnR5OiAiLCB0cnVlLCBqcGQuZ2V0UmVhZGFibGUoKSk7Ci0JCWFzc2VydEVxdWFscygiZ2V0IHdyaXRhYmxlIGZvciBnZXQgb25seSBwcm9wZXJ0eToiLCBmYWxzZSwganBkLmdldFdyaXRlYWJsZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJuYW1lIGZvciBnZXQgb25seSBwcm9wZXJ0eSIsICJudW1DZHMiLCBqcGQuZ2V0RGlzcGxheU5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidHlwZSBmb3IgZ2V0IG9ubHkgcHJvcGVydHkiLCAiaW50IiwganBkLmdldERlY2xhcmVkVHlwZSgpKTsKLQkJLy8gc2V0IG9ubHkKLQkJanBkID0gKElKYXZhUHJvcGVydHlEZXNjcmlwdG9yKSBzZXRPbmx5LmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKCJnZXQgcmVhZGFibGUgZm9yIHNldCBvbmx5IHByb3BlcnR5OiAiLCBmYWxzZSwganBkLmdldFJlYWRhYmxlKCkpOwotCQlhc3NlcnRFcXVhbHMoImdldCB3cml0YWJsZSBmb3Igc2V0IG9ubHkgcHJvcGVydHk6IiwgdHJ1ZSwganBkLmdldFdyaXRlYWJsZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJuYW1lIGZvciBzZXQgb25seSBwcm9wZXJ0eSIsICJjZHMiLCBqcGQuZ2V0RGlzcGxheU5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidHlwZSBmb3Igc2V0IG9ubHkgcHJvcGVydHkiLCAiU3RyaW5nW10iLCBqcGQuZ2V0RGVjbGFyZWRUeXBlKCkpOwotCQkvLyBib3RoCi0JCWpwZCA9IChJSmF2YVByb3BlcnR5RGVzY3JpcHRvcikgYm90aC5nZXQoMCk7Ci0JCWFzc2VydEVxdWFscygiZ2V0IHJlYWRhYmxlIGZvciBib3RoIHByb3BlcnR5OiAiLCB0cnVlLCBqcGQuZ2V0UmVhZGFibGUoKSk7Ci0JCWFzc2VydEVxdWFscygiZ2V0IHdyaXRhYmxlIGZvciBib3RoIHByb3BlcnR5OiIsIHRydWUsIGpwZC5nZXRXcml0ZWFibGUoKSk7Ci0JfQotCi0JcHJpdmF0ZSBCZWFuSW5mb1Byb3ZpZGVyIGdldFByb3ZpZGVyKCkgewotCQlpZiAoZlByb3ZpZGVyID09IG51bGwpCi0JCQlmUHJvdmlkZXIgPSBuZXcgQmVhbkluZm9Qcm92aWRlcigpOwotCQlyZXR1cm4gZlByb3ZpZGVyOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvSlNQSmF2YVRyYW5zbGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvSlNQSmF2YVRyYW5zbGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZTNkY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L0pTUEphdmFUcmFuc2xhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSlNQVHJhbnNsYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci0KLS8qKgotICogVGhpcyBjbGFzcyB0ZXN0cyB0aGUgc2VkIEpTUEphdmFUcmFuc2xhdG9yIGNsYXNzCi0gKiAKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBKU1BKYXZhVHJhbnNsYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgSlNQSmF2YVRyYW5zbGF0b3JUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBbGxGaWxlcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCS8vIHRoaXMgdGVzdCBpcyBmb3IgUE1SOiA5MTkzMCBDTVZDOjIxODQ2OQotCQl0ZXN0SlNQSW5KYXZhc2NyaXB0KCJ0ZXN0ZmlsZXMvanNwSW5KYXZhc2NyaXB0LmpzcCIpOwotCX0gCi0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQSW5KYXZhc2NyaXB0KFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzbSA9IGdldFN0cnVjdHVyZWRNb2RlbEZvclJlYWQoZmlsZW5hbWUpOwotCQlpZiAoc20gIT0gbnVsbCkgewotCQkJSURPTU5vZGUgeG1sTm9kZSA9IChJRE9NTm9kZSkgc20uZ2V0SW5kZXhlZFJlZ2lvbigwKTsKLQotCQkJaWYgKHhtbE5vZGUgIT0gbnVsbCkgewotCQkJCUpTUFRyYW5zbGF0b3IganNwdCA9IG5ldyBKU1BUcmFuc2xhdG9yKCk7Ci0JCQkJanNwdC5yZXNldCh4bWxOb2RlLCBudWxsKTsKLQkJCQkvLyBpbnQgc291cmNlVGV4dFBvcyA9IHRleHQuaW5kZXhPZigiPCU9IHRlc3RKc3BTdHJpbmciKSArIDE3OwotCQkJCS8vIGpzcHQuc2V0U291cmNlQ3Vyc29yKHNvdXJjZVRleHRQb3MpOyAvLyByaWdodCBhZnRlciB0aGUKLQkJCQkvLyB0ZXh0Ci0JCQkJanNwdC50cmFuc2xhdGUoKTsKLQkJCQlTdHJpbmcgdHJhbnNsYXRpb24gPSBqc3B0LmdldFRyYW5zbGF0aW9uKCkudG9TdHJpbmcoKTsKLQkJCQkvLyBvZmZzZXRzIGFyZSBmb3VuZCB1c2luZyBKU1BUcmFuc2xhdGlvbiBub3cKLQkJCQkvLyBpbnQgdHJhbnNsYXRlZEN1cnNvclBvc2l0aW9uID0ganNwdC5nZXRDdXJzb3JQb3NpdGlvbigpOwotCQkJCS8vIGFzc2VydEVxdWFscygiaW5jb3JyZWN0IGN1cnNvciBwb3NpdGlvbiA+IiArCi0JCQkJLy8gdHJhbnNsYXRlZEN1cnNvclBvc2l0aW9uLCA1MTksIHRyYW5zbGF0ZWRDdXJzb3JQb3NpdGlvbik7Ci0JCQkJLy8gYXNzZXJ0RXF1YWxzKCJ0cmFuc2xhdGlvbiB3YXMgaW5jb3JyZWN0IiwgInRlc3RKc3BTdHJpbmciLAotCQkJCS8vIHRyYW5zbGF0aW9uLnN1YnN0cmluZyg1MTksIDUzMikpOwotCQkJCWludCBjdXJzb3JTdGFydCA9IHRyYW5zbGF0aW9uLmluZGV4T2YoIm91dC5wcmludChcIlwiK1xuIHRlc3RKc3BTdHJpbmciKSArIDE0OwotCQkJCWFzc2VydEVxdWFscygiaW5jb3JyZWN0IGN1cnNvciBwb3NpdGlvbiA+IiArIGN1cnNvclN0YXJ0LCA2NjcsIGN1cnNvclN0YXJ0KTsKLQkJCX0KLQkJCXNtLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogSU1QT1JUQU5UIHdob2V2ZXIgY2FsbHMgdGhpcyBtdXN0IHJlbGVhc2VGcm9tUmVhZCBhZnRlciB0aGV5IGFyZSBkb25lCi0JICogdXNpbmcgaXQuCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogQHJldHVybgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24gCi0JICogQHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uICAKLQkgKi8KLQlwcm90ZWN0ZWQgSVN0cnVjdHVyZWRNb2RlbCBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JSZWFkKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJLy8gY3JlYXRlIG1vZGVsCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlJU3RydWN0dXJlZE1vZGVsIHNNb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQkJcmV0dXJuIHNNb2RlbDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L0pTUFRyYW5zbGF0aW9uVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L0pTUFRyYW5zbGF0aW9uVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzY1MWRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC9KU1BUcmFuc2xhdGlvblRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGFzc2lzdDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Qb3NpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuZG9tZG9jdW1lbnQuRE9NTW9kZWxGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSUpTUFRyYW5zbGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5KU1BUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXIuU2Nhbm5lclVuaXRUZXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlLmRhdGFsb2NhdGlvbi5Mb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgdW5pdCB0ZXN0cyB0aGUgc2VkIEpTUFRyYW5zbGF0aW9uIG1lY2hhbmlzbS4KLSAqIFRoYXQgaW5jbHVkZXMgSlNQVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeSwgSlNQVHJhbnNsYXRpb25BZGFwdGVyLCBhbmQgSlNQVHJhbnNsYXRpb24uCi0gKiBJdCB1c2VzIHRoZSBqc3BfaW5jbHVkZV90ZXN0LmpzcCwgYmVjYXVzZSBvZiB0aGUgbW9yZSBjb21wbGljYXRlZCB0cmFuc2xhdGlvbiBhbmQgb2Zmc2V0cy4KLSAqIAotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIEpTUFRyYW5zbGF0aW9uVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgUHJvamVjdFVuemlwVXRpbGl0eSBmUHJvalV0aWwgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0JCi0JcHJpdmF0ZSBIYXNoTWFwIGZYTUxKU1BQb3NpdGlvbnM7Ci0KLQlwdWJsaWMgSlNQVHJhbnNsYXRpb25UZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmICghdGhpcy5pc1NldHVwKSB7Ci0JCQlkb1NldHVwKCk7Ci0JCQl0aGlzLmlzU2V0dXAgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvU2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZlByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQotCQkvLyByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJTG9jYXRpb24gcGxhdGZvcm1Mb2NhdGlvbiA9IFBsYXRmb3JtLmdldEluc3RhbmNlTG9jYXRpb24oKTsKLQotCQlGaWxlIHppcEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIsICJpbmNsdWRlc190ZXN0cy56aXAiLCBQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIpOwotCQlmUHJvalV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgcGxhdGZvcm1Mb2NhdGlvbi5nZXRVUkwoKS5nZXRQYXRoKCkpOwotCQlmUHJvalV0aWwuaW5pdEphdmFQcm9qZWN0KCJJTkNMVURFU19URVNUUyIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RUcmFuc2xhdGVQb3NpdGlvbnMoKSB7Ci0KLQkJSURPTU1vZGVsIG1vZGVsID0gZ2V0SW5jbHVkZVRlc3RNb2RlbEZvclJlYWQoKTsKLQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyIGFkYXB0ZXIgPSAoSlNQVHJhbnNsYXRpb25BZGFwdGVyKSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSlNQVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSBhZGFwdGVyLmdldEpTUFRyYW5zbGF0aW9uKCk7Ci0JCXRyeSB7Ci0JCQlIYXNoTWFwIGphdmEyanNwID0gdHJhbnNsYXRpb24uZ2V0SmF2YTJKc3BNYXAoKTsKLQkJCWFzc2VydEVxdWFscygiamF2YTJqc3AgbWFwIHNpemU6IiwgMTMsIGphdmEyanNwLnNpemUoKSk7Ci0KLQkJCUhhc2hNYXAganNwMmphdmEgPSB0cmFuc2xhdGlvbi5nZXRKc3AySmF2YU1hcCgpOwotCQkJYXNzZXJ0RXF1YWxzKCJqc3AyamF2YSBtYXAgc2l6ZToiLCAzLCBqc3AyamF2YS5zaXplKCkpOwotCi0JCQkvLyBzb21lIHRlc3QgcG9zaXRpb25zIChvdXQucHJpbnQoIiIgKyB8ICk7KQotCQkJCi0JCQkvLyB3ZSBuZWVkIHRvIGlnbm9yZSB0aGUgY2xhc3NuYW1lIGxlbmd0aCBpbiBvdXIgY29tcGFyaXNvbnMKLQkJCS8vIHdpdGggamF2YSBvZmZzZXRzIHRoYXQgd2UgZ2V0IGZyb20gdGhlIHRyYW5zbGF0aW9uCi0JCQkvLyBzaW5jZSBpdCBjYW4gdmFyeSBkZXBlbmRpbmcgb24gd29ya3NwYWNlIGxvY2F0aW9uCi0JCQlpbnQgY2xhc3NuYW1lTGVuZ3RoID0gdHJhbnNsYXRpb24uZ2V0Q2xhc3NuYW1lKCkubGVuZ3RoKCk7Ci0JCQkKLQkJCWludCBqc3BUZXN0UG9zaXRpb24gPSB0cmFuc2xhdGlvbi5nZXRKc3BUZXh0KCkuaW5kZXhPZigiPCU9ICIpICsgNDsKLQkJCWludCBqYXZhT2Zmc2V0ID0gdHJhbnNsYXRpb24uZ2V0SmF2YU9mZnNldChqc3BUZXN0UG9zaXRpb24pIC0gY2xhc3NuYW1lTGVuZ3RoOwotCQkJYXNzZXJ0RXF1YWxzKCJKU1BUcmFuc2xhdGlvbiBqYXZhIG9mZnNldDoiLCAxMDA5LCBqYXZhT2Zmc2V0KTsKLQkJCQotCQkJLy8gKDwlPSB8ICU+KQotCQkJaW50IGphdmFUZXN0UG9zdGl0aW9uID0gdHJhbnNsYXRpb24uZ2V0SmF2YVRleHQoKS5pbmRleE9mKCJvdXQucHJpbnQoXCJcIitcbiAgIFxuKTsiKSArIDE0OwotCQkJLy8gZG9udCcgbmVlZCB0byB3b3JyeSBhYm91dCBjbGFzc25hbWUgbGVuZ3RoIGhlcmUgYmVjYXVzZSB3ZSBhcmUgY29tcGFyaW5nCi0JCQkvLyB3aXRoIGEgcG9zaXRpb24gaW4gdGhlIEpTUCBkb2N1bWVudCAod2hpY2ggZG9lc24ndCBjb250YWluIGNsYXNzbmFtZSkKLQkJCWludCBqc3BPZmZzZXQgPSB0cmFuc2xhdGlvbi5nZXRKc3BPZmZzZXQoamF2YVRlc3RQb3N0aXRpb24pOwotCQkJYXNzZXJ0RXF1YWxzKCJKU1BUcmFuc2xhdGlvbiBqc3Agb2Zmc2V0OiIsIDU2NCwganNwT2Zmc2V0KTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQVHJhbnNsYXRpb25UZXh0KCkgewotCi0JCUlET01Nb2RlbCBtb2RlbCA9IGdldEluY2x1ZGVUZXN0TW9kZWxGb3JSZWFkKCk7Ci0JCVNjYW5uZXJVbml0VGVzdHMudmVyaWZ5TGVuZ3Rocyhtb2RlbCwgbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCkpOwotCQlKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgYWRhcHRlciA9IChKU1BUcmFuc2xhdGlvbkFkYXB0ZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQlKU1BUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IGFkYXB0ZXIuZ2V0SlNQVHJhbnNsYXRpb24oKTsKLQkJLy8gbmFtZWQgYXMgLmJpbiBzbyBubyBsaW5lIGNvbnZlcnNpb24gb2NjdXJzIChcbiBpcyBpbiB1c2UpCi0JCUlucHV0U3RyZWFtIGluID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCJ0cmFuc2xhdGVkX3RleHQuYmluIik7Ci0JCVN0cmluZyBrbm93blRyYW5zbGF0aW9uVGV4dCA9IGxvYWRDaGFycyhpbik7Ci0JCXRyeSB7Ci0JCQkvLyBpbXByb3ZlbWVudHM6IG1heSBuZWVkIGZpbmVyIHR1bmVkIHRleHQgY29tcGFyZXMgbGF0ZXIKLQkJCS8vIGZvciBkaWZmZXJlbnQgdHlwZXMgb2YgdHJhbnNsYXRpb25zIChpbmNsdWRlcywgeG1sLWpzcCBpbiBzY3JpcHQsIGF0dHJpYnV0ZXMsIGV0Yy4uLikKLQkJCVN0cmluZyB0ZXh0ID0gdHJhbnNsYXRpb24uZ2V0SmF2YVRleHQoKTsKLQkJCQotCQkJYXNzZXJ0Tm90TnVsbCgiSlNQIHRyYW5zbGF0aW9uIHRleHQ6IiwgdGV4dCk7Ci0JCQlhc3NlcnRFcXVhbHMoIkpTUCB0cmFuc2xhdGlvbiB0ZXh0IGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIiwga25vd25UcmFuc2xhdGlvblRleHQsIHRleHQpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQVHJhbnNsYXRpb25BZGFwdGVyKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBnZXRJbmNsdWRlVGVzdE1vZGVsRm9yUmVhZCgpOwotCQlKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgYWRhcHRlciA9IChKU1BUcmFuc2xhdGlvbkFkYXB0ZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQlKU1BUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IGFkYXB0ZXIuZ2V0SlNQVHJhbnNsYXRpb24oKTsKLQotCQl0cnkgewotCQkJSUphdmFQcm9qZWN0IHByb2ogPSBhZGFwdGVyLmdldEphdmFQcm9qZWN0KCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZG4ndCBnZXQgamF2YSBwcm9qZWN0OiIgKyBwcm9qKTsKLQotCQkJdHJhbnNsYXRpb24gPSBhZGFwdGVyLmdldEpTUFRyYW5zbGF0aW9uKCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZG4ndCBnZXQgdHJhbnNsYXRpb246IiwgdHJhbnNsYXRpb24pOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBNYWtlcyBzdXJlIGJvdGggYmVhbnMgYXJlIHRyYW5zbGF0ZWQgZXZlbiB0aG91Z2ggdGhleSBhcmUKLQkgKiByaWdodCBuZXh0IHRvIGVhY2ggb3RoZXIgd2l0aCBubyBzcGFjZS4KLQkgKiAKLQkgKiBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMDA0Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdFVzZUJlYW5Ob1NwYWNlKCkgewotCQlJRmlsZSBmID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKCJJTkNMVURFU19URVNUUy91c2VCZWFuX3Rlc3Rlci5qc3AiKSk7Ci0JCURPTU1vZGVsRm9ySlNQIHNNb2RlbCA9IChET01Nb2RlbEZvckpTUClnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JSZWFkKGYpOwotCQl0cnkgewotCQkJc2V0dXBBZGFwdGVyRmFjdG9yeShzTW9kZWwpOwotCQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyIGFkYXB0ZXIgPSAoSlNQVHJhbnNsYXRpb25BZGFwdGVyKSBzTW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKU1BUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCQlKU1BUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IGFkYXB0ZXIuZ2V0SlNQVHJhbnNsYXRpb24oKTsKLQkJCVN0cmluZyBqYXZhVGV4dCA9IHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCk7Ci0JCQlib29sZWFuIGJlYW4xID0gamF2YVRleHQuaW5kZXhPZigiamF2YXguc3dpbmcuSkJ1dHRvbiB4ID0gbnVsbDsiKSAhPSAtMTsKLQkJCWJvb2xlYW4gYmVhbjIgPSBqYXZhVGV4dC5pbmRleE9mKCJqYXZheC5zd2luZy5KQnV0dG9uIHkgPSBudWxsOyIpICE9IC0xOwotCQkJYXNzZXJ0VHJ1ZShiZWFuMSk7Ci0JCQlhc3NlcnRUcnVlKGJlYW4yKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmKHNNb2RlbCAhPSBudWxsKQotCQkJCXNNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODYzODIKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MSlNQVHJhbnNsYXRpb25UZXh0KCkgewotCQlJRmlsZSBmID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKCJJTkNMVURFU19URVNUUy94bWwtanNwL21vc3QtdGFncy14bWwtanNwLmpzcCIpKTsKLQkJRE9NTW9kZWxGb3JKU1Agc01vZGVsID0gKERPTU1vZGVsRm9ySlNQKWdldFN0cnVjdHVyZWRNb2RlbEZvclJlYWQoZik7Ci0JCXRyeSB7Ci0JCQlzZXR1cEFkYXB0ZXJGYWN0b3J5KHNNb2RlbCk7Ci0JCQlKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgYWRhcHRlciA9IChKU1BUcmFuc2xhdGlvbkFkYXB0ZXIpIHNNb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJCUpTUFRyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkJCi0JCQlTdHJpbmcgamF2YVRleHQgPSB0cmFuc2xhdGlvbi5nZXRKYXZhVGV4dCgpOwotCQkJCi0JCQkvLyBuYW1lZCBhcyAuYmluIHNvIG5vIGxpbmUgY29udmVyc2lvbiBvY2N1cnMgKFxuIGlzIGluIHVzZSkKLQkJCUlucHV0U3RyZWFtIGluID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCJ0cmFuc2xhdGVkX3htbF9qc3AuYmluIik7Ci0JCQlTdHJpbmcga25vd25UcmFuc2xhdGlvblRleHQgPSBsb2FkQ2hhcnMoaW4pOwotCQkJCi0JCQlhc3NlcnRFcXVhbHMoa25vd25UcmFuc2xhdGlvblRleHQsIGphdmFUZXh0KTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmKHNNb2RlbCAhPSBudWxsKQotCQkJCXNNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0WE1MSlNQTWFwcGluZygpIHsKLQkJSUZpbGUgZiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aCgiSU5DTFVERVNfVEVTVFMveG1sLWpzcC9tb3N0LXRhZ3MteG1sLWpzcC5qc3AiKSk7Ci0JCURPTU1vZGVsRm9ySlNQIHNNb2RlbCA9IChET01Nb2RlbEZvckpTUClnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JSZWFkKGYpOwotCQl0cnkgewotCQkJc2V0dXBBZGFwdGVyRmFjdG9yeShzTW9kZWwpOwotCQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyIGFkYXB0ZXIgPSAoSlNQVHJhbnNsYXRpb25BZGFwdGVyKSBzTW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKU1BUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCQlKU1BUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IGFkYXB0ZXIuZ2V0SlNQVHJhbnNsYXRpb24oKTsKLQkJCQotCQkJSGFzaE1hcCBqc3AyamF2YSA9IHRyYW5zbGF0aW9uLmdldEpzcDJKYXZhTWFwKCk7Ci0JCQlPYmplY3RbXSBqc3BSYW5nZXMgPSBqc3AyamF2YS5rZXlTZXQoKS50b0FycmF5KCk7Ci0JCQlQb3NpdGlvbiBqc3BQb3MgPSBudWxsOwotCQkJUG9zaXRpb24gamF2YVBvcyA9IG51bGw7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGpzcFJhbmdlcy5sZW5ndGg7IGkrKykgewotCQkJCWpzcFBvcyA9IChQb3NpdGlvbilqc3BSYW5nZXNbaV07Ci0JCQkJamF2YVBvcyA9IChQb3NpdGlvbilqc3AyamF2YS5nZXQoanNwUG9zKTsKLQkJCQkvL1N5c3RlbS5vdXQucHJpbnRsbigianNwOiIgKyBwcmludFBvcyhqc3BQb3MpICsgIiA+PiBqYXZhOiIgKyBwcmludFBvcyhqYXZhUG9zKSk7Ci0JCQkJY2hlY2tQb3NpdGlvbihqc3BQb3MsIGphdmFQb3MpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYoc01vZGVsICE9IG51bGwpCi0JCQkJc01vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RYTUxKU1BDREFUQVRleHQoKSB7Ci0JCUlGaWxlIGYgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoIklOQ0xVREVTX1RFU1RTL2NkYXRhL2NkYXRhLmpzcCIpKTsKLQkJRE9NTW9kZWxGb3JKU1Agc01vZGVsID0gKERPTU1vZGVsRm9ySlNQKWdldFN0cnVjdHVyZWRNb2RlbEZvclJlYWQoZik7Ci0JCXRyeSB7Ci0JCQlzZXR1cEFkYXB0ZXJGYWN0b3J5KHNNb2RlbCk7Ci0JCQlKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgYWRhcHRlciA9IChKU1BUcmFuc2xhdGlvbkFkYXB0ZXIpIHNNb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJCUpTUFRyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkJCi0JCQlTdHJpbmcgdHJhbnNUZXh0ID0gdHJhbnNsYXRpb24uZ2V0SmF2YVRleHQoKTsKLQkJCQotLy8JCQkgbmFtZWQgYXMgLmJpbiBzbyBubyBsaW5lIGNvbnZlcnNpb24gb2NjdXJzIChcbiBpcyBpbiB1c2UpCi0JCQlJbnB1dFN0cmVhbSBpbiA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbSgidHJhbnNsYXRlZF94bWxfanNwX2NkYXRhLmJpbiIpOwotCQkJU3RyaW5nIGtub3duVGV4dCA9IGxvYWRDaGFycyhpbik7Ci0JCQkKLQkJCWFzc2VydEVxdWFscyhrbm93blRleHQsIHRyYW5zVGV4dCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZihzTW9kZWwgIT0gbnVsbCkKLQkJCQlzTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGNoZWNrUG9zaXRpb24oUG9zaXRpb24ganNwUG9zLCBQb3NpdGlvbiBqYXZhUG9zKSB7Ci0JCQotCQlIYXNoTWFwIGV4cGVjdGVkID0gZ2V0WE1MSlNQUG9zaXRpb25zKCk7Ci0JCU9iamVjdFtdIGtleXMgPWV4cGVjdGVkLmtleVNldCgpLnRvQXJyYXkoKTsKLQkJUG9zaXRpb24gZXhwZWN0ZWRKc3BQb3M9IG51bGw7Ci0JCVBvc2l0aW9uIGV4cGVjdGVkSmF2YVBvcyA9IG51bGw7Ci0JCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7Ci0JCQlleHBlY3RlZEpzcFBvcyA9IChQb3NpdGlvbilrZXlzW2ldOwotCQkJaWYoanNwUG9zLmVxdWFscyhleHBlY3RlZEpzcFBvcykpIHsKLQkJCQlleHBlY3RlZEphdmFQb3MgPSAoUG9zaXRpb24pZXhwZWN0ZWQuZ2V0KGV4cGVjdGVkSnNwUG9zKTsKLQkJCQlmb3VuZCA9IHRydWU7Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgSlNQIHBvc2l0aW9uIG1pc3Npbmc6ICIgKyBqc3BQb3MsIGZvdW5kKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gZXhwZWN0ZWQgamF2YSBwb3NpdGlvbiBmb3IganNwUG9zOiAiICsgcHJpbnRQb3MoanNwUG9zKSwgZXhwZWN0ZWRKYXZhUG9zKTsKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGphdmEgcG9zaXRpb24gd2FzOiIgKyBwcmludFBvcyhqYXZhUG9zKSArICIgYnV0IGV4cGVjdGVkOiIgKyBwcmludFBvcyhleHBlY3RlZEphdmFQb3MpLCBqYXZhUG9zLCBleHBlY3RlZEphdmFQb3MpOwotCX0KLQlwcml2YXRlIFN0cmluZyBwcmludFBvcyhQb3NpdGlvbiBwb3MpIHsKLQkJcmV0dXJuIHBvcyAhPSBudWxsID8gIlsiICsgcG9zLm9mZnNldCArIjoiKyBwb3MubGVuZ3RoICsgIl0iIDogIm51bGwiOwotCX0KLQlwcml2YXRlIEhhc2hNYXAgZ2V0WE1MSlNQUG9zaXRpb25zKCkgewotCQlpZihmWE1MSlNQUG9zaXRpb25zID09IG51bGwpIHsKLQkJCWZYTUxKU1BQb3NpdGlvbnMgPSBuZXcgSGFzaE1hcCgpOwotCQkJZlhNTEpTUFBvc2l0aW9ucy5wdXQobmV3IFBvc2l0aW9uKDg4Miw1MiksIG5ldyBQb3NpdGlvbig5MjAsMzEpKTsKLQkJCWZYTUxKU1BQb3NpdGlvbnMucHV0KG5ldyBQb3NpdGlvbig5NjEsNyksIG5ldyBQb3NpdGlvbig5NTIsNykpOwotCQkJZlhNTEpTUFBvc2l0aW9ucy5wdXQobmV3IFBvc2l0aW9uKDEwMTgsMTQpLCBuZXcgUG9zaXRpb24oODksMTQpKTsKLQkJCWZYTUxKU1BQb3NpdGlvbnMucHV0KG5ldyBQb3NpdGlvbig2NDAsMiksIG5ldyBQb3NpdGlvbig4ODgsMikpOwotCQkJZlhNTEpTUFBvc2l0aW9ucy5wdXQobmV3IFBvc2l0aW9uKDQwNiwyNCksIG5ldyBQb3NpdGlvbig3NTksMjQpKTsKLQkJCWZYTUxKU1BQb3NpdGlvbnMucHV0KG5ldyBQb3NpdGlvbig2ODUsMTkpLCBuZXcgUG9zaXRpb24oODk3LDE5KSk7Ci0JCQlmWE1MSlNQUG9zaXRpb25zLnB1dChuZXcgUG9zaXRpb24oNjUwLDI2KSwgbmV3IFBvc2l0aW9uKDg2MSwyNikpOwotCQkJZlhNTEpTUFBvc2l0aW9ucy5wdXQobmV3IFBvc2l0aW9uKDU2Myw5KSwgbmV3IFBvc2l0aW9uKDg0OCw5KSk7Ci0JCQlmWE1MSlNQUG9zaXRpb25zLnB1dChuZXcgUG9zaXRpb24oNDYxLDIzKSwgbmV3IFBvc2l0aW9uKDc4NCwyMykpOwotCQkJZlhNTEpTUFBvc2l0aW9ucy5wdXQobmV3IFBvc2l0aW9uKDUyMiw4KSwgbmV3IFBvc2l0aW9uKDgyMiw4KSk7Ci0JCQlmWE1MSlNQUG9zaXRpb25zLnB1dChuZXcgUG9zaXRpb24oMzIzLDQ0KSwgbmV3IFBvc2l0aW9uKDI3NCw0NSkpOwotCQkJZlhNTEpTUFBvc2l0aW9ucy5wdXQobmV3IFBvc2l0aW9uKDI0NSw0MyksIG5ldyBQb3NpdGlvbigyMjksNDQpKTsKLQkJfQotCQlyZXR1cm4gZlhNTEpTUFBvc2l0aW9uczsKLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGxvYWRDaGFycyhJbnB1dFN0cmVhbSBpbnB1dCkgewotCi0JCVN0cmluZ0J1ZmZlciBzID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQl0cnkgewotCQkJaW50IGMgPSAtMTsKLQkJCXdoaWxlICgoYyA9IGlucHV0LnJlYWQoKSkgPj0gMCkgewotCQkJCWlmIChjID4gMjU1KQotCQkJCQlicmVhazsKLQkJCQlzLmFwcGVuZCgoY2hhcikgYyk7Ci0JCQl9Ci0JCQlpbnB1dC5jbG9zZSgpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkFuIEkvTyBlcnJvciBvY2N1cmVkIHdoaWxlIGxvYWRpbmcgOiIpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGUpOwotCQl9Ci0JCXJldHVybiBzLnRvU3RyaW5nKCk7Ci0JfQotCQotCS8qKgotCSAqIGFkZCB0aGUgZmFjdG9yeSBmb3IgSlNQVHJhbnNsYXRpb25BZGFwdGVyIGhlcmUKLQkgKiBAcGFyYW0gc20KLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBBZGFwdGVyRmFjdG9yeShJU3RydWN0dXJlZE1vZGVsIHNtKSB7Ci0JCUpTUFRyYW5zbGF0aW9uQWRhcHRlckZhY3RvcnkgZmFjdG9yeSA9IG5ldyBKU1BUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5KCk7Ci0JCXNtLmdldEZhY3RvcnlSZWdpc3RyeSgpLmFkZEZhY3RvcnkoZmFjdG9yeSk7Ci0JfQotCi0JLyoqCi0JICogSU1QT1JUQU5UIC0gcmVsZWFzZSBtb2RlbCAobW9kZWwucmVsZWFzZUZyb21SZWFkKCkpIGFmdGVyIHVzZQotCSAqIEBwYXJhbSBmaWxlCi0JICogQHJldHVybgotCSAqLwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JSZWFkKElGaWxlIGZpbGUpIHsKLQkJdHJ5IHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJCXJldHVybiBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JSZWFkKGZpbGUpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBpb2V4KSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oImNvdWxkbid0IG9wZW4gZmlsZSA+ICIgKyBmaWxlKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgSURPTU1vZGVsIGdldEluY2x1ZGVUZXN0TW9kZWxGb3JSZWFkKCkgewotCi0JCUlQYXRoIGpzcFRlc3RGaWxlUGF0aCA9IG5ldyBQYXRoKCJJTkNMVURFU19URVNUUy9qc3BfaW5jbHVkZV90ZXN0LmpzcCIpOwotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKGpzcFRlc3RGaWxlUGF0aCk7Ci0JCUlET01Nb2RlbCB4bWxNb2RlbCA9IChJRE9NTW9kZWwpIGdldFN0cnVjdHVyZWRNb2RlbEZvclJlYWQoZmlsZSk7Ci0JCXNldHVwQWRhcHRlckZhY3RvcnkoeG1sTW9kZWwpOwotCQlyZXR1cm4geG1sTW9kZWw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90ZXN0ZmlsZXMvanNwSW5KYXZhc2NyaXB0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90ZXN0ZmlsZXMvanNwSW5KYXZhc2NyaXB0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhjN2MwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvdGVzdGZpbGVzL2pzcEluSmF2YXNjcmlwdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08SFRNTD4NCi08SEVBRD4NCi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiDQotcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPFRJVExFPnBtci5qc3A8L1RJVExFPg0KLQ0KLTwlIVN0cmluZyB0ZXN0SnNwU3RyaW5nID0gInRlc3RKc3BTdHJpbmciOyAlPg0KLTxzY3JpcHQ+IA0KLQ0KLXZhciB0ZXN0ID0gPCU9IHRlc3RKc3BTdHJpbmcgJT47DQotDQotPC9zY3JpcHQ+DQotDQotDQotDQotPC9IRUFEPg0KLTxCT0RZPg0KLTwlICAlPg0KLTxQPlBsYWNlIGpzcEluSmF2YXNjcmlwdC5qc3AncyBjb250ZW50IGhlcmUuPC9QPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L3RyYW5zbGF0ZWRfdGV4dC5iaW4gYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvdHJhbnNsYXRlZF90ZXh0LmJpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDcwNDM2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvdHJhbnNsYXRlZF90ZXh0LmJpbgorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lio7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLio7Ci1pbXBvcnQgamF2YXguc2VydmxldC5qc3AuKjsKLQotcHVibGljIGNsYXNzIF9fMkZfSU5DTFVERVNfVEVTVFNfMkZfanNwX2luY2x1ZGVfdGVzdF8yRV9qc3AgZXh0ZW5kcyBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXR7Ci0gU3RyaW5nIGFyZ2ggPSAiYXJnaCI7IAotCi0gcHVibGljIFN0cmluZyBnbG9iYWxJbmNsdWRlZFN0cmluZyA9ICJpbmNsdWRlZCI7Ci0KLSBwcm90ZWN0ZWQgU3RyaW5nIHdpdGhfc3BhY2UgPSAid2l0aHNwYWNlIjsKLQotcHVibGljIHZvaWQgX2pzcFNlcnZpY2UoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKLQkJdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7Ci1qYXZheC5zZXJ2bGV0LmpzcC5QYWdlQ29udGV4dCBwYWdlQ29udGV4dCA9IG51bGw7Ci1qYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb24gc2Vzc2lvbiA9IG51bGw7Ci1qYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uID0gbnVsbDsKLWphdmF4LnNlcnZsZXQuU2VydmxldENvbmZpZyBjb25maWcgPSBudWxsOwotamF2YXguc2VydmxldC5qc3AuSnNwV3JpdGVyIG91dCA9IG51bGw7Ci1PYmplY3QgcGFnZSA9IG51bGw7Ci0KLXRyeSB7Ci0gU3RyaW5nIGxvY2FsSW5jbHVkZWRTdHJpbmcgPSBnbG9iYWxJbmNsdWRlZFN0cmluZzsKLWZvcihpbnQgaT0wOyBpPDU7IGkrKykgewotb3V0LnByaW50KCIiKwotaQotKTsKLX0KLWphdmF4LnN3aW5nLkpCdXR0b24gQkVBTl9pbmNsdWRlZEJlYW4gPSBuZXcgamF2YXguc3dpbmcuSkJ1dHRvbigpOwotIGludCBpbmNsdWRlX2luY2x1ZGVfaW50ID0gNTsgCi1qYXZheC5zd2luZy5KQnV0dG9uIGluY2x1ZGVzVXNlQmVhbiA9IG5ldyBqYXZheC5zd2luZy5KQnV0dG9uKCk7Ci17IC8vIDxnaWZ0czpnaWZ0PgotfSAvLyA8L2dpZnRzOmdpZnQ+Ci1vdXQucHJpbnQoIiIrCi0gICAKLSk7Ci0gfSBjYXRjaCAoamF2YS5sYW5nLkV4Y2VwdGlvbiBlKSB7fSAKLX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L3RyYW5zbGF0ZWRfeG1sX2pzcC5iaW4gYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvdHJhbnNsYXRlZF94bWxfanNwLmJpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU0NjIzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvdHJhbnNsYXRlZF94bWxfanNwLmJpbgorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lio7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLio7Ci1pbXBvcnQgamF2YXguc2VydmxldC5qc3AuKjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotcHVibGljIGNsYXNzIF9fMkZfSU5DTFVERVNfVEVTVFNfMkZfeG1sXzJEX2pzcF8yRl9tb3N0XzJEX3RhZ3NfMkRfeG1sXzJEX2pzcF8yRV9qc3AgZXh0ZW5kcyBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXR7Ci1wdWJsaWMgU3RyaW5nIG15RnVuYygpIHsgcmV0dXJuICJteWZ1bmMiOyB9Ci0KLXB1YmxpYyBTdHJpbmcgbXlGdW5jMigpIHsgcmV0dXJuICJteWZ1bmMiOyB9Ci0KLXB1YmxpYyB2b2lkIF9qc3BTZXJ2aWNlKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCi0JCXRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewotamF2YXguc2VydmxldC5qc3AuUGFnZUNvbnRleHQgcGFnZUNvbnRleHQgPSBudWxsOwotamF2YXguc2VydmxldC5odHRwLkh0dHBTZXNzaW9uIHNlc3Npb24gPSBudWxsOwotamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbiA9IG51bGw7Ci1qYXZheC5zZXJ2bGV0LlNlcnZsZXRDb25maWcgY29uZmlnID0gbnVsbDsKLWphdmF4LnNlcnZsZXQuanNwLkpzcFdyaXRlciBvdXQgPSBudWxsOwotT2JqZWN0IHBhZ2UgPSBudWxsOwotCi10cnkgewotU3RyaW5nIGNvbnNlYzEgPSAidGVzdCI7Ci1TdHJpbmcgY29uc2VjMiA9ICJ0d28iOwotb3V0LnByaW50KCIiKwotbXlGdW5jKCkKLSk7Ci1vdXQucHJpbnQoIiIrCi1teUZ1bmMyKCkKLSk7Ci1qYXZheC5zd2luZy5BYnN0cmFjdEJ1dHRvbiBqYiA9IG5ldyBqYXZheC5zd2luZy5KQnV0dG9uKCk7Ci1TdHJpbmcgaW5jbHVkZWRTdHJpbmcgPSAiaW5jZCI7Ci0gICBqYi4gCi0gfSBjYXRjaCAoamF2YS5sYW5nLkV4Y2VwdGlvbiBlKSB7fSAKLX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L3RyYW5zbGF0ZWRfeG1sX2pzcF9jZGF0YS5iaW4gYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvdHJhbnNsYXRlZF94bWxfanNwX2NkYXRhLmJpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA0NWFjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvdHJhbnNsYXRlZF94bWxfanNwX2NkYXRhLmJpbgorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lio7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLio7Ci1pbXBvcnQgamF2YXguc2VydmxldC5qc3AuKjsKLQotcHVibGljIGNsYXNzIF9fMkZfSU5DTFVERVNfVEVTVFNfMkZfY2RhdGFfMkZfY2RhdGFfMkVfanNwIGV4dGVuZHMgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0ewotcHVibGljIHZvaWQgX2pzcFNlcnZpY2UoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKLQkJdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7Ci1qYXZheC5zZXJ2bGV0LmpzcC5QYWdlQ29udGV4dCBwYWdlQ29udGV4dCA9IG51bGw7Ci1qYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb24gc2Vzc2lvbiA9IG51bGw7Ci1qYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uID0gbnVsbDsKLWphdmF4LnNlcnZsZXQuU2VydmxldENvbmZpZyBjb25maWcgPSBudWxsOwotamF2YXguc2VydmxldC5qc3AuSnNwV3JpdGVyIG91dCA9IG51bGw7Ci1PYmplY3QgcGFnZSA9IG51bGw7Ci0KLXRyeSB7Ci0KLWludCBhID0gMTsKLWlmIChhIAotPAotIDIpIHsKLSBvdXQucHJpbnRsbigieCIpOwotfSAKLSAgIAotU3RyaW5nIHRlc3QgPSAiIjsKLQotCi0gICAKLWludCBhID0gMTsKLWlmIChhIDwgMikgeyAgIAotIG91dC5wcmludGxuKCJ4Iik7Ci19Ci0KLQotIAotIHRlc3QudG9VcHBlckNhc2UoKTsKLSB9IGNhdGNoIChqYXZhLmxhbmcuRXhjZXB0aW9uIGUpIHt9IAotfX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRkZXNjcmlwdGlvbi9UZXN0Q29udGVudERlc2NyaXB0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRkZXNjcmlwdGlvbi9UZXN0Q29udGVudERlc2NyaXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkNGQxYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50ZGVzY3JpcHRpb24vVGVzdENvbnRlbnREZXNjcmlwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5jb250ZW50ZGVzY3JpcHRpb247Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5GaWxlQnVmZmVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlF1YWxpZmllZE5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnREZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLkxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmRvY3VtZW50LlVuemlwcGVkUHJvamVjdFRlc3RlcjsKLQotLyoqCi0gKiBUZXN0cyB0aGF0IG91ciBDb250ZW50RGVzY3JpYmVyRm9ySlNQIGlzIHdvcmtpbmcgYXMgZXhwZWN0ZWQsCi0gKiBXZSBjaGVjayB0aGF0IHRoZSBjb250ZW50IGRlc2NyaXB0aW9uIGZvciBhIGdpdmVuIGlucHV0IHN0cmVhbSBoYXMgYWxsCi0gKiBvZiB0aGUgYXBwcm9wcmlhdGUgcHJvcGVydGllcy4KLSAqICh0aHJvdWdoIHRoZSBQbGF0Zm9ybSBjb250ZW50IHR5cGUgZnJhbWV3b3JrKQotICovCi1wdWJsaWMgY2xhc3MgVGVzdENvbnRlbnREZXNjcmlwdGlvbiBleHRlbmRzIFVuemlwcGVkUHJvamVjdFRlc3RlciB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9YTUxQSVdpdGhKU1BTeW50YXgoKSB7Ci0JCUhhc2hNYXAgZXhwZWN0ZWRQcm9wZXJ0aWVzID0gbmV3IEhhc2hNYXAoKTsKLQkJZXhwZWN0ZWRQcm9wZXJ0aWVzLnB1dChJQ29udGVudERlc2NyaXB0aW9uRm9ySlNQLkNPTlRFTlRfVFlQRV9BVFRSSUJVVEUsICJ0ZXh0L3htbCIpOwotCQlleHBlY3RlZFByb3BlcnRpZXMucHV0KElDb250ZW50RGVzY3JpcHRpb24uQ0hBUlNFVCwgIlVURi04Iik7Ci0JCWRvVGVzdENvbnRlbnREZXNjcmlwdGlvbigiL2NvbnRlbnQtZGVzY3JpcHRpb24vUHVyY2hhc2VPcmRlci1uby1YTUxQSS1qc3Atc3ludGF4LmpzcCIsIGV4cGVjdGVkUHJvcGVydGllcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RXaXRoWE1MUElXaXRoSlNQU3ludGF4KCkgewotCQlIYXNoTWFwIGV4cGVjdGVkUHJvcGVydGllcyA9IG5ldyBIYXNoTWFwKCk7Ci0JCWV4cGVjdGVkUHJvcGVydGllcy5wdXQoSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUC5DT05URU5UX1RZUEVfQVRUUklCVVRFLCAidGV4dC94bWwiKTsKLQkJZXhwZWN0ZWRQcm9wZXJ0aWVzLnB1dChJQ29udGVudERlc2NyaXB0aW9uLkNIQVJTRVQsICJVVEYtOCIpOwotCQlkb1Rlc3RDb250ZW50RGVzY3JpcHRpb24oIi9jb250ZW50LWRlc2NyaXB0aW9uL1B1cmNoYXNlT3JkZXItd2l0aC1YTUxQSS1qc3Atc3ludGF4LmpzcCIsIGV4cGVjdGVkUHJvcGVydGllcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RXaXRoWE1MUElXaXRoWE1MU3ludGF4KCkgewotCQlIYXNoTWFwIGV4cGVjdGVkUHJvcGVydGllcyA9IG5ldyBIYXNoTWFwKCk7Ci0JCWV4cGVjdGVkUHJvcGVydGllcy5wdXQoSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUC5DT05URU5UX1RZUEVfQVRUUklCVVRFLCAidGV4dC94bWwiKTsKLQkJZXhwZWN0ZWRQcm9wZXJ0aWVzLnB1dChJQ29udGVudERlc2NyaXB0aW9uLkNIQVJTRVQsICJVVEYtOCIpOwotCQlkb1Rlc3RDb250ZW50RGVzY3JpcHRpb24oIi9jb250ZW50LWRlc2NyaXB0aW9uL1B1cmNoYXNlT3JkZXItd2l0aC1YTUxQSS14bWwtc3ludGF4LmpzcCIsIGV4cGVjdGVkUHJvcGVydGllcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RKU1BXaXRoSFRNTE91dHB1dCgpIHsKLQkJSGFzaE1hcCBleHBlY3RlZFByb3BlcnRpZXMgPSBuZXcgSGFzaE1hcCgpOwotCQlleHBlY3RlZFByb3BlcnRpZXMucHV0KElDb250ZW50RGVzY3JpcHRpb25Gb3JKU1AuQ09OVEVOVF9UWVBFX0FUVFJJQlVURSwgInRleHQvaHRtbCIpOwotCQlkb1Rlc3RDb250ZW50RGVzY3JpcHRpb24oIi9jb250ZW50LWRlc2NyaXB0aW9uL2h0bWwuanNwIiwgZXhwZWN0ZWRQcm9wZXJ0aWVzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEpTUFdpdGhYSFRNTE91dHB1dCgpIHsKLQkJSGFzaE1hcCBleHBlY3RlZFByb3BlcnRpZXMgPSBuZXcgSGFzaE1hcCgpOwotCQlleHBlY3RlZFByb3BlcnRpZXMucHV0KElDb250ZW50RGVzY3JpcHRpb25Gb3JKU1AuQ09OVEVOVF9UWVBFX0FUVFJJQlVURSwgInRleHQveGh0bWwiKTsKLQkJZG9UZXN0Q29udGVudERlc2NyaXB0aW9uKCIvY29udGVudC1kZXNjcmlwdGlvbi94aHRtbC5qc3AiLCBleHBlY3RlZFByb3BlcnRpZXMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SlNQV2l0aFhNTE91dHB1dCgpIHsKLQkJSGFzaE1hcCBleHBlY3RlZFByb3BlcnRpZXMgPSBuZXcgSGFzaE1hcCgpOwotCQlleHBlY3RlZFByb3BlcnRpZXMucHV0KElDb250ZW50RGVzY3JpcHRpb25Gb3JKU1AuQ09OVEVOVF9UWVBFX0FUVFJJQlVURSwgInRleHQveG1sIik7Ci0JCWRvVGVzdENvbnRlbnREZXNjcmlwdGlvbigiL2NvbnRlbnQtZGVzY3JpcHRpb24veG1sLmpzcCIsIGV4cGVjdGVkUHJvcGVydGllcyk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBkb1Rlc3RDb250ZW50RGVzY3JpcHRpb24oU3RyaW5nIGZpbGVQYXRoLCBIYXNoTWFwIGV4cGVjdGVkUHJvcGVydGllcykgewotCQlJQ29udGVudERlc2NyaXB0aW9uIGRlc2MgPSBnZXRDb250ZW50RGVzY3JpcHRpb24oZmlsZVBhdGgpOwotCQlhc3NlcnROb3ROdWxsKCJjb3VsZG4ndCBnZXQgSUNvbnRlbnREZXNjcmlwdGlvbiBmb3IgZmlsZTpbIiArIGZpbGVQYXRoICsgIl0iLCBkZXNjKTsKLQkJT2JqZWN0W10ga2V5cyA9IGV4cGVjdGVkUHJvcGVydGllcy5rZXlTZXQoKS50b0FycmF5KCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgewotCQkJCi0JCQlPYmplY3QgZXhwZWN0ZWQgPSBleHBlY3RlZFByb3BlcnRpZXMuZ2V0KGtleXNbaV0pOwotCQkJT2JqZWN0IGRldGVjdGVkID0gZGVzYy5nZXRQcm9wZXJ0eSggKFF1YWxpZmllZE5hbWUpa2V5c1tpXSApOwotCQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIHByb3BlcnR5IHZhbHVlIiwgZXhwZWN0ZWQsIGRldGVjdGVkKTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIElDb250ZW50RGVzY3JpcHRpb24gZ2V0Q29udGVudERlc2NyaXB0aW9uKFN0cmluZyBmaWxlUGF0aCkgewotCQlpZihmaWxlUGF0aCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCi0JCUlucHV0U3RyZWFtIGluID0gbnVsbDsKLQkJdHJ5IHsKLQkJCS8vIHdvcmtzcGFjZSBmaWxlCi0JCQlJRmlsZSB3c0ZpbGUgPSBGaWxlQnVmZmVycy5nZXRXb3Jrc3BhY2VGaWxlQXRMb2NhdGlvbihuZXcgUGF0aChmaWxlUGF0aCkpOwotCQkJaWYod3NGaWxlICE9IG51bGwgJiYgd3NGaWxlLmV4aXN0cygpKSB7Ci0JCQkJaW4gPSB3c0ZpbGUuZ2V0Q29udGVudHMoKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCS8vIGV4dGVybmFsIGZpbGUKLQkJCQlGaWxlIHNGaWxlID0gRmlsZUJ1ZmZlcnMuZ2V0U3lzdGVtRmlsZUF0TG9jYXRpb24obmV3IFBhdGgoZmlsZVBhdGgpKTsKLQkJCQlpZihzRmlsZSAhPW51bGwgJiYgc0ZpbGUuZXhpc3RzKCkpCi0JCQkJCWluID0gbmV3IEZpbGVJbnB1dFN0cmVhbShzRmlsZSk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJTG9nZ2VyLmxvZ0V4Y2VwdGlvbihlKTsKLQkJfQotCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCUxvZ2dlci5sb2dFeGNlcHRpb24oZSk7Ci0JCX0KLQkJCi0JCWFzc2VydE5vdE51bGwoaW4pOwotCQkKLQkJcmV0dXJuIGdldENvbnRlbnREZXNjcmlwdGlvbihpbik7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgY29udGVudCBkZXNjcmlwdGlvbiBmb3IgYW4gaW5wdXQgc3RyZWFtCi0JICogQXNzdW1lcyBpdCdzIEpTUCBjb250ZW50LgotCSAqIENsb3NlcyB0aGUgaW5wdXQgc3RyZWFtIHdoZW4gZmluaXNoZWQuCi0JICogCi0JICogQHBhcmFtIGluCi0JICogQHJldHVybiB0aGUgSUNvbnRlbnREZXNjcmlwdGlvbiBmb3IgaW4KLQkgKi8KLQlwcml2YXRlIElDb250ZW50RGVzY3JpcHRpb24gZ2V0Q29udGVudERlc2NyaXB0aW9uKElucHV0U3RyZWFtIGluKSB7Ci0JCQotCQlpZihpbiA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCQotCQlJQ29udGVudERlc2NyaXB0aW9uIGRlc2MgPSBudWxsOwotCQl0cnkgewotCQkJCi0JCQlJQ29udGVudFR5cGUgY29udGVudFR5cGVKU1AgPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKS5nZXRDb250ZW50VHlwZShDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJCWRlc2MgPSBjb250ZW50VHlwZUpTUC5nZXREZXNjcmlwdGlvbkZvcihpbiwgSUNvbnRlbnREZXNjcmlwdGlvbi5BTEwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlMb2dnZXIubG9nRXhjZXB0aW9uKGUpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYoaW4gIT0gbnVsbCkgewotCQkJCXRyeSB7Ci0JCQkJCWluLmNsb3NlKCk7Ci0JCQkJfQotCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJCUxvZ2dlci5sb2dFeGNlcHRpb24oZSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBkZXNjOwotCX0KLQkKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2RvY3VtZW50L0ZpbGVCdWZmZXJEb2N1bWVudFRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9kb2N1bWVudC9GaWxlQnVmZmVyRG9jdW1lbnRUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEyYTdjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2RvY3VtZW50L0ZpbGVCdWZmZXJEb2N1bWVudFRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5kb2N1bWVudDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLkZpbGVCdWZmZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuSVRleHRGaWxlQnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuSVRleHRGaWxlQnVmZmVyTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRFeHRlbnNpb24zOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnRleHQuU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZFBhcnRpdGlvbmluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5CYXNpY1N0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudXRpbC5VdGlsaXRpZXM7Ci0KLQotcHVibGljIGNsYXNzIEZpbGVCdWZmZXJEb2N1bWVudFRlc3RlciBleHRlbmRzIFVuemlwcGVkUHJvamVjdFRlc3RlciB7Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0Q3JlYXRlKFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBDbGFzcyBleHBlY3RlZFBhcnRpb25lcikgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlhc3NlcnROb3ROdWxsKCJUZXN0IENhc2UgaW4gZXJyb3IuIENvdWxkIG5vdCBmaW5kIGZpbGUgIiArIGZpbGVQYXRoLCBmaWxlKTsKLQkJSVBhdGggbG9jYXRpb25QYXRoID0gZmlsZS5nZXRMb2NhdGlvbigpOwotCQlJVGV4dEZpbGVCdWZmZXJNYW5hZ2VyIGJ1ZmZlck1hbmFnZXIgPSBGaWxlQnVmZmVycy5nZXRUZXh0RmlsZUJ1ZmZlck1hbmFnZXIoKTsKLQkJYnVmZmVyTWFuYWdlci5jb25uZWN0KGxvY2F0aW9uUGF0aCwgbnVsbCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlciBidWZmZXIgPSBidWZmZXJNYW5hZ2VyLmdldFRleHRGaWxlQnVmZmVyKGxvY2F0aW9uUGF0aCk7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IGJ1ZmZlci5nZXREb2N1bWVudCgpOwotCQlhc3NlcnROb3ROdWxsKGRvY3VtZW50KTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgY2xhc3Mgb2YgZG9jdW1lbnQiLCBleHBlY3RlZERvY3VtZW50Q2xhc3MuaXNJbnN0YW5jZShkb2N1bWVudCkpOwotCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBzZXR1cFBhcnRpdGlvbmVyID0gbnVsbDsKLQkJaWYgKFV0aWxpdGllcy5jb250YWlucyhleHBlY3RlZERvY3VtZW50Q2xhc3MuZ2V0SW50ZXJmYWNlcygpLCBJRG9jdW1lbnRFeHRlbnNpb24zLmNsYXNzKSkgewotCQkJc2V0dXBQYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMykgZG9jdW1lbnQpLmdldERvY3VtZW50UGFydGl0aW9uZXIoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORyk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlzZXR1cFBhcnRpdGlvbmVyID0gZG9jdW1lbnQuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcigpOwotCQl9Ci0JCWFzc2VydFRydWUoIndyb25nIHBhcnRpdGlvbmVyIGluIGRvY3VtZW50LiIsIGV4cGVjdGVkUGFydGlvbmVyLmlzSW5zdGFuY2Uoc2V0dXBQYXJ0aXRpb25lcikpOwotCQlidWZmZXJNYW5hZ2VyLmRpc2Nvbm5lY3QobG9jYXRpb25QYXRoLCBudWxsKTsKLQotLy8JCWRvVGVzdENyZWF0ZVdpdGhGYWNhZGUoZmlsZSwgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBleHBlY3RlZFBhcnRpb25lcik7Ci0JCSAKLQl9Ci0KLQotCi0vKgotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvRW1wdHlGaWxlLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9ldWNqcC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54c2wiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvTm9FbmNvZGluZy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvTm9ybWFsTm9uRGVmYXVsdC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvc2hpZnRqaXMueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYUp1bmsueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYVZhbGlkU3R1ZmYueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQyLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDQueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RNdWx0aUxpbmUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb0VuY29kaW5nVmFsdWUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsQXRGaXJzdC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEluTGFyZ2VGaWxlLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0VVRGMTYueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL1VURjE2TEVBdFN0YXJ0T2ZMYXJnZUZpbGUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL1VURjhXaXRoM0J5dGVCT00ueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudFhNTCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlQ3JlYXRlRW1wdHkoInRlc3RmaWxlcy94bWwvdGVzdG5vbmV4aXN0ZW50LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlQ2FzZSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0Tm9ybWFsQ2FzZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckNTUy5jbGFzcyk7Ci0JfQotCi0qLwotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nWFNMLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3RCcm9rZW5MaW5lLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmcuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZ1dpdGhKdW5rLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYUp1bmsuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb0VuY29kaW5nVmFsdWUuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlSW5MYXJnZUZpbGUuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdE5vcm1hbENhc2UuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdFVURjE2LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL1VURjhXaXRoM0J5dGVCT00uanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybUIuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjQyOTMvdGVzdHNoaWZ0amlzWG1sU3ludGF4LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI5NjY3L2F1ZGkuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9ub0VuY29kaW5nLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL05vRW5jb2RpbmdpblhNTERlY2wuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL05vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9kb2N1bWVudC9VbnppcHBlZFByb2plY3RUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvZG9jdW1lbnQvVW56aXBwZWRQcm9qZWN0VGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZjFmZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9kb2N1bWVudC9VbnppcHBlZFByb2plY3RUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuZG9jdW1lbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuSlNQVUlUZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotLyoqCi0gKiBAYXV0aG9yIHBhdmVyeQotICovCi1wdWJsaWMgY2xhc3MgVW56aXBwZWRQcm9qZWN0VGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJvdGVjdGVkIHN0YXRpYyBJUHJvamVjdCBmVGVzdFByb2plY3Q7Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmVGVzdFByb2plY3RJbml0aWFsaXplZDsKLQlwcml2YXRlIHN0YXRpYyBpbnQgblNldHVwcyA9IDA7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUFJPSkVDVF9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5uZXd0ZXN0cyI7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQluU2V0dXBzKys7Ci0JCWlmICghZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQpIHsKLQkJCWdldEFuZENyZWF0ZVByb2plY3QoKTsKLQkJCS8vIHVuemlwIGZpbGVzIHRvIHRoZSByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJCVN0cmluZyBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgPSBmVGVzdFByb2plY3QuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Gb2xkZXIgPSBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgKyAiLyI7Ci0JCQkvLyB0aGlzIHppcCBmaWxlIGlzIHNpdHRpbmcgaW4gdGhlICJyb290IiBvZiB0ZXN0IHBsdWdpbgotCQkJRmlsZSB6aXBGaWxlID0gSlNQVUlUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZSgidGVzdGZpbGVzLnppcCIpOwotCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQlwcm9qVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBkZXN0aW5hdGlvbkZvbGRlcik7Ci0JCQlwcm9qVXRpbC5pbml0SmF2YVByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJblNldHVwcy0tOwotCQlpZiAoblNldHVwcyA9PSAwKSB7Ci0JCQlpZiAoIURFQlVHKSB7Ci0JCQkJLy8JCQkJRGlzcGxheSBkaXNwbGF5ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCk7Ci0JCQkJLy8JCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotCQkJCS8vCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJLy8JCQkJCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCQkvLwkJCQkJCUlQcm9qZWN0IHByb2ogPSBmVGVzdFByb2plY3Q7Ci0JCQkJLy8JCQkJCQlmVGVzdFByb2plY3QgPSBudWxsOwotCQkJCS8vCQkJCQkJdHJ5IHsKLQkJCQkvLwkJCQkJCQlwcm9qVXRpbC5kZWxldGVQcm9qZWN0KHByb2opOwotCQkJCS8vCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkvLwkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCS8vCQkJCQkJfQotCQkJCS8vCQkJCQl9Ci0JCQkJLy8JCQkJfSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGdldEFuZENyZWF0ZVByb2plY3QoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vVGVzdHNQbHVnaW4gdGVzdHNQbHVnaW4gPSAoVGVzdHNQbHVnaW4pCi0JCS8vIFBsYXRmb3JtLmdldFBsdWdpbigib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLnRlc3RzIik7Ci0JCUlXb3Jrc3BhY2Ugd29ya3NwYWNlID0gZ2V0V29ya3NwYWNlKCk7Ci0JCUlXb3Jrc3BhY2VSb290IHJvb3QgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpOwotCQlmVGVzdFByb2plY3QgPSByb290LmdldFByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkvLyB0aGlzIGZvcm0gY3JlYXRlcyBwcm9qZWN0IGFzICJsaW5rZWQiIGJhY2sgdG8gJ2ZpbGVSb290JwotCQkvL2NyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlRlc3RQcm9qZWN0LCBudWxsLCBudWxsKTsKLQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQlhc3NlcnRUcnVlKGZUZXN0UHJvamVjdC5leGlzdHMoKSk7Ci0JCS8vCQlJQ29udGFpbmVyIGRvdGVzdEZpbGVzID0gdGVzdFByb2plY3QuZ2V0Rm9sZGVyKCJkb3Rlc3RGaWxlcyIpOwotCQkvLwkJYXNzZXJ0VHJ1ZShkb3Rlc3RGaWxlcy5leGlzdHMoKSk7Ci0JCS8vCQlJUmVzb3VyY2VbXSBhbGxGb2xkZXJzID0gZG90ZXN0RmlsZXMubWVtYmVycygpOwotCQkvLwkJYXNzZXJ0Tm90TnVsbChhbGxGb2xkZXJzKTsKLQl9Ci0gCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHdvcmtzcGFjZSBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlKCkgewotCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvZXhhbXBsZXMvQ3JlYXRpbmdKU1BFeHByZXNzaW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2V4YW1wbGVzL0NyZWF0aW5nSlNQRXhwcmVzc2lvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzQ4YThiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvZXhhbXBsZXMvQ3JlYXRpbmdKU1BFeHByZXNzaW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuZXhhbXBsZXM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmZvcm1hdC5Ob2RlRm9ybWF0dGVyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIENyZWF0aW5nSlNQRXhwcmVzc2lvbiBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKgotCSAqIAotCSAqLwotCXB1YmxpYyBDcmVhdGluZ0pTUEV4cHJlc3Npb24oKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgQ3JlYXRpbmdKU1BFeHByZXNzaW9uKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVKU1BFeHByZXNzaW9uKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQkvLyBOb3csIGFzc2lnbmluZyB1c2UgYSBwYWdlIGRpcmVjdGl2ZSwgYnV0IGxlYXZpbmcgZW1iZWRkZWQgdHlwZSB0aGUgc2FtZSBhcyBkZWZhdWx0Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQodGhpcywgIjwlQCBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sXCIgbGFuZ3VhZ2U9XCJqYXZhXCIgJT4iKTsKLQotCQlEb2N1bWVudCBkb2MgPSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCk7Ci0KLQkJRWxlbWVudCBqc3BleHByZXNzaW9uID0gZG9jLmNyZWF0ZUVsZW1lbnQoImpzcDpleHByZXNzaW9uIik7Ci0JCSgoSURPTUVsZW1lbnQpIGpzcGV4cHJlc3Npb24pLnNldEpTUFRhZyh0cnVlKTsKLQkJZG9jLmFwcGVuZENoaWxkKGpzcGV4cHJlc3Npb24pOwotCQlUZXh0IGphdmFjb2RlID0gZG9jLmNyZWF0ZVRleHROb2RlKCIgLy8gc29tZSBqYXZhIGNvZGUgaGVyZTsgaWYgKHggPDApIHJldHVybiBuZXcgU3RyaW5nKFwiMFwiKSBlbHNlIHJldHVybiBuZXcgU3RyaW5nIChcIjFcIik7ICIpOwotCQlqc3BleHByZXNzaW9uLmFwcGVuZENoaWxkKGphdmFjb2RlKTsKLQotCi0JCVRleHQgY2RhdGFzZWN0aW9uID0gZG9jLmNyZWF0ZUNEQVRBU2VjdGlvbigiIC8vIHNvbWUgY2RhdGEgamF2YSBjb2RlIGhlcmU7IGlmICh4IDwwKSByZXR1cm4gbmV3IFN0cmluZyhcIjBcIikgZWxzZSByZXR1cm4gbmV3IFN0cmluZyAoXCIxXCIpOyAiKTsKLQkJZG9jLmFwcGVuZENoaWxkKGNkYXRhc2VjdGlvbik7Ci0KLQkJLy8gZm9ybWF0J3Mgbm90IG5lZWRlZCwganVzdCBwcmV0dGllciAuLi4gbm90IHN1cmUgd2h5IAotCQkvLyBpdCB3b24ndCB3b3JrIHJpZ2h0IG9uIHdob2xlIGRvY3VtZW50LgotCQluZXcgTm9kZUZvcm1hdHRlcigpLmZvcm1hdChqc3BleHByZXNzaW9uKTsKLQkJbmV3IE5vZGVGb3JtYXR0ZXIoKS5mb3JtYXQoY2RhdGFzZWN0aW9uKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJkb2N1bWVudCB0ZXh0OiAiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpKTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbHNGcm9tRmlsZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvbW9kZWwvVGVzdE1vZGVsc0Zyb21GaWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTllNGY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvbW9kZWwvVGVzdE1vZGVsc0Zyb21GaWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50RXh0ZW5zaW9uMzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC50ZXh0LlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5kb2N1bWVudC5VbnppcHBlZFByb2plY3RUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC50ZXh0LlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JIVE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlQWxyZWFkeUV4aXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXhjZXB0aW9ucy5SZXNvdXJjZUluVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnV0aWwuVXRpbGl0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuc3NlbW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudGV4dC5ydWxlcy5TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MOwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0TW9kZWxzRnJvbUZpbGVzIGV4dGVuZHMgVW56aXBwZWRQcm9qZWN0VGVzdGVyIHsKLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uRXhpc3RlbnRYTUwoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0bm9uZXhpc3RlbnQueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudFhNTERvY3VtZW50KCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3ROb25FeGlzdGVudERvY3VtZW50KCJ0ZXN0ZmlsZXMveG1sL3Rlc3Rub25leGlzdGVudC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbkV4aXN0ZW50WE1MTW9kZWwoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZU1vZGVsV2l0aE5vbkV4aXN0SUZpbGUoInRlc3RmaWxlcy94bWwvdGVzdG5vbmV4aXN0ZW50LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uRXhpc3RlbnRKU1AoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0bm9uZXhpc3RlbnQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudEpTUERvY3VtZW50KCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3ROb25FeGlzdGVudERvY3VtZW50KCJ0ZXN0ZmlsZXMvanNwL3Rlc3Rub25leGlzdGVudC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbkV4aXN0ZW50SlNQTW9kZWwoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZU1vZGVsV2l0aE5vbkV4aXN0SUZpbGUoInRlc3RmaWxlcy9qc3AvdGVzdG5vbmV4aXN0ZW50LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlQ2FzZSgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Tm90RW1wdHkoInRlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVEb2N1bWVudENhc2VYTUwoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdE5vdEVtcHR5RG9jdW1lbnQoInRlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVEb2N1bWVudENhc2VKU1AoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdE5vdEVtcHR5RG9jdW1lbnQoInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXBsZXhDYXNlKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3ROb3RFbXB0eSgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVsb2FkKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RSZWxvYWQoInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUFdpdGhYTUxPdXRwdXQoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdFJlbG9hZCgidGVzdGZpbGVzL2pzcC9qc3AteG1sLW91dHB1dC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhIVE1MVHJhbnNpdGlvbmFsMSgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveGh0bWwvdGVzdHguaHRtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySFRNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhIVE1MVHJhbnNpdGlvbmFsMigpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveGh0bWwvdGVzdHguanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYSFRNTFRyYW5zaXRpb25hbDMoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3hodG1sL3Rlc3R4LnhodG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JIVE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SFRNTFRyYW5zaXRpb25hbDEoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2h0bWwvdGVzdGguaHRtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySFRNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEhUTUxUcmFuc2l0aW9uYWwyKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9odG1sL3Rlc3RoLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQkvKgotCSAqIFRPRE86IHRoZXNlIHRlc3QgZmlsZXMgYXJlIG1pc3NpbmcsIGZvciBzb21lIHJlYXNvbiB3aGVuIHJ1bm5pbmcgb24KLQkgKiBidWlsZCBtYWNoaW5lIC4uLiBuZWVkIHRvIHJlLWNvbnN0cnVjdCBwdWJsaWMgdm9pZCB0ZXN0TmVhckVtcHR5SlNQKCkKLQkgKiB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JICogZG9UZXN0Tm90RW1wdHkoInRlc3RmaWxlcy9qc3AvbmVhckVtcHR5LmpzcCIsCi0JICogQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOyB9Ci0JICogCi0JICogcHVibGljIHZvaWQgdGVzdE5lYXJFbXB0eVhNTCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsCi0JICogUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCSAqIGRvVGVzdE5vdEVtcHR5KCJ0ZXN0ZmlsZXMveG1sL25lYXJFbXB0eS54bWwiLAotCSAqIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsgfQotCSAqIAotCSAqIHB1YmxpYyB2b2lkIHRlc3ROZWFyRW1wdHlIVE1MKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywKLQkgKiBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JICogZG9UZXN0Tm90RW1wdHkoInRlc3RmaWxlcy9odG1sL25lYXJFbXB0eS5odG1sIiwKLQkgKiBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckhUTUwuY2xhc3MpOyB9Ci0JICovCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdE5vdEVtcHR5KFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBDbGFzcyBleHBlY3RlZFBhcnRpb25lcikgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlTdHJpbmcgY29udGVudHMgPSBkb1Rlc3RDcmVhdGUoZmlsZVBhdGgsIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgZXhwZWN0ZWRQYXJ0aW9uZXIpOwotCQlhc3NlcnROb3ROdWxsKCJjb250ZW50cyB3ZXJlIG51bGwiLCBjb250ZW50cyk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnRzIHdlcmUgZW1wdHkiLCBjb250ZW50cy5sZW5ndGgoKSA+IDApOwotCi0JfQotCi0JLyoqCi0JICogQHBhcmFtIHN0cmluZwotCSAqIEBwYXJhbSBjbGFzczEKLQkgKiBAcGFyYW0gY2xhc3MyCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgUmVzb3VyY2VJblVzZQotCSAqIEB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzCi0JICovCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdE5vdEVtcHR5RG9jdW1lbnQoU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZERvY3VtZW50Q2xhc3MsIENsYXNzIGV4cGVjdGVkUGFydGlvbmVyKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlpZiAoZmlsZSA9PSBudWxsKSB7Ci0JCQlmaWxlID0gZlRlc3RQcm9qZWN0LmdldEZpbGUoZmlsZVBhdGgpOwotCQl9Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbE1hbmFnZXIuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKGZpbGUpOwotCQlhc3NlcnROb3ROdWxsKGRvY3VtZW50KTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgY2xhc3Mgb2YgZG9jdW1lbnQiLCBleHBlY3RlZERvY3VtZW50Q2xhc3MuaXNJbnN0YW5jZShkb2N1bWVudCkpOwotCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBzZXR1cFBhcnRpdGlvbmVyID0gbnVsbDsKLQkJaWYgKFV0aWxpdGllcy5jb250YWlucyhleHBlY3RlZERvY3VtZW50Q2xhc3MuZ2V0SW50ZXJmYWNlcygpLCBJRG9jdW1lbnRFeHRlbnNpb24zLmNsYXNzKSkgewotCQkJc2V0dXBQYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMykgZG9jdW1lbnQpLmdldERvY3VtZW50UGFydGl0aW9uZXIoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORyk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlzZXR1cFBhcnRpdGlvbmVyID0gZG9jdW1lbnQuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcigpOwotCQl9Ci0JCWFzc2VydFRydWUoIndyb25nIHBhcnRpdGlvbmVyIGluIGRvY3VtZW50LiIsIGV4cGVjdGVkUGFydGlvbmVyLmlzSW5zdGFuY2Uoc2V0dXBQYXJ0aXRpb25lcikpOwotCQljb250ZW50cyA9IGRvY3VtZW50LmdldCgpOwotCQlhc3NlcnROb3ROdWxsKCJjb250ZW50cyB3ZXJlIG51bGwiLCBjb250ZW50cyk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnRzIHdlcmUgZW1wdHkiLCBjb250ZW50cy5sZW5ndGgoKSA+IDApOwotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdE5vbkV4aXN0ZW50RG9jdW1lbnQoU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZERvY3VtZW50Q2xhc3MsIENsYXNzIGV4cGVjdGVkUGFydGlvbmVyKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0JCWJvb2xlYW4gZXhwZWN0ZWRFeGNlcHRpb25DYXVnaHQgPSBmYWxzZTsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWlmIChmaWxlID09IG51bGwpIHsKLQkJCWZpbGUgPSBmVGVzdFByb2plY3QuZ2V0RmlsZShmaWxlUGF0aCk7Ci0JCX0KLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlkb2N1bWVudCA9IG1vZGVsTWFuYWdlci5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoZmlsZSk7Ci0JCX0KLQkJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQlleHBlY3RlZEV4Y2VwdGlvbkNhdWdodCA9IHRydWU7Ci0JCX0KLQotCQlpZiAoZXhwZWN0ZWRFeGNlcHRpb25DYXVnaHQpIHsKLQkJCWRvY3VtZW50ID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudEZvcihmaWxlKTsKLQkJCWFzc2VydE5vdE51bGwoZG9jdW1lbnQpOwotCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgY2xhc3Mgb2YgZG9jdW1lbnQiLCBleHBlY3RlZERvY3VtZW50Q2xhc3MuaXNJbnN0YW5jZShkb2N1bWVudCkpOwotCQkJSURvY3VtZW50UGFydGl0aW9uZXIgc2V0dXBQYXJ0aXRpb25lciA9IG51bGw7Ci0JCQlpZiAoVXRpbGl0aWVzLmNvbnRhaW5zKGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5nZXRJbnRlcmZhY2VzKCksIElEb2N1bWVudEV4dGVuc2lvbjMuY2xhc3MpKSB7Ci0JCQkJc2V0dXBQYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMykgZG9jdW1lbnQpLmdldERvY3VtZW50UGFydGl0aW9uZXIoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORyk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlzZXR1cFBhcnRpdGlvbmVyID0gZG9jdW1lbnQuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcigpOwotCQkJfQotCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgcGFydGl0aW9uZXIgaW4gZG9jdW1lbnQuIiwgZXhwZWN0ZWRQYXJ0aW9uZXIuaXNJbnN0YW5jZShzZXR1cFBhcnRpdGlvbmVyKSk7Ci0JCQljb250ZW50cyA9IGRvY3VtZW50LmdldCgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY29udGVudHMgd2VyZSBudWxsIiwgY29udGVudHMpOwotCQkJYXNzZXJ0VHJ1ZSgiY29udGVudHMgd2VyZSAqbm90KiBlbXB0eSBhcyBleHBlY3RlZCIsIGNvbnRlbnRzLmxlbmd0aCgpID09IDApOwotCQl9Ci0JCWVsc2UgewotCQkJYXNzZXJ0VHJ1ZSgiRmlsZU5vdEZvdW5kIGV4Y2VwdGlvbiB3YXMgKm5vdCogdGhyb3duIGFzIGV4cGVjdGVkIiwgZmFsc2UpOwotCQl9Ci0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3RyaW5nCi0JICogQHBhcmFtIGNsYXNzMQotCSAqIEBwYXJhbSBjbGFzczIKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBSZXNvdXJjZUluVXNlCi0JICogQHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMKLQkgKi8KLQlwcml2YXRlIHZvaWQgZG9UZXN0UmVsb2FkKFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBDbGFzcyBleHBlY3RlZFBhcnRpb25lcikgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJaWYgKGZpbGUgPT0gbnVsbCkgewotCQkJZmlsZSA9IGZUZXN0UHJvamVjdC5nZXRGaWxlKGZpbGVQYXRoKTsKLQkJfQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE5ld01vZGVsRm9yRWRpdChmaWxlLCB0cnVlKTsKLQkJdHJ5IHsKLQkJCWFzc2VydE5vdE51bGwobW9kZWwpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJYXNzZXJ0Tm90TnVsbChkb2N1bWVudCk7Ci0JCQlhc3NlcnRUcnVlKCJ3cm9uZyBjbGFzcyBvZiBkb2N1bWVudCIsIGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5pc0luc3RhbmNlKGRvY3VtZW50KSk7Ci0JCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBzZXR1cFBhcnRpdGlvbmVyID0gbnVsbDsKLQkJCWlmIChVdGlsaXRpZXMuY29udGFpbnMoZXhwZWN0ZWREb2N1bWVudENsYXNzLmdldEludGVyZmFjZXMoKSwgSURvY3VtZW50RXh0ZW5zaW9uMy5jbGFzcykpIHsKLQkJCQlzZXR1cFBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKSBkb2N1bWVudCkuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXNldHVwUGFydGl0aW9uZXIgPSBkb2N1bWVudC5nZXREb2N1bWVudFBhcnRpdGlvbmVyKCk7Ci0JCQl9Ci0JCQlhc3NlcnRUcnVlKCJ3cm9uZyBwYXJ0aXRpb25lciBpbiBkb2N1bWVudC4iLCBleHBlY3RlZFBhcnRpb25lci5pc0luc3RhbmNlKHNldHVwUGFydGl0aW9uZXIpKTsKLQotCQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBudWxsOwotCQkJdHJ5IHsKLQkJCQlpblN0cmVhbSA9IGZpbGUuZ2V0Q29udGVudHMoKTsKLQkJCQltb2RlbC5yZWxvYWQoaW5TdHJlYW0pOwotCQkJCWFzc2VydE5vdE51bGwobW9kZWwpOwotCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnRSZWxvYWRlZCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJCS8vIG5vdGU6IE5PVCBzYW1lIGluc3RhbmNlIG9mIGRvY3VtZW50Ci0JCQkJLy8gRklYTUU6IHRoaXMgdGVzdCBoYXMgdG8gYmUgY2hhbmdlZCBiYWNrLCBvbmNlIHRoZSByZWxvYWQKLQkJCQkvLyBBUEkgaXMKLQkJCQkvLyBmaXhlZCB0byB3b3JrIHdpdGggZGlmZmVyZW50IGRvY3VtZW50LgotCQkJCS8vIGFzc2VydEZhbHNlKGRvY3VtZW50ID09IGRvY3VtZW50UmVsb2FkZWQpOwotCQkJCWFzc2VydFRydWUoZG9jdW1lbnQgPT0gZG9jdW1lbnRSZWxvYWRlZCk7Ci0JCQl9Ci0JCQlmaW5hbGx5IHsKLQkJCQlpZiAoaW5TdHJlYW0gIT0gbnVsbCkgewotCQkJCQlpblN0cmVhbS5jbG9zZSgpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHN0cmluZwotCSAqIEBwYXJhbSBjbGFzczEKLQkgKiBAcGFyYW0gY2xhc3MyCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgUmVzb3VyY2VJblVzZQotCSAqIEB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgZG9UZXN0Q3JlYXRlKFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBDbGFzcyBleHBlY3RlZFBhcnRpb25lcikgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlTdHJpbmcgY29udGVudHMgPSBudWxsOwotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJLy8gZmlsZSB3aWxsIGJlIG51bGwgaWYgdGhlIHJlc291cmNlIGRvZXMgbm90IGV4aXN0Ci0JCWlmIChmaWxlID09IG51bGwpIHsKLQkJCWZpbGUgPSBmVGVzdFByb2plY3QuZ2V0RmlsZShmaWxlUGF0aCk7Ci0JCX0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXROZXdNb2RlbEZvckVkaXQoZmlsZSwgdHJ1ZSk7Ci0JCXRyeSB7Ci0JCQlhc3NlcnROb3ROdWxsKG1vZGVsKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCWFzc2VydE5vdE51bGwoZG9jdW1lbnQpOwotCQkJY29udGVudHMgPSBkb2N1bWVudC5nZXQoKTsKLQkJCWFzc2VydFRydWUoIndyb25nIGNsYXNzIG9mIGRvY3VtZW50IiwgZXhwZWN0ZWREb2N1bWVudENsYXNzLmlzSW5zdGFuY2UoZG9jdW1lbnQpKTsKLQkJCUlEb2N1bWVudFBhcnRpdGlvbmVyIHNldHVwUGFydGl0aW9uZXIgPSBudWxsOwotCQkJaWYgKFV0aWxpdGllcy5jb250YWlucyhleHBlY3RlZERvY3VtZW50Q2xhc3MuZ2V0SW50ZXJmYWNlcygpLCBJRG9jdW1lbnRFeHRlbnNpb24zLmNsYXNzKSkgewotCQkJCXNldHVwUGFydGl0aW9uZXIgPSAoKElEb2N1bWVudEV4dGVuc2lvbjMpIGRvY3VtZW50KS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJc2V0dXBQYXJ0aXRpb25lciA9IGRvY3VtZW50LmdldERvY3VtZW50UGFydGl0aW9uZXIoKTsKLQkJCX0KLQkJCWFzc2VydFRydWUoIndyb25nIHBhcnRpdGlvbmVyIGluIGRvY3VtZW50LiIsIGV4cGVjdGVkUGFydGlvbmVyLmlzSW5zdGFuY2Uoc2V0dXBQYXJ0aXRpb25lcikpOwotCi0JCQl0ZXN0Q2xvbmUobW9kZWwpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCQlyZXR1cm4gY29udGVudHM7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHRlc3RDbG9uZShJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSURPTURvY3VtZW50IGRvY3VtZW50ID0gKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJSU5vZGVOb3RpZmllciBub3RpZmllciA9IGRvY3VtZW50OwotCQlNb2RlbFF1ZXJ5QWRhcHRlciBtb2RlbFF1ZXJ5QWRhcHRlciA9IChNb2RlbFF1ZXJ5QWRhcHRlcikgbm90aWZpZXIuZ2V0QWRhcHRlckZvcihNb2RlbFF1ZXJ5QWRhcHRlci5jbGFzcyk7Ci0JCWFzc2VydE5vdE51bGwoImluaXRpYWwgbW9kZWxRdWVyeUFkYXB0ZXIgc2hvdWxkIG5vdCBiZSBudWxsIiwgbW9kZWxRdWVyeUFkYXB0ZXIpOwotCQkKLQkJSVN0cnVjdHVyZWRNb2RlbCBuZXdNb2RlbCA9IHN0cnVjdHVyZWRNb2RlbC5uZXdJbnN0YW5jZSgpOwotCQlJRE9NRG9jdW1lbnQgbmV3RG9jdW1lbnQgPSAoKElET01Nb2RlbCkgbmV3TW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCUlOb2RlTm90aWZpZXIgbmV3Tm90aWZpZXIgPSBuZXdEb2N1bWVudDsKLQkJTW9kZWxRdWVyeUFkYXB0ZXIgcmVzdWx0ID0gKE1vZGVsUXVlcnlBZGFwdGVyKSBuZXdOb3RpZmllci5nZXRBZGFwdGVyRm9yKE1vZGVsUXVlcnlBZGFwdGVyLmNsYXNzKTsKLQkJYXNzZXJ0Tm90TnVsbCgibmV3SW5zdGFuY2UgbW9kZWxRdWVyeUFkYXB0ZXIgc2hvdWxkIG5vdCBiZSBudWxsIiwgcmVzdWx0KTsKLQotCi0JfQotCi0JLyoqCi0JICogQHBhcmFtIHN0cmluZwotCSAqIEBwYXJhbSBjbGFzczEKLQkgKiBAcGFyYW0gY2xhc3MyCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgUmVzb3VyY2VJblVzZQotCSAqIEB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgZG9UZXN0Q3JlYXRlTW9kZWxXaXRoTm9uRXhpc3RJRmlsZShTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgQ2xhc3MgZXhwZWN0ZWRQYXJ0aW9uZXIpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNvbnRlbnRzID0gbnVsbDsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCS8vIGZpbGUgd2lsbCBiZSBudWxsIGlmIHRoZSByZXNvdXJjZSBkb2VzIG5vdCBleGlzdAotCQlpZiAoZmlsZSA9PSBudWxsKSB7Ci0JCQlmaWxlID0gZlRlc3RQcm9qZWN0LmdldEZpbGUoZmlsZVBhdGgpOwotCQl9Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TmV3TW9kZWxGb3JFZGl0KGZpbGUsIGZhbHNlKTsKLQkJdHJ5IHsKLQkJCWFzc2VydE5vdE51bGwobW9kZWwpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJYXNzZXJ0Tm90TnVsbChkb2N1bWVudCk7Ci0JCQljb250ZW50cyA9IGRvY3VtZW50LmdldCgpOwotCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgY2xhc3Mgb2YgZG9jdW1lbnQiLCBleHBlY3RlZERvY3VtZW50Q2xhc3MuaXNJbnN0YW5jZShkb2N1bWVudCkpOwotCQkJSURvY3VtZW50UGFydGl0aW9uZXIgc2V0dXBQYXJ0aXRpb25lciA9IG51bGw7Ci0JCQlpZiAoVXRpbGl0aWVzLmNvbnRhaW5zKGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5nZXRJbnRlcmZhY2VzKCksIElEb2N1bWVudEV4dGVuc2lvbjMuY2xhc3MpKSB7Ci0JCQkJc2V0dXBQYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMykgZG9jdW1lbnQpLmdldERvY3VtZW50UGFydGl0aW9uZXIoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORyk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlzZXR1cFBhcnRpdGlvbmVyID0gZG9jdW1lbnQuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcigpOwotCQkJfQotCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgcGFydGl0aW9uZXIgaW4gZG9jdW1lbnQuIiwgZXhwZWN0ZWRQYXJ0aW9uZXIuaXNJbnN0YW5jZShzZXR1cFBhcnRpdGlvbmVyKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCQlyZXR1cm4gY29udGVudHM7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9tb2RlbHF1ZXJ5L01vZGVsUXVlcnlUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvbW9kZWxxdWVyeS9Nb2RlbFF1ZXJ5VGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxYWFkODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9tb2RlbHF1ZXJ5L01vZGVsUXVlcnlUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMubW9kZWxxdWVyeTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci1pbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkuaW50ZXJuYWwuSlNQVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5KU1BVSVRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSFRNTDQwTmFtZXNwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5yZWdpc3RyeS5BZGFwdGVyRmFjdG9yeVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwucmVnaXN0cnkuQWRhcHRlckZhY3RvcnlSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTURhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01FbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5DTURvY3VtZW50TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnkuTW9kZWxRdWVyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBNb2RlbFF1ZXJ5VGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBmaW5hbCBib29sZWFuIHRlc3RTaGlwcGVkRFRETG9va3VwID0gZmFsc2U7Ci0KLQkvLyBPdXIgU3RydWN0dXJlZCBNb2RlbCwgd2hpY2ggc2hvdWxkIGFsd2F5cyBiZSBhbiBYTUxNb2RlbCAob3Igc3ViY2xhc3MpCi0JcHJvdGVjdGVkIElET01Nb2RlbCBmTW9kZWwgPSBudWxsOwotCi0JcHJvdGVjdGVkIE1vZGVsUXVlcnkgZk1vZGVsUXVlcnkgPSBudWxsOwotCi0JcHVibGljIE1vZGVsUXVlcnlUZXN0ZXIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShNb2RlbFF1ZXJ5VGVzdGVyLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQlpZiAoYXJncyA9PSBudWxsIHx8IGFyZ3MubGVuZ3RoID09IDApIHsKLQkJCXJ1bkFsbCgpOwotCQl9Ci0JCWVsc2UgaWYgKGFyZ3MubGVuZ3RoID09IDEpIHsKLQkJCVN0cmluZyBtZXRob2RUb1J1biA9IGFyZ3NbMF0udHJpbSgpOwotCQkJcnVuT25lKG1ldGhvZFRvUnVuKTsKLQkJfQotCi0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHJ1bkFsbCgpIHsKLQkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0KLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcnVuT25lKFN0cmluZyBtZXRob2ROYW1lKSB7Ci0JCVRlc3RTdWl0ZSB0ZXN0U3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0JCVRlc3RDYXNlIHRlc3QgPSBuZXcgTW9kZWxRdWVyeVRlc3RlcihtZXRob2ROYW1lKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3QodGVzdCk7Ci0JCWp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bih0ZXN0U3VpdGUpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZSBhbiBlbXB0eSBIVE1MIG1vZGVsCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXBIVE1MKCkgewotCQlmTW9kZWwgPSAoSURPTU1vZGVsKSBjcmVhdGVNb2RlbChDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwpOwotCQlpbml0VmFycygpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZSBhbiBlbXB0eSBYTUwgbW9kZWwKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcFhNTCgpIHsKLQkJZk1vZGVsID0gKElET01Nb2RlbCkgY3JlYXRlTW9kZWwoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCWluaXRWYXJzKCk7Ci0JfQotCi0KLQkvKioKLQkgKiBJbml0aWFsaXplIGxvY2FsIGZpZWxkcyBmb3IgdGhpcyB0ZXN0Ci0JICovCi0JcHJvdGVjdGVkIHZvaWQgaW5pdFZhcnMoKSB7Ci0JCWZNb2RlbFF1ZXJ5ID0gTW9kZWxRdWVyeVV0aWwuZ2V0TW9kZWxRdWVyeShmTW9kZWwuZ2V0RG9jdW1lbnQoKSk7Ci0KLQotCX0KLQotCS8qKgotCSAqIFRlc3QgdGhlIEhUTUwgQk9EWSBFbGVtZW50IGZvciB0aGUgImJnY29sb3IiIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCb2R5RWxlbWVudCgpIHsKLQkJc2V0VXBIVE1MKCk7Ci0JCWZNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoIjxodG1sPjxib2R5IGJnY29sb3I9XCIjZmZmZmZmXCI+PGZvcm0gbWV0aG9kPVwicG9zdFwiPjwvZm9ybT48L2JvZHk+PC9odG1sPiIpOyAvLyBzZXQKLQkJLy8gdGV4dAotCi0JCS8vIFRFU1QgZ2V0dGluZyBhIENNRWxlbWVudERlY2xhcmF0aW9uCi0JCUVsZW1lbnQgYm9keUVsZW1lbnQgPSAoRWxlbWVudCkgZk1vZGVsLmdldEluZGV4ZWRSZWdpb24oNyk7IC8vIG5vZGUgYXQKLQkJLy8gb2Zmc2V0Ny0tc2hvdWxkCi0JCS8vIGJlCi0JCS8vIDxib2R5PgotCQlDTUVsZW1lbnREZWNsYXJhdGlvbiBib2R5RGVjbCA9IGZNb2RlbFF1ZXJ5LmdldENNRWxlbWVudERlY2xhcmF0aW9uKGJvZHlFbGVtZW50KTsKLQotCQlpbnQgY29udGVudFR5cGUgPSBib2R5RGVjbC5nZXRDb250ZW50VHlwZSgpOwotCQlhc3NlcnRUcnVlKCJDTUVsZW1lbnREZWNsYXJhdGlvbiBDT05URU5UIFRZUEUgSU5DT1JSRUNUIEZPUiBCT0RZIiwgKGNvbnRlbnRUeXBlID09IENNRWxlbWVudERlY2xhcmF0aW9uLk1JWEVEKSk7Ci0KLQkJLy8gZ2V0IHBlcm1pc3NpYmxlIGF0dHJzCi0JCUNNTmFtZWROb2RlTWFwIG1hcCA9IGJvZHlEZWNsLmdldEF0dHJpYnV0ZXMoKTsKLQkJYXNzZXJ0VHJ1ZSgiQVRUUklCVVRFUyBGUk9NIEVMRU1FTlQgREVDTEFSQVRJT04gPT0gTlVMTCIsIChtYXAgIT0gbnVsbCkpOwotCQlWZWN0b3IgYWxsb3dlZCA9IG5ldyBWZWN0b3IoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXAuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBub2RlID0gKENNQXR0cmlidXRlRGVjbGFyYXRpb24pIG1hcC5pdGVtKGkpOwotCQkJU3RyaW5nIG5hbWUgPSBub2RlLmdldE5vZGVOYW1lKCk7Ci0JCQlhbGxvd2VkLmFkZChuYW1lKTsKLQkJCWlmIChuYW1lLmVxdWFsc0lnbm9yZUNhc2UoImJnY29sb3IiKSkgewotCQkJCWFzc2VydFRydWUoIkdPVCBJTkNPUlJFQ1QgQVRUUklCVVRFIE5PREUgVFlQRSIsIChub2RlLmdldE5vZGVUeXBlKCkgPT0gQ01Ob2RlLkFUVFJJQlVURV9ERUNMQVJBVElPTikpOwotCi0JCQkJQ01EYXRhVHlwZSBhdHRyVHlwZSA9IG5vZGUuZ2V0QXR0clR5cGUoKTsKLQkJCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oImF0dHJpYnV0ZSB0eXBlID4gIiArIGF0dHJUeXBlKTsKLQkJCQlhc3NlcnRUcnVlKCJDT1VMRCBOT1QgR0VUIEFUVFJJQlVURSBUWVBFIiwgKGF0dHJUeXBlICE9IG51bGwpKTsKLQkJCQlhc3NlcnRUcnVlKCJDT1VMRE4nVCBHRVQgSU1QTElFRCBWQUxVRSBLSU5EIiwgKGF0dHJUeXBlLmdldEltcGxpZWRWYWx1ZUtpbmQoKSA9PSBDTURhdGFUeXBlLklNUExJRURfVkFMVUVfTk9ORSkpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogVGVzdCB0aGUgSFRNTCBIVE1MIEVsZW1lbnQgZm9yIGl0cyBkZWNsYXJlZCBjaGlsZHJlbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RIdG1sQ2hpbGRyZW4oKSB7Ci0JCXNldFVwSFRNTCgpOwotCQlmTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KCI8aHRtbD48L2h0bWw+Iik7IC8vIHNldCB0ZXh0Ci0JCUVsZW1lbnQgaHRtbEVsZW1lbnQgPSBmTW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQkJQ01FbGVtZW50RGVjbGFyYXRpb24gaHRtbERlY2wgPSBmTW9kZWxRdWVyeS5nZXRDTUVsZW1lbnREZWNsYXJhdGlvbihodG1sRWxlbWVudCk7Ci0KLQkJLy8gSFRNTCdzIGNoaWxkcmVuIGFyZSB3aXRoaW4gYSBncm91cAotCQlDTUNvbnRlbnQgY29udGVudHMgPSBodG1sRGVjbC5nZXRDb250ZW50KCk7Ci0KLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCB0eXBlIGlzIG5vdCBhIGdyb3VwIiwgY29udGVudHMuZ2V0Tm9kZVR5cGUoKSA9PSBDTU5vZGUuR1JPVVApOwotCi0JCUNNR3JvdXAgZ3JvdXAgPSAoQ01Hcm91cCkgY29udGVudHM7Ci0JCWludCBvcGVyYXRvciA9IGdyb3VwLmdldE9wZXJhdG9yKCk7Ci0JCUNNTm9kZUxpc3QgY2hpbGRMaXN0ID0gZ3JvdXAuZ2V0Q2hpbGROb2RlcygpOwotCQlpbnQgbWF4ID0gY29udGVudHMuZ2V0TWF4T2NjdXIoKTsKLQkJaW50IG1pbiA9IGNvbnRlbnRzLmdldE1pbk9jY3VyKCk7Ci0KLQkJLy8gdGhlIGdyb3VwIHNob3VsZCBiZSBhbGxvd2VkIG9uY2UsIHdpdGggYSBzZXF1ZW5jZSB3aG9zZSBmaXJzdCBlbnRyeQotCQkvLyBpcyB0aGUgZGVjbGFyYXRpb24gZm9yIEhFQUQKLQkJYXNzZXJ0VHJ1ZSgib2NjdXJyYW5jZSBvZiBncm91cCIsIG1pbiA9PSAxICYmIG1heCA9PSAxKTsKLQkJYXNzZXJ0VHJ1ZSgicmVsYXRpb25zaGlwIGluIGdyb3VwIiwgb3BlcmF0b3IgPT0gQ01Hcm91cC5TRVFVRU5DRSk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgZGVzY3JpcHRvciB0eXBlLCBwb3NpdGlvbiAwIiwgY29udGVudHMuZ2V0Tm9kZVR5cGUoKSA9PSBDTU5vZGUuR1JPVVApOwotCQlhc3NlcnRUcnVlKCJjaGlsZCBvcmRlciAoSEVBRCBmaXJzdCkiLCBjaGlsZExpc3QuaXRlbSgwKS5nZXROb2RlTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLkhFQUQpKTsKLQotCQlhc3NlcnRUcnVlKCJjb250ZW50IGRlc2NyaXB0b3IgdHlwZSwgcG9zaXRpb24gMSIsIGNoaWxkTGlzdC5pdGVtKDEpLmdldE5vZGVUeXBlKCkgPT0gQ01Ob2RlLkdST1VQKTsKLQkJLy8gVGhlIHNlY29uZCBjaGlsZCBzaG91bGQgYmUgYSBncm91cCBhcyB3ZWxsLCBjb250YWluaW5nIEJPRFkgYW5kCi0JCS8vIEZSQU1FU0VUIHdpdGggYW4KLQkJLy8gb3BlcmF0b3Igb2YgQ01Hcm91cC5DSE9JQ0UKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCBkZXNjcmlwdG9yIHR5cGUsIHBvc2l0aW9uIDEgLSByZWxhdGlvbnNoaXAgb2YgZ3JvdXAiLCAoKENNR3JvdXApIGNoaWxkTGlzdC5pdGVtKDEpKS5nZXRPcGVyYXRvcigpID09IENNR3JvdXAuQ0hPSUNFKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybU1ldGhvZEF0dHIoKSB7Ci0JCXNldFVwSFRNTCgpOwotCQlmTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KCI8aHRtbD48Ym9keSBiZ2NvbG9yPVwiI2ZmZmZmZlwiPjxmb3JtIG1ldGhvZD1cInBvc3RcIj48L2Zvcm0+PC9ib2R5PjwvaHRtbD4iKTsgLy8gc2V0Ci0JCS8vIHRleHQKLQotCQkvLyBURVNUIEdFVFRJTkcgQSBDTUF0dHJpYnV0ZURlY2xhcmF0b2luCi0JCUVsZW1lbnQgZm9ybUVsZW1lbnQgPSAoRWxlbWVudCkgZk1vZGVsLmdldEluZGV4ZWRSZWdpb24oMzEpOyAvLyA8Zm9ybT4KLQkJQXR0ciBhdHRyTm9kZSA9IGZvcm1FbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoSFRNTDQwTmFtZXNwYWNlLkFUVFJfTkFNRV9NRVRIT0QpOwotCQlDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIG1ldGhvZEF0dHJEZWNsID0gZk1vZGVsUXVlcnkuZ2V0Q01BdHRyaWJ1dGVEZWNsYXJhdGlvbihhdHRyTm9kZSk7Ci0JCWFzc2VydFRydWUoIkNvbnRlbnQgTW9kZWwgbWlzc2luZyB0aGUgYXR0cmlidXRlIGRlY2xhcmF0aW9uIGZvciBcIm1ldGhvZFwiIiwgbWV0aG9kQXR0ckRlY2wgIT0gbnVsbCk7Ci0KLQkJTGlzdCB2YWx1ZXMgPSBnZXRWYWxpZFN0cmluZ3MoZm9ybUVsZW1lbnQsIG1ldGhvZEF0dHJEZWNsKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgbnVtYmVyIG9mIHZhbHVlcyBmb3IgYXR0cmlidXRlIFwibWV0aG9kXCIiLCAodmFsdWVzLnNpemUoKSA9PSAyKSk7Ci0JCWFzc2VydFRydWUoImRlZmF1bHQgdmFsdWUgZm9yIGF0dHJpYnV0ZSBcIm1ldGhvZFwiIGlzIHdyb25nIiwgKG1ldGhvZEF0dHJEZWNsLmdldEF0dHJUeXBlKCkuZ2V0SW1wbGllZFZhbHVlKCkuZXF1YWxzSWdub3JlQ2FzZSgiZ2V0IikpKTsKLQl9Ci0KLQkvKioKLQkgKiBBIHNob3J0IHRlc3QgdG8gZW5zdXJlIHRoYXQgYSBEVEQgY2FuIGJlIGxvYWRlZCBmcm9tIGEgc3lzdGVtCi0JICogcmVmZXJlbmNlLgotCSAqIAotCSAqIE5vdGU6IE1heSByZXF1aXJlIGEgZnVuY3Rpb25pbmcgbmV0d29yayBjb25uZWN0aW9uIGZvciB0aGUgcmVmZXJlbmNlcwotCSAqIHRvIGJlIHJlc29sdmVkIHByb3Blcmx5LgotCSAqIAotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RFRETG9hZEZyb21TeXN0ZW1JRF8xKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKHRlc3RTaGlwcGVkRFRETG9va3VwKSB7Ci0JCQlzZXRVcFhNTCgpOwotCQkJVVJMIGluc3RhbGxhdGlvblBhdGggPSBQbGF0Zm9ybS5nZXRCdW5kbGUoSlNQVUlUZXN0c1BsdWdpbi5JRCkuZ2V0RW50cnkoIi8iKTsKLQkJCVN0cmluZyBkaXNrTG9jYXRpb24gPSBudWxsOwotCQkJZGlza0xvY2F0aW9uID0gRmlsZUxvY2F0b3IucmVzb2x2ZShpbnN0YWxsYXRpb25QYXRoKS50b0V4dGVybmFsRm9ybSgpOwotCi0JCQlhc3NlcnRUcnVlKCJmYWlsZWQgdG8gcmVzb2x2ZSBwbHVnaW4gaW5zdGFsbCBwYXRoIiwgZGlza0xvY2F0aW9uICE9IG51bGwpOwotCQkJU3RyaW5nIGNvbnRlbnQgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz48IURPQ1RZUEUgaHRtbCBTWVNURU0gIiArIGRpc2tMb2NhdGlvbiArICJUZXN0RmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sMjAuZHRkXCIiICsgIj48aHRtbCB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIiB4bWxuczp3bWw9XCJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy8yMDAxL3dtbFwiPjwvaHRtbD4iOwotCQkJZk1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldChjb250ZW50KTsKLQkJCUNNRG9jdW1lbnRNYW5hZ2VyIGRvY3VtZW50TWFuYWdhZXIgPSBmTW9kZWxRdWVyeS5nZXRDTURvY3VtZW50TWFuYWdlcigpOwotCQkJZG9jdW1lbnRNYW5hZ2Flci5zZXRQcm9wZXJ0eUVuYWJsZWQoQ01Eb2N1bWVudE1hbmFnZXIuUFJPUEVSVFlfQVNZTkNfTE9BRCwgZmFsc2UpOwotCQkJZG9jdW1lbnRNYW5hZ2Flci5zZXRQcm9wZXJ0eUVuYWJsZWQoQ01Eb2N1bWVudE1hbmFnZXIuUFJPUEVSVFlfQVVUT19MT0FELCB0cnVlKTsKLQotCQkJTm9kZSBkb21Ob2RlID0gKE5vZGUpIGZNb2RlbC5nZXRJbmRleGVkUmVnaW9uKGNvbnRlbnQubGVuZ3RoKCkgLSAyKTsKLQkJCUNNTm9kZSBub2RlID0gZk1vZGVsUXVlcnkuZ2V0Q01Ob2RlKGRvbU5vZGUpOwotCQkJYXNzZXJ0VHJ1ZSgid21sMjAuZHRkIGZhaWxlZCB0byBsb2FkIiwgbm9kZSAhPSBudWxsICYmIG5vZGUuZ2V0Tm9kZU5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJodG1sIikpOwotCQl9Ci0JfQotCi0KLQkvKioKLQkgKiBBIHNob3J0IHRlc3QgdG8gZW5zdXJlIHRoYXQgYSBEVEQsIHRoZSBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsIG9uZSwgY2FuCi0JICogYmUgbG9hZGVkIGZyb20gYSBzeXN0ZW0gcmVmZXJlbmNlLgotCSAqIAotCSAqIE5vdGU6IE1heSByZXF1aXJlIGEgZnVuY3Rpb25pbmcgbmV0d29yayBjb25uZWN0aW9uIGZvciB0aGUgcmVmZXJlbmNlcwotCSAqIHRvIGJlIHJlc29sdmVkIHByb3Blcmx5LgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24gCi0JICovCi0JcHVibGljIHZvaWQgdGVzdERURExvYWRGcm9tU3lzdGVtSURfMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmICh0ZXN0U2hpcHBlZERURExvb2t1cCkgewotCQkJVVJMIGluc3RhbGxhdGlvblBhdGggPSBQbGF0Zm9ybS5nZXRCdW5kbGUoSlNQVUlUZXN0c1BsdWdpbi5JRCkuZ2V0RW50cnkoIi8iKTsKLQkJCVN0cmluZyBkaXNrTG9jYXRpb24gPSBudWxsOwotCi0JCQlkaXNrTG9jYXRpb24gPSBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbGxhdGlvblBhdGgpLnRvRXh0ZXJuYWxGb3JtKCk7Ci0KLQkJCWFzc2VydFRydWUoImZhaWxlZCB0byByZXNvbHZlIHBsdWdpbiBpbnN0YWxsIHBhdGgiLCBkaXNrTG9jYXRpb24gIT0gbnVsbCk7Ci0JCQlzZXRVcFhNTCgpOwotCQkJU3RyaW5nIGNvbnRlbnQgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz48IURPQ1RZUEUgaHRtbCBTWVNURU0gIiArIGRpc2tMb2NhdGlvbiArICJ0ZXN0ZmlsZXMvWEhUTUwveGh0bWwxLXRyYW5zaXRpb25hbC5kdGRcIiIgKyAiPjxodG1sPjwvaHRtbD4iOwotCQkJZk1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldChjb250ZW50KTsKLQotCQkJQ01Eb2N1bWVudE1hbmFnZXIgZG9jdW1lbnRNYW5hZ2FlciA9IGZNb2RlbFF1ZXJ5LmdldENNRG9jdW1lbnRNYW5hZ2VyKCk7Ci0JCQlkb2N1bWVudE1hbmFnYWVyLnNldFByb3BlcnR5RW5hYmxlZChDTURvY3VtZW50TWFuYWdlci5QUk9QRVJUWV9BU1lOQ19MT0FELCBmYWxzZSk7Ci0JCQlkb2N1bWVudE1hbmFnYWVyLnNldFByb3BlcnR5RW5hYmxlZChDTURvY3VtZW50TWFuYWdlci5QUk9QRVJUWV9BVVRPX0xPQUQsIHRydWUpOwotCi0JCQkvLyBzZWUgZGVmZWN0IDI4MjQyOQotCQkJQ01FbGVtZW50RGVjbGFyYXRpb24gaHRtbERlY2wgPSAoQ01FbGVtZW50RGVjbGFyYXRpb24pIGZNb2RlbFF1ZXJ5LmdldENNTm9kZSgoTm9kZSkgZk1vZGVsLmdldEluZGV4ZWRSZWdpb24oY29udGVudC5sZW5ndGgoKSAtIDIpKTsKLQkJCWFzc2VydFRydWUoInhodG1sMS10cmFuc2l0aW9uYWwuZHRkIG5vdCBsb2FkZWQiLCBodG1sRGVjbCAhPSBudWxsKTsKLQotCQkJLy8gSFRNTCdzIGNoaWxkcmVuIGFyZSB3aXRoaW4gYSBncm91cAotCQkJQ01Db250ZW50IGNvbnRlbnRzID0gaHRtbERlY2wuZ2V0Q29udGVudCgpOwotCi0JCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaXMgbm90IGEgZ3JvdXAiLCBjb250ZW50cy5nZXROb2RlVHlwZSgpID09IENNTm9kZS5HUk9VUCk7Ci0KLQkJCUNNR3JvdXAgZ3JvdXAgPSAoQ01Hcm91cCkgY29udGVudHM7Ci0JCQlpbnQgb3BlcmF0b3IgPSBncm91cC5nZXRPcGVyYXRvcigpOwotCQkJQ01Ob2RlTGlzdCBjaGlsZExpc3QgPSBncm91cC5nZXRDaGlsZE5vZGVzKCk7Ci0JCQlpbnQgbWF4ID0gY29udGVudHMuZ2V0TWF4T2NjdXIoKTsKLQkJCWludCBtaW4gPSBjb250ZW50cy5nZXRNaW5PY2N1cigpOwotCi0JCQkvLyB0aGUgZ3JvdXAgc2hvdWxkIGJlIGFsbG93ZWQgb25jZSwgd2l0aCBhIHNlcXVlbmNlIHdob3NlIGZpcnN0Ci0JCQkvLyBlbnRyeQotCQkJLy8gaXMgdGhlIGRlY2xhcmF0aW9uIGZvciBIRUFECi0JCQlhc3NlcnRUcnVlKCJvY2N1cnJhbmNlIG9mIGdyb3VwIiwgbWluID09IDEgJiYgbWF4ID09IDEpOwotCQkJYXNzZXJ0VHJ1ZSgicmVsYXRpb25zaGlwIGluIGdyb3VwIiwgb3BlcmF0b3IgPT0gQ01Hcm91cC5TRVFVRU5DRSk7Ci0JCQlhc3NlcnRUcnVlKCJjb250ZW50IGRlc2NyaXB0b3IgdHlwZSwgcG9zaXRpb24gMCIsIGNvbnRlbnRzLmdldE5vZGVUeXBlKCkgPT0gQ01Ob2RlLkdST1VQKTsKLQkJCWFzc2VydFRydWUoImNoaWxkIG9yZGVyIChIRUFEIGZpcnN0KSIsIGNoaWxkTGlzdC5pdGVtKDApLmdldE5vZGVOYW1lKCkuZXF1YWxzKEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5IRUFELnRvTG93ZXJDYXNlKCkpKTsKLQkJCWFzc2VydFRydWUoImNoaWxkIG9yZGVyIChCT0RZIHNlY29uZCkiLCBjaGlsZExpc3QuaXRlbSgxKS5nZXROb2RlTmFtZSgpLmVxdWFscyhIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuQk9EWS50b0xvd2VyQ2FzZSgpKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBBIHNob3J0IHRlc3QgdG8gZW5zdXJlIHRoYXQgdGhlIERURCBmb3IgSlNQIDEuMiB0YWcgbGlicmFyaWVzIGNhbiBiZQotCSAqIGxvYWRlZCBmcm9tIGEgcHVibGljIHJlZmVyZW5jZSByZWdpc3RlcmVkIGluIHRoZSBYTUwgY2F0YWxvZwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REVERMb2FkRnJvbVB1YmxpY0lEKCkgewotCQkvLyBObyBsb25nZXIgcHJvdmlkZWQgaW4gV1RQCi0JCS8vIFRPRE86IHByb3ZpZGUgRFREPwotCQkvLyBpZiAodGVzdFNoaXBwZWREVERMb29rdXApIHsKLQkJLy8gc2V0VXBYTUwoKTsKLQkJLy8gU3RyaW5nIGNvbnRlbnRzID0gIjwhRE9DVFlQRSB0YWdsaWIgUFVCTElDIFwiLS8vU3VuIE1pY3Jvc3lzdGVtcywKLQkJLy8gSW5jLi8vRFREIEpTUCBUYWcgTGlicmFyeSAxLjIvL0VOXCI+Ci0JCS8vIDx0YWdsaWI+PHRhZz5mb288L3RhZz48L3RhZ2xpYj4iOwotCQkvLyBmTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KGNvbnRlbnRzKTsKLQkJLy8KLQkJLy8gQ01Eb2N1bWVudE1hbmFnZXIgZG9jdW1lbnRNYW5hZ2FlciA9Ci0JCS8vIGZNb2RlbFF1ZXJ5LmdldENNRG9jdW1lbnRNYW5hZ2VyKCk7Ci0JCS8vIGRvY3VtZW50TWFuYWdhZXIuc2V0UHJvcGVydHlFbmFibGVkKENNRG9jdW1lbnRNYW5hZ2VyLlBST1BFUlRZX0FTWU5DX0xPQUQsCi0JCS8vIGZhbHNlKTsKLQkJLy8gZG9jdW1lbnRNYW5hZ2Flci5zZXRQcm9wZXJ0eUVuYWJsZWQoQ01Eb2N1bWVudE1hbmFnZXIuUFJPUEVSVFlfQVVUT19MT0FELAotCQkvLyB0cnVlKTsKLQkJLy8KLQkJLy8KLQkJLy8gLy8gdGFnbGliCi0JCS8vIENNTm9kZSBub2RlID0gZk1vZGVsUXVlcnkuZ2V0Q01Ob2RlKChOb2RlKQotCQkvLyBmTW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbihjb250ZW50cy5sZW5ndGgoKSAtIDIpKTsKLQkJLy8gYXNzZXJ0VHJ1ZSgid2ViLWpzcHRhZ2xpYnJhcnlfMV8yLmR0ZCBmYWlsZWQgdG8gbG9hZCB0aHJvdWdoCi0JCS8vIGNhdGFsb2ciLCBub2RlICE9IG51bGwgJiYgbm9kZS5nZXROb2RlVHlwZSgpID09Ci0JCS8vIENNTm9kZS5FTEVNRU5UX0RFQ0xBUkFUSU9OICYmCi0JCS8vIG5vZGUuZ2V0Tm9kZU5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJ0YWdsaWIiKSk7Ci0JCS8vCi0JCS8vIC8vIHRhZwotCQkvLyBub2RlID0gZk1vZGVsUXVlcnkuZ2V0Q01Ob2RlKChOb2RlKQotCQkvLyBmTW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbihjb250ZW50cy5sZW5ndGgoKSAtIDEyKSk7Ci0JCS8vIGFzc2VydFRydWUoIkNNRWxlbWVudERlY2xhcmF0aW9uIGZvciBcInRhZ1wiIGZyb20KLQkJLy8gd2ViLWpzcHRhZ2xpYnJhcnlfMV8yLmR0ZCBpcyBtaXNzaW5nIiwgbm9kZSAhPSBudWxsICYmCi0JCS8vIG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBDTU5vZGUuRUxFTUVOVF9ERUNMQVJBVElPTiAmJgotCQkvLyBub2RlLmdldE5vZGVOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSgidGFnIikpOwotCQkvLyBDTUNvbnRlbnQgY29udGVudCA9ICgoQ01FbGVtZW50RGVjbGFyYXRpb24pIG5vZGUpLmdldENvbnRlbnQoKTsKLQkJLy8gYXNzZXJ0VHJ1ZSgib25seSBvbmUgb2NjdXJyZW5jZSBvZiBjaGlsZCBncm91cCBhbGxvd2VkIiwKLQkJLy8gY29udGVudC5nZXROb2RlVHlwZSgpID09IENNTm9kZS5HUk9VUCAmJiBjb250ZW50LmdldE1heE9jY3VyKCkgPT0KLQkJLy8gMSk7Ci0JCS8vIH0KLQl9Ci0KLQotCi0JcHVibGljIHN0YXRpYyBJU3RydWN0dXJlZE1vZGVsIGNyZWF0ZU1vZGVsKFN0cmluZyBjb250ZW50VHlwZUlEKSB7Ci0JCS8vIGNyZWF0ZSBhbiBlbXB0eSBtb2RlbCB3aXRoIGl0cyBkZWZhdWx0IGZhY3RvcmllcwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoY29udGVudFR5cGVJRCk7Ci0KLQkJLy8gYWRkIGVkaXRvciBhZGFwdGVyIGZhY3RvcmllcwotCQlBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5IGFkYXB0ZXJSZWdpc3RyeSA9IEpTUFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5KCk7Ci0JCUl0ZXJhdG9yIGFkYXB0ZXJMaXN0ID0gYWRhcHRlclJlZ2lzdHJ5LmdldEFkYXB0ZXJGYWN0b3JpZXMoKTsKLQkJLy8gQW5kIGFsbCB0aG9zZSBhcHByb3ByaWF0ZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHR5cGUgb2YgY29udGVudAotCQl3aGlsZSAoYWRhcHRlckxpc3QuaGFzTmV4dCgpKSB7Ci0JCQl0cnkgewotCQkJCUFkYXB0ZXJGYWN0b3J5UHJvdmlkZXIgcHJvdmlkZXIgPSAoQWRhcHRlckZhY3RvcnlQcm92aWRlcikgYWRhcHRlckxpc3QubmV4dCgpOwotCQkJCWlmIChwcm92aWRlci5pc0Zvcihtb2RlbC5nZXRNb2RlbEhhbmRsZXIoKSkpIHsKLQkJCQkJcHJvdmlkZXIuYWRkQWRhcHRlckZhY3Rvcmllcyhtb2RlbCk7Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJTG9nZ2VyLmxvZ0V4Y2VwdGlvbihlKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJuIHRoZSB2YWxpZCB2YWx1ZXMgZm9yIGFuIGF0dHJpYnV0ZSB3aXRoIHRoZSBnaXZlbiBkZWNsYXJhdGlvbiBvbgotCSAqIHRoZSBnaXZlbiBlbGVtZW50LiBEZXJpdmVkIGZyb20gWE1MUHJvcGVydHlTb3VyY2UKLQkgKi8KLQlwcml2YXRlIExpc3QgZ2V0VmFsaWRTdHJpbmdzKEVsZW1lbnQgZWxlbWVudCwgQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHRyRGVjbCkgewotCQlDTURhdGFUeXBlIHZhbHVlc0hlbHBlciA9IGF0dHJEZWNsLmdldEF0dHJUeXBlKCk7Ci0JCVZlY3RvciB2YWx1ZXMgPSBuZXcgVmVjdG9yKCk7Ci0KLQkJaWYgKHZhbHVlc0hlbHBlci5nZXRJbXBsaWVkVmFsdWVLaW5kKCkgPT0gQ01EYXRhVHlwZS5JTVBMSUVEX1ZBTFVFX0ZJWEVEICYmIHZhbHVlc0hlbHBlci5nZXRJbXBsaWVkVmFsdWUoKSAhPSBudWxsKSB7Ci0JCQkvLyBGSVhFRCB2YWx1ZQotCQkJdmFsdWVzLmFkZCh2YWx1ZXNIZWxwZXIuZ2V0SW1wbGllZFZhbHVlKCkpOwotCQl9Ci0JCWVsc2UgewotCQkJLy8gRU5VTUVSQVRFRCB2YWx1ZXMKLQkJCVN0cmluZ1tdIHZhbHVlU3RyaW5ncyA9IG51bGw7Ci0JCQkvLyBuZXcgd2F5Ci0JCQl2YWx1ZVN0cmluZ3MgPSBmTW9kZWxRdWVyeS5nZXRQb3NzaWJsZURhdGFUeXBlVmFsdWVzKGVsZW1lbnQsIGF0dHJEZWNsKTsKLQkJCWlmICh2YWx1ZVN0cmluZ3MgPT0gbnVsbCkKLQkJCQkvLyBvbGRlciB3YXkKLQkJCQl2YWx1ZVN0cmluZ3MgPSBhdHRyRGVjbC5nZXRBdHRyVHlwZSgpLmdldEVudW1lcmF0ZWRWYWx1ZXMoKTsKLQkJCWlmICh2YWx1ZVN0cmluZ3MgIT0gbnVsbCkgewotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVTdHJpbmdzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCXZhbHVlcy5hZGQodmFsdWVTdHJpbmdzW2ldKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKHZhbHVlc0hlbHBlci5nZXRJbXBsaWVkVmFsdWVLaW5kKCkgIT0gQ01EYXRhVHlwZS5JTVBMSUVEX1ZBTFVFX05PTkUgJiYgdmFsdWVzSGVscGVyLmdldEltcGxpZWRWYWx1ZSgpICE9IG51bGwpIHsKLQkJCWlmICghdmFsdWVzLmNvbnRhaW5zKHZhbHVlc0hlbHBlci5nZXRJbXBsaWVkVmFsdWUoKSkpCi0JCQkJdmFsdWVzLmFkZCh2YWx1ZXNIZWxwZXIuZ2V0SW1wbGllZFZhbHVlKCkpOwotCQl9Ci0KLQkJcmV0dXJuIHZhbHVlczsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL0NvbG9yUmVnaW9ucy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9Db2xvclJlZ2lvbnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJlY2NkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL0NvbG9yUmVnaW9ucy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm90aGVyOwotCi0vKioKLSAqIEluc2VydCB0aGUgdHlwZSdzIGRlc2NyaXB0aW9uIGhlcmUuCi0gKiBDcmVhdGlvbiBkYXRlOiAoNy8yMS8wMCA0OjE0OjQwIFBNKQotICogQGF1dGhvcjogRGF2aWQgV2lsbGlhbXMKLSAqLwotcHVibGljIGNsYXNzIENvbG9yUmVnaW9ucyBleHRlbmRzIGphdmEudXRpbC5WZWN0b3IgewotCS8qKgotCSAqIERlZmF1bHQgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotCS8qKgotCSAqIENvbG9yUmVnaW9ucyBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqLwotCXB1YmxpYyBDb2xvclJlZ2lvbnMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogQ29sb3JSZWdpb25zIGNvbnN0cnVjdG9yIGNvbW1lbnQuCi0JICogQHBhcmFtIGluaXRpYWxDYXBhY2l0eSBpbnQKLQkgKi8KLQlwdWJsaWMgQ29sb3JSZWdpb25zKGludCBpbml0aWFsQ2FwYWNpdHkpIHsKLQkJc3VwZXIoaW5pdGlhbENhcGFjaXR5KTsKLQl9Ci0KLQkvKioKLQkgKiBDb2xvclJlZ2lvbnMgY29uc3RydWN0b3IgY29tbWVudC4KLQkgKiBAcGFyYW0gaW5pdGlhbENhcGFjaXR5IGludAotCSAqIEBwYXJhbSBjYXBhY2l0eUluY3JlbWVudCBpbnQKLQkgKi8KLQlwdWJsaWMgQ29sb3JSZWdpb25zKGludCBpbml0aWFsQ2FwYWNpdHksIGludCBjYXBhY2l0eUluY3JlbWVudCkgewotCQlzdXBlcihpbml0aWFsQ2FwYWNpdHksIGNhcGFjaXR5SW5jcmVtZW50KTsKLQl9Ci0KLQlwdWJsaWMgaW50W10gYXNJbnRBcnJheSgpIHsKLQkJdHJpbVRvU2l6ZSgpOwotCQlpbnQgYXJyYXlTaXplID0gZWxlbWVudERhdGEubGVuZ3RoOwotCQlpbnRbXSByZXN1bHRzID0gbmV3IGludFthcnJheVNpemVdOwotCQkvLwotCQlmb3IgKGludCBpID0gMDsgaSA8IGFycmF5U2l6ZTsgaSsrKSB7Ci0JCQlyZXN1bHRzW2ldID0gKChJbnRlZ2VyKSBlbGVtZW50RGF0YVtpXSkuaW50VmFsdWUoKTsKLQkJfQotCQkvLwotCQlyZXR1cm4gcmVzdWx0czsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9EZWJ1Z0RvY3VtZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL0RlYnVnRG9jdW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ2OTljMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL0RlYnVnRG9jdW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIEplbnMgTHVrb3dza2kvSW5ub29wcmFjdCAtIGluaXRpYWwgcmVuYW1pbmcvcmVzdHJ1Y3R1cmluZwotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXI7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi1wdWJsaWMgY2xhc3MgRGVidWdEb2N1bWVudCB7Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgZHVtcChEb2N1bWVudCBkb2N1bWVudCkgewotCQlpZiAoZG9jdW1lbnQgPT0gbnVsbCkKLQkJCXJldHVybjsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJEdW1wIG9mIERPTSIpOyAvLyROT04tTkxTLTEkCi0KLQkJZHVtcChkb2N1bWVudCwgU3lzdGVtLm91dCk7Ci0KLQkJLy8KLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiPSA9ID0gPSA9ID0iKTsgLy8kTk9OLU5MUy0xJAotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBkdW1wKERvY3VtZW50IGRvY3VtZW50LCBQcmludFN0cmVhbSBvdXQpIHsKLQkJTm9kZSBub2RlID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQl3aGlsZSAobm9kZSAhPSBudWxsKSB7Ci0JCQlkdW1wKG5vZGUsIG91dCk7Ci0JCQlub2RlID0gbm9kZS5nZXROZXh0U2libGluZygpOwotCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgZHVtcChOb2RlIHRvcE5vZGUpIHsKLQkJZHVtcCh0b3BOb2RlLCBTeXN0ZW0ub3V0KTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgZHVtcChOb2RlIHRvcE5vZGUsIFByaW50U3RyZWFtIG91dCkgewotCQlpZiAodG9wTm9kZSA9PSBudWxsKQotCQkJcmV0dXJuOwotCQkvLyBwcmludCBvdXQgdGhpcyBub2RlCi0JCS8vCi0JCXByaW50Tm9kZSh0b3BOb2RlLCBvdXQpOwotCi0JCS8vIG5vdyBwcmludCBvdXQgaXRzIGNoaWxkcmVuCi0JCS8vTm9kZUxpc3Qgbm9kZXMgPSB0b3BOb2RlLmdldENoaWxkTm9kZXMoKTsKLQkJLy9pbnQgbGVuID0gbm9kZXMuZ2V0TGVuZ3RoKCk7Ci0JCS8vZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewotCi0JCS8vTm9kZSBub2RlID0gbm9kZXMuaXRlbShpKTsKLQkJLy9kdW1wKG5vZGUsIG91dCk7Ci0JCS8vfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBwcmludE5vZGUoTm9kZSB0b3BOb2RlKSB7Ci0JCXByaW50Tm9kZSh0b3BOb2RlLCBTeXN0ZW0ub3V0KTsKLQotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBwcmludE5vZGUoTm9kZSB0b3BOb2RlLCBQcmludFN0cmVhbSBvdXQpIHsKLQkJLy8gcHJpbnQgb3V0IHRoaXMgbm9kZQotCQkvLwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uID0gKChJRE9NTm9kZSkgdG9wTm9kZSkuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBsYXN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uID0gKChJRE9NTm9kZSkgdG9wTm9kZSkuZ2V0TGFzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQlpZiAoKGZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uID09IG51bGwpIHx8IChsYXN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uID09IG51bGwpKSB7Ci0JCQkvLyBubyB0ZXh0IHRvIG91dHB1dAotCQl9IGVsc2UgewotCQkJaW50IHN0YXJ0ID0gZmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24uZ2V0U3RhcnQoKTsKLQkJCWludCBlbmQgPSBsYXN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uLmdldEVuZCgpOwotCi0JCQlTdHJpbmcgb3V0U3RyaW5nID0gdG9wTm9kZS50b1N0cmluZygpOwotCQkJb3V0U3RyaW5nID0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzLmVzY2FwZShvdXRTdHJpbmcpOwotCQkJb3V0LnByaW50bG4oIlsiICsgc3RhcnQgKyAiLCAiICsgZW5kICsgIl0iICsgb3V0U3RyaW5nKTsgLy8kTk9OLU5MUy0zJC8vJE5PTi1OTFMtMiQvLyROT04tTkxTLTEkCi0JCX0KLQkJLy8gbm93IGRvIGl0cyBjaGlsZHJlbgotCQlOb2RlTGlzdCBub2RlcyA9IHRvcE5vZGUuZ2V0Q2hpbGROb2RlcygpOwotCQlpbnQgbGVuID0gbm9kZXMuZ2V0TGVuZ3RoKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJCU5vZGUgY2hpbGROb2RlID0gbm9kZXMuaXRlbShpKTsKLQkJCXByaW50Tm9kZShjaGlsZE5vZGUsIG91dCk7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyBEZWJ1Z0RvY3VtZW50KCkgewotCQlzdXBlcigpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TY2FubmVyVW5pdFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1NjYW5uZXJVbml0VGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ0OTg0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1NjYW5uZXJVbml0VGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm90aGVyOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5Nb2RlbEhhbmRsZXJGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnJlZ2lvbnMuRE9NSlNQUmVnaW9uQ29udGV4dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5tb2RlbGhhbmRsZXIuSU1vZGVsSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLnBhcnNlci5CbG9ja01hcmtlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLnBhcnNlci5CbG9ja1RhZ1BhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb25Db250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkNvcmVOb2RlTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlckZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucmVnaW9ucy5ET01SZWdpb25Db250ZXh0OwotCi0vKioKLSAqIEBhdXRob3IgTml0aW4gRGFoeWFiaGFpIDxuaXRpbmRAdXMuaWJtLmNvbT4KLSAqLwotcHVibGljIGNsYXNzIFNjYW5uZXJVbml0VGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMoSVRleHRSZWdpb25MaXN0IHJlZ2lvbnMsIFN0cmluZ1tdIGNvbnRleHRzLCBTdHJpbmdbXVtdIGVtYmVkZGVkQ29udGV4dHMpIHsKLQotCQlpbnQgZW1iZWRDb3VudCA9IDA7Ci0JCUl0ZXJhdG9yIGl0ZXJhdG9yID0gcmVnaW9ucy5pdGVyYXRvcigpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRleHRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpZiAoIWl0ZXJhdG9yLmhhc05leHQoKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQlJVGV4dFJlZ2lvbiByZWdpb24gPSAoSVRleHRSZWdpb24pIGl0ZXJhdG9yLm5leHQoKTsKLQkJCWFzc2VydEVxdWFscygiY29udGV4dCAiICsgaSArICIgaW5jb3JyZWN0IiwgY29udGV4dHNbaV0sIHJlZ2lvbi5nZXRUeXBlKCkpOwotCQkJaWYgKHJlZ2lvbiBpbnN0YW5jZW9mIElUZXh0UmVnaW9uQ29udGFpbmVyKSB7Ci0JCQkJSVRleHRSZWdpb25Db250YWluZXIgY29udGFpbmVyID0gKElUZXh0UmVnaW9uQ29udGFpbmVyKSByZWdpb247Ci0JCQkJYm9vbGVhbiBlbWJlZGRlZFJlc3VsdCA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoY29udGFpbmVyLCBlbWJlZGRlZENvbnRleHRzW2VtYmVkQ291bnRdLmxlbmd0aCkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhjb250YWluZXIuZ2V0UmVnaW9ucygpLCBlbWJlZGRlZENvbnRleHRzW2VtYmVkQ291bnRdKTsKLQkJCQllbWJlZENvdW50Kys7Ci0JCQkJYXNzZXJ0VHJ1ZShlbWJlZGRlZFJlc3VsdCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGNoZWNrTW9kZWxMZW5ndGgoSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCwgaW50IGxlbmd0aCkgewotCQlyZXR1cm4gY2hlY2tNb2RlbExlbmd0aChkb2N1bWVudC5nZXRMYXN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCksIGxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGNoZWNrTW9kZWxMZW5ndGgoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24sIGludCBsZW5ndGgpIHsKLQkJcmV0dXJuIHJlZ2lvbi5nZXRFbmRPZmZzZXQoKSA9PSBsZW5ndGg7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoSVRleHRSZWdpb25Db250YWluZXIgcmVnaW9uQ29udGFpbmVyLCBpbnQgc2l6ZSkgewotCQkvLyB5ZXMsIHRoaXMgbG9va3Mgc2lsbHksIGJ1dCBpdCBtYWtlcyBpdCBlYXNpZXIgdG8gZmluZCB0aGUgZXhhY3QKLQkJLy8gZmFpbHVyZSBwb2ludAotCQlhc3NlcnRFcXVhbHMoInJlZ2lvbiBjb3VudCIsIHNpemUsIHJlZ2lvbkNvbnRhaW5lci5nZXROdW1iZXJPZlJlZ2lvbnMoKSk7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCByZWdpb25Db250YWluZXJzLCBpbnRbXSBzaXplcykgewotCQlpbnQgY29udGFpbmVycyA9IHJlZ2lvbkNvbnRhaW5lcnMuZ2V0TGVuZ3RoKCk7Ci0JCWFzc2VydEVxdWFscygiZGlmZmVyZW50IG51bWJlciBvZiBjb250YWluZXJzIiwgc2l6ZXMubGVuZ3RoLCBjb250YWluZXJzKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplcy5sZW5ndGg7IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKCJjb250YWluZXIgIiArIGkgKyAiIGlzIGRpZmZlcmVudCIsIHNpemVzW2ldLCByZWdpb25Db250YWluZXJzLml0ZW0oaSkuZ2V0TnVtYmVyT2ZSZWdpb25zKCkpOwotCQkJY29udGludWU7Ci0JCX0KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoSVRleHRSZWdpb25MaXN0IHJlZ2lvbnMsIFN0cmluZ1tdIGNvbnRleHRzKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGV4dHMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0UmVnaW9uIHJlZ2lvbiA9IHJlZ2lvbnMuZ2V0KGkpOwotCQkJYXNzZXJ0RXF1YWxzKCJyZWdpb24gdHlwZSAiICsgaSwgY29udGV4dHNbaV0sIHJlZ2lvbi5nZXRUeXBlKCkpOwotCQl9Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGxvYWRDaGFycyhJbnB1dFN0cmVhbSBpbnB1dCkgewotCi0JCVN0cmluZ0J1ZmZlciBzID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQl0cnkgewotCQkJaW50IGMgPSAtMTsKLQkJCXdoaWxlICgoYyA9IGlucHV0LnJlYWQoKSkgPj0gMCkgewotCQkJCWlmIChjID4gMjU1KQotCQkJCQlicmVhazsKLQkJCQlzLmFwcGVuZCgoY2hhcikgYyk7Ci0JCQl9Ci0JCQlpbnB1dC5jbG9zZSgpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkFuIEkvTyBlcnJvciBvY2N1cmVkIHdoaWxlIHNjYW5uaW5nIDoiKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihlKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIHMudG9TdHJpbmcoKTsKLQl9Ci0KLQkvKioKLQkgKiBTdGFydHMgdGhlIGFwcGxpY2F0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhbiBhcnJheSBvZiBjb21tYW5kLWxpbmUgYXJndW1lbnRzCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQotCQlpZiAoYXJncyA9PSBudWxsIHx8IGFyZ3MubGVuZ3RoID09IDApIHsKLQkJCXJ1bkFsbCgpOwotCQl9Ci0JCWVsc2UgaWYgKGFyZ3MubGVuZ3RoID09IDEpIHsKLQkJCVN0cmluZyBtZXRob2RUb1J1biA9IGFyZ3NbMF0udHJpbSgpOwotCQkJcnVuT25lKG1ldGhvZFRvUnVuKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBydW5BbGwoKSB7Ci0KLQkJanVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBydW5PbmUoU3RyaW5nIG1ldGhvZE5hbWUpIHsKLQotCQlUZXN0U3VpdGUgdGVzdFN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCQlUZXN0Q2FzZSB0ZXN0ID0gbmV3IFNjYW5uZXJVbml0VGVzdHMobWV0aG9kTmFtZSk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0KHRlc3QpOwotCQlqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4odGVzdFN1aXRlKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0KLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoU2Nhbm5lclVuaXRUZXN0cy5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHZlcmlmeUxlbmd0aHMoaW50IHN0YXJ0T2Zmc2V0LCBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGZpcnN0RG9jdW1lbnRSZWdpb24sIFN0cmluZyB0ZXh0KSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gaG9sZFJlZ2lvbiA9IGZpcnN0RG9jdW1lbnRSZWdpb247Ci0JCWFzc2VydFRydWUoImRvY3VtZW50IGRvZXMgbm90IHN0YXJ0IGF0IGV4cGVjdGVkIG9mZnNldCIsIGhvbGRSZWdpb24uZ2V0U3RhcnRPZmZzZXQoKSA9PSBzdGFydE9mZnNldCk7Ci0JCWludCBsYXN0RW5kID0gMDsKLQkJd2hpbGUgKGhvbGRSZWdpb24gIT0gbnVsbCAmJiBob2xkUmVnaW9uLmdldEVuZE9mZnNldCgpID4gMCkgewotCQkJYXNzZXJ0VHJ1ZSgiemVyby1sZW5ndGggU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGZvdW5kIiwgaG9sZFJlZ2lvbi5nZXRTdGFydE9mZnNldCgpID09IGxhc3RFbmQpOwotCQkJYXNzZXJ0VHJ1ZSgiVGV4dFJlZ2lvbmxlc3MgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGZvdW5kIiwgaG9sZFJlZ2lvbi5nZXROdW1iZXJPZlJlZ2lvbnMoKSA+IDApOwotCQkJSVRleHRSZWdpb25MaXN0IGxpc3QgPSBob2xkUmVnaW9uLmdldFJlZ2lvbnMoKTsKLQkJCWludCBpbmRleCA9IDA7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspIHsKLQkJCQlJVGV4dFJlZ2lvbiByZWdpb24gPSBsaXN0LmdldChpKTsKLQkJCQlhc3NlcnRUcnVlKCJ0ZXh0IHJlZ2lvbiBzZWFtcyBkb24ndCBtYXRjaCIsIHJlZ2lvbi5nZXRTdGFydCgpID09IGluZGV4KTsKLQkJCQlpbmRleCArPSByZWdpb24uZ2V0TGVuZ3RoKCk7Ci0JCQl9Ci0JCQlsYXN0RW5kID0gaG9sZFJlZ2lvbi5nZXRFbmRPZmZzZXQoKTsKLQkJCWhvbGRSZWdpb24gPSBob2xkUmVnaW9uLmdldE5leHQoKTsKLQkJfQotCi0JCWhvbGRSZWdpb24gPSBmaXJzdERvY3VtZW50UmVnaW9uOwotCQl3aGlsZSAoaG9sZFJlZ2lvbiAhPSBudWxsICYmIGhvbGRSZWdpb24uZ2V0TmV4dCgpICE9IG51bGwpIHsKLQkJCWhvbGRSZWdpb24gPSBob2xkUmVnaW9uLmdldE5leHQoKTsKLQkJfQotCQljaGVja01vZGVsTGVuZ3RoKGhvbGRSZWdpb24sIHRleHQubGVuZ3RoKCkpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB2ZXJpZnlMZW5ndGhzKGludCBzdGFydE9mZnNldCwgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3QgbGlzdCwgU3RyaW5nIHRleHQpIHsKLQkJdmVyaWZ5TGVuZ3RocyhzdGFydE9mZnNldCwgbGlzdC5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdmVyaWZ5TGVuZ3RocyhJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50LCBTdHJpbmcgdGV4dCkgewotCQl2ZXJpZnlMZW5ndGhzKDAsIGRvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCksIHRleHQpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB2ZXJpZnlMZW5ndGhzKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwsIFN0cmluZyB0ZXh0KSB7Ci0JCXZlcmlmeUxlbmd0aHMobW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCksIHRleHQpOwotCX0KLQotCXByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50IGZNb2RlbDsKLQlwcm90ZWN0ZWQgU3RyaW5nIGlucHV0OwotCXByaXZhdGUgQmxvY2tUYWdQYXJzZXIgcGFyc2VyOwotCXByb3RlY3RlZCBPYmplY3QgdHlwZTsKLQotCXB1YmxpYyBTY2FubmVyVW5pdFRlc3RzKFN0cmluZyBuYW1lKSB7Ci0KLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgYXBwZW5kVGFnQmxvY2soU3RyaW5nQnVmZmVyIGJ1ZmZlciwgU3RyaW5nIHRhZ25hbWUsIGludCBsZW5ndGgpIHsKLQotCQlidWZmZXIuYXBwZW5kKCc8Jyk7Ci0JCWJ1ZmZlci5hcHBlbmQodGFnbmFtZSk7Ci0JCWJ1ZmZlci5hcHBlbmQoJz4nKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLQkJCWJ1ZmZlci5hcHBlbmQoJ18nKTsKLQkJYnVmZmVyLmFwcGVuZCgiPC8iKTsKLQkJYnVmZmVyLmFwcGVuZCh0YWduYW1lKTsKLQkJYnVmZmVyLmFwcGVuZCgnPicpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgewotCi0JCXNldFVwWE1MKG51bGwpOwotCX0KLQotCXByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBzZXRVcEpTUChTdHJpbmcgdGV4dCkgewotCi0JCXNldHVwTW9kZWwobmV3IE1vZGVsSGFuZGxlckZvckpTUCgpKTsKLQkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigic2NyaXB0IiwgbnVsbCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCBmYWxzZSkpOwotCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJzdHlsZSIsIG51bGwsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgZmFsc2UpKTsKLQkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigiZGlzYWxsb3dKU1AiLCBudWxsLCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIHRydWUsIGZhbHNlKSk7Ci0KLQkJLyoKLQkJICogSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiY29udGVudCA8c2NyaXB0PgotCQkgKiA8JT0gZXhwcmVzc2lvbiAlPiA8L3NjcmlwdD4gPGE+IDwvYT4gPGZvbzpkaXNhbGxvd0pTUD4gPCU9ICU+Ci0JCSAqIDwvZm9vOmRpc2FsbG93SlNQPiA+Iik7IHBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcKLQkJICogQmxvY2tNYXJrZXIoImpzcDpkZWNsYXJhdGlvbiIsIG51bGwsCi0JCSAqIFhNTEpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5ULCB0cnVlKSk7IHBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcKLQkJICogQmxvY2tNYXJrZXIoImpzcDpleHByZXNzaW9uIiwgbnVsbCwKLQkJICogWE1MSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTlRFTlQsIHRydWUpKTsgcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldwotCQkgKiBCbG9ja01hcmtlcigianNwOnNjcmlwdGxldCIsIG51bGwsCi0JCSAqIFhNTEpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5ULCB0cnVlKSk7Ci0JCSAqLwotCQlpbnB1dCA9IHRleHQ7Ci0JCWZNb2RlbC5zZXQoaW5wdXQpOwotCQlyZXR1cm4gZk1vZGVsLmdldFJlZ2lvbkxpc3QoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXR1cE1vZGVsKElNb2RlbEhhbmRsZXIgY29udGVudFR5cGUpIHsKLQotCQlmTW9kZWwgPSAoSVN0cnVjdHVyZWREb2N1bWVudCkgY29udGVudFR5cGUuZ2V0RG9jdW1lbnRMb2FkZXIoKS5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJdGhpcy5wYXJzZXIgPSAoQmxvY2tUYWdQYXJzZXIpIGZNb2RlbC5nZXRQYXJzZXIoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgc2V0VXBYTUwoU3RyaW5nIHRleHQpIHsKLQotCQlzZXR1cE1vZGVsKG5ldyBNb2RlbEhhbmRsZXJGb3JYTUwoKSk7Ci0JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoInNjcmlwdCIsIG51bGwsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgZmFsc2UpKTsKLQkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigic3R5bGUiLCBudWxsLCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIGZhbHNlKSk7Ci0JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoImRpc2FsbG93SlNQIiwgbnVsbCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCB0cnVlLCBmYWxzZSkpOwotCQlpbnB1dCA9IHRleHQ7Ci0JCWZNb2RlbC5zZXQoaW5wdXQpOwotCQlyZXR1cm4gZk1vZGVsLmdldFJlZ2lvbkxpc3QoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZXN0QmxvY2tTY2FuQnVmZmVyQm91bmRhcmllcyhTdHJpbmcgY29udGVudFR5cGVJRCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsKLQkJLy8gdGhlIGludGVyZXN0aW5nIG9mZnNldHMgYXJlIGFyb3VuZCAxNmsgKDE2Mzg0KQotCQkvLyBmb3IgKGludCBpID0gMTY1MDA7IGkgPiAxNjEwMDsgaS0tKSB7Ci0JCS8vIGZvciAoaW50IGkgPSAxNzAwMDsgaSA+IDE1MDAwOyBpLS0pIHsKLQkJZm9yIChpbnQgaSA9IDE2Mzg0ICsgMjU7IGkgPiAxNjM2NCAtIDI1OyBpLS0pIHsKLQkJCVN0cmluZ0J1ZmZlciB0ZXh0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJZG9jdW1lbnQgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcihjb250ZW50VHlwZUlEKTsKLQkJCWFwcGVuZFRhZ0Jsb2NrKHRleHQsICJzY3JpcHQiLCBpKTsKLQkJCVN0cmluZyBzdHJpbmcgPSB0ZXh0LnRvU3RyaW5nKCk7Ci0JCQl0cnkgewotCQkJCWRvY3VtZW50LnNldFRleHQodGhpcywgc3RyaW5nKTsKLQkJCQl2ZXJpZnlMZW5ndGhzKGRvY3VtZW50LCBzdHJpbmcpOwotCQkJCWFzc2VydFRydWUoInRvbyBmZXcgZG9jdW1lbnQgcmVnaW9ucyBbcnVuIHZhbHVlICIgKyBpICsgIl0gIiwgbmV3IENvcmVOb2RlTGlzdChkb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpKS5nZXRMZW5ndGgoKSA9PSAzKTsKLQkJCQl2ZXJpZnlMZW5ndGhzKGRvY3VtZW50LCBzdHJpbmcpOwotCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc3RhcnRUYWcgPSBkb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gbWlkZGxlQmxvY2sgPSBzdGFydFRhZy5nZXROZXh0KCk7Ci0JCQkJLy8gSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBlbmRUYWcgPSBtaWRkbGVCbG9jay5nZXROZXh0KCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgibm90IGJsb2NrIHRleHQgaW4gbWlkZGxlIiwgbWlkZGxlQmxvY2suZ2V0Rmlyc3RSZWdpb24oKS5nZXRUeXBlKCkgPT0gRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhUKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWFzc2VydE51bGwoImV4Y2VwdGlvbiBjYXVnaHQiICsgZSwgZSk7Ci0JCQl9Ci0JCQkvLyBTeXN0ZW0uZ2MoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCbG9ja1NjYW5CdWZmZXJCb3VuZGFyaWVzRm9ySFRNTCgpIHsKLQkJdGVzdEJsb2NrU2NhbkJ1ZmZlckJvdW5kYXJpZXMoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCbG9ja1NjYW5CdWZmZXJCb3VuZGFyaWVzRm9ySlNQKCkgewotCQl0ZXN0QmxvY2tTY2FuQnVmZmVyQm91bmRhcmllcygib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIpOwotCX0KLQotCXByaXZhdGUgdm9pZCB0ZXN0QmxvY2tUYWcoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMpIHsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDYsIDEsIDMsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVH0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgzKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9FTkRfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QmxvY2tUYWdfSlNQKCkgewotCQl0ZXN0QmxvY2tUYWcoc2V0VXBKU1AoImJlZ2luIDxzY3JJUHQgdHlwZT1cInBsMlwiPiA8L3NjcmlwIHQ+PC9zY3JpcHRzPjwvc2NyaXB0cyA8Ly8vPCEtIC0tLT48L3NDcklQdD4gZW5kIikpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIGJsb2NrIHRhZyBzY2FubmluZyBiZXR3ZWVuIFhNTCBjb250ZW50Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEJsb2NrVGFnX1hNTCgpIHsKLQotCQl0ZXN0QmxvY2tUYWcoc2V0VXBYTUwoImJlZ2luIDxzY3JJUHQgdHlwZT1cInBsMlwiPiA8L3NjcmlwIHQ+PC9zY3JpcHRzPjwvc2NyaXB0cyA8Ly8vPCEtIC0tLT48L3NDcklQdD4gZW5kIikpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIGJsb2NrIHRhZyBzY2FubmluZyBiZXR3ZWVuIFhNTCBjb250ZW50Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEJsb2NrVGFnV2l0aEpTUEV4cHJlc3Npb25zKCkgewotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoImJlZ2luIDxzY3JpcHQgdHlwZT1cInBsMlwiPiA8JT0gXCJleHByZXNzaW9uXCIlPiA8L3NjcklQdD4gPGE+PC9hPiA8ZGlzYWxsb3dKU1A+IDwlPSBcImV4cHJlc3Npb25cIiAlPiA8L2Rpc2FsbG93SlNQPiBlbmQiKTsKLQotCQkvLyBPTEQKLQkJLy8gYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDYsCi0JCS8vIDMsIDMsIDEsIDMsIDMsIDEsIDMsIDMsIDMsIDF9KTsKLQkJLy8gTkVXCi0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA2LCAzLCAzLCAxLCAzLCAzLCAxLCAzLCAxLCAzLCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJaW50IGkgPSAwOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pICYmIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhUfSwgbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FWFBSRVNTSU9OX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5ULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ0xPU0V9fSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfRU5EX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfRU5EX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJLy8gQ09SUkVDVCBCRUhBVklPUgotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFR9KQotCQkJCQkvLyBPTEQsIEJST0tFTiBCRUhBVklPUgotCQkJCQkvLyAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaSsrKS5nZXRSZWdpb25zKCksCi0JCQkJCS8vIG5ldwotCQkJCQkvLyBTdHJpbmdbXXsKLQkJCQkJLy8gWE1MUmVnaW9uQ29udGV4dC5CTE9DS19URVhULAotCQkJCQkvLyBYTUxSZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsCi0JCQkJCS8vIFhNTFJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVH0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0VORF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHRlc3RCdWZmZXJVbmRlclJ1bl8xKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzKSB7Ci0KLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDYsIDJ9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9URVhUfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCdWZmZXJVbmRlclJ1bl8xX0pTUCgpIHsKLQkJdGVzdEJ1ZmZlclVuZGVyUnVuXzEoc2V0VXBKU1AoImNvbnRlbnQgPHRhZyBhPWIvPjwhLS1jIikpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIGZvciBidWZmZXIgdW5kZXItcnVucyBvbiBibG9jayBzY2FubmluZwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdWZmZXJVbmRlclJ1bl8xX1hNTCgpIHsKLQkJdGVzdEJ1ZmZlclVuZGVyUnVuXzEoc2V0VXBYTUwoImNvbnRlbnQgPHRhZyBhPWIvPjwhLS1jIikpOwotCX0KLQotCXByaXZhdGUgdm9pZCB0ZXN0QnVmZmVyVW5kZXJSdW5fMihJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcykgewotCi0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA2LCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX09QRU59KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlclVuZGVyUnVuXzJfSlNQKCkgewotCi0JCXRlc3RCdWZmZXJVbmRlclJ1bl8yKHNldFVwSlNQKCJjb250ZW50IDx0YWcgYT1iLz48IS0tIikpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIGZvciBidWZmZXIgdW5kZXItcnVucyBvbiBibG9jayBzY2FubmluZwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdWZmZXJVbmRlclJ1bl8yX1hNTCgpIHsKLQotCQl0ZXN0QnVmZmVyVW5kZXJSdW5fMihzZXRVcFhNTCgiY29udGVudCA8dGFnIGE9Yi8+PCEtLSIpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdGVzdENEQVRBKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzKSB7Ci0KLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDMsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NEQVRBX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NEQVRBX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NEQVRBX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBX0pTUCgpIHsKLQotCQl0ZXN0Q0RBVEEoc2V0VXBKU1AoImEgPCFbQ0RBVEFbPD4hITwhIT48LyYmJi0tPCEtLV1dPiBiIikpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIENEQVRBIHNlY3Rpb24gc2Nhbm5pbmcgYmV0d2VlbiBjb250ZW50Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdENEQVRBX1hNTCgpIHsKLQotCQl0ZXN0Q0RBVEEoc2V0VXBYTUwoImEgPCFbQ0RBVEFbPD4hITwhIT48LyYmJi0tPCEtLV1dPiBiIikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tKU1AxKCkgewotCQlzZXRVcEpTUCgiPHNjcmlwdD48IVtDREFUQVsgY29udGVudHNdXT48L3NjcmlwdD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrSlNQMigpIHsKLQkJc2V0VXBKU1AoIjxzY3JpcHQ+PCFbQ0RBVEFbPC9zY3JpcHQ+XV0+PC9zY3JpcHQ+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja0pTUDJhKCkgewotCQlzZXRVcEpTUCgiPHNjcmlwdD48IVtDREFUQVtjb250ZW50czwvc2NyaXB0Pl1dPjwvc2NyaXB0PiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tKU1AyYigpIHsKLQkJc2V0VXBKU1AoIjxzY3JpcHQ+PCFbQ0RBVEFbPC9zY3JpcHQ+Y29udGVudHNdXT48L3NjcmlwdD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrSlNQMygpIHsKLQkJc2V0VXBKU1AoIjxzY3JpcHQ+PCFbQ0RBVEFbXV0+PC9zY3JpcHQ+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja0pTUDQoKSB7Ci0JCXNldFVwSlNQKCI8c2NyaXB0PjwhW0NEQVRBWyBdXT4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrSlNQNSgpIHsKLQkJc2V0VXBKU1AoIjxzY3JpcHQ+PCFbQ0RBVEFbIF1dXT4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrSlNQNigpIHsKLQkJc2V0VXBKU1AoIjxzY3JpcHQ+PCFbQ0RBVEFbIF1dIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja0pTUDcoKSB7Ci0JCXNldFVwSlNQKCI8c2NyaXB0PjwhW0NEQVRBWyAiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrSlNQOCgpIHsKLQkJc2V0VXBKU1AoIjxzY3JpcHQ+PCFbQ0RBVEFbIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja1hNTDEoKSB7Ci0JCXNldFVwWE1MKCI8c2NyaXB0PjwhW0NEQVRBWyBdXT48L3NjcmlwdD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrWE1MMigpIHsKLQkJc2V0VXBYTUwoIjxzY3JpcHQ+PCFbQ0RBVEFbPC9zY3JpcHQ+XV0+PC9zY3JpcHQ+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja1hNTDMoKSB7Ci0JCXNldFVwWE1MKCI8c2NyaXB0PjwhW0NEQVRBW11dPjwvc2NyaXB0PiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tYTUw0KCkgewotCQlzZXRVcFhNTCgiPHNjcmlwdD48IVtDREFUQVsgXV0+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja1hNTDUoKSB7Ci0JCXNldFVwWE1MKCI8c2NyaXB0PjwhW0NEQVRBWyBdXV0+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja1hNTDYoKSB7Ci0JCXNldFVwWE1MKCI8c2NyaXB0PjwhW0NEQVRBWyBdXSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tYTUw3KCkgewotCQlzZXRVcFhNTCgiPHNjcmlwdD48IVtDREFUQVsgIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja1hNTDgoKSB7Ci0JCXNldFVwWE1MKCI8c2NyaXB0PjwhW0NEQVRBWyIpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIGNvbW1lbnRzIGJldHdlZW4gWE1MIGNvbnRlbnQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tbWVudHNfSlNQKCkgewotCQlTdHJpbmcgdGV4dCA9ICJhIDwhLS0gLS0+PCEtLS0tPjwlLS0gLS0lPiBiIjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDMsIDIsIDMsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9URVhULCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgzKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9URVhULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg0KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIGNvbW1lbnRzIGJldHdlZW4gSlNQIGNvbnRlbnQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tbWVudHNfWE1MKCkgewotCQlTdHJpbmcgdGV4dCA9ICJhIDwhLS0gLS0+PDwhLS0tLT5iIjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcFhNTCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDMsIDEsIDIsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9URVhULCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDMpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg0KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXByaXZhdGUgdm9pZCB0ZXN0Q29udGVudChJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcykgewotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgc2ltcGxlIGNvbnRlbnQgc2Nhbm5pbmcKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q29udGVudEpTUCgpIHsKLQotCQl0ZXN0Q29udGVudChzZXRVcEpTUCgiaGVsbG8gd29ybGQiKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbnRlbnRYTUwoKSB7Ci0KLQkJdGVzdENvbnRlbnQoc2V0VXBYTUwoImhlbGxvIHdvcmxkIikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2xsYXJzaWduX0xlYWRpbmcoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoIjxhIHR5cGU9XCIkIFwiLz4iKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RG9sbGFyc2lnbl9TaW5nbGUoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoIjxhIHR5cGU9XCIkXCIvPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2xsYXJzaWduX1NpbmdsZVdpdGhTcGFjZXMoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoIjxhIHR5cGU9XCIgJCBcIi8+Iik7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVMaW5Db250ZW50KCkgewotCQlTdHJpbmcgdGV4dCA9ICIke291dC5mb299IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCgwKSksIDMpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDApKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRUxfT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VMX0NPTlRFTlQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FTF9DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RFTHRvbGVyYW5jZV90cmFuc3BhcmVuY3lfRHF1b3RlKCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCI8YSB0eXBlPVwiJHtvdXQuZm9vfVwiLz4iKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJc2l6ZUNoZWNrICY9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKSwgNSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJdHlwZUNoZWNrICY9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FTF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRUxfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VMX0NMT1NFLCBET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEV9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVMdG9sZXJhbmNlX3RyYW5zcGFyZW5jeV9EcXVvdGVXaXRoU3BhY2VzKCkgewotCQkvLyBub3RlOiB3aGl0ZXNwYWNlIG9uIGVpdGhlciBzaWRlIHJldHVybnMgYSBXSElURV9TUEFDRSBjb250ZXh0Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoIjxhIHR5cGU9XCJfJHtvdXQuZm9vfV9cIi8+Iik7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCXNpemVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSksIDcpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCXR5cGVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRUxfT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VMX0NPTlRFTlQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FTF9DTE9TRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFTHRvbGVyYW5jZV90cmFuc3BhcmVuY3lfU3F1b3RlKCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCI8YSB0eXBlPScke291dC5mb299Jy8+Iik7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCXNpemVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSksIDUpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCXR5cGVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfU1FVT1RFLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRUxfT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VMX0NPTlRFTlQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FTF9DTE9TRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfU1FVT1RFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZEpTUERlY2xhcmF0aW9uKCkgewotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoImNvbnRlbnQgPGZvbyBiYXI9XCI8JSEgaW50IGZvbzsgJT5cIiBiYXo9XCJpbFwiPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgOX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja0NvbXBsZXhSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFLH0sIG5ldyBTdHJpbmdbXVtde3tET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9ERUNMQVJBVElPTl9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NMT1NFLCBET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTVJlZ2lvbkNvbnRleHQuV0hJVEVfU1BBQ0V9fSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZEpTUERlY2xhcmF0aW9uSW5DREFUQSgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiPCFbQ0RBVEFbPCUhJT5dXT4iKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezN9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ0RBVEFfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ0RBVEFfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ0RBVEFfQ0xPU0UsfSwgbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9ERUNMQVJBVElPTl9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ0xPU0V9fSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZEpTUEV4cHJlc3Npb24oKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoImNvbnRlbnQgPGZvbyBiYXI9XCI8JT0gXCJIZWxsbywgV29ybGRcIiU+XCIgYmF6PVwiaWxcIj4iKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDl9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRSx9LCBuZXcgU3RyaW5nW11bXXt7RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRVhQUkVTU0lPTl9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NMT1NFLCBET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTVJlZ2lvbkNvbnRleHQuV0hJVEVfU1BBQ0V9fSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZEpTUEV4cHJlc3Npb25JbkNEQVRBKCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCI8IVtDREFUQVs8JT0lPl1dPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117M30pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9URVhULCBET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9DTE9TRSx9LCBuZXcgU3RyaW5nW11bXXt7RE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VYUFJFU1NJT05fT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NMT1NFfX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1iZWRkZWRKU1BTY3JpcHRsZXQoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoImNvbnRlbnQgPGZvbyBiYXI9XCI8JSAgJT5cIiBiYXo9XCJpbFwiPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgOX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja0NvbXBsZXhSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFLH0sIG5ldyBTdHJpbmdbXVtde3tET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9TQ1JJUFRMRVRfT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTlRFTlQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DTE9TRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01SZWdpb25Db250ZXh0LldISVRFX1NQQUNFfX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1iZWRkZWRKU1BTY3JpcHRsZXRJbkNEQVRBKCkgewotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoIjwhW0NEQVRBWzwlJT5dXT4iKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezN9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ0RBVEFfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ0RBVEFfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ0RBVEFfQ0xPU0UsfSwgbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9TQ1JJUFRMRVRfT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NMT1NFfX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1iZWRkZWRUYWdJbkF0dHIoKSB7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiPGEgaHJlZj1cIjxqc3A6Z2V0UHJvcGVydHkvPlwiPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0sIG5ldyBTdHJpbmdbXVtde3tET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFLCBET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEV9fSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BfREhUTUxpbXBvcnQoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIjxhPiA8P2ltcG9ydCB0eXBlPVwiZm9vXCI+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezMsIDEsIDZ9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9QSV9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfUElfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMsIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BfUEkoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gImJlZ2luIDw/cGhwIGFzZGE7bHNnamFsZztsYXNqbGFqZ2xhanNsa2FqbGdhanNsamdhbGpnbGFqPz5lbmQiOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgNCwgMX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0KLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9QSV9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfUElfQ09OVEVOVCwgRE9NUmVnaW9uQ29udGV4dC5YTUxfUElfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQQW1wZXJzYW5kSW5UYWdOYW1lSW5BdHRWYWx1ZSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPGEgaHJlZj1cIjxhJmI+XCIvPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs3LCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50ICh0YWcpIiwgc2l6ZUNoZWNrKTsKLQkJc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudCgoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLCA0KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQgKGJyb2tlbiBlbWJlZGRlZCB0YWcpIiwgc2l6ZUNoZWNrKTsKLQotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2sgKHRhZykiLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuVU5ERUZJTkVEfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2sgKGJyb2tlbiBlbWJlZGRlZCB0YWcpIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayAoY29udGVudCkiLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQQ29tbWVudEluWE1MQ29tbWVudCgpIHsKLQkJU3RyaW5nIHRleHQgPSAiczwhLS1cbjwlLS1jLS0lPlxuLS0+XG48aHRtbD5cbjxib2R5PjxzY3JpcHQ+IDwlLS1jLS0lPiA8L3NjcmlwdD5cbiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA1LCAxLCAzLCAxLCAzLCAzLCAzLCAzLCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJaW50IGl0ZW0gPSAwOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KQotCQkJCQkmJiBjaGVja0NvbXBsZXhSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9URVhULAotCQkJCQkJCQlET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX0NMT1NFfSwgbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX1RFWFQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX0NMT1NFfX0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFR9LCBuZXcgU3RyaW5nW11bXXt7RE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTU1FTlRfT1BFTiwKLQkJCQkJCQkJRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTU1FTlRfVEVYVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTU1FTlRfQ0xPU0V9fSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfRU5EX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDkpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUENvbW1lbnRBdFN0YXJ0T2ZYTUxDb21tZW50QW5kQmxvY2tUYWcoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gInM8IS0tPCUtLWMtLSU+XG4tLT5cbjxodG1sPlxuPGJvZHk+PHNjcmlwdD48JS0tYy0tJT4gPC9zY3JpcHQ+XG4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgNCwgMSwgMywgMSwgMywgMywgMiwgMywgMX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWludCBpdGVtID0gMDsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCXR5cGVDaGVjayA9IHR5cGVDaGVjayAmJiBjaGVja0NvbXBsZXhSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9DTE9TRX0sIG5ldyBTdHJpbmdbXVtde3tET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9URVhULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9DTE9TRX19KTsKLQkJdHlwZUNoZWNrID0gdHlwZUNoZWNrICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJdHlwZUNoZWNrID0gdHlwZUNoZWNrICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSk7Ci0JCXR5cGVDaGVjayA9IHR5cGVDaGVjayAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCXR5cGVDaGVjayA9IHR5cGVDaGVjayAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pOwotCQl0eXBlQ2hlY2sgPSB0eXBlQ2hlY2sgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KTsKLQkJdHlwZUNoZWNrID0gdHlwZUNoZWNrICYmIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVH0sIG5ldyBTdHJpbmdbXVtde3tET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9URVhULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9DTE9TRX19KTsKLQkJdHlwZUNoZWNrID0gdHlwZUNoZWNrICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0VORF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pOwotCQl0eXBlQ2hlY2sgPSB0eXBlQ2hlY2sgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQQ29tbWVudGluWE1MVGFnKCkgewotCQlTdHJpbmcgdGV4dCA9ICJzPGEgPCUtLWMtLSU+IGI9Yy8+XG4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgNywgMX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWludCBpdGVtID0gMDsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCXR5cGVDaGVjayA9IHR5cGVDaGVjayAmJiBjaGVja0NvbXBsZXhSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9URVhULCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9LG5ldyBTdHJpbmdbXVtde3tET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9URVhULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9DTE9TRSwgRE9NUmVnaW9uQ29udGV4dC5XSElURV9TUEFDRX19KTsKLQkJdHlwZUNoZWNrID0gdHlwZUNoZWNrICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgdGhhdCBqc3A6ZGlyZWN0aXZlLihpbmNsdWRlfHBhZ2V8dGFnbGliKSBhcmUgcmVjb2duaXplZCBhbmQKLQkgKiB0cmVhdGVkIHByb3Blcmx5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEpTUERpcmVjdGl2ZVRhZ3MoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gImJlZ2luIDxqc3A6ZGlyZWN0aXZlLnRhZ2xpYj4gPGpzcDpkaXJlY3RpdmUucGFnZSBhPiA8anNwOmRpcmVjdGl2ZS5pbmNsdWRlIGE9PiA8anNwOmRpcmVjdGl2ZS5wYWdlcyBhPWI+IGVuZCI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCAzLCAxLCA0LCAxLCA1LCAxLCA2LCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0RJUkVDVElWRV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgzKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0RJUkVDVElWRV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg0KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDUpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRElSRUNUSVZFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg2KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDcpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDgpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUERvbGxhcnNpZ25fVHJhaWxpbmcoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIjxhIHR5cGU9XCIgJFwiLz4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BEb2xsYXJzaWduX1RyYWlsaW5nSW5Db250ZW50KCkgewotCQlTdHJpbmcgdGV4dCA9ICJubm4kPGEgdHlwZT1cIiAkXCIvPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCAxLCA2fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIChjb250ZW50KSIsIHR5cGVDaGVjayk7Ci0JCXR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2sgKGNvbnRlbnQpIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2sgKHRhZykiLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIEpTUCBjb2RlIHNlY3Rpb25zIGJldHdlZW4gSFRNTCBjb250ZW50Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEpTUEV4cHJlc3Npb24oKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoImJlZ2luIDwlPSBcIkhlbGxvLFdvcmxkXCIgJT4gZW5kIik7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCAxLCAxLCAxLCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRVhQUkVTU0lPTl9PUEVOfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDMpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg0KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BHcmVhdGVyVGhhbkluQXR0VmFsdWUoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoIjxhIHR5cGU9XCI+bmV4dFwiLz4iKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gaXMgbm90IHNvbXBsZSIsICEobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpIGluc3RhbmNlb2YgSVRleHRSZWdpb25Db250YWluZXIpKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUEludmFsaWRUYWdOYW1lSW5BdHRWYWx1ZSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiUzxhIHR5cGU9XCJhPDRcIi8+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDZ9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQgKHRhZykiLCBzaXplQ2hlY2spOwotCQlzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLmdldCg0KSksIDUpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCAoYXR0IHZhbHVlKSIsIHNpemVDaGVjayk7Ci0JCXR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrICh0YWcpIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcygoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKS5nZXQoNCkpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIChhdHQgdmFsdWUpIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQTGVzc1RoYW5JbkF0dFZhbHVlKCkgewotCQkvLyBiYWlscyBvdXQgb2YgdGhlIGF0dHJpYnV0ZSB2YWx1ZSB3aXRoIGFuIFVOREVGSU5FRCByZWdpb24gZm9yIHRoZQotCQkvLyBlbmQgcXVvdGUKLQkJU3RyaW5nIHRleHQgPSAiPGJ1dHRvbiBsYWJlbD1cIjxwcmV2aW91c1wiLz4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCXNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKSwgNCk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50IChhdHQgdmFsdWUpIiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5VTkRFRklORUR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayAoYXR0IHZhbHVlKSIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgSlNQIGNvZGUgc2VjdGlvbnMsIGFzIGEgdGFnLCBzY2FubmluZyBiZXR3ZWVuIEhUTUwgY29udGVudAotCSAqLwotCS8vIHB1YmxpYyB2b2lkIHRlc3RKU1BTY3JpcHRsZXRUYWcoKSB7Ci0JLy8gSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiYmVnaW4gPGpzcDpzY3JpcHRsZXQ+Ci0JLy8gaW50IGZvbyA9IGJhcjsgLy88anNwOlNjcmlwdGxldD4vLzwvanNwOnNjcmlwdGxldHM8L2pzcDpzY3JpcHRsZXQ+Ci0JLy8gZW5kIik7Ci0JLy8JCi0JLy8gYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDMsIDEsCi0JLy8gMywKLQkvLyAxfSk7Ci0JLy8gYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLAotCS8vIHNpemVDaGVjayk7Ci0JLy8KLQkvLyBib29sZWFuIHR5cGVDaGVjayA9Ci0JLy8gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vIFhNTFJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KQotCS8vICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLyBYTUxSZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwKLQkvLyBYTUxSZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwKLQkvLyBYTUxSZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KQotCS8vICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5KU1BfQ09OVEVOVH0pCi0JLy8gJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDMpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vIFhNTFJlZ2lvbkNvbnRleHQuWE1MX0VORF9UQUdfT1BFTiwKLQkvLyBYTUxSZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwKLQkvLyBYTUxSZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KQotCS8vICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg0KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfQ09OVEVOVH0pOwotCS8vIGFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCS8vCQkKLQkvLyB2ZXJpZnlNb2RlbExlbmd0aCgpOwotCS8vIH0KLQkvKioKLQkgKiBDaGVjayBKU1AgY29kZSBzZWN0aW9ucywgYXMgYSB0YWcsIHNjYW5uaW5nIGJldHdlZW4gSFRNTCBjb250ZW50Ci0JICovCi0JLy8gcHVibGljIHZvaWQgdGVzdEpTUFRleHRUYWcoKSB7Ci0JLy8gSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiYmVnaW4gPGpzcDp0ZXh0PiBpbnQKLQkvLyBmb28KLQkvLyA9IGJhcjsgLy88anNwOlRFWFQ+Ly88L2pzcDpUZXh0czwvanNwOnRleHQ+IDxhPiA8L2E+IGVuZCIpOwotCS8vCQotCS8vIGJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCAzLCAxLAotCS8vIDMsCi0JLy8gMSwgMywgMSwgMywgMX0pOwotCS8vIGFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50IiwKLQkvLyBzaXplQ2hlY2spOwotCS8vCi0JLy8gYm9vbGVhbiB0eXBlQ2hlY2sgPQotCS8vIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfQ09OVEVOVH0pCi0JLy8gJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfT1BFTiwKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX05BTUUsCi0JLy8gWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19DTE9TRX0pCi0JLy8gJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9DREFUQV9URVhUfSkKLQkvLyAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117Ci0JLy8gWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX0VORF9UQUdfT1BFTiwKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX05BTUUsCi0JLy8gWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19DTE9TRX0pCi0JLy8gJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDQpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9DT05URU5UfSkKLQkvLyAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117Ci0JLy8gWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19PUEVOLAotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfTkFNRSwKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0NMT1NFfSkKLQkvLyAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117Ci0JLy8gWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX0NPTlRFTlR9KQotCS8vICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg3KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfRU5EX1RBR19PUEVOLAotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfTkFNRSwKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0NMT1NFfSkKLQkvLyAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oOCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117Ci0JLy8gWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX0NPTlRFTlR9KTsKLQkvLyBhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkvLwkJCi0JLy8gdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQkvLyB9Ci0JLyoqCi0JICogQ2hlY2sgdGhhdCBqc3A6cm9vdCBpcyByZWNvZ25pemVkIGFuZCB0cmVhdGVkIHByb3Blcmx5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEpTUFJvb3RUYWcoKSB7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiYmVnaW4gPGpzcDpyb290PiA8anNwOnJvb3RzIGE+IDxqc3A6cm9vIGE9PiA8L2pzcDpyb290IGE9Yj48YT5lbmQiKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDMsIDEsIDQsIDEsIDUsIDEsIDYsIDMsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfUk9PVF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg0KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDUpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDYpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfRU5EX1RBR19PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfUk9PVF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDgpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDkpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUFRhZ0luQXR0VmFsdWUoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIjxhIHR5cGU9XCI8YS8+XCIvPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudCgoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLCA1KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrICh0YWcpIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcygoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0UsIERPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIChhdHQgdmFsdWUpIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2RlcywgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vdGhpbmdpbkJsb2NrSlNQOSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPHNjcmlwdD4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117M30pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb3RoaW5naW5CbG9ja1hNTDkoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIjxzY3JpcHQ+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcFhNTCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezN9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdGVzdFNpbXBsZVRhZyhJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcykgewotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgMTAsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlVGFnX0pTUCgpIHsKLQkJdGVzdFNpbXBsZVRhZyhzZXRVcEpTUCgiMCA8dGFnbmFtZSBhdHRyMSBhdHRyMj12YWx1ZTIgYXR0cjM9XCJ2YWx1ZTNcIj4gMSIpKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBzaW1wbGUgdGFnIHNjYW5uaW5nIGJldHdlZW4gWE1MIGNvbnRlbnQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlVGFnX1hNTCgpIHsKLQkJdGVzdFNpbXBsZVRhZyhzZXRVcFhNTCgiMCA8dGFnbmFtZSBhdHRyMSBhdHRyMj12YWx1ZTIgYXR0cjM9XCJ2YWx1ZTNcIj4gMSIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VkJMaW5Db250ZW50KCkgewotCQlTdHJpbmcgdGV4dCA9ICIje291dC5mb299IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCgwKSksIDMpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDApKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5KU1BfVkJMX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9WQkxfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1ZCTF9DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VkJMdG9sZXJhbmNlX3RyYW5zcGFyZW5jeV9EcXVvdGUoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIjxhIHR5cGU9XCIje291dC5mb299XCIvPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCXNpemVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSksIDUpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCXR5cGVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfVkJMX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9WQkxfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1ZCTF9DTE9TRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RWQkx0b2xlcmFuY2VfdHJhbnNwYXJlbmN5X0RxdW90ZVdpdGhTcGFjZXMoKSB7Ci0JCS8vIG5vdGU6IHdoaXRlc3BhY2Ugb24gZWl0aGVyIHNpZGUgcmV0dXJucyBhIFdISVRFX1NQQUNFIGNvbnRleHQKLQkJU3RyaW5nIHRleHQgPSAiPGEgdHlwZT1cIl8je291dC5mb299X1wiLz4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlzaXplQ2hlY2sgJj0gY2hlY2tTaW1wbGVSZWdpb25Db3VudCgoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLCA3KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQl0eXBlQ2hlY2sgJj0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcygoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1ZCTF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfVkJMX0NPTlRFTlQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9WQkxfQ0xPU0UsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VkJMdG9sZXJhbmNlX3RyYW5zcGFyZW5jeV9TcXVvdGUoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIjxhIHR5cGU9JyN7b3V0LmZvb30nLz4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlzaXplQ2hlY2sgJj0gY2hlY2tTaW1wbGVSZWdpb25Db3VudCgoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLCA1KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQl0eXBlQ2hlY2sgJj0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcygoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX1NRVU9URSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1ZCTF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfVkJMX0NPTlRFTlQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9WQkxfQ0xPU0UsIERPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX1NRVU9URX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2RlcywgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTF9ESFRNTGltcG9ydCgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPGE+IDw/aW1wb3J0IHR5cGU9XCJmb29cIj4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwWE1MKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MywgMSwgNn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1BJX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9QSV9DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2RlcywgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTF9QSSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiYmVnaW4gPD9waHAgYXNkYTtsc2dqYWxnO2xhc2psYWpnbGFqc2xrYWpsZ2Fqc2xqZ2FsamdsYWo/PmVuZCI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBYTUwodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA0LCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1BJX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9QSV9DT05URU5ULCBET01SZWdpb25Db250ZXh0LlhNTF9QSV9DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxEb2xsYXJzaWduX1RyYWlsaW5nKCkgewotCQlTdHJpbmcgdGV4dCA9ICI8YSB0eXBlPVwiICRcIi8+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcFhNTCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VW5kZWZpbmVkUmVnaW9uQ29udGFpbmVyKCkgewotCQkvLyBzZWUgUkFUTEMgUkFUTEMwMDI4NDc3NgotCQlTdHJpbmcgdGV4dCA9ICI8b3B0aW9uIDxlbG1zOmlucHV0VmFsdWUgdmFsdWU9XCI8JT11b212b3gudW9tSUQlPlwiLz48JT11b212b3gudW9tSUQuZXF1YWxzKHVvbUlEKSA/IFwiIHNlbGVjdGVkXCIgOiBcIlwiJT4+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezV9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgb3ZlcmFsbCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCS8vIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcKLQkJLy8gU3RyaW5nW117WE1MUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sCi0JCS8vIFhNTFJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLAotCQkvLyBYTUxSZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsCi0JCS8vIFhNTFJlZ2lvbkNvbnRleHQuVU5ERUZJTkVELCBYTUxSZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9LCBuZXcKLQkJLy8gU3RyaW5nW11bXSB7e319KTsKLQkJdmVyaWZ5RW1iZWRkZWRDb250YWluZXJQYXJlbnRhZ2Uobm9kZXMpOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBub2RlcwotCSAqLwotCXByaXZhdGUgdm9pZCB2ZXJpZnlFbWJlZGRlZENvbnRhaW5lclBhcmVudGFnZShJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcykgewotCQlmb3IgKGludCBpID0gMDsgaSA8IG5vZGVzLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gciA9IG5vZGVzLml0ZW0oaSk7Ci0JCQlJVGV4dFJlZ2lvbkxpc3QgbGlzdCA9IHIuZ2V0UmVnaW9ucygpOwotCQkJZm9yIChpbnQgaiA9IDA7IGogPCBsaXN0LnNpemUoKTsgaisrKSB7Ci0JCQkJSVRleHRSZWdpb24gcmVnaW9uID0gbGlzdC5nZXQoaik7Ci0JCQkJaWYgKHJlZ2lvbiBpbnN0YW5jZW9mIElUZXh0UmVnaW9uQ29udGFpbmVyKSB7Ci0JCQkJCWFzc2VydE5vdE51bGwoInBhcmVudCBpcyBudWxsIGZvciAiICsgcmVnaW9uLCAoKElUZXh0UmVnaW9uQ29udGFpbmVyKSByZWdpb24pLmdldFBhcmVudCgpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgYm9vbGVhbiB2ZXJpZnlNb2RlbExlbmd0aCgpIHsKLQkJcmV0dXJuIGNoZWNrTW9kZWxMZW5ndGgoZk1vZGVsLCBpbnB1dC5sZW5ndGgoKSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU2Nhbm5pbmdUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TY2FubmluZ1Rlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjM2NmMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TY2FubmluZ1Rlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm90aGVyOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wYXJzZXIuSlNQU291cmNlUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5TdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsucGFyc2VyLkJsb2NrTWFya2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsucGFyc2VyLlJlZ2lvblBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb25Db250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LlN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkl0ZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLkRlYnVnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS51dGlscy5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucGFyc2VyLlhNTFNvdXJjZVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucmVnaW9ucy5ET01SZWdpb25Db250ZXh0OwotCi0vKioKLSAqIHRlc3QgY2xhc3MgZm9yIGJhc2ljIHBhcnNpbmcgYW5kIHNjYW5uaW5nCi0gKi8KLQotcHVibGljIGNsYXNzIFNjYW5uaW5nVGVzdHMgewotCXByaXZhdGUgc3RhdGljIElTdHJ1Y3R1cmVkRG9jdW1lbnQgdGV4dFN0b3JlID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBsb25nIHN0YXJ0VGltZSA9IDA7Ci0JcHJpdmF0ZSBzdGF0aWMgbG9uZyBzdG9wVGltZSA9IDA7Ci0KLQkvKioKLQkgKiBTY2FubmluZ1Rlc3RzIGNvbnN0cnVjdG9yIGNvbW1lbnQuCi0JICovCi0JcHVibGljIFNjYW5uaW5nVGVzdHMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGNoZWNrTm9kZVNlYW1zKFN0cmluZyBmaWxlTmFtZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNIRUNLSU5HIE5PREUgQk9VTkRBUklFUyBBTkQgQ09OVEVOVFMgRk9SICIgKyBmaWxlTmFtZSk7Ci0JCUVudW1lcmF0aW9uIGUgPSBwYXJzZUZpbGUoZmlsZU5hbWUpLmVsZW1lbnRzKCk7Ci0JCWludCBsYXN0RW5kID0gMDsKLQkJd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gciA9IChJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uKSBlLm5leHRFbGVtZW50KCk7Ci0JCQlpZiAoci5nZXRTdGFydE9mZnNldCgpICE9IGxhc3RFbmQpCi0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJFUlJPUjogZHJvcHBlZCBpbiAiICsgcik7Ci0JCQlpZiAoci5nZXROdW1iZXJPZlJlZ2lvbnMoKSA8IDEpCi0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJFUlJPUjogZW1wdHkgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiAiICsgcik7Ci0JCQlsYXN0RW5kID0gci5nZXRFbmRPZmZzZXQoKTsKLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRPTkUiKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgY2hlY2tQYXJzZShTdHJpbmcgZmlsZU5hbWUpIHsKLQkJY2hlY2tUb2tlblNlYW1zKGZpbGVOYW1lKTsKLQkJY2hlY2tOb2RlU2VhbXMoZmlsZU5hbWUpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBjaGVja1Rva2VuU2VhbXMoU3RyaW5nIGZpbGVOYW1lKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ0hFQ0tJTkcgVE9LRU5JWkVSIFJFR0lPTiBCT1VOREFSSUVTIEZPUiAiICsgZmlsZU5hbWUpOwotCQlJdGVyYXRvciBlID0gdG9rZW5pemVGaWxlKGZpbGVOYW1lKS5pdGVyYXRvcigpOwotCQlpbnQgbGFzdEVuZCA9IDA7Ci0JCXdoaWxlIChlLmhhc05leHQoKSkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByID0gKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24pIGUubmV4dCgpOwotCQkJaWYgKHIuZ2V0U3RhcnRPZmZzZXQoKSAhPSBsYXN0RW5kKQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRVJST1I6IGRyb3BwZWQgaW4gIiArIHIpOwotCQkJbGFzdEVuZCA9IHIuZ2V0RW5kT2Zmc2V0KCk7Ci0JCX0KLQkJU3lzdGVtLm91dC5wcmludGxuKCJET05FIik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBjaGFyW10gbG9hZENoYXJzKFN0cmluZyBmaWxlTmFtZSkgewotCQljaGFyW10gY2hhcnMgPSBudWxsOwotCQlpbnQgYyA9IDA7Ci0JCWludCBsZW5ndGggPSAwOwotCQlpbnQgY291bnQgPSAwOwotCQlGaWxlIGZpbGUgPSBudWxsOwotCQlGaWxlSW5wdXRTdHJlYW0gZmlzID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWZpbGUgPSBuZXcgRmlsZShmaWxlTmFtZSk7Ci0JCQlsZW5ndGggPSAoaW50KSBmaWxlLmxlbmd0aCgpOwotCQkJY2hhcnMgPSBuZXcgY2hhcltsZW5ndGhdOwotCQkJZmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLQkJCXdoaWxlICgoKGMgPSBmaXMucmVhZCgpKSA+PSAwKSAmJiAoY291bnQgPCBsZW5ndGgpKSB7Ci0JCQkJY2hhcnNbY291bnQrK10gPSAoY2hhcikgYzsKLQkJCX0KLQkJfQotCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRmlsZSBub3QgZm91bmQgOiBcIiIgKyBmaWxlTmFtZSArICJcIiIpOwotCQkJU3lzdGVtLmV4aXQoMSk7Ci0JCX0KLQkJY2F0Y2ggKEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlVzYWdlIDogamF2YSBKU1BMZXhlcjMgPGlucHV0ZmlsZT4iKTsKLQkJCVN5c3RlbS5leGl0KDEpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkFuIEkvTyBlcnJvciBvY2N1cmVkIHdoaWxlIHNjYW5uaW5nIDoiKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihlKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIGNoYXJzOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgUmVnaW9uUGFyc2VyIG5ld1BhcnNlcigpIHsKLQkJSlNQU291cmNlUGFyc2VyIHBhcnNlciA9IG5ldyBKU1BTb3VyY2VQYXJzZXIoKTsKLQkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigiZm9vIiwgbnVsbCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCB0cnVlKSk7Ci0JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoImdsb2JhbEZvbyIsIG51bGwsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgdHJ1ZSkpOwotCQkvLwkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigianNwOmV4cHJlc3Npb24iLCBudWxsLCBYTUxKU1BSZWdpb25Db250ZXh0cy5KU1BfQ09OVEVOVCwgdHJ1ZSkpOwotCQkvLwkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigianNwOnNjcmlwdGxldCIsIG51bGwsIFhNTEpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5ULCB0cnVlKSk7Ci0JCS8vCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJqc3A6ZGVjbGFyYXRpb24iLCBudWxsLCBYTUxKU1BSZWdpb25Db250ZXh0cy5KU1BfQ09OVEVOVCwgdHJ1ZSkpOwotCQkvLwkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigianNwOnRleHQiLCBudWxsLCBYTUxSZWdpb25Db250ZXh0LlhNTF9DREFUQV9URVhULCB0cnVlKSk7Ci0JCXJldHVybiBwYXJzZXI7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBSZWdpb25QYXJzZXIgbmV3WE1MUGFyc2VyKCkgewotCQlYTUxTb3VyY2VQYXJzZXIgcGFyc2VyID0gbmV3IFhNTFNvdXJjZVBhcnNlcigpOwotCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJTY3JpcHQiLCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIGZhbHNlKSk7Ci0JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoInN0eWxFIiwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCBmYWxzZSkpOwotCQlyZXR1cm4gcGFyc2VyOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgVmVjdG9yIHBhcnNlKFN0cmluZyBzdHJpbmdkYXRhKSB7Ci0JCXJldHVybiBwYXJzZShzdHJpbmdkYXRhLCBmYWxzZSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBWZWN0b3IgcGFyc2UoU3RyaW5nIHN0cmluZ2RhdGEsIGJvb2xlYW4gdXNlWE1MKSB7Ci0JCWlmIChEZWJ1Zy5wZXJmVGVzdCkgewotCQkJc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCX0KLQkJUmVnaW9uUGFyc2VyIHBhcnNlciA9IG51bGw7Ci0JCWlmICh1c2VYTUwpCi0JCQlwYXJzZXIgPSBuZXdYTUxQYXJzZXIoKTsKLQkJZWxzZQotCQkJcGFyc2VyID0gbmV3UGFyc2VyKCk7Ci0JCWlmIChEZWJ1Zy5wZXJmVGVzdCkgewotCQkJc3RvcFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU2Nhbm5pbmdUZXN0cyBzcGVudCAiICsgKHN0b3BUaW1lIC0gc3RhcnRUaW1lKSArICIgKG1zZWNzKSBjcmVhdGluZyBhICIgKyBwYXJzZXIuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotCQl9Ci0JCS8vIENhdXRpb246IGNhc3QKLQkJcGFyc2VyLnJlc2V0KG5ldyBTdHJpbmdSZWFkZXIoc3RyaW5nZGF0YSkpOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFOb2RlID0gc2V0Tm9kZURvY3VtZW50KHBhcnNlci5nZXREb2N1bWVudFJlZ2lvbnMoKSk7Ci0JCWlmIChEZWJ1Zy5wZXJmVGVzdCkgewotCQkJc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCX0KLQkJdGV4dFN0b3JlID0gU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRJbnN0YW5jZShwYXJzZXIpOwotCQl0ZXh0U3RvcmUuc2V0VGV4dChudWxsLCBzdHJpbmdkYXRhKTsKLQkJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uSXRlcmF0b3Iuc2V0UGFyZW50RG9jdW1lbnQoYU5vZGUsIHRleHRTdG9yZSk7Ci0JCVZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotCQl3aGlsZSAoYU5vZGUgIT0gbnVsbCkgewotCQkJdi5hZGRFbGVtZW50KGFOb2RlKTsKLQkJCWFOb2RlID0gYU5vZGUuZ2V0TmV4dCgpOwotCQl9Ci0JCWlmIChEZWJ1Zy5wZXJmVGVzdCkgewotCQkJc3RvcFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU2Nhbm5pbmdUZXN0cyBzcGVudCAiICsgKHN0b3BUaW1lIC0gc3RhcnRUaW1lKSArICIgKG1zZWNzKSBzZXR0aW5nIHRleHQgYW5kIHN0b3Jpbmcgbm9kZXMiKTsKLQkJfQotCQlyZXR1cm4gdjsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFZlY3RvciBwYXJzZUZpbGUoU3RyaW5nIGZpbGVOYW1lKSB7Ci0JCWlmIChEZWJ1Zy5wZXJmVGVzdCkgewotCQkJc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCX0KLQkJaWYgKERlYnVnLnBlcmZUZXN0KSB7Ci0JCQlzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJfQotCQljaGFyW10gaW5wdXQgPSBsb2FkQ2hhcnMoZmlsZU5hbWUpOwotCQlpZiAoRGVidWcucGVyZlRlc3QpIHsKLQkJCXN0b3BUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNjYW5uaW5nVGVzdHMgc3BlbnQgIiArIChzdG9wVGltZSAtIHN0YXJ0VGltZSkgKyAiIChtc2VjcykgbG9hZGluZyAiICsgZmlsZU5hbWUpOwotCQl9Ci0JCXJldHVybiBwYXJzZShuZXcgU3RyaW5nKGlucHV0KSk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBzZXROb2RlRG9jdW1lbnQoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBzdGFydE5vZGUpIHsKLQkJLy8gQ2F1dGlvbjogY2FzdAotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFOb2RlID0gc3RhcnROb2RlOwotCQl3aGlsZSAoYU5vZGUgIT0gbnVsbCkgewotCQkJYU5vZGUuc2V0UGFyZW50RG9jdW1lbnQodGV4dFN0b3JlKTsKLQkJCWFOb2RlID0gYU5vZGUuZ2V0TmV4dCgpOwotCQl9Ci0JCXJldHVybiBzdGFydE5vZGU7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBMaXN0IHRva2VuaXplRmlsZShTdHJpbmcgZmlsZU5hbWUpIHsKLQkJTGlzdCB2ID0gbnVsbDsKLQkJU3RyaW5nQnVmZmVyIGJ1ZmYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXRyeSB7Ci0JCQkvL2NoYXJbXSBpbnB1dCA9IGxvYWRDaGFycyhmaWxlTmFtZSk7Ci0JCQlSZWFkZXIgaW5wdXQgPSBuZXcgRmlsZVJlYWRlcihmaWxlTmFtZSk7Ci0JCQlSZWdpb25QYXJzZXIgcGFyc2VyID0gbmV3UGFyc2VyKCk7Ci0JCQkvLyBwYXJzZXIgbXVzdCBiZSBnaXZlbiBpbnB1dCwgYmVmb3JlIHRva2VuaXplciBpcyB2YWxpZAotCQkJcGFyc2VyLnJlc2V0KGlucHV0KTsKLQkJCWludCBjID0gMDsKLQkJCXBhcnNlci5nZXREb2N1bWVudFJlZ2lvbnMoKTsKLQkJCXYgPSBwYXJzZXIuZ2V0UmVnaW9ucygpOwotCQkJaW5wdXQucmVzZXQoKTsKLQkJCXdoaWxlICgoYyA9IGlucHV0LnJlYWQoKSkgPj0gMCkgewotCQkJCWJ1ZmYuYXBwZW5kKChjaGFyKSBjKTsKLQkJCX0KLQkJCXRleHRTdG9yZSA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UocGFyc2VyKTsKLQkJCXRleHRTdG9yZS5zZXRUZXh0KG51bGwsIGJ1ZmYudG9TdHJpbmcoKSk7Ci0JCX0KLQkJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZpbGUgbm90IGZvdW5kIDogXCIiICsgZmlsZU5hbWUgKyAiXCIiKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQl9Ci0JCWNhdGNoIChBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJVc2FnZSA6IGphdmEgSlNQTGV4ZXIzIDxpbnB1dGZpbGU+Iik7Ci0JCX0KLQkJcmV0dXJuIHY7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgdmlld2FibGVUb2tlbml6ZVdpdGhTZXBhcmF0b3IoU3RyaW5nIGRhdGEpIHsKLQkJU3RyaW5nQnVmZmVyIHMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXMuYXBwZW5kKCJcIiIpOwotCQlzLmFwcGVuZChkYXRhKTsKLQkJcy5hcHBlbmQoIlwiXG4iKTsKLQkJcy5hcHBlbmQodmlld2FibGVUb2tlbml6ZShkYXRhKSk7Ci0JCXMuYXBwZW5kKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0JCXJldHVybiBzLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgdmlld2FibGVUb2tlbml6ZShTdHJpbmcgc3RyaW5nZGF0YSkgewotCQlyZXR1cm4gdmlld2FibGVUb2tlbml6ZShzdHJpbmdkYXRhLCBmYWxzZSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgdmlld2FibGVUb2tlbml6ZShTdHJpbmcgc3RyaW5nZGF0YSwgYm9vbGVhbiB1c2VYTUwpIHsKLQkJamF2YS51dGlsLkxpc3QgbCA9IHBhcnNlKHN0cmluZ2RhdGEsIHVzZVhNTCk7Ci0JCVN0cmluZyBzID0gIiI7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbC5zaXplKCk7IGkrKykgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBub2RlID0gKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24pIGwuZ2V0KGkpOwotCQkJdHJ5IHsKLQkJCQlzICs9IFN0cmluZ1V0aWxzLmVzY2FwZShub2RlLnRvU3RyaW5nKCkpICsgIlxuIjsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCXMgKz0gIlsiICsgbm9kZS5nZXRTdGFydCgpICsgIiwgIiArIG5vZGUuZ2V0RW5kKCkgKyAiXSAoVU5QUklOVEFCTEUgIiArIGUgKyAiKSI7Ci0JCQl9Ci0JCQlJVGV4dFJlZ2lvbkxpc3QgbSA9IG5vZGUuZ2V0UmVnaW9ucygpOwotCQkJZm9yIChpbnQgaiA9IDA7IGogPCBtLnNpemUoKTsgaisrKQotCQkJCWlmIChtLmdldChqKSBpbnN0YW5jZW9mIElUZXh0UmVnaW9uQ29udGFpbmVyKSB7Ci0JCQkJCXMgPSBzICsgIlx0IiArIFN0cmluZ1V0aWxzLmVzY2FwZShtLmdldChqKS50b1N0cmluZygpKSArICJcbiI7Ci0JCQkJCUlUZXh0UmVnaW9uTGlzdCBuID0gKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbS5nZXQoaikpLmdldFJlZ2lvbnMoKTsKLQkJCQkJZm9yIChpbnQgayA9IDA7IGsgPCBuLnNpemUoKTsgaysrKQotCQkJCQkJcyA9IHMgKyAiXHRcdCIgKyBTdHJpbmdVdGlscy5lc2NhcGUobi5nZXQoaykudG9TdHJpbmcoKSkgKyAiXG4iOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJCXMgPSBzICsgIlx0IiArIFN0cmluZ1V0aWxzLmVzY2FwZShtLmdldChqKS50b1N0cmluZygpKSArICJcbiI7Ci0JCX0KLQkJcmV0dXJuIHM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgdmlld2FibGVUb2tlbml6ZUZpbGUoU3RyaW5nIGZpbGVOYW1lKSB7Ci0JCWlmIChEZWJ1Zy5wZXJmVGVzdCkgewotCQkJc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCX0KLQkJaWYgKERlYnVnLnBlcmZUZXN0KSB7Ci0JCQlzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJfQotCQljaGFyW10gaW5wdXQgPSBsb2FkQ2hhcnMoZmlsZU5hbWUpOwotCQlpZiAoRGVidWcucGVyZlRlc3QpIHsKLQkJCXN0b3BUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNjYW5uaW5nVGVzdHMgc3BlbnQgIiArIChzdG9wVGltZSAtIHN0YXJ0VGltZSkgKyAiIChtc2VjcykgbG9hZGluZyAiICsgZmlsZU5hbWUpOwotCQl9Ci0JCXJldHVybiB2aWV3YWJsZVRva2VuaXplKG5ldyBTdHJpbmcoaW5wdXQpKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TdHJ1Y3R1cmVkRG9jdW1lbnRUb0RPTVVuaXRUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TdHJ1Y3R1cmVkRG9jdW1lbnRUb0RPTVVuaXRUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTM5MTA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU3RydWN0dXJlZERvY3VtZW50VG9ET01Vbml0VGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLkxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLklTdHJ1Y3R1cmVkRG9jdW1lbnRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5ld0RvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5Ob0NoYW5nZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuUmVnaW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuUmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5TdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLkRlYnVnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS51dGlscy5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuRE9NTW9kZWxJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIFN0cnVjdHVyZWREb2N1bWVudFRvRE9NVW5pdFRlc3RzIGltcGxlbWVudHMgSVN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyIHsKLQlwdWJsaWMgU3RydWN0dXJlZERvY3VtZW50VG9ET01Vbml0VGVzdHMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JU3RyaW5nIGdldFRlc3RTdHJpbmcxKCkgewotCQlyZXR1cm4gIjxhPmE8YiAvPmI8L2E+IjsgLy8gLT4gPGE+YWI8L2E+OwotCX0KLQotCVN0cmluZyBnZXRUZXN0U3RyaW5nMigpIHsKLQkJcmV0dXJuICI8bWVudT5cbjxybmFtZT5cbkxpYW0ncyBDaG93ZGVyIEhvdXNlIGFuZCBHcmlsbFxuPC9ybmFtZT5cbjwvbWVudT4iOwotCX0KLQotCVN0cmluZyBnZXRUZXN0U3RyaW5nMygpIHsKLQkJLy8gcmV0dXJuICIgPD94bWwgdmVyc2lvbj1cIjEuMFwiID8+XG4KLQkJLy8gPHRlc3RUb3BTaWJsaW5nPjxwPnRleHQ8L3A+PC90ZXN0VG9wU2libGluZz4iOwotCQlyZXR1cm4gIjx0ZXN0Lz5cblxuIDxodG1sPlxuPC9odG1sPiI7Ci0JfQotCi0JU3RyaW5nIGdldFRlc3RTdHJpbmc0KCkgewotCQlyZXR1cm4gIjw/eG1sIHZlcnNpb249XCIxLjBcIiA/PiI7Ci0JfQotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmdbXQotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQotCQl0cnkgewotCQkJU3RydWN0dXJlZERvY3VtZW50VG9ET01Vbml0VGVzdHMgaW5zdGFuY2UgPSBuZXcgU3RydWN0dXJlZERvY3VtZW50VG9ET01Vbml0VGVzdHMoKTsKLQkJCWluc3RhbmNlLnRlc3ROb2RlRGVsZXRpb240KCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiB0KSB7Ci0JCQl0LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0Jdm9pZCBtYWtlQ2hhbmdlMShJRE9NTW9kZWwgdHJlZSkgewotCi0JCS8vCQotCQkvLyBwaWNrIGEgcGFyZW50IGFuZCBvbmVzIG9mIGl0cyBjaGlsZHJlbiB0byBkZWxldGUKLQkJLy8gKG5vdGU6IHZhbGlkaXR5IG9mIHRoaXMgY29kZSBpcyBoaWdobHkgZGVwZW5kZW50IG9uIGlucHV0IHN0cmluZykKLQkJb3JnLnczYy5kb20uRG9jdW1lbnQgZG9tID0gdHJlZS5nZXREb2N1bWVudCgpOwotCQlOb2RlTGlzdCBub2RlcyA9IGRvbS5nZXRDaGlsZE5vZGVzKCk7Ci0JCS8vCi0JCS8qCi0JCSAqIGZvciAiZmlyc3QiIHRlc3QgY2FzZSBOb2RlIHRlc3RQYXJlbnROb2RlID0gbm9kZXMuaXRlbSgwKTsgTm9kZQotCQkgKiB0ZXN0Q2hpbGROb2RlID0gdGVzdFBhcmVudE5vZGUuZ2V0Rmlyc3RDaGlsZCgpOwotCQkgKi8KLQkJLy8gZm9yICJzZWNvbmQiIHRlc3QgY2FzZQotCQlOb2RlIHRlc3RQYXJlbnROb2RlID0gbm9kZXMuaXRlbSgwKTsKLQkJTm9kZSB0ZXN0Q2hpbGROb2RlID0gdGVzdFBhcmVudE5vZGUuZ2V0Rmlyc3RDaGlsZCgpOwotCQl0ZXN0Q2hpbGROb2RlID0gdGVzdENoaWxkTm9kZS5nZXROZXh0U2libGluZygpOwotCi0JCXRlc3RQYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRlc3RDaGlsZE5vZGUpOwotCi0JfQotCi0Jdm9pZCBtYWtlQ2hhbmdlMihJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCkgewotCi0JCS8vIGRlbGV0ZSB0aGUgYXBvc3Ryb3BlIGluIHRlc3Qgc3RyaW5nIC8vIDQsIDQ/Ci0JCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dCh0aGlzLCAxOSwgMSwgbnVsbCk7Ci0JfQotCi0Jdm9pZCBtYWtlQ2hhbmdlMyhJRE9NTW9kZWwgdHJlZSkgewotCi0JCS8vCQotCQkvLyBwaWNrIGEgcGFyZW50IGFuZCBvbmVzIG9mIGl0cyBjaGlsZHJlbiB0byBkZWxldGUKLQkJLy8gKG5vdGU6IHZhbGlkaXR5IG9mIHRoaXMgY29kZSBpcyBoaWdobHkgZGVwZW5kZW50IG9uIGlucHV0IHN0cmluZykKLQkJb3JnLnczYy5kb20uRG9jdW1lbnQgZG9tID0gdHJlZS5nZXREb2N1bWVudCgpOwotCQkvLyBOb2RlTGlzdCBub2RlcyA9IGRvbS5nZXRDaGlsZE5vZGVzKCk7Ci0JCS8vCi0JCU5vZGUgdGVzdENoaWxkTm9kZSA9IGRvbS5nZXRMYXN0Q2hpbGQoKTsKLQotCQlkb20ucmVtb3ZlQ2hpbGQodGVzdENoaWxkTm9kZSk7Ci0KLQl9Ci0KLQkvKioKLQkgKiBuZXdNb2RlbCBtZXRob2QgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBuZXdNb2RlbChOZXdEb2N1bWVudEV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigibmV3TW9kZWw6Iik7Ci0JfQotCi0JLyoqCi0JICogbm9DaGFuZ2UgbWV0aG9kIGNvbW1lbnQuCi0JICovCi0JcHVibGljIHZvaWQgbm9DaGFuZ2UoTm9DaGFuZ2VFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkvLyBsb2cgZm9yIG5vdywgdW5sZXNzIHdlIGZpbmQgcmVhc29uIG5vdCB0bwotCQlMb2dnZXIubG9nKExvZ2dlci5JTkZPLCAiU3RydWN0dXJlZERvY3VtZW50VG9ET01Vbml0VGVzdHM6Om5vQ2hhbmdlIG5lZWRzIHRvIGJlIGltcGxlbWVudGVkIik7Ci0JfQotCi0JLyoqCi0JICogbm9kZXNSZXBsYWNlZCBtZXRob2QgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBub2Rlc1JlcGxhY2VkKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigibm9kZXNSZXBsYWNlZDoiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJcdE5ld0ZsYXROb2RlczoiKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3QgZmxhdE5vZGVMaXN0ID0gc3RydWN0dXJlZERvY3VtZW50RXZlbnQuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpOwotCQlpbnQgbGVuID0gZmxhdE5vZGVMaXN0LmdldExlbmd0aCgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCQlTdHJpbmcgb3V0U3RyaW5nID0gZmxhdE5vZGVMaXN0Lml0ZW0oaSkudG9TdHJpbmcoKTsKLQkJCW91dFN0cmluZyA9IFN0cmluZ1V0aWxzLmVzY2FwZShvdXRTdHJpbmcpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJcdFx0IiArIG91dFN0cmluZyk7Ci0JCX0KLQkJU3lzdGVtLm91dC5wcmludGxuKCJcdE9sZEZsYXROb2RlczoiKTsKLQkJZmxhdE5vZGVMaXN0ID0gc3RydWN0dXJlZERvY3VtZW50RXZlbnQuZ2V0T2xkU3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpOwotCQlsZW4gPSBmbGF0Tm9kZUxpc3QuZ2V0TGVuZ3RoKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJCVN0cmluZyBvdXRTdHJpbmcgPSBmbGF0Tm9kZUxpc3QuaXRlbShpKS50b1N0cmluZygpOwotCQkJb3V0U3RyaW5nID0gU3RyaW5nVXRpbHMuZXNjYXBlKG91dFN0cmluZyk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlx0XHQiICsgb3V0U3RyaW5nKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIHJlZ2lvbkNoYW5nZWQgbWV0aG9kIGNvbW1lbnQuCi0JICovCi0JcHVibGljIHZvaWQgcmVnaW9uQ2hhbmdlZChSZWdpb25DaGFuZ2VkRXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJyZWdpb25DaGFuZ2VkOiIpOwotCX0KLQotCS8qKgotCSAqIHJlZ2lvbnNSZXBsYWNlZCBtZXRob2QgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgdm9pZCByZWdpb25zUmVwbGFjZWQoUmVnaW9uc1JlcGxhY2VkRXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJyZWdpb25zUmVwbGFjZWQ6Iik7Ci0JfQotCi0JLyoqCi0JICogVW5pdCB0ZXN0IC0tIHRlc3RzIGJhc2ljIHBhcnNpbmcgcmVzdWx0cyBvZiBpbnNlcnRpbmcgYSB0ZXN0IHN0cmluZwotCSAqIGludG8gYW4gaW5pdGlhbCBzdHJpbmcuCi0JICovCi0Jdm9pZCB0ZXN0Tm9kZURlbGV0aW9uKCkgewotCQkvLyBTdHJpbmcgaW5pdGlhbFN0cmluZyA9Ci0JCS8vICI8cGFyPjx4PlxudGV4dHhcbjwveD5cbjx5PlxudGV4dHlcbjwveT48L3Bhcj4iOwotCQkvLyBTdHJpbmcgaW5pdGlhbFN0cmluZyA9ICI8cGFyPjx4PnRleHR4PC94Pjx5PnRleHR5PC95PjwvcGFyPiI7Ci0JCS8vIHRlc3QgY2FzZXMgZm9yIHR3byB0ZXh0IG5vZGVzIGxlZnQgdG9nZXRoZXIgKHJlbW92ZSA8Yi8+KToKLQkJLy8gZmlyc3QgY2FzZSB3b3Jrcywgc2Vjb25kIGRvZXNuJ3QKLQkJLy8gU3RyaW5nIGluaXRpYWxTdHJpbmcgPSAiPGE+YTxiIC8+PC9hPiI7IC8vIC0+IDxhPmE8L2E+Ci0JCS8vIFN0cmluZyBpbml0aWFsU3RyaW5nID0gIjxhPmE8YiAvPmI8L2E+IjsgLy8gLT4gPGE+YWI8L2E+Ci0JCS8vIFN0cmluZyBpbml0aWFsU3RyaW5nID0gZ2V0VGVzdFN0cmluZzEoKTsKLQkJU3RyaW5nIGluaXRpYWxTdHJpbmcgPSBnZXRUZXN0U3RyaW5nMigpOwotCi0JCS8vIHByaW50IG91dCB3aGF0IHdlIGFsd2F5cyBjYW4KLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLSIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3QgTm9kZSBEZWxldGlvbiIpOwotCQlTdHJpbmcgb3V0U3RyaW5nID0gU3RyaW5nVXRpbHMuZXNjYXBlKGluaXRpYWxTdHJpbmcpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluaXRpYWwgU3RyaW5nOiAiICsgb3V0U3RyaW5nKTsKLQkJLy8gYWx3YXlzIHN0YXJ0IHdpdGggZnJlc2ggbW9kZWwKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBmID0gbnVsbDsKLQotCQlJTW9kZWxNYW5hZ2VyIG1tID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJdHJ5IHsKLQkJCWYgPSBtbS5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoImR1bW15LnhtbCIsIChJbnB1dFN0cmVhbSkgbnVsbCwgbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGRvIG5vdGhpbmcsIHNpbmNlIGR1bW15Ci0JCX0KLQotCi0JCS8vCi0JCS8vIHdlJ2xsIGxpc3RlbiB0byBzdHJ1Y3R1cmVkRG9jdW1lbnQgZXZlbnRzIHRvIHByaW50IG91dCBkaWFnbm9zdGljcwotCQlmLmFkZERvY3VtZW50Q2hhbmdlZExpc3RlbmVyKHRoaXMpOwotCQkvLwotCi0JCUlET01Nb2RlbCB0cmVlID0gbmV3IERPTU1vZGVsSW1wbCgpOwotCQlmLmFkZERvY3VtZW50Q2hhbmdpbmdMaXN0ZW5lcigoSVN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyKSB0cmVlKTsKLQotCQkvLyBzZXQgdGV4dCB0byBzdHJ1Y3R1cmVkRG9jdW1lbnQgKHdoaWNoIHVwZGF0ZXMgdHJlZSkKLQkJZi5zZXRUZXh0KG51bGwsIGluaXRpYWxTdHJpbmcpOwotCi0JCS8vIGR1bXAgaW5pdGlhbCBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJRGVidWcuZHVtcChmKTsKLQkJLy8gZHVtcCBpbml0aWFsIGRvbQotCQlEZWJ1Z0RvY3VtZW50LmR1bXAodHJlZS5nZXREb2N1bWVudCgpKTsKLQkJLy8KLQkJLy8KLQkJLy8gbWFrZUNoYW5nZTEodHJlZSk7Ci0JCW1ha2VDaGFuZ2UyKGYpOwotCi0JCS8vIGRpc3BsYXkgcmVzdWx0aW5nIHRleHQKLQkJU3lzdGVtLm91dC5wcmludGxuKCJyZXN1bHRTdHJpbmcgKGZyb20gc3RydWN0dXJlZERvY3VtZW50KTogIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihTdHJpbmdVdGlscy5lc2NhcGUoZi5nZXRUZXh0KCkpKTsKLQkJLy8KLQkJLy8KLQkJLy8gZHVtcCBwb3N0IGNoYW5nZSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJRGVidWcuZHVtcChmKTsKLQkJLy8gZHVtcCBwb3N0IGNoYW5nZSBET00KLQkJRGVidWdEb2N1bWVudC5kdW1wKHRyZWUuZ2V0RG9jdW1lbnQoKSk7Ci0KLQkJLy8KLQotCX0KLQotCS8qKgotCSAqIFVuaXQgdGVzdCAtLSB0ZXN0cyBiYXNpYyBwYXJzaW5nIHJlc3VsdHMgb2YgaW5zZXJ0aW5nIGEgdGVzdCBzdHJpbmcKLQkgKiBpbnRvIGFuIGluaXRpYWwgc3RyaW5nLgotCSAqLwotCXZvaWQgdGVzdE5vZGVEZWxldGlvbjMoKSB7Ci0JCVN0cmluZyBpbml0aWFsU3RyaW5nID0gZ2V0VGVzdFN0cmluZzMoKTsKLQotCQkvLyBwcmludCBvdXQgd2hhdCB3ZSBhbHdheXMgY2FuCi0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0iKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IE5vZGUgRGVsZXRpb24iKTsKLQkJU3RyaW5nIG91dFN0cmluZyA9IFN0cmluZ1V0aWxzLmVzY2FwZShpbml0aWFsU3RyaW5nKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJbml0aWFsIFN0cmluZzogIiArIG91dFN0cmluZyk7Ci0JCS8vIGFsd2F5cyBzdGFydCB3aXRoIGZyZXNoIG1vZGVsCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZiA9IG51bGw7Ci0KLQkJSU1vZGVsTWFuYWdlciBtbSA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCXRyeSB7Ci0JCQlmID0gbW0uY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKCJkdW1teS54bWwiLCAoSW5wdXRTdHJlYW0pIG51bGwsIG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBkbyBub3RoaW5nLCBzaW5jZSBkdW1teQotCQl9Ci0JCS8vCi0JCS8vIHdlJ2xsIGxpc3RlbiB0byBzdHJ1Y3R1cmVkRG9jdW1lbnQgZXZlbnRzIHRvIHByaW50IG91dCBkaWFnbm9zdGljcwotCQlmLmFkZERvY3VtZW50Q2hhbmdlZExpc3RlbmVyKHRoaXMpOwotCQkvLwotCi0JCUlET01Nb2RlbCB0cmVlID0gbmV3IERPTU1vZGVsSW1wbCgpOwotCQlmLmFkZERvY3VtZW50Q2hhbmdpbmdMaXN0ZW5lcigoSVN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyKSB0cmVlKTsKLQotCQkvLyBzZXQgdGV4dCB0byBzdHJ1Y3R1cmVkRG9jdW1lbnQgKHdoaWNoIHVwZGF0ZXMgdHJlZSkKLQkJZi5zZXRUZXh0KG51bGwsIGluaXRpYWxTdHJpbmcpOwotCi0JCS8vIGR1bXAgaW5pdGlhbCBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJRGVidWcuZHVtcChmKTsKLQkJLy8gZHVtcCBpbml0aWFsIGRvbQotCQlEZWJ1Z0RvY3VtZW50LmR1bXAodHJlZS5nZXREb2N1bWVudCgpKTsKLQkJLy8KLQkJLy8KLQkJLy8gbWFrZUNoYW5nZTEodHJlZSk7Ci0JCW1ha2VDaGFuZ2UzKHRyZWUpOwotCi0JCS8vIGRpc3BsYXkgcmVzdWx0aW5nIHRleHQKLQkJU3lzdGVtLm91dC5wcmludGxuKCJyZXN1bHRTdHJpbmcgKGZyb20gc3RydWN0dXJlZERvY3VtZW50KTogIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihTdHJpbmdVdGlscy5lc2NhcGUoZi5nZXRUZXh0KCkpKTsKLQkJLy8KLQkJLy8KLQkJLy8gZHVtcCBwb3N0IGNoYW5nZSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJRGVidWcuZHVtcChmKTsKLQkJLy8gZHVtcCBwb3N0IGNoYW5nZSBET00KLQkJRGVidWdEb2N1bWVudC5kdW1wKHRyZWUuZ2V0RG9jdW1lbnQoKSk7Ci0KLQkJLy8KLQotCX0KLQotCS8qKgotCSAqIFVuaXQgdGVzdCAtLSB0ZXN0IGluc2VydCBmb2xsb3dlZCBieSBkZWxldGUgYXQgYmVnaW5uaW5nIG9mIHN0cmluZy4KLQkgKi8KLQl2b2lkIHRlc3ROb2RlRGVsZXRpb240KCkgewotCQlTdHJpbmcgaW5pdGlhbFN0cmluZyA9IGdldFRlc3RTdHJpbmc0KCk7Ci0KLQkJLy8gcHJpbnQgb3V0IHdoYXQgd2UgYWx3YXlzIGNhbgotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBOb2RlIEluc2VydCBhbmQgRGVsZXRlIik7Ci0JCVN0cmluZyBvdXRTdHJpbmcgPSBTdHJpbmdVdGlscy5lc2NhcGUoaW5pdGlhbFN0cmluZyk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSW5pdGlhbCBTdHJpbmc6ICIgKyBvdXRTdHJpbmcpOwotCQkvLyBhbHdheXMgc3RhcnQgd2l0aCBmcmVzaCBtb2RlbAotCQlJU3RydWN0dXJlZERvY3VtZW50IGYgPSBudWxsOwotCi0JCUlNb2RlbE1hbmFnZXIgbW0gPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQl0cnkgewotCQkJZiA9IG1tLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcigiZHVtbXkueG1sIiwgKElucHV0U3RyZWFtKSBudWxsLCBudWxsKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gZG8gbm90aGluZywgc2luY2UgZHVtbXkKLQkJfQotCQkvLwotCQkvLyB3ZSdsbCBsaXN0ZW4gdG8gc3RydWN0dXJlZERvY3VtZW50IGV2ZW50cyB0byBwcmludCBvdXQgZGlhZ25vc3RpY3MKLQkJZi5hZGREb2N1bWVudENoYW5nZWRMaXN0ZW5lcih0aGlzKTsKLQkJLy8KLQotCQlJRE9NTW9kZWwgdHJlZSA9IG5ldyBET01Nb2RlbEltcGwoKTsKLQkJZi5hZGREb2N1bWVudENoYW5naW5nTGlzdGVuZXIoKElTdHJ1Y3R1cmVkRG9jdW1lbnRMaXN0ZW5lcikgdHJlZSk7Ci0KLQkJLy8gc2V0IHRleHQgdG8gc3RydWN0dXJlZERvY3VtZW50ICh3aGljaCB1cGRhdGVzIHRyZWUpCi0JCWYuc2V0VGV4dChudWxsLCBpbml0aWFsU3RyaW5nKTsKLQotCQkvLyBkdW1wIGluaXRpYWwgc3RydWN0dXJlZERvY3VtZW50Ci0JCURlYnVnLmR1bXAoZik7Ci0JCS8vIGR1bXAgaW5pdGlhbCBkb20KLQkJRGVidWdEb2N1bWVudC5kdW1wKHRyZWUuZ2V0RG9jdW1lbnQoKSk7Ci0JCS8vCi0JCS8vCi0JCWYucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgImEiKTsKLQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiA9PT09IFJlc3VsdHMgYWZ0ZXIgaW5zZXJ0Iik7Ci0JCS8vIGRpc3BsYXkgcmVzdWx0aW5nIHRleHQKLQkJU3lzdGVtLm91dC5wcmludGxuKCJyZXN1bHRTdHJpbmcgKGZyb20gc3RydWN0dXJlZERvY3VtZW50KTogIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihTdHJpbmdVdGlscy5lc2NhcGUoZi5nZXRUZXh0KCkpKTsKLQkJLy8KLQkJLy8KLQkJLy8gZHVtcCBwb3N0IGNoYW5nZSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJRGVidWcuZHVtcChmKTsKLQkJLy8gZHVtcCBwb3N0IGNoYW5nZSBET00KLQkJRGVidWdEb2N1bWVudC5kdW1wKHRyZWUuZ2V0RG9jdW1lbnQoKSk7Ci0KLQkJLy8KLQotCQlmLnJlcGxhY2VUZXh0KG51bGwsIDAsIDEsICIiKTsKLQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiA9PT09IFJlc3VsdHMgYWZ0ZXIgZGVsZXRlIik7Ci0JCS8vIGRpc3BsYXkgcmVzdWx0aW5nIHRleHQKLQkJU3lzdGVtLm91dC5wcmludGxuKCJyZXN1bHRTdHJpbmcgKGZyb20gc3RydWN0dXJlZERvY3VtZW50KTogIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihTdHJpbmdVdGlscy5lc2NhcGUoZi5nZXRUZXh0KCkpKTsKLQkJLy8KLQkJLy8KLQkJLy8gZHVtcCBwb3N0IGNoYW5nZSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJRGVidWcuZHVtcChmKTsKLQkJLy8gZHVtcCBwb3N0IGNoYW5nZSBET00KLQkJRGVidWdEb2N1bWVudC5kdW1wKHRyZWUuZ2V0RG9jdW1lbnQoKSk7Ci0KLQkJLy8KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1N0eWxlZFRleHRDb250ZW50U3BlYy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TdHlsZWRUZXh0Q29udGVudFNwZWMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FhNmUwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1N0eWxlZFRleHRDb250ZW50U3BlYy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5vdGhlcjsKLQotLyoqCi0gKiBVc2UgdGhpcyB0ZXN0IGNsYXNzIHRvIHZhbGlkYXRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHlsZWRUZXh0Q29udGVudAotICogaW50ZXJmYWNlLiBUbyBwZXJmb3JtIHRoZSB2YWxpZGF0aW9uLCBjb3B5IHRoaXMgY2xhc3MgdG8gdGhlIHBhY2thZ2Ugd2hlcmUKLSAqIHlvdXIgU3R5bGVkVGV4dENvbnRlbnQgaW1wbGVtZW50YXRpb24gbGl2ZXMuIFRoZW4gc3BlY2lmeSB0aGUgZnVsbHkKLSAqIHF1YWxpZmllZCBuYW1lIG9mIHlvdXIgU3R5bGVkVGV4dENvbnRlbnQgY2xhc3MgYXMgYW4gYXJndW1lbnQgdG8gdGhlIG1haW4KLSAqIG1ldGhvZCBvZiB0aGlzIGNsYXNzLgotICogCi0gKiBOT1RFOiBUaGlzIHRlc3QgY2xhc3MgYXNzdW1lcyB0aGF0IHlvdXIgU3R5bGVkVGV4dENvbnRlbnQgaW1wbGVtZW50YXRpb24KLSAqIGhhbmRsZXMgdGhlIGZvbGxvd2luZyBkZWxpbWl0ZXJzOgotICogIC9yIC9uIC9yL24KLSAqICAKLSAqLwotLy8gVGhpcyBjbGFzcyBjb21lcyBjb3VydGVzeSBvZiBMeW5uZSBLdWVzLiBPdXIgU3R5bGVkVGV4dENvbnRlbnQgZmFpbHMgdGVzdAotLy8gY2FzZXMgNnggb2YKLS8vICJTcGVjaWFsIGNhc2VzIiBzaW5jZSB3ZSAobm9yIEpGYWNlKSBoYW5kbGUgaW5zZXJ0aW9uIGJldHdlZW4gQ1IgYW5kIExGLiBBCi0vLyBtaW5vciBtb2RpZmljYXRpb24KLS8vIHdhcyBuZWVkZWQgdG8gZ2V0Q29udGVudEluc3RhbmNlIGZvciBvdXQgdmVyc2lvbiBvZiBTdHlsZVRleHRDb250ZW50Ci0vLyAoU3RydWN0dXJlZERvY3VtZW50VG9UZXh0QWRhcHRlcikuCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0eWxlZFRleHRDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uVGV4dENoYW5nZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uVGV4dENoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlRleHRDaGFuZ2luZ0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVzc2FnZUJveDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZERvY3VtZW50VG9UZXh0QWRhcHRlcjsKLQotcHVibGljIGNsYXNzIFN0eWxlZFRleHRDb250ZW50U3BlYyBpbXBsZW1lbnRzIFRleHRDaGFuZ2VMaXN0ZW5lciB7Ci0Jc3RhdGljIFN0cmluZyBjb250ZW50Q2xhc3NOYW1lOwotCXN0YXRpYyBpbnQgZmFpbENvdW50ID0gMDsKLQlzdGF0aWMgaW50IGVycm9yQ291bnQgPSAwOwotCUNsYXNzIGNvbnRlbnRDbGFzcyA9IG51bGw7Ci0JU3R5bGVkVGV4dENvbnRlbnQgY29udGVudEluc3RhbmNlID0gbnVsbDsKLQlpbnQgdmVyaWZ5ID0gMDsKLQlNZXRob2QgY3VycmVudE1ldGhvZCA9IG51bGw7Ci0JYm9vbGVhbiBmYWlsZWQgPSBmYWxzZTsKLQlTdHlsZWRUZXh0IHdpZGdldCA9IG51bGw7Ci0JU2hlbGwgc2hlbGwgPSBudWxsOwotCi0JcHVibGljIFN0eWxlZFRleHRDb250ZW50U3BlYygpIHsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhc3NlcnRXaXRoTWVzc2FnZShTdHJpbmcgbWVzc2FnZSwgYm9vbGVhbiBjb25kaXRpb24pIHsKLQkJU3lzdGVtLm91dC5wcmludCgiXHQiICsgY3VycmVudE1ldGhvZC5nZXROYW1lKCkgKyAiICIgKyBtZXNzYWdlKTsKLQkJaWYgKCFjb25kaXRpb24pCi0JCQlmYWlsKG1lc3NhZ2UpOwotCQllbHNlCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBwYXNzZWQiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBmYWlsKFN0cmluZyBtZXNzYWdlKSB7Ci0JCWZhaWxlZCA9IHRydWU7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEZBSUxFRCIpOwotCQlmYWlsQ291bnQrKzsKLQl9Ci0KLQlwdWJsaWMgU3R5bGVkVGV4dENvbnRlbnQgZ2V0Q29udGVudEluc3RhbmNlKCkgewotCQljb250ZW50SW5zdGFuY2Uuc2V0VGV4dCgiIik7Ci0JCXdpZGdldC5zZXRDb250ZW50KGNvbnRlbnRJbnN0YW5jZSk7Ci0JCS8vIGR3LiBIYWQgdG8gYWRkIGZvciBvdXIgc3BlY2lhbCB2ZXJzaW9uIG9mIFN0eWxlZFRleHRDb250ZW50Ci0JCS8vIE5lZWRzIHRvIGJlIHJlbW92ZWQgZm9yIHRlc3RpbmcgamZhY2UncyBEb2N1bWVudEFkYXB0ZXIKLQkJKChTdHJ1Y3R1cmVkRG9jdW1lbnRUb1RleHRBZGFwdGVyKSBjb250ZW50SW5zdGFuY2UpLnNldFdpZGdldCh3aWRnZXQpOwotCQlyZXR1cm4gY29udGVudEluc3RhbmNlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFRlc3RUZXh0KCkgewotCQlyZXR1cm4gIlRoaXMgaXMgdGhlIGZpcnN0IGxpbmUuXHJcbiIgKyAiVGhpcyBpcyB0aGUgc2Vjb25kIGxpbmUuXHJcbiIgKyAiVGhpcyBpcyB0aGUgdGhpcmQgbGluZS5cclxuIiArICJUaGlzIGlzIHRoZSBmb3VydGggbGluZS5cclxuIiArICJUaGlzIGlzIHRoZSBmaWZ0aCBsaW5lLlxyXG4iICsgIlxyXG4iICsgIlRoaXMgaXMgdGhlIGZpcnN0IGxpbmUgYWdhaW4uXHJcbiIgKyAiVGhpcyBpcyB0aGUgc2Vjb25kIGxpbmUgYWdhaW4uXHJcbiIgKyAiVGhpcyBpcyB0aGUgdGhpcmQgbGluZSBhZ2Fpbi5cclxuIiArICJUaGlzIGlzIHRoZSBmb3VydGggbGluZSBhZ2Fpbi5cclxuIiArICJUaGlzIGlzIHRoZSBmaWZ0aCBsaW5lIGFnYWluLlxyXG4iICsgIlxyXG4iICsgIlRoaXMgaXMgdGhlIGZpcnN0IGxpbmUgb25jZSBhZ2Fpbi5cclxuIiArICJUaGlzIGlzIHRoZSBzZWNvbmQgbGluZSBvbmNlIGFnYWluLlxyXG4iICsgIlRoaXMgaXMgdGhlIHRoaXJkIGxpbmUgb25jZSBhZ2Fpbi5cclxuIiArICJUaGlzIGlzIHRoZSBmb3VydGggbGluZSBvbmNlIGFnYWluLlxyXG4iICsgIlRoaXMgaXMgdGhlIGZpZnRoIGxpbmUgb25jZSBhZ2Fpbi4iOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkJU3R5bGVkVGV4dENvbnRlbnRTcGVjIHNwZWMgPSBuZXcgU3R5bGVkVGV4dENvbnRlbnRTcGVjKCk7Ci0JCWlmIChhcmdzLmxlbmd0aCA+IDApIHsKLQkJCWNvbnRlbnRDbGFzc05hbWUgPSBhcmdzWzBdOwotCQkJLy9TdHJpbmcgcGF0aCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5saWJyYXJ5LnBhdGgiKTsKLQkJCS8vU3lzdGVtLm91dC5wcmludGxuKCJKYXZhIExpYnJhcnkgUGF0aDogIiArIHBhdGgpOwotCQl9Ci0JCWVsc2UgewotCQkJTWVzc2FnZUJveCBib3ggPSBuZXcgTWVzc2FnZUJveChnZXREaXNwbGF5KCkuZ2V0QWN0aXZlU2hlbGwoKSwgU1dULklDT05fRVJST1IpOwotCQkJYm94LnNldE1lc3NhZ2UoIkNvbnRlbnQgY2xhc3MgbXVzdCBiZSBzcGVjaWZpZWQgYXMgYW4gZXhlY3V0aW9uIGFyZ3VtZW50LiIpOyAvLyROT04tTkxTLTEkCi0JCQlib3gub3BlbigpOwotCQkJcmV0dXJuOwotCQl9Ci0JCXNwZWMucnVuKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oZmFpbENvdW50ICsgIiBURVNUIEZBSUxVUkVTLiIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oZXJyb3JDb3VudCArICIgVU5FWFBFQ1RFRCBFUlJPUlMuIik7Ci0JfQotCi0Jc3RhdGljIHByaXZhdGUgRGlzcGxheSBnZXREaXNwbGF5KCkgewotCQlyZXR1cm4gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCk7Ci0JfQotCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAoY29udGVudENsYXNzTmFtZS5lcXVhbHMoIiIpKSB7Ci0JCQlNZXNzYWdlQm94IGJveCA9IG5ldyBNZXNzYWdlQm94KGdldERpc3BsYXkoKS5nZXRBY3RpdmVTaGVsbCgpLCBTV1QuSUNPTl9FUlJPUik7Ci0JCQlib3guc2V0TWVzc2FnZSgiQ29udGVudCBjbGFzcyBtdXN0IGJlIHNwZWNpZmllZCBhcyBhbiBleGVjdXRpb24gYXJndW1lbnQuIik7IC8vJE5PTi1OTFMtMSQKLQkJCWJveC5vcGVuKCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKGNvbnRlbnRDbGFzcyA9PSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCWNvbnRlbnRDbGFzcyA9IENsYXNzLmZvck5hbWUoY29udGVudENsYXNzTmFtZSk7Ci0JCQl9Ci0JCQljYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQkJTWVzc2FnZUJveCBib3ggPSBuZXcgTWVzc2FnZUJveChnZXREaXNwbGF5KCkuZ2V0QWN0aXZlU2hlbGwoKSwgU1dULklDT05fRVJST1IpOwotCQkJCWJveC5zZXRNZXNzYWdlKCJDb250ZW50IGNsYXNzOlxuIiArIGNvbnRlbnRDbGFzc05hbWUgKyAiXG5ub3QgZm91bmQiKTsgLy8kTk9OLU5MUy0xJAotCQkJCWJveC5vcGVuKCk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCXRyeSB7Ci0JCQljb250ZW50SW5zdGFuY2UgPSAoU3R5bGVkVGV4dENvbnRlbnQpIGNvbnRlbnRDbGFzcy5uZXdJbnN0YW5jZSgpOwotCQl9Ci0JCWNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCU1lc3NhZ2VCb3ggYm94ID0gbmV3IE1lc3NhZ2VCb3goZ2V0RGlzcGxheSgpLmdldEFjdGl2ZVNoZWxsKCksIFNXVC5JQ09OX0VSUk9SKTsKLQkJCWJveC5zZXRNZXNzYWdlKCJVbmFibGUgdG8gYWNjZXNzIGNvbnRlbnQgY2xhc3M6XG4iICsgY29udGVudENsYXNzTmFtZSk7IC8vJE5PTi1OTFMtMSQKLQkJCWJveC5vcGVuKCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJY2F0Y2ggKEluc3RhbnRpYXRpb25FeGNlcHRpb24gZSkgewotCQkJTWVzc2FnZUJveCBib3ggPSBuZXcgTWVzc2FnZUJveChnZXREaXNwbGF5KCkuZ2V0QWN0aXZlU2hlbGwoKSwgU1dULklDT05fRVJST1IpOwotCQkJYm94LnNldE1lc3NhZ2UoIlVuYWJsZSB0byBpbnN0YW50aWF0ZSBjb250ZW50IGNsYXNzOlxuIiArIGNvbnRlbnRDbGFzc05hbWUpOyAvLyROT04tTkxTLTEkCi0JCQlib3gub3BlbigpOwotCQkJcmV0dXJuOwotCQl9Ci0JCUNsYXNzIGNsYXp6OwotCQljbGF6eiA9IHRoaXMuZ2V0Q2xhc3MoKTsKLQkJTWV0aG9kW10gbWV0aG9kcyA9IGNsYXp6LmdldERlY2xhcmVkTWV0aG9kcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpKyspIHsKLQkJCXNldFVwKCk7Ci0JCQljdXJyZW50TWV0aG9kID0gbWV0aG9kc1tpXTsKLQkJCWZhaWxlZCA9IGZhbHNlOwotCQkJdHJ5IHsKLQkJCQlpZiAoY3VycmVudE1ldGhvZC5nZXROYW1lKCkuc3RhcnRzV2l0aCgidGVzdF8iKSkgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKGN1cnJlbnRNZXRob2QuZ2V0TmFtZSgpICsgIi4uLiIpOwotCQkJCQljdXJyZW50TWV0aG9kLmludm9rZSh0aGlzLCBuZXcgT2JqZWN0WzBdKTsKLQkJCQkJaWYgKCFmYWlsZWQpIHsKLQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiUEFTU0VELiIpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJGQUlMRUQiKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGV4KSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJcdCIgKyBjdXJyZW50TWV0aG9kLmdldE5hbWUoKSArICIgRVJST1IgPT0+ICIgKyBleC5nZXRUYXJnZXRFeGNlcHRpb24oKS50b1N0cmluZygpKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUxFRCIpOwotCQkJCWVycm9yQ291bnQrKzsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlx0IiArIGN1cnJlbnRNZXRob2QuZ2V0TmFtZSgpICsgIiBFUlJPUiA9PT4gIiArIGV4LnRvU3RyaW5nKCkpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRkFJTEVEIik7Ci0JCQkJZXJyb3JDb3VudCsrOwotCQkJfQotCQkJaWYgKHZlcmlmeSAhPSAwKSB7Ci0JCQkJdmVyaWZ5ID0gMDsKLQkJCQljb250ZW50SW5zdGFuY2UucmVtb3ZlVGV4dENoYW5nZUxpc3RlbmVyKHRoaXMpOwotCQkJfQotCQkJdGVhckRvd24oKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgewotCQkvLyBjcmVhdGUgc2hlbGwKLQkJc2hlbGwgPSBuZXcgU2hlbGwoKTsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlsYXlvdXQubnVtQ29sdW1ucyA9IDE7Ci0JCXNoZWxsLnNldFNpemUoNTAwLCAzMDApOwotCQlzaGVsbC5zZXRMYXlvdXQobGF5b3V0KTsKLQkJLy8gY3JlYXRlIHdpZGdldAotCQl3aWRnZXQgPSBuZXcgU3R5bGVkVGV4dChzaGVsbCwgU1dULkJPUkRFUiB8IFNXVC5NVUxUSSB8IFNXVC5WX1NDUk9MTCB8IFNXVC5IX1NDUk9MTCk7Ci0JCUdyaWREYXRhIHNwZWMgPSBuZXcgR3JpZERhdGEoKTsKLQkJc3BlYy5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLQkJc3BlYy5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLQkJc3BlYy52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0JCXNwZWMuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOwotCQl3aWRnZXQuc2V0TGF5b3V0RGF0YShzcGVjKTsKLQkJc2hlbGwub3BlbigpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgewotCQlpZiAoc2hlbGwgIT0gbnVsbCAmJiAhc2hlbGwuaXNEaXNwb3NlZCgpKQotCQkJc2hlbGwuZGlzcG9zZSgpOwotCQlzaGVsbCA9IG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF9EZWxldGUoKSB7Ci0JCVN0eWxlZFRleHRDb250ZW50IGNvbnRlbnQgPSBnZXRDb250ZW50SW5zdGFuY2UoKTsKLQkJU3RyaW5nIG5ld1RleHQ7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XHIiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDYsIDIsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG5pYSB0ZXN0XHIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYzoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJpYSB0ZXN0IikpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg1LCA5LCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYToiLCBuZXdUZXh0LmVxdWFscygiVGhpc1xuXHIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJUaGlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XG5saW5lIDNcbmxpbmUgNCIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMjEsIDcsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG5pcyBhIHRlc3RcbmxpbmUgMyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2Q6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiaXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoImxpbmUgMyIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcbmxpbmUgM1xubGluZSA0Iik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCA1LCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YToiLCBuZXdUZXh0LmVxdWFscygiaXMgYSB0ZXN0XG5saW5lIDNcbmxpbmUgNCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImlzIGEgdGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJsaW5lIDMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygibGluZSA0IikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMTYsIDcsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRmOiIsIG5ld1RleHQuZXF1YWxzKCJpcyBhIHRlc3RcbmxpbmUgMyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJpcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGg6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygibGluZSAzIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoOSwgNywgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGk6IiwgbmV3VGV4dC5lcXVhbHMoImlzIGEgdGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ajoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJpcyBhIHRlc3QiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgxLCA4LCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0azoiLCBuZXdUZXh0LmVxdWFscygiaSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0bDoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJpIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMSwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NG06IiwgbmV3VGV4dC5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0bjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XHIiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDUsIDksICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG5cciIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJMMVxyXG5MMlxyXG5MM1xyXG5MNFxyXG4iKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDQsIDgsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZhOiIsIG5ld1RleHQuZXF1YWxzKCJMMVxyXG5MNFxyXG4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJMMSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJMNCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiXG5MMVxyXG5MMiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMSwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2E6IiwgbmV3VGV4dC5lcXVhbHMoIkwxXHJcbkwyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2M6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiTDEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2Q6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTDIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiXG5MMVxyXG5MMlxyXG4iKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDcsIDIsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhhOiIsIG5ld1RleHQuZXF1YWxzKCJcbkwxXHJcbkwyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIkwxIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIkwyIikpOwotCQljb250ZW50LnNldFRleHQoIlxuTGluZSAxXG5MaW5lIDJcbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgNywgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWE6IiwgbmV3VGV4dC5lcXVhbHMoIlxuTGluZSAyXG4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTGluZSAyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjllOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJMaW5lIDFcbkxpbmUgMlxuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg2LCA4LCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGE6IiwgbmV3VGV4dC5lcXVhbHMoIkxpbmUgMSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiTGluZSAxIikpOwotCQljb250ZW50LnNldFRleHQoIkxpbmUgb25lIGlzIHNob3J0XHJcbkxpbmUgMiBpcyBhIGxvbmdlciBsaW5lXHJcbkxpbmUgM1xuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgxMiwgMTcsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjExYToiLCBuZXdUZXh0LmVxdWFscygiTGluZSBvbmUgaXMgYSBsb25nZXIgbGluZVxyXG5MaW5lIDNcbiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMWI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiTGluZSBvbmUgaXMgYSBsb25nZXIgbGluZSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTGluZSAzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjExZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCIiKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF9FbXB0eSgpIHsKLQkJU3R5bGVkVGV4dENvbnRlbnQgY29udGVudCA9IGdldENvbnRlbnRJbnN0YW5jZSgpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFhOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoInRlc3QiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDQsICIiKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYToiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJiOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X0luc2VydCgpIHsKLQkJU3R5bGVkVGV4dENvbnRlbnQgY29udGVudCA9IGdldENvbnRlbnRJbnN0YW5jZSgpOwotCQlTdHJpbmcgbmV3VGV4dDsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMCwgInRlc3RcbiAiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFhOiIsIG5ld1RleHQuZXF1YWxzKCJ0ZXN0XG4gVGhpc1xuaXMgYSB0ZXN0XHIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA0KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJ0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiBUaGlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoImlzIGEgdGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZjoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XHIiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDUsIDAsICIqKiogIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYToiLCBuZXdUZXh0LmVxdWFscygiVGhpc1xuKioqIGlzIGEgdGVzdFxyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIqKiogaXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJMaW5lIDFcclxuTGluZSAyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiXHIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNhOiIsIG5ld1RleHQuZXF1YWxzKCJcckxpbmUgMVxyXG5MaW5lIDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2I6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2Q6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTGluZSAxIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIkxpbmUgMiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDksIDAsICJcciIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2Y6IiwgbmV3VGV4dC5lcXVhbHMoIlxyTGluZSAxXHJcblxyTGluZSAyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNnOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2g6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNpOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIkxpbmUgMSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozajoiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2s6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiTGluZSAyIikpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiXG4iKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRhOiIsIG5ld1RleHQuZXF1YWxzKCJcblRoaXNcbmlzIGEgdGVzdFxyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiaXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRmOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNywgMCwgIlxyXG5uZXdMaW5lIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YToiLCBuZXdUZXh0LmVxdWFscygiVGhpc1xuaXNcclxubmV3TGluZSBhIHRlc3RcciIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDQpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygibmV3TGluZSBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWY6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoIiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMCwgIlRoaXNcbmlzXHJcbm5ld0xpbmUgYSB0ZXN0XHIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG5pc1xyXG5uZXdMaW5lIGEgdGVzdFxyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJuZXdMaW5lIGEgdGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZjoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCIiKSk7Ci0JCS8vIGluc2VydCBhdCBlbmQKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg0LCAwLCAiXG4gIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3YToiLCBuZXdUZXh0LmVxdWFscygiVGhpc1xuICIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3YjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2Q6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiICIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG4iKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDUsIDAsICJcbiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2U6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXNcblxuIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdmOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2c6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3aDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2k6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiIikpOwotCQkvLyBpbnNlcnQgYXQgYmVnaW5uaW5nCi0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpcyIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMCwgIlxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4YToiLCBuZXdUZXh0LmVxdWFscygiXG5UaGlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCS8vIGluc2VydCB0ZXh0Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XHIiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDUsIDAsICIqKiogIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5YToiLCBuZXdUZXh0LmVxdWFscygiVGhpc1xuKioqIGlzIGEgdGVzdFxyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjliOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIqKiogaXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjllOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG4iKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDUsIDAsICJsaW5lIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGE6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXNcbmxpbmUiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTBiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTBjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTBkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoImxpbmUiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTBlOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDgpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEwZjoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg5KSA9PSAxKTsKLQkJLy8gaW5zZXJ0IGF0IGJlZ2lubmluZwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMCwgImxpbmVcbiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTFhOiIsIG5ld1RleHQuZXF1YWxzKCJsaW5lXG5UaGlzXG4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTFiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTFjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImxpbmUiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTFkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTFlOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDUpID09IDEpOwotCQljb250ZW50LnNldFRleHQoIkxpbmUgMVxyXG5MaW5lIDJcclxuTGluZSAzIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiXHIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEyYToiLCBuZXdUZXh0LmVxdWFscygiXHJMaW5lIDFcclxuTGluZSAyXHJcbkxpbmUgMyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMmI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA0KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMmM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEyZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJMaW5lIDEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTJlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIkxpbmUgMiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMmY6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiTGluZSAzIikpOwotCQljb250ZW50LnNldFRleHQoIkxpbmUgMVxuTGluZSAyXG5MaW5lIDMiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDcsIDAsICJMaW5lMWFcbkxpbmUxYlxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxM2E6IiwgbmV3VGV4dC5lcXVhbHMoIkxpbmUgMVxuTGluZTFhXG5MaW5lMWJcbkxpbmUgMlxuTGluZSAzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEzYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDUpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEzYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJMaW5lIDEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTNkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIkxpbmUxYSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxM2U6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiTGluZTFiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEzZjoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCJMaW5lIDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTNnOiIsIGNvbnRlbnQuZ2V0TGluZSg0KS5lcXVhbHMoIkxpbmUgMyIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJMaW5lIDFcbkxpbmUgMlxuTGluZSAzIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgxMSwgMCwgImwxYSIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTRhOiIsIG5ld1RleHQuZXF1YWxzKCJMaW5lIDFcbkxpbmVsMWEgMlxuTGluZSAzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE0YjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE0YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJMaW5lIDEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTRkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIkxpbmVsMWEgMiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNGU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiTGluZSAzIikpOwotCQljb250ZW50LnNldFRleHQoIkxpbmUgMVxuTGluZSAyIGlzIGEgdmVyeSBsb25nIGxpbmUgdGhhdCBzcGFucyBtYW55IHdvcmRzXG5MaW5lIDMiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDE5LCAwLCAidmVyeSwgdmVyeSwgIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNWE6IiwgbmV3VGV4dC5lcXVhbHMoIkxpbmUgMVxuTGluZSAyIGlzIGEgdmVyeSwgdmVyeSwgdmVyeSBsb25nIGxpbmUgdGhhdCBzcGFucyBtYW55IHdvcmRzXG5MaW5lIDMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTViOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTVjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIkxpbmUgMSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTGluZSAyIGlzIGEgdmVyeSwgdmVyeSwgdmVyeSBsb25nIGxpbmUgdGhhdCBzcGFucyBtYW55IHdvcmRzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE1ZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJMaW5lIDMiKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF9MaW5lX0NvbnZlcnNpb24oKSB7Ci0JCVN0eWxlZFRleHRDb250ZW50IGNvbnRlbnQgPSBnZXRDb250ZW50SW5zdGFuY2UoKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RccnJlcGVhdFxuZW5kXHIiKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYToiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDUpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFiOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWM6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiaXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFlOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDQpID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFmOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDEpID09IDUpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFnOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoInJlcGVhdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxaDoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgyKSA9PSAxNSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWk6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiZW5kIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFqOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDMpID09IDIyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxazoiLCBjb250ZW50LmdldExpbmUoNCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWw6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoNCkgPT0gMjYpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcclxuaXMgYSB0ZXN0Iik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmE6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYjoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJpcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmM6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmQ6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNSkgPT0gMCk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xyXG5pcyBhIHRlc3RcciIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNhOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2I6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiaXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNjOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDE1KSA9PSAxKTsKLQkJY29udGVudC5zZXRUZXh0KCJcclxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGE6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGM6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRkOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRlOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDEpID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRmOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDIpID09IDEpOwotCQljb250ZW50LnNldFRleHQoIlxyXG5cblxyXHJcbiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVjOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZToiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgxKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZjoiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWc6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMikgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWg6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVpOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDMpID09IDQpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVqOiIsIGNvbnRlbnQuZ2V0TGluZSg0KS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1azoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSg0KSA9PSA2KTsKLQkJY29udGVudC5zZXRUZXh0KCJ0ZXN0XHJccnRlc3QyXHJcciIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZhOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygidGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YzoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmU6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMSkgPT0gNSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmY6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygidGVzdDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6Nmc6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMikgPT0gNik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6Nmg6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZpOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDMpID09IDEyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ajoiLCBjb250ZW50LmdldExpbmUoNCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6Nms6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoNCkgPT0gMTMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfTGluZV9Ub19PZmZzZXQoKSB7Ci0JCVN0eWxlZFRleHRDb250ZW50IGNvbnRlbnQgPSBnZXRDb250ZW50SW5zdGFuY2UoKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RccnJlcGVhdFxuZW5kXHIiKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYToiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYjoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgxKSA9PSA1KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYzoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgyKSA9PSAxNSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWQ6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMykgPT0gMjIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFlOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDQpID09IDI2KTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXHJcbmlzIGEgdGVzdCIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJhOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJiOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDEpID09IDYpOwotCQljb250ZW50LnNldFRleHQoIlxyXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYToiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYjoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgxKSA9PSAyKTsKLQkJY29udGVudC5zZXRUZXh0KCJcclxuXG5cclxyXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YToiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YjoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgxKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YzoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgyKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZDoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgzKSA9PSA0KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZToiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSg0KSA9PSA2KTsKLQkJY29udGVudC5zZXRUZXh0KCJcclxudGVzdFxyXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YToiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YjoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgxKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YzoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgyKSA9PSA4KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X09mZnNldF9Ub19MaW5lKCkgewotCQlTdHlsZWRUZXh0Q29udGVudCBjb250ZW50ID0gZ2V0Q29udGVudEluc3RhbmNlKCk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XHJyZXBlYXRcbmVuZFxyIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWE6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWI6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMykgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWM6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWQ6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMjUpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFlOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDI2KSA9PSA0KTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXHJcbmlzIGEgdGVzdCIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJhOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDUpID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJiOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDYpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJjOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDEwKSA9PSAxKTsKLQkJY29udGVudC5zZXRUZXh0KCJcclxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2E6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2I6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMSkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2M6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMikgPT0gMSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiXHJcblxuXHJcclxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGE6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGI6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMSkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGM6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMikgPT0gMSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGQ6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMykgPT0gMik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGU6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGY6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNSkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGc6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNikgPT0gNCk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiXHJcblxyXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YToiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YjoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgxKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YzoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgyKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZDoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgzKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZToiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg0KSA9PSAyKTsKLQkJY29udGVudC5zZXRUZXh0KCJcclxyXHJcblxyXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YToiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YjoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgxKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YzoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgyKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZDoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg0KSA9PSAzKTsKLQkJY29udGVudC5zZXRUZXh0KCIiKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3YToiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgwKSA9PSAwKTsKLQkJY29udGVudCA9IGdldENvbnRlbnRJbnN0YW5jZSgpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhhOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDApID09IDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfUmVwbGFjZSgpIHsKLQkJU3R5bGVkVGV4dENvbnRlbnQgY29udGVudCA9IGdldENvbnRlbnRJbnN0YW5jZSgpOwotCQlTdHJpbmcgbmV3VGV4dDsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgNCwgImEiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG5hIHRlc3RcciIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgMiwgIndhcyIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmE6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXNcbndhcyBhIHRlc3RcciIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygid2FzIGEgdGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpcyBpcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgMiwgIndhcyIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2E6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXMgd2FzIGEgdGVzdFxyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2M6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyB3YXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNkOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDE1KSA9PSAwKTsKLQkJY29udGVudC5zZXRUZXh0KCJMaW5lIDFcbkxpbmUgMlxuTGluZSAzIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCA3LCAiTGFcbkxiXG4iKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRhOiIsIG5ld1RleHQuZXF1YWxzKCJMYVxuTGJcbkxpbmUgMlxuTGluZSAzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRiOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIkxhIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRjOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIkxiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRkOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIkxpbmUgMiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZToiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCJMaW5lIDMiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dChnZXRUZXN0VGV4dCgpKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlpbnQgc3RhcnQgPSBjb250ZW50LmdldE9mZnNldEF0TGluZSg2KTsKLQkJaW50IGVuZCA9IGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDExKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKHN0YXJ0LCBlbmQgLSBzdGFydCwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAxMik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgY29udGVudC5nZXRMaW5lKDUpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIGNvbnRlbnQuZ2V0TGluZSg2KS5lcXVhbHMoIiIpKTsKLQkJc3RhcnQgPSBjb250ZW50LmdldE9mZnNldEF0TGluZSg3KTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKHN0YXJ0LCBjb250ZW50LmdldENoYXJDb3VudCgpIC0gc3RhcnQsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gOCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgY29udGVudC5nZXRMaW5lKDUpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIGNvbnRlbnQuZ2V0TGluZSg2KS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YToiLCBjb250ZW50LmdldExpbmUoNykuZXF1YWxzKCIiKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF9TcGVjaWFsX0Nhc2VzKCkgewotCQlTdHJpbmcgbmV3VGV4dDsKLQkJU3R5bGVkVGV4dENvbnRlbnQgY29udGVudCA9IGdldENvbnRlbnRJbnN0YW5jZSgpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjBhOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MGI6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMCkgPT0gMCk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMCwgIlxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWE6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMSwgMCwgIlxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMiwgMCwgIlxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMywgMCwgIlxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWQ6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNCwgMCwgIlxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWU6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgMCwgIlxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWY6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNiwgMCwgIlxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWc6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNywgMCwgIlxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWg6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoIlRoaXMgaXMgdGhlIGlucHV0L291dHB1dCB0ZXh0IGNvbXBvbmVudC4iKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDAsICJcbiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmE6IiwgbmV3VGV4dC5lcXVhbHMoIlxuVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmM6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDEsIDAsICJcbiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmQ6IiwgbmV3VGV4dC5lcXVhbHMoIlxuXG5UaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJlOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyZjoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6Mmc6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDIsIDAsICJcbiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2E6IiwgbmV3VGV4dC5lcXVhbHMoIlxuXG5cblRoaXMgaXMgdGhlIGlucHV0L291dHB1dCB0ZXh0IGNvbXBvbmVudC4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2I6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNjOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozZDoiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2U6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDMsIDAsICJcbiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2Y6IiwgbmV3VGV4dC5lcXVhbHMoIlxuXG5cblxuVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozZzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2g6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNpOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozajoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2s6IiwgY29udGVudC5nZXRMaW5lKDQpLmVxdWFscygiVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDMsIDEsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRhOiIsIG5ld1RleHQuZXF1YWxzKCJcblxuXG5UaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRiOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YzoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGQ6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRlOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIlRoaXMgaXMgdGhlIGlucHV0L291dHB1dCB0ZXh0IGNvbXBvbmVudC4iKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgyLCAxLCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZjoiLCBuZXdUZXh0LmVxdWFscygiXG5cblRoaXMgaXMgdGhlIGlucHV0L291dHB1dCB0ZXh0IGNvbXBvbmVudC4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGc6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRoOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0aToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJUaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMiwgMCwgImEiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIG5ld1RleHQuZXF1YWxzKCJcblxuYVRoaXMgaXMgdGhlIGlucHV0L291dHB1dCB0ZXh0IGNvbXBvbmVudC4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVjOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZDoiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJhVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJLy8gZGVsZXRlIG9ubHkgcGFydCBvZiBhIGRlbGltaXRlcgotCQljb250ZW50LnNldFRleHQoIkwxXHJcbkwyXHJcbkwzXHJcbkw0XHJcbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMywgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWU6IiwgbmV3VGV4dC5lcXVhbHMoIlxuTDJcclxuTDNcclxuTDRcclxuIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVmOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWc6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVoOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIkwyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVpOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIkwzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVqOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIkw0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVrOiIsIGNvbnRlbnQuZ2V0TGluZSg0KS5lcXVhbHMoIiIpKTsKLQkJLy8gcmVwbGFjZSBwYXJ0IG9mIGEgZGVsaW1pdGVyCi0JCWNvbnRlbnQuc2V0VGV4dCgiTDFcclxuTDJcclxuTDNcclxuTDRcclxuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgzLCAxLCAidGVzdFxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YToiLCBuZXdUZXh0LmVxdWFscygiTDFccnRlc3RcbkwyXHJcbkwzXHJcbkw0XHJcbiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDYpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIkwxIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoInRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiTDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmY6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiTDMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6Nmc6IiwgY29udGVudC5nZXRMaW5lKDQpLmVxdWFscygiTDQiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6Nmg6IiwgY29udGVudC5nZXRMaW5lKDUpLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoImFiY1xyXG5kZWYiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDEsIDEsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdhOiIsIG5ld1RleHQuZXF1YWxzKCJhY1xyXG5kZWYiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2I6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJhYyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJkZWYiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgxLCAxLCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3ZToiLCBuZXdUZXh0LmVxdWFscygiYVxyXG5kZWYiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2Y6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3ZzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJhIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdoOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoImRlZiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDEsIDIsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdpOiIsIG5ld1RleHQuZXF1YWxzKCJhZGVmIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdqOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2s6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiYWRlZiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDEsIDEsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdsOiIsIG5ld1RleHQuZXF1YWxzKCJhZWYiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N206IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3bjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJhZWYiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgxLCAxLCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3bzoiLCBuZXdUZXh0LmVxdWFscygiYWYiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N3A6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3cToiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJhZiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJhYmMiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDEsICIxIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4YToiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhiOiIsIG5ld1RleHQuZXF1YWxzKCIxYmMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiMWJjIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMCwgIlxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4ZDoiLCBuZXdUZXh0LmVxdWFscygiXG4xYmMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGU6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4ZjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGc6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiMWJjIikpOwotCQljb250ZW50ID0gZ2V0Q29udGVudEluc3RhbmNlKCk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiYSIpOwotCQljb250ZW50LnNldFRleHQoInBhY2thZ2UgdGVzdDtcbi8qIExpbmUgMVxuICogTGluZSAyXG4gKi9cbnB1YmxpYyBjbGFzcyBTaW1wbGVDbGFzcyB7XG59Iik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgxNCwgMjMsICJcdC8qTGluZSAxXG5cdCAqIExpbmUgMlxuXHQgKi8iKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjlhOiIsIG5ld1RleHQuZXF1YWxzKCJwYWNrYWdlIHRlc3Q7XG5cdC8qTGluZSAxXG5cdCAqIExpbmUgMlxuXHQgKi9cbnB1YmxpYyBjbGFzcyBTaW1wbGVDbGFzcyB7XG59IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjliOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygicGFja2FnZSB0ZXN0OyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJcdC8qTGluZSAxIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjllOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIlx0ICogTGluZSAyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjlmOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIlx0ICovIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjlnOiIsIGNvbnRlbnQuZ2V0TGluZSg0KS5lcXVhbHMoInB1YmxpYyBjbGFzcyBTaW1wbGVDbGFzcyB7IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjloOiIsIGNvbnRlbnQuZ2V0TGluZSg1KS5lcXVhbHMoIn0iKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF9UZXh0X0NoYW5nZWRfRXZlbnQoKSB7Ci0JCVN0eWxlZFRleHRDb250ZW50IGNvbnRlbnQgPSBnZXRDb250ZW50SW5zdGFuY2UoKTsKLQkJY29udGVudC5hZGRUZXh0Q2hhbmdlTGlzdGVuZXIodGhpcyk7Ci0JCXZlcmlmeSA9IDE7Ci0JCWNvbnRlbnQuc2V0VGV4dCgidGVzdGluZyIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMCwgIlxuIik7Ci0JCXZlcmlmeSA9IDI7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiXG5cbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMiwgImEiKTsKLQkJdmVyaWZ5ID0gMzsKLQkJY29udGVudC5zZXRUZXh0KCJhIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAxLCAiXG5cbiIpOwotCQl2ZXJpZnkgPSA1OwotCQljb250ZW50LnNldFRleHQoIkxpbmUgMVxyXG5MaW5lIDIiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDAsICJcciIpOwotCQl2ZXJpZnkgPSA2OwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxubGluZSAzXG5saW5lIDQiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDIxLCA3LCAiIik7Ci0JCXZlcmlmeSA9IDc7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XHIiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDUsIDksICIiKTsKLQkJdmVyaWZ5ID0gODsKLQkJY29udGVudC5zZXRUZXh0KCJcbkwxXHJcbkwyXHJcbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNywgMiwgIiIpOwotCQl2ZXJpZnkgPSA5OwotCQljb250ZW50LnNldFRleHQoIkwxXHJcbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMiwgMiwgInRlc3QiKTsKLQkJdmVyaWZ5ID0gMDsKLQkJY29udGVudC5yZW1vdmVUZXh0Q2hhbmdlTGlzdGVuZXIodGhpcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGV4dENoYW5nZWQoVGV4dENoYW5nZWRFdmVudCBldmVudCkgewotCX0KLQotCXB1YmxpYyB2b2lkIHRleHRDaGFuZ2luZyhUZXh0Q2hhbmdpbmdFdmVudCBldmVudCkgewotCQlzd2l0Y2ggKHZlcmlmeSkgewotCQkJY2FzZSAxIDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MWE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMiA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMik7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MmI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDApOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDMgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDApOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAyKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSA0IDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6NGE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgNSA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6NWI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDEpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDYgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDEpOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSA4IDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6OGE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAxKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4YjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgOSA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjlhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMSk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6OWI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDApOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDEwIDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTBhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTBiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxMSA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjExYToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDApOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjExYjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTIgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMmE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMmI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDApOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDEzIDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTNhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTNiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxNCA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE0YToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDApOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE0YjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTUgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNWE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAxKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNWI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDIpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDE2IDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTZhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTZiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAxKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxNyA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE3YToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDApOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE3YjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMik7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTggOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxOGE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxOGI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDEpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDE5IDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTlhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTliOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSA0KTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAyMCA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjIwYToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDApOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjIwYjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMik7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRleHRTZXQoVGV4dENoYW5nZWRFdmVudCBldmVudCkgewotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1N0eWxlZFRleHRUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1N0eWxlZFRleHRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NzZmNDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TdHlsZWRUZXh0VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm90aGVyOwotCi1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0eWxlZFRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci0KLS8qKgotICogSW5zZXJ0IHRoZSB0eXBlJ3MgZGVzY3JpcHRpb24gaGVyZS4KLSAqIENyZWF0aW9uIGRhdGU6ICgzLzIwLzIwMDEgNjoxOTo1OCBQTSkKLSAqIEBhdXRob3I6IERhdmlkIFdpbGxpYW1zCi0gKi8KLXB1YmxpYyBjbGFzcyBTdHlsZWRUZXh0VGVzdCB7Ci0JLyoqCi0JICogU3R5bGVkVGV4dFRlc3QgY29uc3RydWN0b3IgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgU3R5bGVkVGV4dFRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogRG9uJ3QgZm9yZ2V0LCB0aGUgKnN3dCouZGxsIHdpbGwgaGF2ZSB0byBiZSBjb3BpZWQgdG8gcHJvZ3JhbSBkaXJlY3RvcnkgZm9yIHRoaXMgdG8gd29yay4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0KLQkJdHJ5IHsKLQkJCVNoZWxsIHNoZWxsID0gbmV3IFNoZWxsKCk7Ci0JCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCQlzaGVsbC5zZXRMYXlvdXQobGF5b3V0KTsKLQotCQkJQnV0dG9uIGJ1dHRvbiA9IG5ldyBCdXR0b24oc2hlbGwsIFNXVC5QVVNIKTsKLQkJCWJ1dHRvbi5zZXRUZXh0KCJBY3Rpb24iKTsKLQkJCWJ1dHRvbi5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCBuZXcgTGlzdGVuZXIoKSB7Ci0JCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZSkgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oImJ1dHRvbiBwdXNoZWQiKTsKLQkJCQl9Ci0JCQl9KTsKLQotCQkJU3R5bGVkVGV4dCB0ZXh0ID0gbmV3IFN0eWxlZFRleHQoc2hlbGwsIFNXVC5CT1JERVIgKyBTV1QuSF9TQ1JPTEwgKyBTV1QuVl9TQ1JPTEwpOwotCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpOwotCQkJdGV4dC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0JCQkvLwotCQkJLy8JCVN0cmluZyBmaWxlTmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci5kaXIiKSArICJcXCIgKyAiamFwYW5lc2VfdXRmLTE2LnR4dCI7Ci0JCQkvLwkJU3RyaW5nIGVuY29kaW5nID0gIlVuaWNvZGVCaWciOwotCi0JCQlTdHJpbmcgZmlsZU5hbWUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIuZGlyIikgKyAiXFwiICsgImphcGFuZXNlX2NwMTI1Mi50eHQiOwotCQkJU3RyaW5nIGVuY29kaW5nID0gIkNwMTI1MiI7Ci0JCQkvL3N1bi5pby5CeXRlVG9DaGFyQ29udmVydGVyLmdldERlZmF1bHQoKS50b1N0cmluZygpOwotCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3QgZmlsZTogIiArIGZpbGVOYW1lKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgRW5jb2Rpbmc6ICIgKyBlbmNvZGluZyk7Ci0KLQkJCUlucHV0U3RyZWFtIGluID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlTmFtZSk7Ci0JCQlJbnB1dFN0cmVhbVJlYWRlciBpblN0cmVhbSA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpbiwgZW5jb2RpbmcpOwotCQkJLy9SZWFkZXIgaW5TdHJlYW0gPSBuZXcgRmlsZVJlYWRlcihmaWxlTmFtZSk7Ci0JCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQl3aGlsZSAoaW5TdHJlYW0ucmVhZHkoKSkgewotCQkJCXNiLmFwcGVuZCgoY2hhcikgaW5TdHJlYW0ucmVhZCgpKTsKLQkJCX0KLQkJCVN0cmluZyBpbnB1dFN0cmluZyA9IHNiLnRvU3RyaW5nKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkxlbmd0aCBvZiBpbnB1dDogIiArIGlucHV0U3RyaW5nLmxlbmd0aCgpKTsKLQkJCS8vCi0JCQl0ZXh0LnNldFRleHQoaW5wdXRTdHJpbmcpOwotCi0JCQlzaGVsbC5zZXRTaXplKDQwMCwgMjAwKTsKLQkJCXNoZWxsLm9wZW4oKTsKLQotCQkJRGlzcGxheSBkaXNwbGF5ID0gc2hlbGwuZ2V0RGlzcGxheSgpOwotCQkJd2hpbGUgKHNoZWxsICE9IG51bGwgJiYgIXNoZWxsLmlzRGlzcG9zZWQoKSkgewotCQkJCWlmICghZGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goKSkKLQkJCQkJZGlzcGxheS5zbGVlcCgpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gdCkgewotCQkJdC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1VuaXRUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9Vbml0VGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVhNWRmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1VuaXRUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wYXJzZXIuSlNQU291cmNlUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5TdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsucGFyc2VyLkJsb2NrTWFya2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuSVN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuTmV3RG9jdW1lbnRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5vQ2hhbmdlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5SZWdpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5SZWdpb25zUmVwbGFjZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlN0cnVjdHVyZWREb2N1bWVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudXRpbC5EZWJ1ZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuRE9NTW9kZWxJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wYXJzZXIuWE1MU291cmNlUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnJlZ2lvbnMuRE9NUmVnaW9uQ29udGV4dDsKLQotcHVibGljIGNsYXNzIFVuaXRUZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50IGZNb2RlbDsKLQlwcm90ZWN0ZWQgSURPTU1vZGVsIHRyZWU7Ci0JcHJvdGVjdGVkIGludCBldmVudENhc2UgPSAxOwotCXByb3RlY3RlZCBib29sZWFuIGV2ZW50UmVzdWx0OwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VORVJJQ19OT0RFU19SRVBMQUNFRF9FVkVOVF9DQVNFID0gMTAwMTsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRU5FUklDX1JFR0lPTlNfUkVQTEFDRURfRVZFTlRfQ0FTRSA9IDEwMDI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VORVJJQ19SRUdJT05fQ0hBTkdFRF9FVkVOVF9DQVNFID0gMTAwMzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRU5FUklDX05FV19NT0RFTF9FVkVOVF9DQVNFID0gMTAwNDsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRU5FUklDX05PX0NIQU5HRV9FVkVOVF9DQVNFID0gMTAwNTsKLQotCXByb3RlY3RlZCBjbGFzcyBTdHJ1Y3R1cmVkRG9jdW1lbnRMaXN0ZW5lclByb3h5IGltcGxlbWVudHMgSVN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyIHsKLQkJcHVibGljIHZvaWQgbmV3TW9kZWwoTmV3RG9jdW1lbnRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJaGFuZGxlRXZlbnQoc3RydWN0dXJlZERvY3VtZW50RXZlbnQpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgbm9DaGFuZ2UoTm9DaGFuZ2VFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJaGFuZGxlRXZlbnQoc3RydWN0dXJlZERvY3VtZW50RXZlbnQpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgbm9kZXNSZXBsYWNlZChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJaGFuZGxlRXZlbnQoc3RydWN0dXJlZERvY3VtZW50RXZlbnQpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcmVnaW9uQ2hhbmdlZChSZWdpb25DaGFuZ2VkRXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJCWhhbmRsZUV2ZW50KHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJlZ2lvbnNSZXBsYWNlZChSZWdpb25zUmVwbGFjZWRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJaGFuZGxlRXZlbnQoc3RydWN0dXJlZERvY3VtZW50RXZlbnQpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIFN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyUHJveHkgcHJveHkgPSBuZXcgU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXJQcm94eSgpOwotCi0JLyoqCi0JICogTWluaW1pemF0aW9uVGVzdCBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqLwotCXB1YmxpYyBVbml0VGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgaGFuZGxlRXZlbnQoU3RydWN0dXJlZERvY3VtZW50RXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJZXZlbnRSZXN1bHQgPSBmYWxzZTsKLQkJc3dpdGNoIChldmVudENhc2UpIHsKLQkJCWNhc2UgMSA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBOb0NoYW5nZUV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAyIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIE5vQ2hhbmdlRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDMgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDQgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDUgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWlmICgzID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJaWYgKDMgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgNiA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJaWYgKDAgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQlpZiAoMiA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCQlpZiAoIjxCPiIuZXF1YWxzKCgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuaXRlbSgwKS5nZXRUZXh0KCkpKQotCQkJCQkJCQkJaWYgKCI8L0I+Ii5lcXVhbHMoKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5pdGVtKDEpLmdldFRleHQoKSkpIHsKLQkJCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCQkJCQl9Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSA3IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlpZiAoMCA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkU3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCWlmICgxID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCi0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgOCA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJaWYgKDAgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQlpZiAoMiA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCQkvL2lmICgiPEI+Ii5lcXVhbHMoKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5pdGVtKDApLmdldFRleHQoKSkpCi0JCQkJCQkJCS8vaWYgKCI8L0I+Ii5lcXVhbHMoKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5pdGVtKDEpLmdldFRleHQoKSkpIHsKLQkJCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgOSA6Ci0JCQljYXNlIDEwIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlpZiAoMiA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkU3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCWlmICgwID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJCWlmICgiPFREPiIuZXF1YWxzKCgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuaXRlbSgwKS5nZXRUZXh0KCkpKQotCQkJCQkJCQkJaWYgKCI8L1REPiIuZXF1YWxzKCgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuaXRlbSgxKS5nZXRUZXh0KCkpKQotCQkJCQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDExIDoKLQkJCWNhc2UgMTIgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWlmICgyID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJaWYgKDAgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQkJaWYgKCI8VEQ+Ii5lcXVhbHMoKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5pdGVtKDApLmdldFRleHQoKSkpCi0JCQkJCQkJCQlpZiAoIjwvVEQ+Ii5lcXVhbHMoKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5pdGVtKDEpLmdldFRleHQoKSkpCi0JCQkJCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTMgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWlmICgzID09ICgoUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdSZWdpb25zKCkuc2l6ZSgpKQotCQkJCQkJCWlmICgzID09ICgoUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRSZWdpb25zKCkuc2l6ZSgpKQotCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxNCA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJaWYgKDMgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQlpZiAoMSA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxNSA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpIHsKLQkJCQkJCVJlZ2lvbkNoYW5nZWRFdmVudCByZWdpb25DaGFuZ2VkRXZlbnQgPSAoUmVnaW9uQ2hhbmdlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudDsKLQkJCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24gPSAoKFJlZ2lvbkNoYW5nZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQkJCQkJaWYgKCJiICIuZXF1YWxzKGRvY3VtZW50UmVnaW9uLmdldEZ1bGxUZXh0KHJlZ2lvbkNoYW5nZWRFdmVudC5nZXRSZWdpb24oKSkpKSB7Ci0JCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTYgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWlmICgwID09ICgoUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRSZWdpb25zKCkuc2l6ZSgpKSB7Ci0JCQkJCQkJaWYgKDEgPT0gKChSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1JlZ2lvbnMoKS5zaXplKCkpIHsKLQkJCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDE3IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlpZiAoMSA9PSAoKFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkUmVnaW9ucygpLnNpemUoKSkgewotCQkJCQkJCWlmICgzID09ICgoUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdSZWdpb25zKCkuc2l6ZSgpKSB7Ci0JCQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxOCA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJaWYgKDIgPT0gKChSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFJlZ2lvbnMoKS5zaXplKCkpIHsKLQkJCQkJCQlpZiAoMiA9PSAoKFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3UmVnaW9ucygpLnNpemUoKSkgewotCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTkgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAyMCA6Ci0JCQljYXNlIDIxIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMjIgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAyMyA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMjQgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDI1IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAyNiA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCS8vIEpTUDUKLQkJCWNhc2UgMjcgOgotCQkJCXsKLQkJCQkJLy8gY2hhbmdlZCAyMDAyLCA5LzEyIHRvIGZpdAotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMjggOgotCQkJCXsKLQkJCQkJLy8gY2hhbmdlZCAyMDAyLCA5LzEyIHRvIGZpdAotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMjkgOgotCQkJCXsKLQkJCQkJLy8gY2hhbmdlZCAyMDAyLCA5LzEyIHRvIGZpdAotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMzAgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkvLyBKU1A2Ci0JCQljYXNlIDMxIDoKLQkJCQl7Ci0JCQkJCS8vIGNoYW5nZWQgMjAwMiwgOS8xMiB0byBmaXQKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDMyIDoKLQkJCQl7Ci0JCQkJCS8vIGNoYW5nZWQgMjAwMiwgOS8xMiB0byBmaXQgLS0gdGhpcyBpcyBkZWZpbml0ZWx5IGEgY2hhbmdlCi0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlSZWdpb25zUmVwbGFjZWRFdmVudCByZWdpb25zUmVwbGFjZWRFdmVudCA9IChSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQ7Ci0JCQkJCQlpZiAoMSA9PSByZWdpb25zUmVwbGFjZWRFdmVudC5nZXRPbGRSZWdpb25zKCkuc2l6ZSgpKSB7Ci0JCQkJCQkJSVRleHRSZWdpb24gcmVnaW9uID0gcmVnaW9uc1JlcGxhY2VkRXZlbnQuZ2V0T2xkUmVnaW9ucygpLmdldCgwKTsKLQkJCQkJCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uID0gcmVnaW9uc1JlcGxhY2VkRXZlbnQuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCQkJCQkJU3RyaW5nIHRleHQgPSBkb2N1bWVudFJlZ2lvbi5nZXRUZXh0KHJlZ2lvbik7Ci0JCQkJCQkJaWYgKCI8JSBhYWEgJT4iLmVxdWFscyh0ZXh0KSkgewotCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCQkJfQotCi0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJZWxzZSBpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQgbm9kZXNSZXBsYWNlZEV2ZW50ID0gKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudDsKLQkJCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IHJlZ2lvbnMgPSBub2Rlc1JlcGxhY2VkRXZlbnQuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpOwotCi0JCQkJCQlpZiAoMSA9PSByZWdpb25zLmdldExlbmd0aCgpKSB7Ci0JCQkJCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24gPSByZWdpb25zLml0ZW0oMCk7Ci0JCQkJCQkJU3RyaW5nIHRleHQgPSByZWdpb24uZ2V0VGV4dCgpOwotCQkJCQkJCS8vU3lzdGVtLm91dC5wcmludGxuKHRleHQpOwotCQkJCQkJCWlmICgiPGM8JSBhYWEgIi5lcXVhbHModGV4dCkpIHsKLQkJCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOwotCQkJCQkJCX0KLQkJCQkJCX0KLQotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMzMgOgotCQkJCXsKLQkJCQkJLy8gY2hhbmdlZCAyMDAyLCA5LzEyIHRvIGZpdAotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJLy8JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMzQgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCWNhc2UgMzUgOgotCQkJCXsKLQkJCQkJLy8gY2hhbmNlZCB0byBSZWdpb25zUmVwbGFjZWQgMjAwMiwgOS8xMSAoYXR0cmlidXRlIHZhbHVlIHRvIHJlZ2lvbiBjb250YWluZXIpCi0JCQkJCS8vCQkJCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPHA+PGltZyBzcmM9XCJmaWxlLmdpZlwiPjxwPiI7Ci0JCQkJCS8vCQkJCQlTdHJpbmcgY2hhbmdlcyA9ICI8IjsKLQkJCQkJLy8JCQkJCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8cD48aW1nIHNyYz1cImZpbGU8LmdpZlwiPjxwPiI7Ci0KLQkJCQkJLy8JCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDM2IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAzNyA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMzggOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAzOSA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDQwIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQljYXNlIEdFTkVSSUNfTk9ERVNfUkVQTEFDRURfRVZFTlRfQ0FTRSA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgR0VORVJJQ19SRUdJT05TX1JFUExBQ0VEX0VWRU5UX0NBU0UgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIEdFTkVSSUNfUkVHSU9OX0NIQU5HRURfRVZFTlRfQ0FTRSA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIEdFTkVSSUNfTkVXX01PREVMX0VWRU5UX0NBU0UgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgTmV3RG9jdW1lbnRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgR0VORVJJQ19OT19DSEFOR0VfRVZFTlRfQ0FTRSA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBOb0NoYW5nZUV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQlkZWZhdWx0IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIE5ld0RvY3VtZW50RXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIFN0YXJ0cyB0aGUgYXBwbGljYXRpb24uCi0JICogQHBhcmFtIGFyZ3MgYW4gYXJyYXkgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cwotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCWlmIChhcmdzLmxlbmd0aCA9PSAwKSB7Ci0JCQlydW5BbGwoKTsKLQkJfQotCQllbHNlIGlmIChhcmdzLmxlbmd0aCA9PSAxKSB7Ci0JCQlTdHJpbmcgbWV0aG9kVG9SdW4gPSBhcmdzWzBdLnRyaW0oKTsKLQkJCXJ1bk9uZShtZXRob2RUb1J1bik7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcnVuQWxsKCkgewotCQlqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgcnVuT25lKFN0cmluZyBtZXRob2ROYW1lKSB7Ci0JCVRlc3RTdWl0ZSB0ZXN0U3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0JCVRlc3RDYXNlIHRlc3QgPSBuZXcgVW5pdFRlc3RzKG1ldGhvZE5hbWUpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdCh0ZXN0KTsKLQkJanVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKHRlc3RTdWl0ZSk7Ci0KLQl9Ci0KLQkvKioKLQkgKiBTZXQgdXAgYW4gWE1MIG1vZGVsCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXBYTUwoKSB7Ci0KLQkJSU1vZGVsTWFuYWdlciBtbSA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCXRyeSB7Ci0JCQlmTW9kZWwgPSBtbS5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoImR1bW15LnhtbCIsIChJbnB1dFN0cmVhbSkgbnVsbCwgbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGRvIG5vdGhpbmcsIHNpbmNlIGR1bW15Ci0JCX0KLQkJZk1vZGVsLmFkZERvY3VtZW50Q2hhbmdlZExpc3RlbmVyKHByb3h5KTsKLQotCQl0cmVlID0gbmV3IERPTU1vZGVsSW1wbCgpOwotCi0JCWlmICh0cmVlICE9IG51bGwpIHsKLQkJCWZNb2RlbC5hZGREb2N1bWVudENoYW5naW5nTGlzdGVuZXIoKElTdHJ1Y3R1cmVkRG9jdW1lbnRMaXN0ZW5lcikgdHJlZSk7Ci0JCQl0cmVlLnNldFN0cnVjdHVyZWREb2N1bWVudChmTW9kZWwpOwotCQl9Ci0KLQl9Ci0KLQkvKioKLQkgKiBTZXQgdXAgYSBKU1AgbW9kZWwKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcEpTUCgpIHsKLQotCQlJTW9kZWxNYW5hZ2VyIG1tID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJdHJ5IHsKLQkJCWZNb2RlbCA9IG1tLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcigiZHVtbXkuanNwIiwgKElucHV0U3RyZWFtKSBudWxsLCBudWxsKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gZG8gbm90aGluZywgc2luY2UgZHVtbXkKLQkJfQotCQlmTW9kZWwgPSBTdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudEluc3RhbmNlKG5ldyBKU1BTb3VyY2VQYXJzZXIoKSk7Ci0KLQkJZk1vZGVsLmFkZERvY3VtZW50Q2hhbmdlZExpc3RlbmVyKHByb3h5KTsKLQotCQl0cmVlID0gbmV3IERPTU1vZGVsSW1wbCgpOwotCi0JCWlmICh0cmVlICE9IG51bGwpIHsKLQkJCWZNb2RlbC5hZGREb2N1bWVudENoYW5naW5nTGlzdGVuZXIoKElTdHJ1Y3R1cmVkRG9jdW1lbnRMaXN0ZW5lcikgdHJlZSk7Ci0JCQl0cmVlLnNldFN0cnVjdHVyZWREb2N1bWVudChmTW9kZWwpOwotCQl9Ci0KLQl9Ci0KLQkvKioKLQkgKi8KLQlwdWJsaWMgdm9pZCBzaW1wbGVUZXN0KCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSA5OTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIjxhPjwvYT4iOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPGE+PC9hPiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDA7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCS8vCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQkvLwotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQl9Ci0KLQkvKioKLQkgKi8KLQlwdWJsaWMgdm9pZCBzaW1wbGVUZXN0MigpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gOTk7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICIiOwotCQlTdHJpbmcgY2hhbmdlcyA9ICI8YT48L2E+IjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxhPjwvYT4iOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSAwOwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JLyoqCi0JICovCi0JcHVibGljIHZvaWQgc2ltcGxlVGVzdDMoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDk5OwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPGE+PC9hPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIiI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8YT48L2E+IjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gMDsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8xLzIwMDEgNjoxNjowMiBQTSkKLQkgKiBAcmV0dXJuIGp1bml0LmZyYW1ld29yay5UZXN0Ci0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShVbml0VGVzdHMuY2xhc3MpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8xLzIwMDEgNjoyODo1OSBQTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlQmVnaW5uaW5nKCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSA0OwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPEdIST4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8QUJDPjxERUY+PEdIST4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMCwgMTAsICIiKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMS8yMDAxIDY6Mjc6MzEgUE0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdERlbGV0ZUVuZCgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMzsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxBQkM+PERFRj4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8QUJDPjxERUY+PEdIST4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMTAsIDUsICIiKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RW1iZWRkZWQoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IEdFTkVSSUNfTkVXX01PREVMX0VWRU5UX0NBU0U7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8cD48aW1nIHNyYz1cImZpbGUuZ2lmXCI+PHA+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiPCI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8cD48aW1nIHNyYz1cImZpbGU8LmdpZlwiPjxwPiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDE3OwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZXZlbnRDYXNlID0gMzU7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgicGFydCAxOiB0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoInBhcnQgMTogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCQlldmVudENhc2UgPSAzNjsKLQkJc3RhcnRTdHJpbmcgPSBleHBlY3RlZFN0cmluZzsKLQkJY2hhbmdlcyA9ICIlIjsKLQkJZXhwZWN0ZWRTdHJpbmcgPSAiPHA+PGltZyBzcmM9XCJmaWxlPCUuZ2lmXCI+PHA+IjsKLQkJc3RhcnRPZkNoYW5nZXMgPSAxODsKLQkJbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCXJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJwYXJ0IDI6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAyOiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWV2ZW50Q2FzZSA9IDM3OwotCQlzdGFydFN0cmluZyA9IGV4cGVjdGVkU3RyaW5nOwotCQljaGFuZ2VzID0gIiAiOwotCQlleHBlY3RlZFN0cmluZyA9ICI8cD48aW1nIHNyYz1cImZpbGU8JSAuZ2lmXCI+PHA+IjsKLQkJc3RhcnRPZkNoYW5nZXMgPSAxOTsKLQkJbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCXJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJwYXJ0IDM6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAzOiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWV2ZW50Q2FzZSA9IDM4OwotCQlzdGFydFN0cmluZyA9IGV4cGVjdGVkU3RyaW5nOwotCQljaGFuZ2VzID0gImFiICI7Ci0JCWV4cGVjdGVkU3RyaW5nID0gIjxwPjxpbWcgc3JjPVwiZmlsZTwlIGFiIC5naWZcIj48cD4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDIwOwotCQlsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlyZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInBhcnQgNDogdGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDQ6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQkJZXZlbnRDYXNlID0gMzk7Ci0JCXN0YXJ0U3RyaW5nID0gZXhwZWN0ZWRTdHJpbmc7Ci0JCWNoYW5nZXMgPSAiJSI7Ci0JCWV4cGVjdGVkU3RyaW5nID0gIjxwPjxpbWcgc3JjPVwiZmlsZTwlIGFiICUuZ2lmXCI+PHA+IjsKLQkJc3RhcnRPZkNoYW5nZXMgPSAyMzsKLQkJbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCXJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJwYXJ0IDU6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCA1OiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWV2ZW50Q2FzZSA9IDQwOwotCQlzdGFydFN0cmluZyA9IGV4cGVjdGVkU3RyaW5nOwotCQljaGFuZ2VzID0gIj4iOwotCQlleHBlY3RlZFN0cmluZyA9ICI8cD48aW1nIHNyYz1cImZpbGU8JSBhYiAlPi5naWZcIj48cD4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDI0OwotCQlsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlyZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInBhcnQgNjogdGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDY6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQl9Ci0KLQkvKioKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RW1iZWRkZWRKU1AyKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSBHRU5FUklDX1JFR0lPTlNfUkVQTEFDRURfRVZFTlRfQ0FTRTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjxhID5jPC9hPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIjwlPSBiICU+IjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxhIDwlPSBiICU+PmM8L2E+IjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gMzsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWVwRW1iZWRkZWRKU1AoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IEdFTkVSSUNfUkVHSU9OU19SRVBMQUNFRF9FVkVOVF9DQVNFOwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPHNjcmlwdD48YSAgID5jPC9hPjwvc2NyaXB0PiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIjwlPSBiICU+IjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxzY3JpcHQ+PGEgPCU9IGIgJT4gID5jPC9hPjwvc2NyaXB0PiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDExOwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gdGVzdFIgPSBmTW9kZWwuZ2V0UmVnaW9uQXRDaGFyYWN0ZXJPZmZzZXQoMTEpOwotCQlTdHJpbmcgdGVzdFRleHQgPSB0ZXN0Ui5nZXRUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIjxhIDwlPSBiICU+ICA+IikpOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldEZ1bGxUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIjxhIDwlPSBiICU+ICA+IikpOwotCi0JCUlUZXh0UmVnaW9uTGlzdCByZWdpb25MaXN0ID0gdGVzdFIuZ2V0UmVnaW9ucygpOwotCi0JCUlUZXh0UmVnaW9uIHJlZ2lvbiA9IHJlZ2lvbkxpc3QuZ2V0KDApOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldFRleHQocmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPCIpKTsKLQotCQlyZWdpb24gPSByZWdpb25MaXN0LmdldCgxKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRUZXh0KHJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoImEiKSk7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0RnVsbFRleHQocmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiYSAiKSk7Ci0KLQkJcmVnaW9uID0gcmVnaW9uTGlzdC5nZXQoMik7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0VGV4dChyZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8JT0gYiAlPiIpKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRGdWxsVGV4dChyZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8JT0gYiAlPiAgIikpOwotCi0JCS8vID09PQkKLQotCQlJVGV4dFJlZ2lvbkNvbnRhaW5lciBjUmVnaW9uID0gKElUZXh0UmVnaW9uQ29udGFpbmVyKSByZWdpb247Ci0KLQkJSVRleHRSZWdpb25MaXN0IGVSZWdpb25zID0gY1JlZ2lvbi5nZXRSZWdpb25zKCk7Ci0JCUlUZXh0UmVnaW9uIGVSZWdpb24gPSBlUmVnaW9ucy5nZXQoMCk7Ci0JCXRlc3RUZXh0ID0gY1JlZ2lvbi5nZXRUZXh0KGVSZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8JT0iKSk7Ci0JCXRlc3RUZXh0ID0gY1JlZ2lvbi5nZXRGdWxsVGV4dChlUmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPCU9IikpOwotCi0JCWVSZWdpb24gPSBlUmVnaW9ucy5nZXQoMSk7Ci0JCXRlc3RUZXh0ID0gY1JlZ2lvbi5nZXRUZXh0KGVSZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCIgYiAiKSk7Ci0JCXRlc3RUZXh0ID0gY1JlZ2lvbi5nZXRGdWxsVGV4dChlUmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiIGIgIikpOwotCi0JCWVSZWdpb24gPSBlUmVnaW9ucy5nZXQoMik7Ci0JCXRlc3RUZXh0ID0gY1JlZ2lvbi5nZXRUZXh0KGVSZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCIlPiIpKTsKLQkJdGVzdFRleHQgPSBjUmVnaW9uLmdldEZ1bGxUZXh0KGVSZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCIlPiIpKTsKLQotCQllUmVnaW9uID0gZVJlZ2lvbnMuZ2V0KDMpOwotCQl0ZXN0VGV4dCA9IGNSZWdpb24uZ2V0VGV4dChlUmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiIikpOwotCQl0ZXN0VGV4dCA9IGNSZWdpb24uZ2V0RnVsbFRleHQoZVJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIiAgIikpOwotCi0JCS8vID09PT0KLQotCQlyZWdpb24gPSByZWdpb25MaXN0LmdldCgzKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRUZXh0KHJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIj4iKSk7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0RnVsbFRleHQocmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPiIpKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWVwRW1iZWRkZWRKU1AyKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSBHRU5FUklDX1JFR0lPTlNfUkVQTEFDRURfRVZFTlRfQ0FTRTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjxzY3JpcHQ+PGEgICA+YzwvYT48L3NjcmlwdD4iOwotCQlTdHJpbmcgY2hhbmdlcyA9ICI8JT0gYiAlIjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxzY3JpcHQ+PGEgPCU9IGIgJSAgPmM8L2E+PC9zY3JpcHQ+IjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gMTE7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiB0ZXN0UiA9IGZNb2RlbC5nZXRSZWdpb25BdENoYXJhY3Rlck9mZnNldCgxMSk7Ci0JCVN0cmluZyB0ZXN0VGV4dCA9IHRlc3RSLmdldFRleHQoKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPGEgPCU9IGIgJSAgPiIpKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRGdWxsVGV4dCgpOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8YSA8JT0gYiAlICA+IikpOwotCi0JCUlUZXh0UmVnaW9uTGlzdCByZWdpb25MaXN0ID0gdGVzdFIuZ2V0UmVnaW9ucygpOwotCi0JCUlUZXh0UmVnaW9uIHJlZ2lvbiA9IHJlZ2lvbkxpc3QuZ2V0KDApOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldFRleHQocmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPCIpKTsKLQotCQlyZWdpb24gPSByZWdpb25MaXN0LmdldCgxKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRUZXh0KHJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoImEiKSk7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0RnVsbFRleHQocmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiYSAiKSk7Ci0KLQkJcmVnaW9uID0gcmVnaW9uTGlzdC5nZXQoMik7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0VGV4dChyZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8JT0gYiAlICA+IikpOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldEZ1bGxUZXh0KHJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIjwlPSBiICUgID4iKSk7Ci0KLQkJLy8gPT09CQotCi0JCUlUZXh0UmVnaW9uQ29udGFpbmVyIGNSZWdpb24gPSAoSVRleHRSZWdpb25Db250YWluZXIpIHJlZ2lvbjsKLQotCQlJVGV4dFJlZ2lvbkxpc3QgZVJlZ2lvbnMgPSBjUmVnaW9uLmdldFJlZ2lvbnMoKTsKLQkJSVRleHRSZWdpb24gZVJlZ2lvbiA9IGVSZWdpb25zLmdldCgwKTsKLQkJdGVzdFRleHQgPSBjUmVnaW9uLmdldFRleHQoZVJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIjwlPSIpKTsKLQkJdGVzdFRleHQgPSBjUmVnaW9uLmdldEZ1bGxUZXh0KGVSZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8JT0iKSk7Ci0KLQkJZVJlZ2lvbiA9IGVSZWdpb25zLmdldCgxKTsKLQkJdGVzdFRleHQgPSBjUmVnaW9uLmdldFRleHQoZVJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIiBiICUgID4iKSk7Ci0JCXRlc3RUZXh0ID0gY1JlZ2lvbi5nZXRGdWxsVGV4dChlUmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiIGIgJSAgPiIpKTsKLQotCi0JCS8vID09PT0JCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdERlZXBFbWJlZGRlZEpTUDMoKSB7Ci0JCS8vIENNVkMgMjQ1NTg2Ci0JCS8vIHRoaXMgaXMgYSB0ZXN0IHRvIG1ha2Ugc3VyZSBDb250ZXh0UmVnaW9uQ29udGFpbmVyIHJldHVybnMgd2hhdCB3ZSBleHBlY3QKLQkJc2V0VXBKU1AoKTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjxodG1sPjxoZWFkPjxzY3JpcHQ+IDwlISBTdHJpbmcgdGVzdHZhciA9IFwidGVzdHZhclwiOyAlPiB2YXIgdGVzdCA9IDwlPSB0ZXN0dmFyICU+IDwvc2NyaXB0PjwvaGVhZD48L2h0bWw+IjsKLQkJU3RyaW5nIGV4cGVjdGVkVGV4dCA9ICI8JSEgU3RyaW5nIHRlc3R2YXIgPSBcInRlc3R2YXJcIjsgJT4iOwotCQkoKFhNTFNvdXJjZVBhcnNlcikgZk1vZGVsLmdldFBhcnNlcigpKS5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoInNjcmlwdCIsIG51bGwsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgZmFsc2UpKTsgLy8kTk9OLU5MUy0xJAotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLmdldFJlZ2lvbkxpc3QoKTsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHNjcmlwdEJsb2NrUmVnaW9uID0gZk1vZGVsLmdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KDIxKTsKLQkJSVRleHRSZWdpb25MaXN0IGJsb2NrUmVnaW9ucyA9IHNjcmlwdEJsb2NrUmVnaW9uLmdldFJlZ2lvbnMoKTsKLQkJSVRleHRSZWdpb25Db250YWluZXIganNwRGVjbCA9IChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgYmxvY2tSZWdpb25zLmdldCgxKTsKLQkJU3RyaW5nIGZ1bGxUZXh0ID0ganNwRGVjbC5nZXRGdWxsVGV4dCgpOwotCi0JCS8vYXNzZXJ0VHJ1ZSgiQ29udGV4dFJlZ2lvbkNvbnRhaW5lci5nZXRGdWxsVGV4dCgpIiwgZnVsbFRleHQuZXF1YWxzKGV4cGVjdGVkVGV4dCkpOwotCQlhc3NlcnRFcXVhbHMoIkNvbnRleHRSZWdpb25Db250YWluZXIuZ2V0RnVsbFRleHQoKSB2YWx1ZSBpbmNvcnJlY3Q6ICIsIGV4cGVjdGVkVGV4dCwgZnVsbFRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1AxKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSAyMzsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gImFiY2Q8JT0gYWJjICU+ZWZnaCI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICJhYmNkPCAlPSBhYmMgJT5lZmdoIjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiICI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDU7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQMigpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gMjQ7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICJhYmNkPCUgYWJjICU+ZWZnaCI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICJhYmNkPCAlIGFiYyAlPmVmZ2giOwotCQlTdHJpbmcgY2hhbmdlcyA9ICIgIjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gNTsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1AzKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSAyNTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjwlPSBhYmMgJT4iOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPCAlPSBhYmMgJT4iOwotCQlTdHJpbmcgY2hhbmdlcyA9ICIgIjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gMTsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQNCgpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gMjY7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8JSBhYmMgJT4iOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPCAlIGFiYyAlPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIiAiOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSAxOwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSBHaXZlIGEgSlNQIHNjcmlwdGxldCA6Ci0JIDwlIGFhYSAlPgotCSBXaGVuIGFuIHVzZXIgdHlwZXMgIjxiYj4iIGp1c3QgYmVmb3JlCi0JIHRoZSBKU1Agc2NyaXB0bGV0IDoKLQkgKDEpIFdoZW4gJzwnIGlzIHR5cGVkLCByZWdpb25zUmVwbGFjZWQoKQotCSBpcyBjYWxsZWQgZm9yICI8JSIuCi0JICgyKSBXaGVuICdiJyBpcyB0eXBlZCwgbm9kZXNSZXBsYWNlZCgpCi0JIGlzIGNhbGxlZCBmb3IgIjw8JSIgYW5kICIgYWFhICIuCi0JICgzKSBXaGVuICdiJyBpcyB0eXBlZCBhZ2FpbiwgZmluYWxseSwKLQkgbm9kZXNSZXBsYWNlZCgpIGlzIGNhbGxlZCBmb3IKLQkgIjxiPCUgYWFhIiBhbmQgIiU+Ii4KLQkgVGhlIGVuZCBKU1AgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBzaG91bGQgYmUKLQkgcmVwYXJzZWQgYXQgKDEpLCBidXQgbm90IHdhaXQgdW50aWwgKDMpLgotCSAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQNSgpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gR0VORVJJQ19ORVdfTU9ERUxfRVZFTlRfQ0FTRTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjwlIGFhYSAlPjxwPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIjwiOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPDwlIGFhYSAlPjxwPiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDA7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlldmVudENhc2UgPSAyNzsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAxOiB0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoInBhcnQgMTogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCQkvLyBzdGVwIDIKLQkJLy8gPyBkb2VzIGFzc2VydFRydWUgcHJldmVudCByZXN0IGZyb20gZXhlY3V0aW5nIGlmICdmYWxzZSc/Ci0JCS8vIGFuczogeWVzCi0JCWV2ZW50Q2FzZSA9IDI4OwotCQlzdGFydFN0cmluZyA9IGV4cGVjdGVkU3RyaW5nOwotCQljaGFuZ2VzID0gImIiOwotCQlleHBlY3RlZFN0cmluZyA9ICI8YjwlIGFhYSAlPjxwPiI7Ci0JCXN0YXJ0T2ZDaGFuZ2VzID0gMTsKLQkJbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCXJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAyOiB0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoInBhcnQgMjogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCQlldmVudENhc2UgPSAyOTsKLQkJc3RhcnRTdHJpbmcgPSBleHBlY3RlZFN0cmluZzsKLQkJY2hhbmdlcyA9ICJiIjsKLQkJZXhwZWN0ZWRTdHJpbmcgPSAiPGJiPCUgYWFhICU+PHA+IjsKLQkJc3RhcnRPZkNoYW5nZXMgPSAyOwotCQlsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlyZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDM6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAzOiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWV2ZW50Q2FzZSA9IDMwOwotCQlzdGFydFN0cmluZyA9IGV4cGVjdGVkU3RyaW5nOwotCQljaGFuZ2VzID0gIj4iOwotCQlleHBlY3RlZFN0cmluZyA9ICI8YmI+PCUgYWFhICU+PHA+IjsKLQkJc3RhcnRPZkNoYW5nZXMgPSAzOwotCQlsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlyZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDQ6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCA0OiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSBFeGFtcGxlIDQpCi0JIAotCSBHaXZlbiB0d28gSlNQIHNjcmlwdGxldHMgOgotCSA8JSBhYWEgJT48JSBiYmIgJT4KLQkgV2hlbiBhbiB1c2VyIHR5cGVzICI8Y2NjYz4iIGp1c3QgYmVmb3JlCi0JIHRoZSBKU1Agc2NyaXB0bGV0LCB3YXRjaCB0aGUgSVN0cnVjdHVyZWREb2N1bWVudCBldmVudHMKLQkgb24gZWFjaCBjaGFyYWN0ZXIgdHlwaW5nLgotCSBZb3Ugd2lsbCBzZWUgdGhlIG5leHQgSlNQIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gaXMgcmVwYXJzZWQKLQkgKHRvIGJlIGJyb2tlbiBpbnRvIG90aGVyIHR5cGUgb2YgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbikKLQkgb25lIGJ5IG9uZSBvbiBlYWNoIGV2ZW50LgotCSBCdXQgaXQgc2hvdWxkIGJlIGF0IG9uY2UgYXQgdGhlIGZpcnN0IGV2ZW50LgotCSBPbGQgQ29tcG9uZW50OiB3c2Eud2ViLnBhZ2VlZGl0aW5nCi0JIE5ldyBDb21wb25lbnQ6IHdzYS53ZWIueG1sZWRpdG9yCi0JIAotCSAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQNigpICB7Ci0JCS8vIGNhdXRpb24gLi4uIHdlJ3JlIHJlLXVzaW5nIGV2ZW50IGNoZWNrcyBmcm9tIEpTUDUKLQotCQlzZXRVcEpTUCgpOwotCi0JCWV2ZW50Q2FzZSA9IEdFTkVSSUNfTkVXX01PREVMX0VWRU5UX0NBU0U7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8JSBhYWEgJT48JSBiYmIgJT4iOwotCQlTdHJpbmcgY2hhbmdlcyA9ICI8IjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjw8JSBhYWEgJT48JSBiYmIgJT4iOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSAwOwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0JCWV2ZW50Q2FzZSA9IDMxOwotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAxOiB0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoInBhcnQgMTogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCQlldmVudENhc2UgPSAzMjsKLQkJc3RhcnRTdHJpbmcgPSBleHBlY3RlZFN0cmluZzsKLQkJY2hhbmdlcyA9ICJjIjsKLQkJZXhwZWN0ZWRTdHJpbmcgPSAiPGM8JSBhYWEgJT48JSBiYmIgJT4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDE7Ci0JCWxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlyZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCXJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0JCWFzc2VydFRydWUoInBhcnQgMjogdGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDI6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQkJZXZlbnRDYXNlID0gMzM7Ci0JCXN0YXJ0U3RyaW5nID0gZXhwZWN0ZWRTdHJpbmc7Ci0JCWNoYW5nZXMgPSAiYyI7Ci0JCWV4cGVjdGVkU3RyaW5nID0gIjxjYzwlIGFhYSAlPjwlIGJiYiAlPiI7Ci0JCXN0YXJ0T2ZDaGFuZ2VzID0gMjsKLQkJbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCXJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAzOiB0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoInBhcnQgMzogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCQlldmVudENhc2UgPSAzNDsKLQkJc3RhcnRTdHJpbmcgPSBleHBlY3RlZFN0cmluZzsKLQkJY2hhbmdlcyA9ICI+IjsKLQkJZXhwZWN0ZWRTdHJpbmcgPSAiPGNjPjwlIGFhYSAlPjwlIGJiYiAlPiI7Ci0JCXN0YXJ0T2ZDaGFuZ2VzID0gMzsKLQkJbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCXJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCA0OiB0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoInBhcnQgNDogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCX0KLQotCS8qKgotCSAqIHRoaXMgdGVzdCBlYXNpbHkgcmV0dXJucyAib2siIGV2ZW4gd2l0aCB0aGUgbm8tc3BhY2UgYnVnLiBJdHMgbW9zdGx5IHRvCi0JICogImhhbmQgZXhhbWluZSIgdGhlIHN0cnVjdHVyZWREb2N1bWVudCBjcmVhdGVkIGZyb20gdGhlIGluaXRpYWwgc2V0VGV4dC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQRGlyZWN0aXZlKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSBHRU5FUklDX05PREVTX1JFUExBQ0VEX0VWRU5UX0NBU0U7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8JUBpbmNsdWRlJT4iOwotCQlTdHJpbmcgY2hhbmdlcyA9ICJUIjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjwlQGluY2x1ZGUlPlQiOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSAxMjsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCS8vICA/Ci0JCS8vCWFzc2VydFRydWUocmVzdWx0KTsgLy8gJiYgZXZlbnRSZXN1bHQpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8xLzIwMDEgNjo1MzowOCBQTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kMTAoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDEwOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPFREPjwvVEQ+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPFREPjwvVEQ+PFREPjwvVEQ+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDksIDksICIiKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMi8yMDAxIDEwOjU2OjA0IEFNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QxMSgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMTE7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8WFhYPjxURD48L1REPjxYWFg+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPFhYWD48VEQ+PC9URD48VEQ+PC9URD48WFhYPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCA1LCA5LCAiIik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzIvMjAwMSAxMDo1OTozOSBBTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kMTIoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDEyOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPFhYWD48VEQ+PC9URD48WFhYPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxYWFg+PFREPjwvVEQ+PFREPjwvVEQ+PFhYWD4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMTQsIDksICIiKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMi8yMDAxIDExOjAwOjU5IEFNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QxMygpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMTM7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8QUJDPjxKS0w+PEdIST4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8QUJDPjxERUY+PEdIST4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgNSwgNSwgIjxKS0w+Iik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzIvMjAwMSAxMTowMjoxOSBBTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kMTQoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDE0OwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPGE+XHJcciAgPC9hPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxhPlxyPGI+XHIgIDwvYT4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgNCwgMywgIiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8yLzIwMDEgMTE6MDM6NTMgQU0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1ldGhvZDE1KCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSAxNTsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxhPjxiID48L2I+PC9hPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxhPjxiPjwvYj48L2E+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDUsIDAsICIgIik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzIvMjAwMSAxMTowNToyNyBBTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kMTYoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDE2OwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPGE+PGIgej48L2I+PC9hPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxhPjxiID48L2I+PC9hPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCA2LCAwLCAieiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8yLzIwMDEgMTE6MDY6MzMgQU0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1ldGhvZDE3KCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSAxNzsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxhPjxiIHo9XCJ0XCI+PC9iPjwvYT4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8YT48YiB6PjwvYj48L2E+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDYsIDEsICJ6PVwidFwiIik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzIvMjAwMSAxMTowOToxNyBBTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kMTgoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDE4OwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPGE+PGMgej48L2I+PC9hPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxhPjxiIHo+PC9iPjwvYT4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgNCwgMywgImMgeiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8yLzIwMDEgMTE6MTA6MzAgQU0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1ldGhvZDE5KCkgIHsKLQotCQlldmVudENhc2UgPSAxOTsKLQkJc2V0VXBKU1AoKTsKLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxCT0RZPlxyPElNRyBzcmM9XCI8JT1ccjwvQk9EWT5cciIpOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPEJPRFk+XHI8SU1HIHNyYz1cIjwlPVFccjwvQk9EWT5cciI7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDIwLCAwLCAiUSIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzIvMjAwMSAxMToxMjowNSBBTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kMjAoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0KLQkJZXZlbnRDYXNlID0gMjA7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8U1RZTEUgVFlQRT1cInRleHQvY3NzXCI+XHI8IS0tXHJCT0RZIHtcclxyfS0tPlxyPC9TVFlMRT5cciI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxTVFlMRSBUWVBFPVwidGV4dC9jc3NcIj5ccjwhLS1cci0tPlxyPC9TVFlMRT5cciIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAyOCwgMSwgIlxyQk9EWSB7XHJccn0iKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMi8yMDAxIDExOjMyOjIzIEFNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QyMSgpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQotCQlldmVudENhc2UgPSAyMTsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjwhRE9DVFlQRSBIVE1MIFBVQkxJQyBcIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOXCIgXCJcIj5ccjxIVE1MPlxyPEhFQUQ+XHIgICAgICA8TUVUQSBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTFcIiBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCI+XHI8TUVUQSBuYW1lPVwiR0VORVJBVE9SXCIgY29udGVudD1cIklCTSBXZWJTcGhlcmUgUGFnZSBEZXNpZ25lciBWNC4xLjAgZm9yIFdpbmRvd3NcIj5ccjxNRVRBIGNvbnRlbnQ9XCJ0ZXh0L2Nzc1wiIGh0dHAtZXF1aXY9XCJDb250ZW50LVN0eWxlLVR5cGVcIj5ccjxUSVRMRT48L1RJVExFPlxyPFNUWUxFIFRZUEU9XCJ0ZXh0L2Nzc1wiPlxyPCEtLVxyQk9EWSB7XHJccn0tLT5ccjwvU1RZTEU+XHIiOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8IURPQ1RZUEUgSFRNTCBQVUJMSUMgXCItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTlwiIFwiXCI+XHI8SFRNTD5ccjxIRUFEPlxyICAgICAgPE1FVEEgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xXCIgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiPlxyPE1FVEEgbmFtZT1cIkdFTkVSQVRPUlwiIGNvbnRlbnQ9XCJJQk0gV2ViU3BoZXJlIFBhZ2UgRGVzaWduZXIgVjQuMS4wIGZvciBXaW5kb3dzXCI+XHI8TUVUQSBjb250ZW50PVwidGV4dC9jc3NcIiBodHRwLWVxdWl2PVwiQ29udGVudC1TdHlsZS1UeXBlXCI+XHI8VElUTEU+PC9USVRMRT5ccjxTVFlMRSBUWVBFPVwidGV4dC9jc3NcIj5ccjwhLS1cci0tPlxyPC9TVFlMRT5cciIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAzNDMsIDEsICJcckJPRFkge1xyXHJ9Iik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzEvMjAwMSA2OjQ1OjI5IFBNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2Q5KCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSA5OwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPFREPjwvVEQ+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPFREPjwvVEQ+PFREPjwvVEQ+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDAsIDksICIiKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMS8yMDAxIDY6NDU6MjkgUE0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1ldGhvZEF0dHJpYnV0ZU5hbWVSZXBsYWNlMSgpICB7Ci0KLQkJLy90ZXN0RXZlbnQgPSAyMjsKLQkJLy90YWdzID0gIjx0YWdOYW1lIGFiYz1cImJzZlwiPiI7Ci0JCS8vdGVzdFN0cnVjdHVyZWREb2N1bWVudFJlcGxhY2VtZW50KHRlc3RFdmVudCwgdGFncywgImFiY2RlIiwiPHRhZ05hbWUgYWJjZGU9XCJic2ZcIj4iLCA5LCAzKTsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSAyMjsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjx0YWdOYW1lIGFiYz1cImJzZlwiPiI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8dGFnTmFtZSBhYmNkZT1cImJzZlwiPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gImFiY2RlIjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gOTsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDM7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMS8yMDAxIDY6MzU6NDEgUE0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1vZGlmeU1pZGRsZSgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gNTsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxBQkM+PEpLTD48R0hJPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxBQkM+PERFRj48R0hJPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAwLCAxNSwgIjxBQkM+PEpLTD48R0hJPiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8xLzIwMDEgNjowNjozMyBQTSkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9DaGFuZ2UxKCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSAxOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPEFCQz48REVGPjxHSEk+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPEFCQz48REVGPjxHSEk+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDEwLCAwLCAiIik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzEvMjAwMSA2OjI2OjA1IFBNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROb0NoYW5nZTIoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8QUJDPjxERUY+PEdIST4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8QUJDPjxERUY+PEdIST4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMCwgMTUsICI8QUJDPjxERUY+PEdIST4iKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMS8yMDAxIDY6Mzg6MjUgUE0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFNpbWlsYXJTdGFydCgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gNjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxQPjxCPjwvQj48Qj48L0I+PC9QPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxQPjxCPjwvQj48L1A+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDMsIDAsICI8Qj48L0I+Iik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzEvMjAwMSA2OjQzOjI5IFBNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTaW1pbGFyU3RhcnRFbmQoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDg7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8UD48Qj48Qj48L0I+PC9CPjwvUD4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8UD48Qj48L0I+PC9QPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCA2LCAwLCAiPEI+PC9CPiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8xLzIwMDEgNjo0MTo0NiBQTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltaWxpYXJFbmQoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDc7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8UD48Qj48L0I+PFA+PFA+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPFA+PEI+PC9CPjxQPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAxMCwgMCwgIjxQPiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RUYWdSZURldGVjdGlvbigpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQkJLy8gKG5zZCkgMjAwMy4xMi4xMCAtIGNoYW5nZWQgZnJvbSBOb2Rlc1JlcGxhY2VkIHRvIFJlZ2lvbnNSZXBsYWNlZCBzaW5jZSB0aGUgc3RhcnQgY29uZGl0aW9uIHdhcyBjaGFuZ2VkCi0JCS8vIGZyb20gYmVpbmcgMyBkb2N1bWVudCByZWdpb25zIHRvIDQgc2luY2UgInNjcmlwdCIgaXMgbm90ICduZXN0YWJsZScKLQkJLy9ldmVudENhc2UgPSBHRU5FUklDX1JFR0lPTlNfUkVQTEFDRURfRVZFTlRfQ0FTRTsKLQkJCi0JCS8vIHJldmVydGVkIDIwMDQuMDQuMDUKLQkJZXZlbnRDYXNlID0gR0VORVJJQ19OT0RFU19SRVBMQUNFRF9FVkVOVF9DQVNFOwotLy8JCWV2ZW50Q2FzZSA9IEdFTkVSSUNfUkVHSU9OU19SRVBMQUNFRF9FVkVOVF9DQVNFOwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPHA+dGVzdDw8U0NSSVBUPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIlMiOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPHA+dGVzdDxTPFNDUklQVD4iOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSA4OwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJLy8gID8JYXNzZXJ0VHJ1ZShyZXN1bHQpOyAvLyAmJiBldmVudFJlc3VsdCk7Ci0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RUYWdSZURldGVjdGlvbjIoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IEdFTkVSSUNfUkVHSU9OX0NIQU5HRURfRVZFTlRfQ0FTRTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjxwPnRlc3Q8PFNDUklQVD4iOwotCQlTdHJpbmcgY2hhbmdlcyA9ICJTIjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxwPnRlc3Q8PFNDUklQVFM+IjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gMTU7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQkvLwlhc3NlcnRUcnVlKHJlc3VsdCk7IC8vICYmIGV2ZW50UmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JLyoqCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFRhZ1JlRGV0ZWN0aW9uMygpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gR0VORVJJQ19OT0RFU19SRVBMQUNFRF9FVkVOVF9DQVNFOwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPHA+dGVzdDx0ZXN0PiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIiUiOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPHA+dGVzdDwldGVzdD4iOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSA4OwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJLy8JYXNzZXJ0VHJ1ZShyZXN1bHQpOyAvLyAmJiBldmVudFJlc3VsdCk7Ci0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCX0KLQotCS8qKgotCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQlpZiAoZk1vZGVsICE9IG51bGwpCi0JCQlmTW9kZWwucmVtb3ZlRG9jdW1lbnRDaGFuZ2VkTGlzdGVuZXIocHJveHkpOwotCX0KLQotCS8qKgotCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQYWdlRGlyZWN0aXZlKCkgIHsKLQkJYm9vbGVhbiB2ZXJib3NlID0gZmFsc2U7Ci0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IDk5OTsgLy9HRU5FUklDX05PREVTX1JFUExBQ0VEX0VWRU5UX0NBU0U7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8JUBwYWdlIGxhbmc9XCJqYXZhXCIgPFNDUklQVD52YXIgPCUgdGVzdCAlPiBTdHJpbmc8L1NDUklQVD4iOwotCQlTdHJpbmcgY2hhbmdlcyA9ICJzIjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjwlQHBhZ2UgbGFuZz1cImphdmFzXCIgPFNDUklQVD52YXIgPCUgdGVzdCAlPiBTdHJpbmc8L1NDUklQVD4iOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSAxODsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWlmICh2ZXJib3NlKSB7Ci0JCQlEZWJ1Zy5kdW1wKGZNb2RlbCwgdHJ1ZSk7Ci0JCX0KLQotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCA9IGZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCS8vCWFzc2VydFRydWUocmVzdWx0KTsgLy8gJiYgZXZlbnRSZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCS8vYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCQlpZiAodmVyYm9zZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oInN0cnVjdHVyZWQgZG9jdW1lbnQ6Iik7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gc3RydWN0dXJlZERvY3VtZW50RXZlbnQuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlEZWJ1Zy5kdW1wKGRvY3VtZW50LCB0cnVlKTsKLQkJfQotCi0JCS8vIG5vdyBkZWxldGUgcXVvdGUKLQkJY2hhbmdlcyA9ICIiOwotCQlleHBlY3RlZFN0cmluZyA9ICI8JUBwYWdlIGxhbmc9XCJqYXZhc1wiIDxTQ1JJUFQ+dmFyIDwlIHRlc3QgJT4gU3RyaW5nPC9TQ1JJUFQ+IjsKLQkJc3RhcnRPZkNoYW5nZXMgPSAxOTsKLQkJbGVuZ3RoVG9SZXBsYWNlID0gMTsKLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlyZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0KLQkJaWYgKHZlcmJvc2UpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJzdHJ1Y3R1cmVkIGRvY3VtZW50OiIpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50LmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJRGVidWcuZHVtcChkb2N1bWVudCwgdHJ1ZSk7Ci0JCX0KLQotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFnZWRpcmVjdGl2ZS9UZXN0UGFnZURpcmVjdGl2ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYWdlZGlyZWN0aXZlL1Rlc3RQYWdlRGlyZWN0aXZlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NGY3MTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYWdlZGlyZWN0aXZlL1Rlc3RQYWdlRGlyZWN0aXZlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnBhZ2VkaXJlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmRvY3VtZW50LlBhZ2VEaXJlY3RpdmVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsubW9kZWxoYW5kbGVyLkVtYmVkZGVkVHlwZUhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVBZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLkVtYmVkZGVkWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnNzZW1vZGVscXVlcnkuTW9kZWxRdWVyeUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICovCi1wdWJsaWMgY2xhc3MgVGVzdFBhZ2VEaXJlY3RpdmUgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQljbGFzcyBNeUVtYmVkZGVkRmFjdG9yeSBpbXBsZW1lbnRzIElOb2RlQWRhcHRlckZhY3RvcnkgewotCi0JCXB1YmxpYyBJTm9kZUFkYXB0ZXIgYWRhcHQoSU5vZGVOb3RpZmllciBvYmplY3QpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJcHVibGljIElOb2RlQWRhcHRlckZhY3RvcnkgY29weSgpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgewotCQkJcmV0dXJuIHR5cGUgaW5zdGFuY2VvZiBNeUFkYXB0ZWRDbGFzczsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0JCQkvLyBub29wCi0JCX0KLQl9Ci0JCi0JY2xhc3MgTXlBZGFwdGVkQ2xhc3MgewotCQkvLyBkdW1teSBjbGFzcyBpcyBrZXkKLQl9Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFRlc3RQYWdlRGlyZWN0aXZlLgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFRlc3RQYWdlRGlyZWN0aXZlKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCYXNpY1BEKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQkvLyBOb3csIGFzc2lnbmluZyB1c2UgYSBwYWdlIGRpcmVjdGl2ZSwgYnV0IGxlYXZpbmcgZW1iZWRkZWQgdHlwZSB0aGUgc2FtZSBhcyBkZWZhdWx0Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQodGhpcywgIjwlQCBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sXCIgbGFuZ3VhZ2U9XCJqYXZhXCIgJT4iKTsKLQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgcGFnZURpcmVjdGl2ZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQotCQlTdHJpbmcgY29udGVudFR5cGUgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRDb250ZW50VHlwZSgpOwotCQlTdHJpbmcgbGFuZ3VhZ2UgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRMYW5ndWFnZSgpOwotCi0JCWFzc2VydFRydWUoImNvbnRlbnRUeXBlIHNob3VsZCBiZSBodG1sIiwgInRleHQvaHRtbCIuZXF1YWxzKGNvbnRlbnRUeXBlKSk7Ci0JCWFzc2VydFRydWUoImxhbmd1YWdlIHNob3VsZCBiZSBqYXZhIiwgImphdmEiLmVxdWFscyhsYW5ndWFnZSkpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJhc2ljQ2hhbmdlZFBEKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQkvLyBOb3csIGFzc2lnbmluZyB1c2UgYSBwYWdlIGRpcmVjdGl2ZSwgYnV0IGxlYXZpbmcgZW1iZWRkZWQgdHlwZSB0aGUgc2FtZSBhcyBkZWZhdWx0Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQodGhpcywgIjwlQCBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sXCIgbGFuZ3VhZ2U9XCJqYXZhXCIgJT4iKTsKLQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgcGFnZURpcmVjdGl2ZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQotCQlTdHJpbmcgY29udGVudFR5cGUgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRDb250ZW50VHlwZSgpOwotCQlTdHJpbmcgbGFuZ3VhZ2UgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRMYW5ndWFnZSgpOwotCi0JCWFzc2VydFRydWUoImNvbnRlbnRUeXBlIHNob3VsZCBiZSBodG1sIiwgInRleHQvaHRtbCIuZXF1YWxzKGNvbnRlbnRUeXBlKSk7Ci0JCWFzc2VydFRydWUoImxhbmd1YWdlIHNob3VsZCBiZSBqYXZhIiwgImphdmEiLmVxdWFscyhsYW5ndWFnZSkpOwotCi0JCS8vIGNoYW5nZSB0byBqYXZhc2NyaXB0Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnJlcGxhY2VUZXh0KHRoaXMsIDQzLCA0LCAiamF2YXNjcmlwdCIpOwotCi0JCWNvbnRlbnRUeXBlID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0Q29udGVudFR5cGUoKTsKLQkJbGFuZ3VhZ2UgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRMYW5ndWFnZSgpOwotCi0JCWFzc2VydFRydWUoImNvbnRlbnRUeXBlIHNob3VsZCBiZSBodG1sIiwgInRleHQvaHRtbCIuZXF1YWxzKGNvbnRlbnRUeXBlKSk7Ci0JCWFzc2VydFRydWUoImxhbmd1YWdlIHNob3VsZCBiZSBqYXZhc2NyaXB0IiwgImphdmFzY3JpcHQiLmVxdWFscyhsYW5ndWFnZSkpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJhc2ljQ2hhbmdlZFBEQmFjaygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0KLQkJLy8gTm93LCBhc3NpZ25pbmcgdXNlIGEgcGFnZSBkaXJlY3RpdmUsIGJ1dCBsZWF2aW5nIGVtYmVkZGVkIHR5cGUgdGhlIHNhbWUgYXMgZGVmYXVsdAotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRUZXh0KHRoaXMsICI8JUAgcGFnZSBjb250ZW50VHlwZT1cInRleHQvaHRtbFwiIGxhbmd1YWdlPVwiamF2YVwiICU+Iik7Ci0JCVBhZ2VEaXJlY3RpdmVBZGFwdGVyIHBhZ2VEaXJlY3RpdmVBZGFwdGVyID0gKFBhZ2VEaXJlY3RpdmVBZGFwdGVyKSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0KLQkJU3RyaW5nIGNvbnRlbnRUeXBlID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0Q29udGVudFR5cGUoKTsKLQkJU3RyaW5nIGxhbmd1YWdlID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0TGFuZ3VhZ2UoKTsKLQotCQlhc3NlcnRUcnVlKCJjb250ZW50VHlwZSBzaG91bGQgYmUgaHRtbCIsICJ0ZXh0L2h0bWwiLmVxdWFscyhjb250ZW50VHlwZSkpOwotCQlhc3NlcnRUcnVlKCJsYW5ndWFnZSBzaG91bGQgYmUgamF2YSIsICJqYXZhIi5lcXVhbHMobGFuZ3VhZ2UpKTsKLQotCQkvLyBjaGFuZ2UgdG8gamF2YXNjcmlwdAotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5yZXBsYWNlVGV4dCh0aGlzLCA0MywgNCwgImphdmFzY3JpcHQiKTsKLQotCQljb250ZW50VHlwZSA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldENvbnRlbnRUeXBlKCk7Ci0JCWxhbmd1YWdlID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0TGFuZ3VhZ2UoKTsKLQotCQlhc3NlcnRUcnVlKCJjb250ZW50VHlwZSBzaG91bGQgYmUgaHRtbCIsICJ0ZXh0L2h0bWwiLmVxdWFscyhjb250ZW50VHlwZSkpOwotCQlhc3NlcnRUcnVlKCJsYW5ndWFnZSBzaG91bGQgYmUgamF2YXNjcmlwdCIsICJqYXZhc2NyaXB0Ii5lcXVhbHMobGFuZ3VhZ2UpKTsKLQotCQkvLyBjaGFuZ2UgYmFjayB0byBqYXZhCi0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnJlcGxhY2VUZXh0KHRoaXMsIDQzLCAxMCwgImphdmEiKTsKLQotCQljb250ZW50VHlwZSA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldENvbnRlbnRUeXBlKCk7Ci0JCWxhbmd1YWdlID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0TGFuZ3VhZ2UoKTsKLQotCQlhc3NlcnRUcnVlKCJjb250ZW50VHlwZSBzaG91bGQgYmUgaHRtbCIsICJ0ZXh0L2h0bWwiLmVxdWFscyhjb250ZW50VHlwZSkpOwotCQlhc3NlcnRFcXVhbHMoImphdmEiLCBsYW5ndWFnZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTZXRFbWJlZGRlZFR5cGUoKXsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGNyZWF0ZVVubWFuYWdlZEhUTUxNb2RlbCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgKChJRE9NTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoUGFnZURpcmVjdGl2ZUFkYXB0ZXIuY2xhc3MpOwotCQlFbWJlZGRlZFR5cGVIYW5kbGVyIGVtYmVkZGVkWE1MSGFuZGxlciA9IG5ldyBFbWJlZGRlZFhNTCgpOwotCQlwYWdlRGlyZWN0aXZlQWRhcHRlci5zZXRFbWJlZGRlZFR5cGUoZW1iZWRkZWRYTUxIYW5kbGVyKTsKLQkJCi0JCUVtYmVkZGVkVHlwZUhhbmRsZXIgaGFuZGxlciA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldEVtYmVkZGVkVHlwZSgpOwotCQlhc3NlcnRUcnVlKCJpbmNvcnJlY3QgZW1iZWRkZWQgaGFuZGxlciIsIGhhbmRsZXIgPT0gZW1iZWRkZWRYTUxIYW5kbGVyKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEFkYXB0KCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVVbm1hbmFnZWRIVE1MTW9kZWwoKTsKLQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgcGFnZURpcmVjdGl2ZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCU5vZGUgb3duZXJOb2RlID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCi0JCU1vZGVsUXVlcnlBZGFwdGVyIGVtYmVkZGVkQWRhcHRlciA9IChNb2RlbFF1ZXJ5QWRhcHRlcikgcGFnZURpcmVjdGl2ZUFkYXB0ZXIuYWRhcHQoKElOb2RlTm90aWZpZXIpIG93bmVyTm9kZSwgTW9kZWxRdWVyeUFkYXB0ZXIuY2xhc3MpOwotCQlhc3NlcnROb3ROdWxsKCJjb3VsZCBub3QgYWRhcHQgZW1iZWRkZWQgYWRhcHRlciIsIGVtYmVkZGVkQWRhcHRlcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBZGRFbWJlZGRlZEZhY3RvcnkoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVVubWFuYWdlZEhUTUxNb2RlbCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQkJcGFnZURpcmVjdGl2ZUFkYXB0ZXIuYWRkRW1iZWRkZWRGYWN0b3J5KG5ldyBNeUVtYmVkZGVkRmFjdG9yeSgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNldExhbmd1YWdlKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVVbm1hbmFnZWRIVE1MTW9kZWwoKTsKLQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgcGFnZURpcmVjdGl2ZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCXBhZ2VEaXJlY3RpdmVBZGFwdGVyLnNldExhbmd1YWdlKCJ0ZXh0L3htbCIpOwotCQlhc3NlcnRUcnVlKCJzZXQgbGFuZ3VhZ2UgZmFpbGVkIiwgcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0TGFuZ3VhZ2UoKS5lcXVhbHMoInRleHQveG1sIikpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VGFyZ2V0KCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVVbm1hbmFnZWRIVE1MTW9kZWwoKTsKLQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgcGFnZURpcmVjdGl2ZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCUlOb2RlTm90aWZpZXIgbm90aWZpZXIgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRUYXJnZXQoKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGFyZ2V0IGlzIG51bGwiLCBub3RpZmllcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RSZWxlYXNlKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVVbm1hbmFnZWRIVE1MTW9kZWwoKTsKLQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgcGFnZURpcmVjdGl2ZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCXBhZ2VEaXJlY3RpdmVBZGFwdGVyLnJlbGVhc2UoKTsKLQkJLy8gY29uc2lkZXJlZCAic3VjY2VzcyIgaWYgZG9lc24ndCB0aHJvdWdoIGV4Y2VwdGlvbgotCQlhc3NlcnRUcnVlKHRydWUpOwotCX0KLQkKLQlwcml2YXRlIElET01Nb2RlbCBjcmVhdGVVbm1hbmFnZWRIVE1MTW9kZWwoKSB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0KLQkJLy8gTm93LCBhc3NpZ25pbmcgdXNlIGEgcGFnZSBkaXJlY3RpdmUsIGJ1dCBsZWF2aW5nIGVtYmVkZGVkIHR5cGUgdGhlIHNhbWUgYXMgZGVmYXVsdAotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRUZXh0KHRoaXMsICI8JUAgcGFnZSBjb250ZW50VHlwZT1cInRleHQvaHRtbFwiIGxhbmd1YWdlPVwiamF2YVwiICU+Iik7Ci0JCXJldHVybiAoSURPTU1vZGVsKW1vZGVsOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy9UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySlNQLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy9UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySlNQLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNWUxY2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckpTUC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5wYXJ0aXRpb25pbmc7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdCdWZmZXJJbnB1dFN0cmVhbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVHlwZWRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRleHQuSUpTUFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRleHQuSUNTU1BhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXh0LklIVE1MUGFydGl0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS51dGlscy5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGV4dC5JWE1MUGFydGl0aW9uczsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuRGVjaW1hbEZvcm1hdDsKLQotcHVibGljIGNsYXNzIFRlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJKU1AgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIGJvb2xlYW4gREVCVUdfUFJJTlRfUkVTVUxUID0gZmFsc2U7Ci0JcHJvdGVjdGVkIElUeXBlZFJlZ2lvbltdIHBhcnRpdGlvbnMgPSBudWxsOwotCi0JcHJpdmF0ZSBib29sZWFuIHVzZUZvcm1hdHRlciA9IHRydWU7Ci0JcHJvdGVjdGVkIERlY2ltYWxGb3JtYXQgZm9ybWF0dGVyOwotCi0JcHVibGljIFRlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJKU1AoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQgJiYgdXNlRm9ybWF0dGVyKQotCQkJZm9ybWF0dGVyID0gbmV3IERlY2ltYWxGb3JtYXQoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEpTUDEoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsgLy8gRFcgMDUvMDEvMjAwMyBJIG1vZGlmaWVkIHRoaXMgdGVzdCwgYWZ0ZXIgY3JlYXRpbmcgdGVzdDYsIAotCQkvLyBhbmQgY2hhbmdpbmcgcGFydGlvbmVyIHRvIHBpY2sgdXAgZW5kICo+IGFzIHBhcnQgb2YgcGFnZSBkaXJlY3RpdmUKLQkJLy8gcGFydGl0aW9uIChmb3IgaGlnaGxpZ2h0aW5nIHRvIHdvcmsgcmlnaHQpLgotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gODsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL2pzcC9leGFtcGxlMDEuanNwIik7Ci0JCWFzc2VydFRydWUoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgblBhcnRpdGlvbnMgPT0gZXhwZWN0ZWRQYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SUpTUFBhcnRpdGlvbnMuSlNQX0RJUkVDVElWRSwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0RJUkVDVElWRSwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9KQVZBLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFR9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQMigpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gMTE7Ci0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy9qc3AvZXhhbXBsZTAyLmpzcCIpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBudW1iZXIgb2YgcGFydGl0aW9ucyIsIG5QYXJ0aXRpb25zID09IGV4cGVjdGVkUGFydGl0aW9ucyk7Ci0JCWNoZWNrU2VhbXMoKTsKLQkJdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfSkFWQSwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9DT01NRU5ULCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0pBVkEsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCx9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQMygpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gNTsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL2pzcC9leGFtcGxlMDMuanNwIik7Ci0JCWFzc2VydFRydWUoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgblBhcnRpdGlvbnMgPT0gZXhwZWN0ZWRQYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUhUTUxQYXJ0aXRpb25zLlNDUklQVCwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUNTU1BhcnRpdGlvbnMuU1RZTEUsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsfSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUDQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDg7Ci0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy9qc3AvZXhhbXBsZTA0LmpzcCIpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBudW1iZXIgb2YgcGFydGl0aW9ucyIsIG5QYXJ0aXRpb25zID09IGV4cGVjdGVkUGFydGl0aW9ucyk7Ci0JCWNoZWNrU2VhbXMoKTsKLQkJdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfSkFWQSwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCAib3JnLmVjbGlwc2Uud3N0Lmh0bWwuU0NSSVBULmxhbmd1YWdlLk1ZTEFOR1VBR0UiLCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSlNQUGFydGl0aW9ucy5KU1BfQ09NTUVOVCwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVH0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1A1KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWludCBleHBlY3RlZFBhcnRpdGlvbnMgPSAxNzsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL2pzcC9leGFtcGxlMDUuanNwIik7Ci0JCWFzc2VydFRydWUoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgblBhcnRpdGlvbnMgPT0gZXhwZWN0ZWRQYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUhUTUxQYXJ0aXRpb25zLlNDUklQVCwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9KQVZBLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25zLkpTUF9DT01NRU5ULCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0pBVkEsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9KQVZBLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFR9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQNigpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gMTsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL2pzcC9leGFtcGxlMDYuanNwIik7Ci0JCWFzc2VydFRydWUoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgblBhcnRpdGlvbnMgPT0gZXhwZWN0ZWRQYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SUpTUFBhcnRpdGlvbnMuSlNQX0RJUkVDVElWRSx9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UGVyZkpTUCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQkvL2ludCBleHBlY3RlZFBhcnRpdGlvbnMgPSA2OwotCQkvL1hYWCBGSVhNRSEgCi0JCS8vbnQgblBhcnRpdGlvbnMgPSAKLQkJCWRvVGltZWRDb21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL2pzcC9jb21wYW55MzAway5qc3AiKTsKLQkJLy9hc3NlcnRUcnVlKCJ3cm9uZyBudW1iZXIgb2YgcGFydGl0aW9ucyIsIG5QYXJ0aXRpb25zID09IGV4cGVjdGVkUGFydGl0aW9ucyk7Ci0JCS8vY2hlY2tTZWFtcygpOwotCQkvL3ZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJWE1MUGFydGl0aW9ucy5TVF9YTUxfUEksIElYTUxQYXJ0aXRpb25zLlNUX0RFRkFVTFRfWE1MLCBJWE1MUGFydGl0aW9ucy5TVF9YTUxfREVDTEFSQVRJT04sIElYTUxQYXJ0aXRpb25zLlNUX0RFRkFVTFRfWE1MLCBJWE1MUGFydGl0aW9ucy5TVF9YTUxfQ09NTUVOVCwgSVhNTFBhcnRpdGlvbnMuU1RfREVGQVVMVF9YTUx9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1wdHkoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDE7Ci0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy94bWwvZW1wdHkueG1sIik7Ci0JCWFzc2VydFRydWUoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgblBhcnRpdGlvbnMgPT0gZXhwZWN0ZWRQYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFR9KTsKLQl9Ci0KLQkvKioKLQkgKiBFbnN1cmUgdGhhdCB0aGUgY3VycmVudCBsaXN0IG9mIHBhcnRpdGlvbnMgYXJlIGFsbCBhZGphY2VudCB0byBvbmUgYW5vdGhlcgotCSAqLwotCXByb3RlY3RlZCB2b2lkIGNoZWNrU2VhbXMoKSB7Ci0JCWlmIChwYXJ0aXRpb25zID09IG51bGwpCi0JCQlyZXR1cm47Ci0JCWludCBvZmZzZXQgPSAwOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscygicGFydGl0aW9ucyBhcmUgbm90IGNvbnRpZ3VvdXMhIiwgcGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSwgb2Zmc2V0KTsKLQkJCW9mZnNldCA9IHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCkgKyBwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ29tcHV0ZSB0aGUgcGFydGl0aW9ucyBmb3IgdGhlIGdpdmVuIGZpbGVuYW1lIHVzaW5nIHRoZSBkZWZhdWx0IHBhcnRpdGlvbmVyCi0JICogZm9yIHRoYXQgZmlsZSB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEByZXR1cm4gaW50Ci0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgaW50IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJaWYgKGluU3RyZWFtID09IG51bGwpCi0JCQlpblN0cmVhbSA9IG5ldyBTdHJpbmdCdWZmZXJJbnB1dFN0cmVhbSgiIik7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGZpbGVuYW1lLCBpblN0cmVhbSwgbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCAmJiB1c2VGb3JtYXR0ZXIpIHsKLQkJCWRvdWJsZSBiYXNlVGVuID0gTWF0aC5sb2coMTApOwotCQkJZm9ybWF0dGVyLnNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKChpbnQpIChNYXRoLmxvZyhzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCkpIC8gYmFzZVRlbikgKyAxKTsKLQkJCWZvcm1hdHRlci5zZXRHcm91cGluZ1VzZWQoZmFsc2UpOwotCQl9Ci0KLQkJcGFydGl0aW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5jb21wdXRlUGFydGl0aW9uaW5nKDAsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQpIHsKLQkJCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5maWxlbmFtZTogIiArIGZpbGVuYW1lKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJCXRyeSB7Ci0JCQkJCWNvbnRlbnRzID0gc3RydWN0dXJlZERvY3VtZW50LmdldChwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpLCBwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCQkJY29udGVudHMgPSAiKmVycm9yKiI7Ci0JCQkJfQotCQkJCWlmICh1c2VGb3JtYXR0ZXIpCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihmb3JtYXR0ZXIuZm9ybWF0KHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCkpICsgIjoiICsgZm9ybWF0dGVyLmZvcm1hdChwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKSArICIgLSAiICsgcGFydGl0aW9uc1tpXS5nZXRUeXBlKCkgKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCQkJZWxzZQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4ocGFydGl0aW9uc1tpXSArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJCX0KLQkJfQotCQljaGVja1NlYW1zKCk7Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQlpblN0cmVhbS5jbG9zZSgpOwotCi0JCWlmIChwYXJ0aXRpb25zID09IG51bGwpCi0JCQlyZXR1cm4gLTE7Ci0JCXJldHVybiBwYXJ0aXRpb25zLmxlbmd0aDsKLQl9Ci0KLQkvKioKLQkgKiBDb21wdXRlIHRoZSBwYXJ0aXRpb25zIGZvciB0aGUgZ2l2ZW4gZmlsZW5hbWUgdXNpbmcgdGhlIGRlZmF1bHQgcGFydGl0aW9uZXIKLQkgKiBmb3IgdGhhdCBmaWxlIHR5cGUuCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogQHJldHVybiBpbnQKLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBpbnQgZG9UaW1lZENvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCWluU3RyZWFtID0gbmV3IFN0cmluZ0J1ZmZlcklucHV0U3RyZWFtKCIiKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQkKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCAmJiB1c2VGb3JtYXR0ZXIpIHsKLQkJCWRvdWJsZSBiYXNlVGVuID0gTWF0aC5sb2coMTApOwotCQkJZm9ybWF0dGVyLnNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKChpbnQpIChNYXRoLmxvZyhzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCkpIC8gYmFzZVRlbikgKyAxKTsKLQkJCWZvcm1hdHRlci5zZXRHcm91cGluZ1VzZWQoZmFsc2UpOwotCQl9Ci0JCWxvbmcgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCXBhcnRpdGlvbnMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuY29tcHV0ZVBhcnRpdGlvbmluZygwLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCkpOwotCQlsb25nIGVuZFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCkgewotCQkJCi0JCQlTdHJpbmcgY29udGVudHMgPSBudWxsOwotCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJcbmZpbGVuYW1lOiAiICsgZmlsZW5hbWUpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJUaW1lIHRvIGNvbXB1dGUgIiArIHBhcnRpdGlvbnMubGVuZ3RoICsgIjogIiArIChlbmRUaW1lLXN0YXJ0VGltZSkgKyAiIChtc2VjcykiKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJCXRyeSB7Ci0JCQkJCWNvbnRlbnRzID0gc3RydWN0dXJlZERvY3VtZW50LmdldChwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpLCBwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCQkJY29udGVudHMgPSAiKmVycm9yKiI7Ci0JCQkJfQotCQkJCWlmICh1c2VGb3JtYXR0ZXIpCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihmb3JtYXR0ZXIuZm9ybWF0KHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCkpICsgIjoiICsgZm9ybWF0dGVyLmZvcm1hdChwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKSArICIgLSAiICsgcGFydGl0aW9uc1tpXS5nZXRUeXBlKCkgKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCQkJZWxzZQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4ocGFydGl0aW9uc1tpXSArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJCX0KLQkJfQotCQljaGVja1NlYW1zKCk7Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQlpblN0cmVhbS5jbG9zZSgpOwotCQotCQlpZiAocGFydGl0aW9ucyA9PSBudWxsKQotCQkJcmV0dXJuIC0xOwotCQlyZXR1cm4gcGFydGl0aW9ucy5sZW5ndGg7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBzaW5nbGUgcGFydGl0aW9uIGF0IHRoZSBnaXZlbiBvZmZzZXQgZm9yIHRoZSBnaXZlbiBmaWxlLCB1c2luZyB0aGUKLQkgKiBkZWZhdWx0IHBhcnRpdGlvbmVyIGZvciB0aGF0IGZpbGUgdHlwZS4gIFRoaXMgdGVzdCBhbGxvd3MgZm9yIHZlcmlmeWluZyB0aGUgemVyby1sZW5ndGgKLQkgKiBwYXJ0aXRpb25pbmcgYmVoYXZpb3IuCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogQHBhcmFtIG9mZnNldAotCSAqIEByZXR1cm4gSVR5cGVkUmVnaW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgSVR5cGVkUmVnaW9uIGdldFBhcnRpdGlvblRlc3QoU3RyaW5nIGZpbGVuYW1lLCBpbnQgb2Zmc2V0KSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGZpbGVuYW1lLCBpblN0cmVhbSwgbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQlwYXJ0aXRpb25zID0gbnVsbDsKLQkJSVR5cGVkUmVnaW9uIHBhcnRpdGlvbiA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRQYXJ0aXRpb24ob2Zmc2V0KTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCkgewotCQkJU3RyaW5nIGNvbnRlbnRzID0gbnVsbDsKLQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJcbmZpbGVuYW1lOiAiICsgZmlsZW5hbWUpOwotCQkJdHJ5IHsKLQkJCQljb250ZW50cyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXQocGFydGl0aW9uLmdldE9mZnNldCgpLCBwYXJ0aXRpb24uZ2V0TGVuZ3RoKCkpOwotCQkJfQotCQkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCQljb250ZW50cyA9ICIqZXJyb3IqIjsKLQkJCX0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbihwYXJ0aXRpb24gKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCX0KLQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCWluU3RyZWFtLmNsb3NlKCk7Ci0KLQkJcmV0dXJuIHBhcnRpdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBWZXJpZmllcyB0aGF0IHRoZSBnaXZlbiBwYXJ0aXRpb25zIGFyZSBvZiB0aGUgZ2l2ZW4gcGFydGl0aW9uIHR5cGVzCi0JICogQHBhcmFtIHR5cGVkUmVnaW9ucwotCSAqIEBwYXJhbSB0eXBlcwotCSAqLwotCXByb3RlY3RlZCB2b2lkIHZlcmlmeVBhcnRpdGlvblR5cGVzKElUeXBlZFJlZ2lvbiBhY3R1YWxUeXBlZFJlZ2lvbnNbXSwgU3RyaW5nIGV4cGVjdGVkVHlwZXNbXSkgewotCQlmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkVHlwZXMubGVuZ3RoOyBpKyspCi0JCQlhc3NlcnRFcXVhbHMoInBhcnRpdGlvbiB0eXBlIG1pc21hdGNoZWQiLCBleHBlY3RlZFR5cGVzW2ldLCBhY3R1YWxUeXBlZFJlZ2lvbnNbaV0uZ2V0VHlwZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBWZXJpZmllcyB0aGF0IHRoZSBnaXZlbiBwYXJ0aXRpb25zIGJlZ2luIGF0IHRoZSBnaXZlbiBvZmZzZXRzCi0JICogQHBhcmFtIHR5cGVkUmVnaW9ucwotCSAqIEBwYXJhbSB0eXBlcwotCSAqLwotCXByb3RlY3RlZCB2b2lkIHZlcmlmeVBhcnRpdGlvblJlZ2lvbnMoSVR5cGVkUmVnaW9uIHR5cGVkUmVnaW9uc1tdLCBpbnQgb2Zmc2V0c1tdKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgb2Zmc2V0cy5sZW5ndGg7IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKCJvZmZzZXQgbWlzbWF0Y2hlZCIsIHR5cGVkUmVnaW9uc1tpXS5nZXRPZmZzZXQoKSwgb2Zmc2V0c1tpXSk7Ci0JCQlpZiAoaSA+IDApIHsKLQkJCQlhc3NlcnRFcXVhbHMoImxlbmd0aHMgbWlzYWxpZ25lZCIsIHR5cGVkUmVnaW9uc1tpXS5nZXRPZmZzZXQoKSwgdHlwZWRSZWdpb25zW2kgLSAxXS5nZXRPZmZzZXQoKSArIHR5cGVkUmVnaW9uc1tpIC0gMV0uZ2V0TGVuZ3RoKCkpOwotCQkJfQotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvY29tcGFueTMwMGsuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9jb21wYW55MzAway5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZGY1ZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9jb21wYW55MzAway5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4MDk5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4NCi08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+DQotCTxoZWFkPg0KLQkJPHRpdGxlPlRoZSBVbHRpbWF0ZSBBIENvbXBhbnk8L3RpdGxlPg0KLQk8L2hlYWQ+DQotCTxib2R5Pg0KLQkJPHA+DQotCQkJPGltZyBzcmM9Ii4uL2Jhbm5lci5naWYiIGhlaWdodD0iNTEiIHdpZHRoPSI2NTkiIGFsdD0iIiAvPg0KLQkJPC9wPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+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+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+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTxwPg0KLQkJCTxpbWcgc3JjPSIuLi9mb290ZXIuZ2lmIiBoZWlnaHQ9IjI1IiB3aWR0aD0iNjU5IiBhbHQ9IiIgLz4NCi0JCTwvcD4NCi0JPC9ib2R5Pg0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwMS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwMS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjN2M1NGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDEuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sIiAlPg0KLTxqc3A6ZGlyZWN0aXZlLnBhZ2UgY29udGVudFR5cGU9dGV4dC9odG1sIiAvPg0KLTxIVE1MIGlkPSI8JSBqYXZhIGNvZGUgInN0cmluZyIgc2VjdGlvbiAlPiI+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDIuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmQwZWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTAyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotICAgICAgIDxwPg0KLSAgICAgICA8JSB0ZXN0aW5nICIxMjMiIHRlc3QgdGVzdDsNCi0gICAgICAgLy8gdGVzdA0KLSAgICAgICBvbmUgdHdvIHRocmVlDQotICAgICAgICU+DQotICAgICAgIDwhLS0gNzggLS0+DQotICAgICAgIDx0YWJsZSBpZCA9ICI8JSB0ZXN0ICU+IiBhdHRyaWI9anVuaz4NCi0gICAgICAgPC9CT0RZPg0KLSAgICAgICA8L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDMuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmZkMzEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTAzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPEhUTUw+DQotPFNDUklQVD4NCi1qYXZhIHNjcmlwdCBzZWN0aW9uDQotPC9TQ1JJUFQ+DQotPFNUWUxFPg0KLSAgIHN0eWxlIHNlY3Rpb24NCi0gICA8L1NUWUxFPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MDg3MDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08c2NyaXB0IGxhbmd1YWdlPSJNeUxhbmd1YWdlIj48JT0gIkEiICU+ICAgICAgDQotIDwvU0NSSVBUPg0KLTwlLS0gLS0lPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTA1LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTA1LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTYxNTFkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08Zm9ybWF0dGluZz4NCi08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQotLy8JQ29weXJpZ2h0IDIwMDAsMjAwMSBieSB3d3cuZXhhbXBsZS5jb20NCi0gIGRvY3VtZW50LlVSTCA9ImEiOw0KLTwvc2NyaXB0Pg0KLQ0KLTwlIFN0cmluZyBhID0gImEiOyAlPg0KLTwlLS0gdGVzdCBjb21tZW50IC0tJT4NCi08JT0gDQotDQotIiAgIGFhYWFhICINCi0NCi0lPg0KLTwlISAlPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTA2LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTA2LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUxNzNmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08JUBwYWdlIGxhbmd1YWdlPSJqYXZhc2NyaXB0IiAlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcmVnaXN0cnkvQWRhcHRlckZhY3RvcnlSZWdpc3RyeVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcmVnaXN0cnkvQWRhcHRlckZhY3RvcnlSZWdpc3RyeVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmEyZWI2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3JlZ2lzdHJ5L0FkYXB0ZXJGYWN0b3J5UmVnaXN0cnlUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnJlZ2lzdHJ5OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckNTUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JIVE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwucmVnaXN0cnkuQWRhcHRlckZhY3RvcnlSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UmVnaXN0cnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotCi0vKioKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIENMQVNTTkFNRV9IVE1MX0ZBQ1RPUlkgPSAib3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkuaW50ZXJuYWwucmVnaXN0cnkuQWRhcHRlckZhY3RvcnlQcm92aWRlckZvckhUTUwiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIENMQVNTTkFNRV9EVERfRkFDVE9SWSA9ICJvcmcuZWNsaXBzZS53c3QuZHRkLnVpLmludGVybmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJGb3JEVEQiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIENMQVNTTkFNRV9KU1BfRkFDVE9SWSA9ICJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLmludGVybmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJGb3JKU1AiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIENMQVNTTkFNRV9DU1NfRkFDVE9SWSA9ICJvcmcuZWNsaXBzZS53c3QuY3NzLnVpLmludGVybmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJDU1MiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIENMQVNTTkFNRV9YTUxfRkFDVE9SWSA9ICJvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJGb3JYTUwiOwotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlKCkgewotCQlBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5IGluc3RhbmNlID0gQWRhcHRlckZhY3RvcnlSZWdpc3RyeUltcGwuZ2V0SW5zdGFuY2UoKTsKLQkJYXNzZXJ0Tm90TnVsbChpbnN0YW5jZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEFsbEZhY3RvcmllcygpIHsKLQkJQWRhcHRlckZhY3RvcnlSZWdpc3RyeSBpbnN0YW5jZSA9IEFkYXB0ZXJGYWN0b3J5UmVnaXN0cnlJbXBsLmdldEluc3RhbmNlKCk7Ci0JCUl0ZXJhdG9yIGl0ID0gaW5zdGFuY2UuZ2V0QWRhcHRlckZhY3RvcmllcygpOwotCQlPYmplY3QgcHJvdmlkZXIgPSBudWxsOwotCi0JCS8vIGFsbCBwcm92aWRlcnMgZXhwZWN0ZWQgY2xhc3NuYW1lcyBhZGRlZCBoZXJlCi0JCUxpc3Qga25vd24gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWtub3duLmFkZChDTEFTU05BTUVfSFRNTF9GQUNUT1JZKTsKLQkJa25vd24uYWRkKENMQVNTTkFNRV9EVERfRkFDVE9SWSk7Ci0JCWtub3duLmFkZChDTEFTU05BTUVfSlNQX0ZBQ1RPUlkpOwotCQlrbm93bi5hZGQoQ0xBU1NOQU1FX0NTU19GQUNUT1JZKTsKLQkJa25vd24uYWRkKENMQVNTTkFNRV9YTUxfRkFDVE9SWSk7Ci0KLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJcHJvdmlkZXIgPSBpdC5uZXh0KCk7Ci0JCQlrbm93bi5yZW1vdmUocHJvdmlkZXIuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKHByb3ZpZGVyLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLQkJfQotCi0JCS8vIHNob3VsZCBoYXZlIGVuY291bnRlcmVkIGFsbCBleHBlY3RlZCBhZGFwdGVyIGZhY3Rvcmllcy4KLQkJYXNzZXJ0RXF1YWxzKCJ1bmtub3duIChleHRyYSkgYWRhcHRlciBmYWN0b3JpZXMgZm91bmQiLCAwLCBrbm93bi5zaXplKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRGYWN0b3JpZXNYTUwoKSB7Ci0KLQkJTGlzdCBrbm93biA9IG5ldyBBcnJheUxpc3QoKTsKLQkJa25vd24uYWRkKENMQVNTTkFNRV9YTUxfRkFDVE9SWSk7Ci0KLQkJZ2V0RmFjdG9yaWVzRm9yQ29udGVudFR5cGUoa25vd24sIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwsIENMQVNTTkFNRV9IVE1MX0ZBQ1RPUlkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRGYWN0b3JpZXNIVE1MKCkgewotCi0JCUxpc3Qga25vd24gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWtub3duLmFkZChDTEFTU05BTUVfSlNQX0ZBQ1RPUlkpOwotCi0JCWdldEZhY3Rvcmllc0ZvckNvbnRlbnRUeXBlKGtub3duLCBDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQLCBDTEFTU05BTUVfWE1MX0ZBQ1RPUlkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRGYWN0b3JpZXNKU1AoKSB7Ci0KLQkJTGlzdCBrbm93biA9IG5ldyBBcnJheUxpc3QoKTsKLQkJa25vd24uYWRkKENMQVNTTkFNRV9IVE1MX0ZBQ1RPUlkpOwotCi0JCWdldEZhY3Rvcmllc0ZvckNvbnRlbnRUeXBlKGtub3duLCBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwsIENMQVNTTkFNRV9EVERfRkFDVE9SWSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEZhY3Rvcmllc0RURCgpIHsKLQotCQlMaXN0IGtub3duID0gbmV3IEFycmF5TGlzdCgpOwotCQlrbm93bi5hZGQoQ0xBU1NOQU1FX0RURF9GQUNUT1JZKTsKLQotCQlnZXRGYWN0b3JpZXNGb3JDb250ZW50VHlwZShrbm93biwgIm9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5kdGRzb3VyY2UiLCBDTEFTU05BTUVfSFRNTF9GQUNUT1JZKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RmFjdG9yaWVzQ1NTKCkgewotCi0JCUxpc3Qga25vd24gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWtub3duLmFkZChDTEFTU05BTUVfQ1NTX0ZBQ1RPUlkpOwotCi0JCWdldEZhY3Rvcmllc0ZvckNvbnRlbnRUeXBlKGtub3duLCBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTLCBDTEFTU05BTUVfSlNQX0ZBQ1RPUlkpOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmUgdG8gYSBleHBlY3RlZCBsaXN0IG9mIEFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJzIChtYXkgYmUgc21hbGxlcgotCSAqIHRoYW4gdGhlIGFjdHVhbCBsaXN0KSBmb3IgYSBnaXZlbiBjb250ZW50VHlwZUlkLiBBdCBtaW5pbXVtIHRoZXNlCi0JICogZXhwZWN0ZWQgcHJvdmlkZXJzIG11c3QgYmUgZm91bmQgdG8gcGFzcy4KLQkgKiAKLQkgKiBAcGFyYW0gZXhwZWN0ZWQKLQkgKiBAcGFyYW0gY29udGVudFR5cGVJZAotCSAqLwotCXByaXZhdGUgdm9pZCBnZXRGYWN0b3JpZXNGb3JDb250ZW50VHlwZShMaXN0IGV4cGVjdGVkLCBTdHJpbmcgY29udGVudFR5cGVJZCwgU3RyaW5nIG5vdEV4cGVjdGVkQ2xhc3NuYW1lKSB7Ci0KLQkJQWRhcHRlckZhY3RvcnlSZWdpc3RyeUltcGwgaW5zdGFuY2UgPSAoQWRhcHRlckZhY3RvcnlSZWdpc3RyeUltcGwpIEFkYXB0ZXJGYWN0b3J5UmVnaXN0cnlJbXBsLmdldEluc3RhbmNlKCk7Ci0JCUl0ZXJhdG9yIGl0ID0gaW5zdGFuY2UuZ2V0QWRhcHRlckZhY3Rvcmllcyhjb250ZW50VHlwZUlkKTsKLQkJT2JqZWN0IHByb3ZpZGVyID0gbnVsbDsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJcHJvdmlkZXIgPSBpdC5uZXh0KCk7Ci0JCQlleHBlY3RlZC5yZW1vdmUocHJvdmlkZXIuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotCi0JCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oImVuY291bnRlcmVkIHByb3ZpZGVyOiAiICsKLQkJCS8vIHByb3ZpZGVyLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLQkJCWFzc2VydFRydWUoIiFwcm92aWRlcjogIiArIG5vdEV4cGVjdGVkQ2xhc3NuYW1lICsgIiBzaG91bGRuJ3QgYmUgaW4gdGhlIGxpc3QhIiwgIW5vdEV4cGVjdGVkQ2xhc3NuYW1lLmVxdWFscyhwcm92aWRlci5nZXRDbGFzcygpLmdldE5hbWUoKSkpOwotCQl9Ci0JCS8vIHdlIHNob3VsZCBoYXZlIGF0IGxlYXN0IGZvdW5kIHRoZSBleHBlY3RlZCBmYWN0b3J5IChvciBmYWN0b3JpZXMpCi0JCWFzc2VydFRydWUoImV4dHJhIHByb3ZpZGVycyAoZXhwZWN0ZWQgbm9uZSk6ICIgKyBleHBlY3RlZCwgZXhwZWN0ZWQuaXNFbXB0eSgpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3NlYXJjaC9KU1BTZWFyY2hUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9zZWFyY2gvSlNQU2VhcmNoVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBmYjIwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3NlYXJjaC9KU1BTZWFyY2hUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5zZWFyY2g7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLnNlYXJjaC5JSmF2YVNlYXJjaENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5zZWFyY2guU2VhcmNoRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuc2VhcmNoLlNlYXJjaFBhdHRlcm47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSUpTUFRyYW5zbGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5KU1BUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLnNlYXJjaC5KU1BTZWFyY2hTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5zZWFyY2guSlNQU2VhcmNoU3VwcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLmludGVybmFsLmphdmEuc2VhcmNoLkJhc2ljSlNQU2VhcmNoUmVxdWVzdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2UuZGF0YWxvY2F0aW9uLkxvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi0KLS8qKgotICogVGVzdHMgZm9yIEpTUFNlYXJjaFN1cHBvcnQKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBKU1BTZWFyY2hUZXN0cyBleHRlbmRzIFRlc3RDYXNlIGltcGxlbWVudHMgSUphdmFTZWFyY2hDb25zdGFudHMgewotCi0JLyoqCi0JICogdG8gYWNjZXB0IHNlYXJjaCBtYXRjaGVzCi0JICogYWRkQ2hlY2tNYXRjaCguLi4pIGZvciBtYXRjaGVzIHlvdSBleHBlY3QsIHJ1biBzZWFyY2ggc3VwcG9ydCwgY2hlY2tWYWxpZCgpIHRvIHNlZSBpZiBhbGwgZXhwZWN0ZWQgZ290IGhpdAotCSAqLwotCWNsYXNzIFRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IgZXh0ZW5kcyBCYXNpY0pTUFNlYXJjaFJlcXVlc3RvciB7Ci0KLQkJcHJpdmF0ZSBMaXN0IG1hdGNoZXMgPSBudWxsOwotCi0JCXB1YmxpYyBUZXN0SnNwU2VhcmNoUmVxdWVzdG9yKCkgewotCQkJdGhpcy5tYXRjaGVzID0gbmV3IEFycmF5TGlzdCgpOwotCQl9Ci0KLQkJLy8gY2FsbGVkIGJ5IHNlYXJjaCBmcmFtZXdvcmsKLQkJcHJvdGVjdGVkIHZvaWQgYWRkU2VhcmNoTWF0Y2goSVN0cnVjdHVyZWREb2N1bWVudCBqc3BEb2N1bWVudCwgSUZpbGUganNwRmlsZSwgaW50IGpzcFN0YXJ0LCBpbnQganNwRW5kLCBTdHJpbmcganNwVGV4dCkgewotCQkJdGhpcy5tYXRjaGVzLnJlbW92ZShuZXcgVGVzdFNlYXJjaE1hdGNoKGpzcEZpbGUuZ2V0TmFtZSgpLCBqc3BTdGFydCwganNwRW5kKSk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBiZWdpblJlcG9ydGluZygpIHsKLQkJCS8vIGRvIG5vdGhpbmcgc2luY2Ugd2UgaGF2ZSBubyBVSSwgZG9uJ3QgYWNjZXNzIElTZWFyY2hSZXN1bHRWaWV3Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBlbmRSZXBvcnRpbmcoKSB7Ci0JCQkvLyBkbyBub3RoaW5nIHNpbmNlIHdlIGhhdmUgbm8gVUksIGRvbid0IGFjY2VzcyBJU2VhcmNoUmVzdWx0VmlldwotCQl9Ci0KLQkJcHVibGljIHZvaWQgYWRkQ2hlY2tNYXRjaChTdHJpbmcgZmlsZW5hbWUsIGludCBqc3BTdGFydCwgaW50IGpzcEVuZCkgewotCQkJdGhpcy5tYXRjaGVzLmFkZChuZXcgVGVzdFNlYXJjaE1hdGNoKGZpbGVuYW1lLCBqc3BTdGFydCwganNwRW5kKSk7Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBjaGVja1ZhbGlkKCkgewotCQkJcmV0dXJuIHRoaXMubWF0Y2hlcy5pc0VtcHR5KCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBjbGVhcigpIHsKLQkJCXRoaXMubWF0Y2hlcy5jbGVhcigpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogdG8gdmFsaWRhdGUgc2VhcmNoIG1hdGNoZXMgKGNoZWNrTWF0Y2ggbWF0Y2hlcyBhIHNlYXJjaCBoaXQpCi0JICovCi0JY2xhc3MgVGVzdFNlYXJjaE1hdGNoIHsKLQotCQlwdWJsaWMgU3RyaW5nIGZpbGVuYW1lID0gbnVsbDsKLQkJcHVibGljIGludCBqc3BTdGFydCA9IC0xOwotCQlwdWJsaWMgaW50IGpzcEVuZCA9IC0xOwotCi0JCXB1YmxpYyBUZXN0U2VhcmNoTWF0Y2goU3RyaW5nIGZpbGVuYW1lLCBpbnQganNwU3RhcnQsIGludCBqc3BFbmQpIHsKLQkJCXRoaXMuZmlsZW5hbWUgPSBmaWxlbmFtZTsKLQkJCXRoaXMuanNwU3RhcnQgPSBqc3BTdGFydDsKLQkJCXRoaXMuanNwRW5kID0ganNwRW5kOwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKLQkJCWlmICghKG9iaiBpbnN0YW5jZW9mIFRlc3RTZWFyY2hNYXRjaCkpCi0JCQkJcmV0dXJuIGZhbHNlOwotCi0JCQlUZXN0U2VhcmNoTWF0Y2ggcG9zc2libGUgPSAoVGVzdFNlYXJjaE1hdGNoKSBvYmo7Ci0JCQlyZXR1cm4gdGhpcy5maWxlbmFtZS5lcXVhbHNJZ25vcmVDYXNlKHBvc3NpYmxlLmZpbGVuYW1lKSAmJiB0aGlzLmpzcFN0YXJ0ID09IHBvc3NpYmxlLmpzcFN0YXJ0ICYmIHRoaXMuanNwRW5kID09IHBvc3NpYmxlLmpzcEVuZDsKLQkJfQotCX0KLQotCXByaXZhdGUgUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQotCXB1YmxpYyBKU1BTZWFyY2hUZXN0cygpIHsKLQkJc3VwZXIoIkpTUCBTZWFyY2ggVGVzdHMiKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQlpZiAoIXRoaXMuaXNTZXR1cCkgewotCQkJZG9TZXR1cCgpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBkb1NldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJdGhpcy5wcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0KLQkJLy8gcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCUxvY2F0aW9uIHBsYXRmb3JtTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCk7Ci0KLQkJRmlsZSB6aXBGaWxlID0gRmlsZVV0aWwubWFrZUZpbGVGb3IoUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSLCAianNwc2VhcmNoX3Rlc3RzLnppcCIsIFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUik7Ci0JCXRoaXMucHJvalV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgcGxhdGZvcm1Mb2NhdGlvbi5nZXRVUkwoKS5nZXRGaWxlKCkpOwotCQl0aGlzLnByb2pVdGlsLmluaXRKYXZhUHJvamVjdCgianVkbyIpOwotCi0JCS8vSlNQU2VhcmNoU3VwcG9ydC5nZXRJbnN0YW5jZSgpLmluZGV4V29ya3NwYWNlQW5kV2FpdCgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCS8vIGRvIG5vdGhpbmcKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5kZXhXb3Jrc3BhY2UoKSB7Ci0JCUpTUFNlYXJjaFN1cHBvcnQgc3VwcG9ydCA9IEpTUFNlYXJjaFN1cHBvcnQuZ2V0SW5zdGFuY2UoKTsKLQkJU2VhcmNoRG9jdW1lbnQgZG9jID0gSlNQU2VhcmNoU3VwcG9ydC5nZXRJbnN0YW5jZSgpLmdldFNlYXJjaERvY3VtZW50KCIvanVkby9zZWFyY2hUZXN0SlNQLmphdmEiKTsKLQkJYXNzZXJ0Tm90TnVsbCgiY291bGRuJ3QgcmV0cmlldmU6Jy9qdWRvL3NlYXJjaFRlc3RKU1AuamF2YSciLCBkb2MpOwotCi0JCWRvYyA9IHN1cHBvcnQuZ2V0U2VhcmNoRG9jdW1lbnQoIi9qdWRvL3NlYXJjaFRlc3RKU1AyLmphdmEiKTsKLQkJYXNzZXJ0Tm90TnVsbCgiY291bGRuJ3QgcmV0cmlldmU6Jy9qdWRvL3NlYXJjaFRlc3RKU1AyLmphdmEnIiwgZG9jKTsKLQotCQlkb2MgPSBzdXBwb3J0LmdldFNlYXJjaERvY3VtZW50KCIvanVkby9zZWFyY2hUZXN0SlNQMy5qYXZhIik7Ci0JCWFzc2VydE5vdE51bGwoImNvdWxkbid0IHJldHJpZXZlOicvanVkby9zZWFyY2hUZXN0SlNQMy5qYXZhJyIsIGRvYyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlYXJjaEZpZWxkKCkgewotCi0JCVRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IgcmVxdWVzdG9yID0gbmV3IFRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IoKTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AuanNwIiwgOTMsIDEwNik7Ci0JCUpTUFNlYXJjaFN1cHBvcnQuZ2V0SW5zdGFuY2UoKS5zZWFyY2goInNlYXJjaEZvclRoaXMiLCBuZXcgSlNQU2VhcmNoU2NvcGUoKSwgRklFTEQsIEFMTF9PQ0NVUlJFTkNFUywgU2VhcmNoUGF0dGVybi5SX0VYQUNUX01BVENILCB0cnVlLCByZXF1ZXN0b3IpOwotCQlhc3NlcnRUcnVlKCJkaWQgbm90IGZpbmQgYWxsIGV4cGVjdGVkIG1hdGNoZXM6IHNlYXJjaEZvclRoaXMiLCByZXF1ZXN0b3IuY2hlY2tWYWxpZCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VhcmNoTWV0aG9kKCkgewotCi0JCVRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IgcmVxdWVzdG9yID0gbmV3IFRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IoKTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AuanNwIiwgMTQzLCAxNTgpOwotCQlyZXF1ZXN0b3IuYWRkQ2hlY2tNYXRjaCgic2VhcmNoVGVzdEpTUC5qc3AiLCAyOTgsIDMxNSk7Ci0JCUpTUFNlYXJjaFN1cHBvcnQuZ2V0SW5zdGFuY2UoKS5zZWFyY2goInNlYXJjaEZvck1ldGhvZCIsIG5ldyBKU1BTZWFyY2hTY29wZSgpLCBNRVRIT0QsIEFMTF9PQ0NVUlJFTkNFUywgU2VhcmNoUGF0dGVybi5SX0VYQUNUX01BVENILCB0cnVlLCByZXF1ZXN0b3IpOwotCQlhc3NlcnRUcnVlKCJkaWQgbm90IGZpbmQgYWxsIGV4cGVjdGVkIG1hdGNoZXM6IHNlYXJjaEZvck1ldGhvZCIsIHJlcXVlc3Rvci5jaGVja1ZhbGlkKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWFyY2hQYXR0ZXJuTWF0Y2goKSB7Ci0KLQkJVGVzdEpzcFNlYXJjaFJlcXVlc3RvciByZXF1ZXN0b3IgPSBuZXcgVGVzdEpzcFNlYXJjaFJlcXVlc3RvcigpOwotCQlyZXF1ZXN0b3IuYWRkQ2hlY2tNYXRjaCgic2VhcmNoVGVzdEpTUC5qc3AiLCA5MywgMTA2KTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AyLmpzcCIsIDExNiwgMTI5KTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AyLmpzcCIsIDE1MiwgMTY1KTsKLQkJSlNQU2VhcmNoU3VwcG9ydC5nZXRJbnN0YW5jZSgpLnNlYXJjaCgic2VhcmNoKiIsIG5ldyBKU1BTZWFyY2hTY29wZSgpLCBGSUVMRCwgQUxMX09DQ1VSUkVOQ0VTLCBTZWFyY2hQYXR0ZXJuLlJfUEFUVEVSTl9NQVRDSCwgdHJ1ZSwgcmVxdWVzdG9yKTsKLQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBmaW5kIGFsbCBleHBlY3RlZCBtYXRjaGVzOiBzZWFyY2gqIiwgcmVxdWVzdG9yLmNoZWNrVmFsaWQoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlYXJjaFByb2plY3RDbGFzc2VzKCkgewotCi0JCVRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IgcmVxdWVzdG9yID0gbmV3IFRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IoKTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AzLmpzcCIsIDE0OCwgMTU3KTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AzLmpzcCIsIDE3MCwgMTc5KTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AzLmpzcCIsIDI2MywgMjczKTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AzLmpzcCIsIDI5OSwgMzA5KTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AzLmpzcCIsIDQwOCwgNDE3KTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AzLmpzcCIsIDQzMCwgNDM5KTsKLQkJSlNQU2VhcmNoU3VwcG9ydC5nZXRJbnN0YW5jZSgpLnNlYXJjaCgiSmVsbHliZWFuKiIsIG5ldyBKU1BTZWFyY2hTY29wZSgpLCBUWVBFLCBBTExfT0NDVVJSRU5DRVMsIFNlYXJjaFBhdHRlcm4uUl9QQVRURVJOX01BVENILCB0cnVlLCByZXF1ZXN0b3IpOwotCQlhc3NlcnRUcnVlKCJkaWQgbm90IGZpbmQgYWxsIGV4cGVjdGVkIG1hdGNoZXM6IHNlYXJjaCoiLCByZXF1ZXN0b3IuY2hlY2tWYWxpZCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VhcmNoTG9jYWxWYXJpYWJsZSgpIHsKLQotCQlJRE9NTW9kZWwgeG1sTW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJSVBhdGgganNwVGVzdEZpbGVQYXRoID0gbmV3IFBhdGgoImp1ZG8vU0VBUkNIL3NlYXJjaFRlc3RKU1AzLmpzcCIpOwotCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShqc3BUZXN0RmlsZVBhdGgpOwotCQkJeG1sTW9kZWwgPSAoSURPTU1vZGVsKSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JSZWFkKGZpbGUpOwotCQkJc2V0dXBBZGFwdGVyRmFjdG9yeSh4bWxNb2RlbCk7Ci0KLQkJCUlET01Eb2N1bWVudCBkb2MgPSB4bWxNb2RlbC5nZXREb2N1bWVudCgpOwotCQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyIGFkYXB0ZXIgPSAoSlNQVHJhbnNsYXRpb25BZGFwdGVyKSBkb2MuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQkJSlNQVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSBhZGFwdGVyLmdldEpTUFRyYW5zbGF0aW9uKCk7Ci0JCQlJSmF2YUVsZW1lbnQgZWxlbWVudCA9IHRyYW5zbGF0aW9uLmdldEVsZW1lbnRzRnJvbUpzcFJhbmdlKDM3NywgMzg0KVswXTsKLQotCQkJVGVzdEpzcFNlYXJjaFJlcXVlc3RvciByZXF1ZXN0b3IgPSBuZXcgVGVzdEpzcFNlYXJjaFJlcXVlc3RvcigpOwotCQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AzLmpzcCIsIDM3NywgMzg0KTsKLQkJCUpTUFNlYXJjaFN1cHBvcnQuZ2V0SW5zdGFuY2UoKS5zZWFyY2goZWxlbWVudCwgbmV3IEpTUFNlYXJjaFNjb3BlKCksIHJlcXVlc3Rvcik7Ci0JCQlhc3NlcnRUcnVlKCJkaWQgbm90IGZpbmQgYWxsIGV4cGVjdGVkIG1hdGNoZXM6IHNlYXJjaCoiLCByZXF1ZXN0b3IuY2hlY2tWYWxpZCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmICh4bWxNb2RlbCAhPSBudWxsKQotCQkJCXhtbE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIGdldFN0cnVjdHVyZWRNb2RlbEZvclJlYWQoSUZpbGUgZmlsZSkgewotCi0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQlyZXR1cm4gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yUmVhZChmaWxlKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gaW9leCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJjb3VsZG4ndCBvcGVuIGZpbGU6IiArIGZpbGUpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogYWRkIHRoZSBmYWN0b3J5IGZvciBKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgaGVyZQotCSAqIEBwYXJhbSBzbQotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cEFkYXB0ZXJGYWN0b3J5KElTdHJ1Y3R1cmVkTW9kZWwgc20pIHsKLQotCQlKU1BUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5IGZhY3RvcnkgPSBuZXcgSlNQVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeSgpOwotCQlzbS5nZXRGYWN0b3J5UmVnaXN0cnkoKS5hZGRGYWN0b3J5KGZhY3RvcnkpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3RocmVhZGVkL1RocmVhZGVkTW9kZWxSZWFkRWRpdFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdGhyZWFkZWQvVGhyZWFkZWRNb2RlbFJlYWRFZGl0VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTQ5Njc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdGhyZWFkZWQvVGhyZWFkZWRNb2RlbFJlYWRFZGl0VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkzICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy50aHJlYWRlZDsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLkZpbGVCdWZmZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuSVRleHRGaWxlQnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuSVRleHRGaWxlQnVmZmVyTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSlNQVHJhbnNsYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWwuUHJvamVjdFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGV4dC5lZGl0cy5JbnNlcnRFZGl0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JbmRleGVkUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiBDcmVhdGVkIGZvcjogaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTExNjUyMwotICovCi1wdWJsaWMgY2xhc3MgVGhyZWFkZWRNb2RlbFJlYWRFZGl0VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJQUk9KRUNUXzExNjUyMyI7Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0JCi0JcHJpdmF0ZSBjbGFzcyBUcmFuc2xhdGVKb2IgZXh0ZW5kcyBKb2IgewotCQlTdHJpbmcgZkZpbGVQYXRoID0gbnVsbDsKLQkJcHVibGljIFRyYW5zbGF0ZUpvYihTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBqb2JuYW1lKSB7Ci0JCQlzdXBlcihqb2JuYW1lKTsKLQkJCWZGaWxlUGF0aCA9IGZpbGVuYW1lOwotCQl9Ci0JCXByb3RlY3RlZCBJU3RhdHVzIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJCUlGaWxlIGYgPSBnZXRPckNyZWF0ZUZpbGUoZkZpbGVQYXRoKTsKLQkJCUpTUFRyYW5zbGF0b3IgdHJhbnMgPSBuZXcgSlNQVHJhbnNsYXRvcigpOwotCQkJSVN0cnVjdHVyZWRNb2RlbCBzTW9kZWwgPSBudWxsOwotCQkJdHJ5IHsKLQkJCQlzTW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yUmVhZChmKTsKLQkJCQlpZihzTW9kZWwgIT0gbnVsbCkgewotCQkJCQl0cmFucy5yZXNldCgoSURPTU5vZGUpc01vZGVsLmdldEluZGV4ZWRSZWdpb24oMCksIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCQl0cmFucy50cmFuc2xhdGUoKTsKLQkJCQl9Ci0JCQkJCi0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQkJZmluYWxseSB7Ci0JCQkJaWYoc01vZGVsICE9IG51bGwpCi0JCQkJCXNNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJCX0KLQkJCQotCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JCX0KLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYoIWlzU2V0dXApIHsKLQkJCWRvU2V0dXAoKTsKLQkJCWlzU2V0dXAgPSB0cnVlOwotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBkb1NldHVwKCkgewotCQljcmVhdGVQcm9qZWN0KCk7Ci0JfQotCS8qCi0JICogY3JlYXRlIDEwMCB0ZXN0IGZpbGVzCi0JICogcmVwZWF0IGRvVGVzdCgpIG9uIHRob3NlIDEwMCBmaWxlcyA1eAotCSAqLwotLy8JcHVibGljIHZvaWQgdGVzdF8xMTY1MjMoKSB7Ci0vLwotLy8JCS8vIHRyeSBhbmQgZG8gc29tZSBjb25jdXJyZW50IGVkaXRpbmcvaW5kZXhpbmcKLS8vCQlmb3IoaW50IGo9MDsgajw1OyBqKyspIHsKLS8vCQkJZm9yKGludCBpPTA7IGk8MTAwOyBpKyspIAotLy8JCQkJZG9UZXN0KCJ0ZXN0XyIgKyBpICsgIi5qc3AiKTsKLS8vCQl9Ci0vLwl9Ci0vLwkvKgotLy8JICogZG9UZXN0KCkgb24gc2FtZSBmaWxlIDEwMHgKLS8vCSAqLwotLy8JcHVibGljIHZvaWQgdGVzdF8xMTY1MjNfMigpIHsKLS8vCi0vLwkJLy8gdHJ5IGFuZCBkbyBzb21lIGNvbmN1cnJlbnQgZWRpdGluZy9pbmRleGluZwotLy8JCWZvcihpbnQgaT0wOyBpPDEwMDsgaSsrKSAKLS8vCQkJZG9UZXN0KCJ0ZXN0XzEuanNwIik7Ci0vLwl9Ci0JCi0JLyoKLQkgKiBkb1Rlc3QoKSAoaW5zZXJ0IHRleHQgJiBlZGl0IGRvbSkKLQkgKiBhbmQgZm9yY2UgSlNQVHJhbnNsYXRpb24gb24gYW5vdGhlciB0aHJlYWQKLQkgKiAKLQkgKiByZXBlYXQgbG90cyBvZiB0aW1lcwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RfMTE2NTIzXzMoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9ICJ0X3Rlc3RfMS5qc3AiOwotCQkKLQkJZ2V0T3JDcmVhdGVGaWxlKFBST0pFQ1RfTkFNRSArICIvIiArIGZpbGVuYW1lKTsKLQkJCi0JCWZvcihpbnQgaj0wOyBqPDEwMDsgaisrKSB7Ci0JCQlUcmFuc2xhdGVKb2IgdHJhbnNsYXRlSm9iID0gbmV3IFRyYW5zbGF0ZUpvYihQUk9KRUNUX05BTUUgKyAiLyIgKyBmaWxlbmFtZSwgIkpTUCBUcmFuc2xhdGUgSm9iIik7Ci0JCQl0cmFuc2xhdGVKb2Iuc2NoZWR1bGUoKTsKLQkJCXBlcmZvcm1FZGl0cyhmaWxlbmFtZSk7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHBlcmZvcm1FZGl0cyhTdHJpbmcgZmlsZVBhdGgpIHsKLQkJCi0JCUlGaWxlIGJsYW5rSnNwRmlsZSA9IGdldE9yQ3JlYXRlRmlsZShQUk9KRUNUX05BTUUgKyAiLyIgKyBmaWxlUGF0aCk7Ci0JCQotCQkvLyBkb2N1bWVudCBlZGl0Ci0JCWlEb2N1bWVudEluc2VydChibGFua0pzcEZpbGUsICAiPGxvZ2ljOml0ZXJhdGUgaWQ9XCJpdGVyYXRlSURcIiB0eXBlPVwiamF2YS51dGlsLkxpc3RcIiBpbmRleElkPVwiaW5kZXhJRFwiPjwvbG9naWM6aXRlcmF0ZT5cbiIsMCk7Ci0JCQotCQkvLyBkb20gZWRpdAotCQlIYXNoTWFwIGF0dHJzID0gbmV3IEhhc2hNYXAoKTsKLQkJYXR0cnMucHV0KCJ1cmkiLCAic3RydXRzLWxvZ2ljLnRsZCIpOwotCQlhdHRycy5wdXQoInByZWZpeCIsICJsb2dpYyIpOwotCQlkb21JbnNlcnRFbGVtZW50KGJsYW5rSnNwRmlsZSwgImpzcDpkaXJlY3RpdmUudGFnbGliIiwgYXR0cnMsIDApOwotCX0KLQkKLQlwcm90ZWN0ZWQgSUZpbGUgZ2V0T3JDcmVhdGVGaWxlKFN0cmluZyBmaWxlUGF0aCkgewotCQlJRmlsZSBibGFua0pzcEZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZmlsZVBhdGgpKTsKLQkJaWYgKGJsYW5rSnNwRmlsZSAhPSBudWxsICYmICFibGFua0pzcEZpbGUuZXhpc3RzKCkpIHsKLQkJCXRyeSB7Ci0JCQkJYmxhbmtKc3BGaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0obmV3IGJ5dGVbMF0pLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBibGFua0pzcEZpbGU7Ci0JfQotCi0JcHVibGljIHZvaWQgZG9tSW5zZXJ0RWxlbWVudChJRmlsZSBmaWxlLCBTdHJpbmcgdGFnTmFtZSwgSGFzaE1hcCBhdHRyaWJ1dGVzLCBpbnQgaW5zZXJ0aW9uUG9pbnQpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzTW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJc01vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZmlsZSk7Ci0JCQlpZihzTW9kZWwgIT0gbnVsbCkgewotCQkJCURvY3VtZW50IGRvbURvYyA9IChEb2N1bWVudClzTW9kZWwuZ2V0QWRhcHRlcihEb2N1bWVudC5jbGFzcyApOwotCQkJCUluZGV4ZWRSZWdpb24gciA9IHNNb2RlbC5nZXRJbmRleGVkUmVnaW9uKGluc2VydGlvblBvaW50KTsKLQkJCQlpZihyIGluc3RhbmNlb2YgTm9kZSkgewotCQkJCQlFbGVtZW50IGUgPSBkb21Eb2MuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKLQkJCQkJSXRlcmF0b3IgaXRlciA9IGF0dHJpYnV0ZXMua2V5U2V0KCkuaXRlcmF0b3IoKTsKLQkJCQkJLy8gc2V0IGF0dHJpYnV0ZXMKLQkJCQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQkJCQlTdHJpbmcgYXR0ciA9IChTdHJpbmcpIGl0ZXIubmV4dCgpOwotCQkJCQkJU3RyaW5nIHZhbCA9ICAoU3RyaW5nKWF0dHJpYnV0ZXMuZ2V0KGF0dHIpOwotCQkJCQkJCi0JCQkJCQlBdHRyIGF0dHJOb2RlID0gZG9tRG9jLmNyZWF0ZUF0dHJpYnV0ZShhdHRyKTsKLQkJCQkJCWF0dHJOb2RlLnNldFZhbHVlKHZhbCk7Ci0JCQkJCQllLnNldEF0dHJpYnV0ZU5vZGUoYXR0ck5vZGUpOwotCQkJCQl9Ci0JCQkJCWRvbURvYy5pbnNlcnRCZWZvcmUoZSwgKE5vZGUpcik7Ci0JCQkJCWRvbURvYy5pbnNlcnRCZWZvcmUoZG9tRG9jLmNyZWF0ZVRleHROb2RlKCJcbiIpLCAoTm9kZSlyKTsKLQkJCQl9Ci0JCQkJc01vZGVsLnNhdmUoKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYoc01vZGVsICE9IG51bGwpCi0JCQkJc01vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9CQotCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oImluc2VydGVkIGVsZW1lbnQsIGRvbSBzdHlsZSIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBpRG9jdW1lbnRJbnNlcnQoSUZpbGUgZmlsZSwgU3RyaW5nIHRleHQsIGludCBpbnNlcnRpb25Qb2ludCkgewotCQkKLQkJLy8gZ2V0IHRoZSBmaWxlJ3MgdGV4dCBidWZmZXIKLQkJSVRleHRGaWxlQnVmZmVyTWFuYWdlciBidWZmZXJNYW5hZ2VyID0gRmlsZUJ1ZmZlcnMuZ2V0VGV4dEZpbGVCdWZmZXJNYW5hZ2VyKCk7Ci0JCUlQYXRoIHBhdGggPSBmaWxlLmdldEZ1bGxQYXRoKCk7Ci0JCXRyeSB7Ci0JCQlidWZmZXJNYW5hZ2VyLmNvbm5lY3QocGF0aCwgbnVsbCk7Ci0KLQkJCUlEb2N1bWVudCBkb2MgPSBudWxsOwotCi0JCQlJVGV4dEZpbGVCdWZmZXIgYnVmZiA9IGJ1ZmZlck1hbmFnZXIuZ2V0VGV4dEZpbGVCdWZmZXIoZmlsZS5nZXRGdWxsUGF0aCgpKTsKLQkJCWRvYyA9IGJ1ZmYuZ2V0RG9jdW1lbnQoKTsKLQotCQkJYm9vbGVhbiBzYXZlV2hlbkRvbmUgPSAhYnVmZi5pc0RpcnR5KCk7Ci0KLQkJCUluc2VydEVkaXQgaW5zZXJ0RWRpdCA9IG5ldyBJbnNlcnRFZGl0KGluc2VydGlvblBvaW50LCB0ZXh0KTsKLQkJCWluc2VydEVkaXQuYXBwbHkoZG9jKTsKLQotCQkJLy8gaWYgdGhlIGRvY3VtZW50IHdhcyBub3QgcHJldmlvdXNseSBkaXJ0eSwgc2F2ZSBpdAotCQkJaWYgKHNhdmVXaGVuRG9uZSkKLQkJCQlidWZmLmNvbW1pdChudWxsLCBmYWxzZSk7Ci0JCX0KLQkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0JCQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJdHJ5IHsKLQkJCQlidWZmZXJNYW5hZ2VyLmRpc2Nvbm5lY3QocGF0aCwgbnVsbCk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oImluc2VydGVkIHRleHQsIGZpbGUgYnVmZmVyIHN0eWxlIik7Ci0JfQotCi0vLwlwcml2YXRlIHZvaWQgc3RydWN0dXJlZERvY0luc2VydChTdHJpbmcgZmlsZVBhdGgpIHsKLS8vCQkvLyBQUk9KRUNUX05BTUUgKyAiL2JsYW5rLmpzcCIKLS8vCQlJRmlsZSBibGFua0pzcEZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZmlsZVBhdGgpKTsKLS8vCQlpZiAoYmxhbmtKc3BGaWxlICE9IG51bGwpIHsKLS8vCQkJdHJ5IHsKLS8vCQkJCWJsYW5rSnNwRmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG5ldyBieXRlWzBdKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0vLwkJCX0KLS8vCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotLy8JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLS8vCQkJfQotLy8JCX0KLS8vCi0vLwkJSVN0cnVjdHVyZWRNb2RlbCBzTW9kZWwgPSBudWxsOwotLy8JCXRyeSB7Ci0vLwkJCXNNb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGJsYW5rSnNwRmlsZSk7Ci0vLwkJCWlmIChzTW9kZWwgIT0gbnVsbCkgewotLy8JCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gc01vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotLy8KLS8vCQkJCVN0cmluZyBpbnNlcnRUZXh0MSA9ICI8bG9naWM6aXRlcmF0ZSBpZD1cIml0ZXJhdGVJRFwiIHR5cGU9XCJqYXZhLnV0aWwuTGlzdFwiIGluZGV4SWQ9XCJpbmRleElEXCI+PC9sb2dpYzppdGVyYXRlPlxuIjsKLS8vCQkJCVN0cmluZyBpbnNlcnRUZXh0MiA9ICI8JUB0YWdsaWIgdXJpPVwic3RydXRzLWxvZ2ljLnRsZFwiIHByZWZpeD1cImxvZ2ljXCIgJT5cbiI7Ci0vLwotLy8JCQkJc0RvYy5yZXBsYWNlKDAsIDAsIGluc2VydFRleHQxKTsKLS8vCQkJCXNEb2MucmVwbGFjZSgwLCAwLCBpbnNlcnRUZXh0Mik7Ci0vLwotLy8JCQkJSlNQU2VhcmNoU3VwcG9ydC5nZXRJbnN0YW5jZSgpLmFkZEpzcEZpbGUoYmxhbmtKc3BGaWxlKTsKLS8vCQkJfQotLy8JCX0KLS8vCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotLy8JCQllLnByaW50U3RhY2tUcmFjZSgpOwotLy8JCX0KLS8vCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0vLwkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0vLwkJfQotLy8JCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0vLwkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0vLwkJfQotLy8JCWZpbmFsbHkgewotLy8JCQlpZiAoc01vZGVsICE9IG51bGwpCi0vLwkJCQlzTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0vLwkJfQotLy8JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3QoKSB7Ci0KLQkJLy8gY3JlYXRlIHByb2plY3QKLQkJU3RyaW5nW10gbmF0dXJlSWRzID0ge1Byb2plY3RVdGlsLkpBVkFfTkFUVVJFX0lEfTsKLQkJSVByb2plY3QgcHJvaiA9IFByb2plY3RVdGlsLmNyZWF0ZVByb2plY3QoUFJPSkVDVF9OQU1FLCBudWxsLCBuYXR1cmVJZHMpOwotCi0JCS8vIGNvcHkgZmlsZXMgaW50byB3b3Jrc3BhY2UKLQkJSUZpbGUgZiA9IFByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvMTE2NTIzL3N0cnV0cy5qYXIiLCBQUk9KRUNUX05BTUUgKyAiL3N0cnV0cy5qYXIiKTsKLQkJYXNzZXJ0VHJ1ZShmLmV4aXN0cygpKTsKLQkJZiA9IFByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvMTE2NTIzL3N0cnV0cy1sb2dpYy50bGQiLCBQUk9KRUNUX05BTUUgKyAiL3N0cnV0cy1sb2dpYy50bGQiKTsKLQkJYXNzZXJ0VHJ1ZShmLmV4aXN0cygpKTsKLQotCQkvLyBhZGQgc3RydXRzIHRvIGNsYXNzcGF0aAotCQlQcm9qZWN0VXRpbC5hZGRMaWJyYXJ5RW50cnkocHJvaiwgInN0cnV0cy5qYXIiKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvQ29tbW9uWE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvQ29tbW9uWE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMjcwZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL0NvbW1vblhNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWw7Ci0KLQotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5PdXRwdXRLZXlzOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeUNvbmZpZ3VyYXRpb25FcnJvcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLmRvbS5ET01Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICovCi1wdWJsaWMgY2xhc3MgQ29tbW9uWE1MIHsKLQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIERvY3VtZW50QnVpbGRlciBnZXREb2N1bWVudEJ1aWxkZXIoKSB7Ci0JCURvY3VtZW50QnVpbGRlciByZXN1bHQgPSBudWxsOwotCQl0cnkgewotCQkJcmVzdWx0ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQl9Ci0JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCUxvZ2dlci5sb2dFeGNlcHRpb24oZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBEb2N1bWVudEJ1aWxkZXIgZ2V0RG9jdW1lbnRCdWlsZGVyKGJvb2xlYW4gdmFsaWRhdGluZykgewotCQlEb2N1bWVudEJ1aWxkZXIgcmVzdWx0ID0gbnVsbDsKLQkJdHJ5IHsKLQkJCURvY3VtZW50QnVpbGRlckZhY3RvcnkgaW5zdGFuY2UgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0JCQlpbnN0YW5jZS5zZXRWYWxpZGF0aW5nKHZhbGlkYXRpbmcpOwotCQkJcmVzdWx0ID0gaW5zdGFuY2UubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCX0KLQkJY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJTG9nZ2VyLmxvZ0V4Y2VwdGlvbihlKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXJpYWxpemUoRG9jdW1lbnQgZG9jdW1lbnQsIE91dHB1dFN0cmVhbSBvc3RyZWFtKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTb3VyY2UgZG9tU291cmNlID0gbmV3IERPTVNvdXJjZShkb2N1bWVudCk7Ci0JCXRyeSB7Ci0JCQlUcmFuc2Zvcm1lciBzZXJpYWxpemVyID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3VHJhbnNmb3JtZXIoKTsKLQkJCXRyeSB7Ci0JCQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLklOREVOVCwgInllcyIpOwotCQkJCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoIntodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdH1pbmRlbnQtYW1vdW50IiwgIjQiKTsKLQkJCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuRU5DT0RJTkcsICJVVEYtMTYiKTsKLQkJCX0KLQkJCWNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJCS8vIHVuc3VwcG9ydGVkIHByb3BlcnRpZXMKLQkJCX0KLQkJCXNlcmlhbGl6ZXIudHJhbnNmb3JtKGRvbVNvdXJjZSwgbmV3IFN0cmVhbVJlc3VsdChvc3RyZWFtKSk7Ci0JCX0KLQkJY2F0Y2ggKFRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JCWNhdGNoIChUcmFuc2Zvcm1lckZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3IgZSkgewotCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCQljYXRjaCAoVHJhbnNmb3JtZXJFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvRGF0ZVV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9EYXRlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjNiZGU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9EYXRlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRhdGVGb3JtYXQ7Ci1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5TaW1wbGVEYXRlRm9ybWF0OwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKgotICogVG8gY2hhbmdlIHRoaXMgZ2VuZXJhdGVkIGNvbW1lbnQgZWRpdCB0aGUgdGVtcGxhdGUgdmFyaWFibGUgInR5cGVjb21tZW50IjoKLSAqIFdpbmRvdz5QcmVmZXJlbmNlcz5KYXZhPlRlbXBsYXRlcy4KLSAqIFRvIGVuYWJsZSBhbmQgZGlzYWJsZSB0aGUgY3JlYXRpb24gb2YgdHlwZSBjb21tZW50cyBnbyB0bwotICogV2luZG93PlByZWZlcmVuY2VzPkphdmE+Q29kZSBHZW5lcmF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgRGF0ZVV0aWwgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEFsbFRlc3RzLgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIG5vdyA9IG51bGw7Ci0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIG5vdygpIHsKLQkJLy8ganVzdCBjYWxjdWxhdGUgb25jZSwgc28gd2hvbGUgcnVuIGFzIHNhbWUgdGltZXN0YW1wCi0JCWlmIChEYXRlVXRpbC5ub3cgPT0gbnVsbCkgewotCQkJRGF0ZUZvcm1hdCBmb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eSctJ01NJy0nZGQnLSdrayctJ21tJy0nc3MiKTsKLQkJCUNhbGVuZGFyIGNhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKLQkJCURhdGUgdG9kYXkgPSBjYWxlbmRhci5nZXRUaW1lKCk7Ci0JCQlEYXRlVXRpbC5ub3cgPSBmb3JtYXQuZm9ybWF0KHRvZGF5KTsKLQkJfQotCQlyZXR1cm4gRGF0ZVV0aWwubm93OwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9GaWxlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL0ZpbGVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4YWE1NjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL0ZpbGVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlbmFtZUZpbHRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICoKLSAqLwotcHVibGljIGNsYXNzIEZpbGVVdGlsIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmTGluZVNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmUGF0aFNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgicGF0aC5zZXBhcmF0b3IiKTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmRmlsZVNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiZmlsZS5zZXBhcmF0b3IiKTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBKU1BfRURJVE9SX1RFU1RTX1BMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzIjsKLQotCXN0YXRpYyBGaWxlIHByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSA9IG51bGw7Ci0Jc3RhdGljIHByaXZhdGUgU3RyaW5nIGxvZ1N1YkRpcmVjdG9yeVBhdGg7Ci0KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIG5vdFRyaWVkWWV0ID0gdHJ1ZTsKLQotCXB1YmxpYyBzdGF0aWMgY2xhc3MgRGlyRmlsZW5hbWVGaWx0ZXIgaW1wbGVtZW50cyBGaWxlbmFtZUZpbHRlciB7Ci0JCVN0cmluZyBzdGFydE9mQWNjZXB0YWJsZU5hbWVzOwotCi0JCXB1YmxpYyBEaXJGaWxlbmFtZUZpbHRlcihTdHJpbmcgc3RhcnRPZkRpck5hbWUpIHsKLQkJCXN0YXJ0T2ZBY2NlcHRhYmxlTmFtZXMgPSBzdGFydE9mRGlyTmFtZTsKLQkJfQotCi0JCS8qKgotCQkgKiBAc2VlIGphdmEuaW8uRmlsZUZpbHRlciNhY2NlcHQoRmlsZSkKLQkJICovCi0JCXB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIHBhdGhuYW1lLCBTdHJpbmcgZmlsZW5hbWUpIHsKLQkJCS8vIHdlJ2xsIGp1c3QgYXNzdW1lIGlmIGl0IHN0YXJ0cyB3aXRoIHJpZ2h0IGtleSwgaXQgaXMgYSBkaXJlY3RvcnkgLi4uIGZvciBub3cKLQkJCXJldHVybiBmaWxlbmFtZS5zdGFydHNXaXRoKHN0YXJ0T2ZBY2NlcHRhYmxlTmFtZXMpOwotCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgZ2V0UHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5KFN0cmluZyBkaXJlY3RvcnlSb290TmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKHByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSA9PSBudWxsICYmIG5vdFRyaWVkWWV0KSB7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKEpTUF9FRElUT1JfVEVTVFNfUExVR0lOX0lEKTsKLQkJCVVSTCB1cmwgPSBidW5kbGUuZ2V0RW50cnkoIi8iKTsKLQkJCS8vU3RyaW5nIGluc3RhbGxQYXRoID0gdXJsLmdldFBhdGgoKTsKLQkJCS8vIGFkZCBrbm93biBmaWxlIHNvIFVSTCBtZXRob2QgYmVsb3cgY2FuIGJlIHVzZWQKLQkJCS8vIChkb2Vzbid0IHNlZW0gdG8gd29yayBmb3IgZGlyZWN0b3J5PykKLQkJCVVSTCB0b3RhbFVSTCA9IG5ldyBVUkwodXJsLCAicGx1Z2luLnhtbCIpOwotCQkJVVJMIGZpbmFsdXJsID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHRvdGFsVVJMKTsKLQkJCVN0cmluZyBmaW5hbEZpbGUgPSBmaW5hbHVybC5nZXRGaWxlKCk7Ci0JCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaW5hbEZpbGUpOwotCQkJU3RyaW5nIGZpbmFsUGF0aCA9IGZpbGUuZ2V0UGFyZW50KCk7Ci0JCQlGaWxlIHBsdWdpbkhvbWVEaXIgPSBuZXcgRmlsZShmaW5hbFBhdGgpOwotCQkJRmlsZW5hbWVGaWx0ZXIgZGlyRmlsdGVyID0gbmV3IERpckZpbGVuYW1lRmlsdGVyKGRpcmVjdG9yeVJvb3ROYW1lKTsKLQkJCUZpbGVbXSBhbGxEaXJzID0gcGx1Z2luSG9tZURpci5saXN0RmlsZXMoZGlyRmlsdGVyKTsKLQotCQkJLy8gYXNzdW1lIGZpcnN0IGluIGxpc3QgaXMgbmV3ZXN0LCB0aGVuIHN0YXJ0IGxvb2tpbmcgd2l0aCB0aGUgCi0JCQkvLyBzZWNvbmQgaXRlbSAuLi4ganVzdCB0byBhdm9pZCAibnVsbCIgY2FzZSBjaGVja2luZwotCQkJaWYgKGFsbERpcnMubGVuZ3RoID4gMCkgewotCQkJCUZpbGUgY3VycmVudE5ld2VzdCA9IGFsbERpcnNbMF07Ci0JCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBhbGxEaXJzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCUZpbGUgY3VycmVudCA9IGFsbERpcnNbaV07Ci0JCQkJCS8vIE5PVEU6IHdlIGdvIGJ5IG1vZGlmaWVkIGRhdGUsIG5vdCBieSB0aGUgYWN0dWFsIHRpbWUgc3RhbXAgaW4gbmFtZS4KLQkJCQkJLy8gVGhpcyBzaG91bGQgd29yayBmb3IgYWxsIG5vcm1hbCBjYXNlcywgYnV0IG1heSBub3QgaWYgc29tZW9uZSBkb2VzIHNvbWUKLQkJCQkJLy8gImZ1bm55IiBjb3B5aW5nLCBvciB1cGRhdGluZyBmcm9tIHJlcG9zaXRvcnkuCi0JCQkJCWlmIChjdXJyZW50Lmxhc3RNb2RpZmllZCgpID4gY3VycmVudE5ld2VzdC5sYXN0TW9kaWZpZWQoKSkgewotCQkJCQkJY3VycmVudE5ld2VzdCA9IGN1cnJlbnQ7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJcHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5ID0gY3VycmVudE5ld2VzdDsKLQkJCX0KLQkJCW5vdFRyaWVkWWV0ID0gZmFsc2U7Ci0JCX0KLQkJcmV0dXJuIHByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgbWFrZUZpbGVGb3IoU3RyaW5nIGRpcmVjdG9yeSwgU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgdGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoSlNQX0VESVRPUl9URVNUU19QTFVHSU5fSUQpOwotCQlVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KCIvIik7Ci0JCVVSTCBsb2NhbFVSTCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTCh1cmwpOwotCQlTdHJpbmcgaW5zdGFsbFBhdGggPSBsb2NhbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyB0b3RhbERpcmVjdG9yeSA9IGluc3RhbGxQYXRoICsgZGlyZWN0b3J5OwotCQlTdHJpbmcgdG90YWxQYXRoID0gdG90YWxEaXJlY3RvcnkgKyAiLyIgKyBmaWxlbmFtZTsKLQkJVVJMIHRvdGFsVVJMID0gbmV3IFVSTCh1cmwsIHRvdGFsUGF0aCk7Ci0JCS8vVVJMIGZpbmFsdXJsID0gUGxhdGZvcm0uYXNMb2NhbFVSTCh0b3RhbFVSTCk7Ci0JCVN0cmluZyBmaW5hbEZpbGUgPSB0b3RhbFVSTC5nZXRGaWxlKCk7Ci0JCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbmFsRmlsZSk7Ci0JCVN0cmluZyBmaW5hbFBhdGggPSBmaWxlLmdldFBhcmVudCgpOwotCQlGaWxlIGRpciA9IG5ldyBGaWxlKGZpbmFsUGF0aCk7Ci0JCWlmICghZGlyLmV4aXN0cygpKSB7Ci0JCQkvLyBhIGxpdHRsZSBzYWZldHkgbmV0LCBiZSBzdXJlIHRoZSBwcmV2aW91cyBuZXdlc3QgZGlyZWN0b3J5Ci0JCQkvLyBpcyBpbml0aWFsaXplZCwganVzdCBpbiBjYXNlIG5vIG9uZSBlbHNlIGhhcyBkb25lIHNvCi0JCQlpZiAodGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXggIT0gbnVsbCAmJiB0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeC5sZW5ndGgoKSA+IDApIHsKLQkJCQlGaWxlVXRpbC5nZXRQcmV2aW91c1Jlc3VsdHNEaXJlY3RvcnkodGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXgpOwotCQkJfQotCQkJLy8gbm93IGl0cyAic2FmZSIgdG8gbWFrZSB0aGUgbmV3IG9uZQotCQkJZGlyLm1rZGlycygpOwotCQl9Ci0JCXJldHVybiBmaWxlOwotCX0KLQotCS8qKgotCSAqIEp1c3QgYSBnZW5lcmFsIHV0aWxpdHkgbWV0aG9kCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRFeHRlbnNpb24oU3RyaW5nIGZpbGVuYW1lKSB7Ci0JCVN0cmluZyBleHRlbnNpb24gPSBudWxsOwotCQlpbnQgZG90UG9zdGlvbiA9IGZpbGVuYW1lLmxhc3RJbmRleE9mKCcuJyk7Ci0JCWlmIChkb3RQb3N0aW9uID4gLTEpIHsKLQkJCWV4dGVuc2lvbiA9IGZpbGVuYW1lLnN1YnN0cmluZyhkb3RQb3N0aW9uICsgMSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlleHRlbnNpb24gPSBuZXcgU3RyaW5nKCk7Ci0JCX0KLQkJcmV0dXJuIGV4dGVuc2lvbjsKLQl9Ci0KLQkvKioKLQkgKiBHZW5lcmFsIHB1cnBvc2UgdXRpbGl0eSBtZXRob2QgdG8gZW5zdXJlIHRoZSBsb2cKLQkgKiBkaXJlY3RvcnkgZXhpc3RzLCBhbmQgcmV0dXJucyB0aGUgbmFtZS4gCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TG9nRGlyZWN0b3J5KCkgewotCQlpZiAobG9nU3ViRGlyZWN0b3J5UGF0aCA9PSBudWxsKSB7Ci0JCQlTdHJpbmcgbWFpbkRpcmVjdG9yeSA9ICIvbG9ncyI7Ci0JCQlGaWxlIGRpciA9IG5ldyBGaWxlKG1haW5EaXJlY3RvcnkpOwotCQkJZW5zdXJlRXhpc3RzKGRpcik7Ci0JCQlTdHJpbmcgc3ViRGlyZWN0b3J5ID0gVGltZXN0YW1wVXRpbC50aW1lc3RhbXAoKTsKLQkJCWxvZ1N1YkRpcmVjdG9yeVBhdGggPSBtYWluRGlyZWN0b3J5ICsgIi8iICsgc3ViRGlyZWN0b3J5OwotCQkJRmlsZSBzdWJkaXIgPSBuZXcgRmlsZShsb2dTdWJEaXJlY3RvcnlQYXRoKTsKLQkJCWVuc3VyZUV4aXN0cyhzdWJkaXIpOwotCQl9Ci0JCXJldHVybiBsb2dTdWJEaXJlY3RvcnlQYXRoOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBlbnN1cmVFeGlzdHMoRmlsZSBkaXIpIHsKLQkJaWYgKCFkaXIuZXhpc3RzKCkpIHsKLQkJCWRpci5ta2RpcnMoKTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBlcmZvcm1hbmNlT3V0cHV0TG9nTmFtZSgpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0JCVN0cmluZyBkaXJlY3RvcnlOYW1lID0gRmlsZVV0aWwuZ2V0TG9nRGlyZWN0b3J5KCk7Ci0JCVN0cmluZyBleHRlbnNpb24gPSAiLm91dCI7Ci0JCVN0cmluZyBiYXNlTmFtZSA9ICJzZWRUZXN0cyI7Ci0JCWxvbmcgbm93ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCVN0cmluZyBub3dTdHIgPSBTdHJpbmcudmFsdWVPZihub3cpOwotCQlyZXN1bHQgPSBkaXJlY3RvcnlOYW1lICsgRmlsZVV0aWwuZkZpbGVTZXBhcmF0b3IgKyBiYXNlTmFtZSArIG5vd1N0ciArIGV4dGVuc2lvbjsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvUHJvamVjdFVuemlwVXRpbGl0eS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgyMGJlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvUHJvamVjdFVuemlwVXRpbGl0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcEVudHJ5OwotaW1wb3J0IGphdmEudXRpbC56aXAuWmlwRmlsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuSU92ZXJ3cml0ZVF1ZXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLndpemFyZHMuZGF0YXRyYW5zZmVyLkZpbGVTeXN0ZW1TdHJ1Y3R1cmVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS53aXphcmRzLmRhdGF0cmFuc2Zlci5JSW1wb3J0U3RydWN0dXJlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkud2l6YXJkcy5kYXRhdHJhbnNmZXIuSW1wb3J0T3BlcmF0aW9uOwotCi0vKioKLSAqIEltcG9ydHMgemlwcGVkIGZpbGVzIGludG8gdGhlIHRlc3Qgd29ya3NwYWNlLiBEZWxldGVzIGFsbCBwcm9qZWN0cyBpbgotICogd29ya3NwYWNlLgotICogCi0gKiBAYXV0aG9yIHBhdmVyeQotICovCi1wdWJsaWMgY2xhc3MgUHJvamVjdFVuemlwVXRpbGl0eSB7Ci0JY2xhc3MgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIGltcGxlbWVudHMgSVByb2dyZXNzTW9uaXRvciB7Ci0JCXByaXZhdGUgYm9vbGVhbiBmaW5pc2hlZCA9IGZhbHNlOwotCi0JCXB1YmxpYyB2b2lkIGJlZ2luVGFzayhTdHJpbmcgbmFtZSwgaW50IHRvdGFsV29yaykgewotCQkJLy8gbm9vcAotCQl9Ci0KLQkJcHVibGljIHZvaWQgZG9uZSgpIHsKLQkJCWZpbmlzaGVkID0gdHJ1ZTsKLQkJfQotCi0JCXB1YmxpYyBib29sZWFuIGlzRmluaXNoZWQoKSB7Ci0JCQlyZXR1cm4gZmluaXNoZWQ7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBpbnRlcm5hbFdvcmtlZChkb3VibGUgd29yaykgewotCQkJLy8gbm9vcAotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gaXNDYW5jZWxlZCgpIHsKLQkJCXJldHVybiBmaW5pc2hlZDsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHNldENhbmNlbGVkKGJvb2xlYW4gdmFsdWUpIHsKLQkJCWlmICh2YWx1ZSA9PSB0cnVlKQotCQkJCWZpbmlzaGVkID0gdHJ1ZTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHNldFRhc2tOYW1lKFN0cmluZyBuYW1lKSB7Ci0JCQkvLyBub29wCi0JCX0KLQotCQlwdWJsaWMgdm9pZCBzdWJUYXNrKFN0cmluZyBuYW1lKSB7Ci0JCQkvLyBub29wCi0JCX0KLQotCQlwdWJsaWMgdm9pZCB3b3JrZWQoaW50IHdvcmspIHsKLQkJCS8vIG5vb3AKLQkJfQotCX0KLQotCWNsYXNzIE15T3ZlcndyaXRlUXVlcnkgaW1wbGVtZW50cyBJT3ZlcndyaXRlUXVlcnkgewotCQlwdWJsaWMgU3RyaW5nIHF1ZXJ5T3ZlcndyaXRlKFN0cmluZyBwYXRoU3RyaW5nKSB7Ci0JCQlyZXR1cm4gQUxMOwotCQl9Ci0JfQotCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPSkVDVF9aSVBTX0ZPTERFUiA9ICJwcm9qZWN0dGVzdGZpbGVzIjsKLQlwcml2YXRlIExpc3QgZkNyZWF0ZWRQcm9qZWN0cyA9IG51bGw7Ci0KLQlwdWJsaWMgUHJvamVjdFVuemlwVXRpbGl0eSgpIHsKLQkJLy8gZm9yIGRlbGV0aW9uIGxhdGVyCi0JCWZDcmVhdGVkUHJvamVjdHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGZpbGVUb0ltcG9ydAotCSAqICAgICAgICAgICAgdGhlIGZpbGUgeW91IHdpc2ggdG8gaW1wb3J0Ci0JICogQHBhcmFtIGZvbGRlclBhdGgKLQkgKiAgICAgICAgICAgIHRoZSBjb250YWluZXIgcGF0aCB3aXRoaW4gdGhlIHdvcmtzcGFjZQotCSAqLwotCXB1YmxpYyB2b2lkIGltcG9ydEZpbGUoRmlsZSBmaWxlVG9JbXBvcnQsIFN0cmluZyBmb2xkZXJQYXRoKSB7Ci0JCVdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBpbXBvcnRQcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJdHJ5IHsKLQkJCWlmIChmaWxlVG9JbXBvcnQuZXhpc3RzKCkpIHsKLQkJCQlJUGF0aCBjb250YWluZXJQYXRoID0gbmV3IFBhdGgoZm9sZGVyUGF0aCk7Ci0JCQkJSUltcG9ydFN0cnVjdHVyZVByb3ZpZGVyIHByb3ZpZGVyID0gRmlsZVN5c3RlbVN0cnVjdHVyZVByb3ZpZGVyLklOU1RBTkNFOwotCQkJCUlPdmVyd3JpdGVRdWVyeSBvdmVyd3JpdGVJbXBsZW1lbnRvciA9IG5ldyBNeU92ZXJ3cml0ZVF1ZXJ5KCk7Ci0JCQkJRmlsZVtdIGZpbGVzVG9JbXBvcnQgPSB7ZmlsZVRvSW1wb3J0fTsKLQkJCQlJbXBvcnRPcGVyYXRpb24gaW1wb3J0T3AgPSBuZXcgSW1wb3J0T3BlcmF0aW9uKGNvbnRhaW5lclBhdGgsIG51bGwsIHByb3ZpZGVyLCBvdmVyd3JpdGVJbXBsZW1lbnRvciwgQXJyYXlzLmFzTGlzdChmaWxlc1RvSW1wb3J0KSk7Ci0JCQkJaW1wb3J0T3Auc2V0Q3JlYXRlQ29udGFpbmVyU3RydWN0dXJlKGZhbHNlKTsKLQkJCQlpbXBvcnRPcC5zZXRPdmVyd3JpdGVSZXNvdXJjZXModHJ1ZSk7Ci0JCQkJaW1wb3J0T3AucnVuKGltcG9ydFByb2dyZXNzKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiaGFuZGxlIHNvdXJjZSBkb2Vzbid0IGV4aXN0Iik7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpbXBvcnRQcm9ncmVzcy5kb25lKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiB0aGUgZm9sbG93aW5nIGlzIGxvZ2ljIGZyb20KLQkgKiBodHRwOi8vd3d3LmRldnNoZWQuY29tL2MvYS9KYXZhL1ppcC1NZWV0cy1KYXZhLzIvCi0JICovCi0JLy8gc3BlY2lmeSBidWZmZXIgc2l6ZSBmb3IgZXh0cmFjdGlvbgotCXN0YXRpYyBmaW5hbCBpbnQgQlVGRkVSID0gMjA0ODsKLQotCXB1YmxpYyB2b2lkIHVuemlwQW5kSW1wb3J0KEZpbGUgaW5GaWxlLCBTdHJpbmcgZGVzdGluYXRpb25EaXJlY3RvcnkpIHsKLQkJdHJ5IHsKLQkJCS8vIFNwZWNpZnkgZmlsZSB0byBkZWNvbXByZXNzCi0JCQkvLyAobnNkKSByZWR1bmRhbnQ/Ci0JCQkvLyBTdHJpbmcgaW5GaWxlTmFtZSA9IGluRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsKLQkJCS8vIC8vImM6L2V4YW1wbGUuemlwIjsKLQkJCS8vIEZpbGUgc291cmNlWmlwRmlsZSA9IG5ldyBGaWxlKGluRmlsZU5hbWUpOwotCQkJRmlsZSBzb3VyY2VaaXBGaWxlID0gaW5GaWxlOwotCi0JCQkvLyBTcGVjaWZ5IGRlc3RpbmF0aW9uIHdoZXJlIGZpbGUgd2lsbCBiZSB1bnppcHBlZAotCQkJLy8gU3RyaW5nIGRlc3RpbmF0aW9uRGlyZWN0b3J5ID0KLQkJCS8vICJkOi9lY2xpcHNlZGV2L001X1NTRV9URVNUU19XT1JLU1BBQ0UvIjsgLy8iYzovdGVtcC8iOwotCQkJRmlsZSB1bnppcERlc3RpbmF0aW9uRGlyZWN0b3J5ID0gbmV3IEZpbGUoZGVzdGluYXRpb25EaXJlY3RvcnkpOwotCQkJLy8gT3BlbiBaaXAgZmlsZSBmb3IgcmVhZGluZwotCQkJWmlwRmlsZSB6aXBGaWxlID0gbmV3IFppcEZpbGUoc291cmNlWmlwRmlsZSwgWmlwRmlsZS5PUEVOX1JFQUQpOwotCQkJSVByb2plY3QgY3VycmVudFByb2plY3QgPSBudWxsOwotCQkJdHJ5IHsKLQkJCQkvLyBDcmVhdGUgYW4gZW51bWVyYXRpb24gb2YgdGhlIGVudHJpZXMgaW4gdGhlIHppcCBmaWxlCi0JCQkJRW51bWVyYXRpb24gemlwRmlsZUVudHJpZXMgPSB6aXBGaWxlLmVudHJpZXMoKTsKLQkJCQlTdHJpbmcgcHJvamVjdEZvbGRlck5hbWUgPSBudWxsOwotCi0JCQkJLy8gUHJvY2VzcyBlYWNoIGVudHJ5Ci0JCQkJd2hpbGUgKHppcEZpbGVFbnRyaWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JCQkJCS8vIGdyYWIgYSB6aXAgZmlsZSBlbnRyeQotCQkJCQlaaXBFbnRyeSBlbnRyeSA9IChaaXBFbnRyeSkgemlwRmlsZUVudHJpZXMubmV4dEVsZW1lbnQoKTsKLQkJCQkJU3RyaW5nIGN1cnJlbnRFbnRyeSA9IGVudHJ5LmdldE5hbWUoKTsKLQkJCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKCJFeHRyYWN0aW5nOiAiICsgZW50cnkpOwotCQkJCQlGaWxlIGRlc3RGaWxlID0gbmV3IEZpbGUodW56aXBEZXN0aW5hdGlvbkRpcmVjdG9yeSwgY3VycmVudEVudHJ5KTsKLQkJCQkJLy8gZ3JhYiBmaWxlJ3MgcGFyZW50IGRpcmVjdG9yeSBzdHJ1Y3R1cmUKLQkJCQkJRmlsZSBkZXN0aW5hdGlvblBhcmVudCA9IGRlc3RGaWxlLmdldFBhcmVudEZpbGUoKTsKLQkJCQkJLy8gY3JlYXRlIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHN0cnVjdHVyZSBpZiBuZWVkZWQKLQkJCQkJZGVzdGluYXRpb25QYXJlbnQubWtkaXJzKCk7Ci0JCQkJCS8vIGV4dHJhY3QgZmlsZSBpZiBub3QgYSBkaXJlY3RvcnkKLQkJCQkJaWYgKCFlbnRyeS5pc0RpcmVjdG9yeSgpKSB7Ci0JCQkJCQlCdWZmZXJlZElucHV0U3RyZWFtIGlzID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oemlwRmlsZS5nZXRJbnB1dFN0cmVhbShlbnRyeSkpOwotCQkJCQkJaW50IGN1cnJlbnRCeXRlOwotCQkJCQkJLy8gZXN0YWJsaXNoIGJ1ZmZlciBmb3Igd3JpdGluZyBmaWxlCi0JCQkJCQlieXRlIGRhdGFbXSA9IG5ldyBieXRlW0JVRkZFUl07Ci0JCQkJCQkvLyB3cml0ZSB0aGUgY3VycmVudCBmaWxlIHRvIGRpc2sKLQkJCQkJCUZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZGVzdEZpbGUpOwotCQkJCQkJQnVmZmVyZWRPdXRwdXRTdHJlYW0gZGVzdCA9IG5ldyBCdWZmZXJlZE91dHB1dFN0cmVhbShmb3MsIEJVRkZFUik7Ci0JCQkJCQl0cnkgewotCQkJCQkJCS8vIHJlYWQgYW5kIHdyaXRlIHVudGlsIGxhc3QgYnl0ZSBpcyBlbmNvdW50ZXJlZAotCQkJCQkJCXdoaWxlICgoY3VycmVudEJ5dGUgPSBpcy5yZWFkKGRhdGEsIDAsIEJVRkZFUikpICE9IC0xKSB7Ci0JCQkJCQkJCWRlc3Qud3JpdGUoZGF0YSwgMCwgY3VycmVudEJ5dGUpOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJCWZpbmFsbHkgewotCQkJCQkJCWRlc3QuZmx1c2goKTsKLQkJCQkJCQlkZXN0LmNsb3NlKCk7Ci0JCQkJCQkJaXMuY2xvc2UoKTsKLQkJCQkJCQlmb3MuY2xvc2UoKTsKLQkJCQkJCX0KLQkJCQkJCWlmIChwcm9qZWN0Rm9sZGVyTmFtZSAhPSBudWxsKQotCQkJCQkJCWltcG9ydEZpbGUoZGVzdEZpbGUsIHByb2plY3RGb2xkZXJOYW1lKTsKLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCS8vIG5lZWQgaGFuZGxlIHRvIHRoZSBtYWluIHByb2plY3QgZm9sZGVyIHRvIGNyZWF0ZQotCQkJCQkJLy8gY29udGFpbmVyUGF0aAotCQkJCQkJaWYgKHByb2plY3RGb2xkZXJOYW1lID09IG51bGwpIHsKLQkJCQkJCQlwcm9qZWN0Rm9sZGVyTmFtZSA9IGRlc3RGaWxlLmdldE5hbWUoKTsKLQkJCQkJCQlmQ3JlYXRlZFByb2plY3RzLmFkZChwcm9qZWN0Rm9sZGVyTmFtZSk7Ci0KLQkJCQkJCQljdXJyZW50UHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0Rm9sZGVyTmFtZSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQlmaW5hbGx5IHsKLQkJCQl6aXBGaWxlLmNsb3NlKCk7Ci0JCQl9Ci0KLQkJCS8vIGZpeGVzIHdvcmtzcGFjZSBtZXRhZGF0YSBmb3IgdGhlIHByb2plY3QKLQkJCS8vIGZvciBjbGVhbiBzdGFydHVwIG5leHQgcnVuCi0JCQlpZiAoY3VycmVudFByb2plY3QgIT0gbnVsbCkgewotCQkJCXRyeSB7Ci0JCQkJCVBhdGggcHJvamVjdExvY2F0aW9uID0gbmV3IFBhdGgoUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCkpOwotCQkJCQljcmVhdGVQcm9qZWN0KGN1cnJlbnRQcm9qZWN0LCBwcm9qZWN0TG9jYXRpb24sIG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJfQotCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGNleCkgewotCQkJCQljZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKLQkJCWlvZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHJlZnJlc2hXb3Jrc3BhY2UoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCUlQcm9qZWN0W10gcHJvamVjdHMgPSB3c1Jvb3QuZ2V0UHJvamVjdHMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotCQkJcHJvamVjdHNbaV0ucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCX0KLQkJd3NSb290LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIERlbGV0ZSBwcm9qZWN0cyBjcmVhdGVkICh1bnppcHBlZCBhbmQgaW1wb3J0ZWQpIGJ5IHRoaXMgdXRpbGl0eQotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgZGVsZXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZmluYWwgSVByb2plY3RbXSBwcm9qZWN0cyA9IGdldENyZWF0ZWRQcm9qZWN0cygpOwotCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gZGVsZXRlT3AgPSBuZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgewotCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCXByb2plY3RzW2ldLmNsZWFySGlzdG9yeShudWxsKTsKLQkJCQkJcHJvamVjdHNbaV0uY2xvc2UobnVsbCk7Ci0JCQkJCXByb2plY3RzW2ldLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQl9Ci0JCQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCQkJfQotCQl9OwotCQlXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3MgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCWRlbGV0ZU9wLnJ1bihwcm9ncmVzcyk7Ci0JCS8vIHNhdmVzIHRoZSBuZXcgd29ya3NwYWNlIG1ldGFkYXRhCi0JCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5zYXZlKHRydWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIGRlbGV0ZVByb2plY3QoU3RyaW5nIHByb2plY3ROYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZmluYWwgU3RyaW5nIG5hbWUgPSBwcm9qZWN0TmFtZTsKLQkJSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJZmluYWwgSVByb2plY3QgcHJvaiA9IHdzUm9vdC5nZXRQcm9qZWN0KG5hbWUpOwotCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gZGVsZXRlT3AgPSBuZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKHByb2opIHsKLQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJLy8gSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0KLQkJCQkvLyBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQkJCS8vIElQcm9qZWN0IHByb2ogPSB3c1Jvb3QuZ2V0UHJvamVjdChuYW1lKTsKLQkJCQlpZiAocHJvaiAhPSBudWxsICYmIHByb2ouZXhpc3RzKCkpIHsKLQkJCQkJcHJvai5jbGVhckhpc3RvcnkobnVsbCk7Ci0JCQkJCS8vIHByb2ouY2xvc2UobnVsbCk7Ci0JCQkJCXByb2oucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkJCXRyeSB7Ci0JCQkJCQlwcm9qLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQkJfQotCQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkJCS8vIGp1c3QgdHJ5IGFnYWluIChub3Qgc3VyZSB3aHkgdGhleSBhcmUgbm90IGJlaW5nCi0JCQkJCQkvLyBkZWxldGVkKQotCQkJCQkJcHJvai5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQkJCXByb2ouZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCQl9Ci0JCQkJCS8vIHByb2ogPSBudWxsOwotCQkJCX0KLQkJCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCQl9Ci0JCX07Ci0JCVdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJZGVsZXRlT3AucnVuKHByb2dyZXNzKTsKLQkJLy8gc2F2ZXMgdGhlIG5ldyB3b3Jrc3BhY2UgbWV0YWRhdGEKLQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnNhdmUodHJ1ZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBJUHJvamVjdHMgdGhhdCB3ZXJlIHVuemlwcGVkIGFuZCBpbXBvcnRlZCBpbnRvIHRoZSB3b3Jrc3BhY2UgYnkKLQkgKiAgICAgICAgIHRoaXMgdXRpbGl0eQotCSAqLwotCXB1YmxpYyBJUHJvamVjdFtdIGdldENyZWF0ZWRQcm9qZWN0cygpIHsKLQkJSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJU3RyaW5nW10gcHJvamVjdE5hbWVzID0gKFN0cmluZ1tdKSBmQ3JlYXRlZFByb2plY3RzLnRvQXJyYXkobmV3IFN0cmluZ1tmQ3JlYXRlZFByb2plY3RzLnNpemUoKV0pOwotCQlJUHJvamVjdFtdIHByb2plY3RzID0gbmV3IElQcm9qZWN0W3Byb2plY3ROYW1lcy5sZW5ndGhdOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3ROYW1lcy5sZW5ndGg7IGkrKykgewotCQkJcHJvamVjdHNbaV0gPSB3c1Jvb3QuZ2V0UHJvamVjdChwcm9qZWN0TmFtZXNbaV0pOwotCQl9Ci0JCXJldHVybiBwcm9qZWN0czsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0SmF2YVByb2plY3QoU3RyaW5nIHByb2pOYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCVBsYXRmb3JtLmdldEpvYk1hbmFnZXIoKS5iZWdpblJ1bGUoUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCS8vIHJlc3luY2gKLQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCQkvLyBjaGFuZ2UgcHJlcmVxcyB0byBnZXQgdGhpcyBmdW5jdGlvbmFsaXR5IGJhY2sgaW4KLQkJSVByb2plY3QgcHJvaiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qTmFtZSk7Ci0JCQotCQlpZiAoIXByb2ouZXhpc3RzKCkpIHsKLQkJCQotCQkJcHJvai5jcmVhdGUobmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJaWYgKCFwcm9qLmlzT3BlbigpKSB7Ci0JCQlwcm9qLm9wZW4obnVsbCk7Ci0JCX0KLQkJLy8gbmVlZCB0byBhZGQgamF2YSBuYXR1cmUsIG9yIGVsc2UgcHJvamVjdCB3b24ndCAiZXhpc3QoKSIgaW4gdGhlCi0JCS8vIGphdmEKLQkJLy8gZWxlbWVudCBzZW5zZQotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2MgPSBwcm9qLmdldERlc2NyaXB0aW9uKCk7Ci0JCUxpc3QgbmF0dXJlcyA9IG5ldyBBcnJheUxpc3QoQXJyYXlzLmFzTGlzdChkZXNjLmdldE5hdHVyZUlkcygpKSk7Ci0JCWlmICghbmF0dXJlcy5jb250YWlucyhKYXZhQ29yZS5OQVRVUkVfSUQpKQotCQkJbmF0dXJlcy5hZGQoSmF2YUNvcmUuTkFUVVJFX0lEKTsKLQkJZGVzYy5zZXROYXR1cmVJZHMoKFN0cmluZ1tdKSBuYXR1cmVzLnRvQXJyYXkobmV3IFN0cmluZ1swXSkpOwotCQlwcm9qLnNldERlc2NyaXB0aW9uKGRlc2MsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQlQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCkuZW5kUnVsZShSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY3JlYXRlUHJvamVjdChJUHJvamVjdCBwcm9qZWN0LCBJUGF0aCBsb2NhdGlvblBhdGgsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlpZiAobW9uaXRvciA9PSBudWxsKSB7Ci0JCQltb25pdG9yID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIGRlbGV0ZVByb2plY3QoSVByb2plY3QgZlByb2plY3QpIHRocm93cyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElQcm9qZWN0IHByb2ogPSBmUHJvamVjdDsKLQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIGRlbGV0ZU9wID0gbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbihwcm9qKSB7Ci0JCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCS8vIElXb3Jrc3BhY2VSb290IHdzUm9vdCA9Ci0JCQkJLy8gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJCQkvLyBJUHJvamVjdCBwcm9qID0gd3NSb290LmdldFByb2plY3QobmFtZSk7Ci0JCQkJaWYgKHByb2ogIT0gbnVsbCAmJiBwcm9qLmV4aXN0cygpKSB7Ci0JCQkJCXByb2ouY2xlYXJIaXN0b3J5KG51bGwpOwotCQkJCQkvLyBwcm9qLmNsb3NlKG51bGwpOwotCQkJCQlwcm9qLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCQlwcm9qLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQkJLy8gcHJvaiA9IG51bGw7Ci0JCQkJfQotCQkJCXJlZnJlc2hXb3Jrc3BhY2UoKTsKLQkJCX0KLQkJfTsKLQkJLy8gV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQlkZWxldGVPcC5ydW4obnVsbCk7Ci0JCS8vIHNhdmVzIHRoZSBuZXcgd29ya3NwYWNlIG1ldGFkYXRhCi0JCS8vIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5zYXZlKHRydWUsIG51bGwpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvUHJvamVjdFV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9Qcm9qZWN0VXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjJiMzA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9Qcm9qZWN0VXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ2xhc3NwYXRoRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLkpTUFVJVGVzdHNQbHVnaW47Ci0KLS8qKgotICogU29tZSB1dGlsaXRpZXMgZm9yIGNyZWF0aW5nIHByb2plY3RzLCBhbmQgY29weWluZyBmaWxlcyBpbnRvIHRoZSB3b3Jrc3BhY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBQcm9qZWN0VXRpbCB7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBKQVZBX05BVFVSRV9JRCA9ICJvcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlIjsKLQkKLQkvKioKLQkgKiBBZGQgYSBsaWJyYXJ5IGVudHJ5IChsaWtlIGEgamFyKSB0byB0aGUgY2xhc3NwYXRoIG9mIGEgcHJvamVjdC4KLQkgKiBUaGUgamFyIG11c3QgYmUgaW4geW91ciBwb2plY3QuIFlvdSBjYW4gY29weSB0aGUgamFyIGludG8geW91ciB3b3Jrc3BhY2UgdXNpbmcKLQkgKiBjb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKFN0cmluZyBlbnRyeW5hbWUsIFN0cmluZyBmdWxsUGF0aCkKLQkgKiAKLQkgKiBAcGFyYW0gcHJvaiBhc3N1bWVkIGl0IGhhcyBqYXZhIG5hdHVyZQotCSAqIEBwYXJhbSBwYXRoVG9KYXIgcHJvamVjdCByZWxhdGl2ZSwgbm8gbGVhZGluZyBzbGFzaAotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBhZGRMaWJyYXJ5RW50cnkoSVByb2plY3QgcHJvaiwgU3RyaW5nIHBhdGhUb0phcikgewotCQkKLQkJSVBhdGggcHJvakxvY2F0aW9uID0gcHJvai5nZXRMb2NhdGlvbigpOwotCQlJUGF0aCBhYnNKYXJQYXRoID0gcHJvakxvY2F0aW9uLmFwcGVuZChwYXRoVG9KYXIpOwotCQkKLQkJSUphdmFQcm9qZWN0IGpQcm9qID0gSmF2YUNvcmUuY3JlYXRlKHByb2opOwotCQkKLQkJSUNsYXNzcGF0aEVudHJ5IHN0cnV0c0phckVudHJ5ID0gSmF2YUNvcmUubmV3TGlicmFyeUVudHJ5KGFic0phclBhdGgsIG51bGwsIG51bGwpOwotCQl0cnkgewotCQkJSUNsYXNzcGF0aEVudHJ5W10gY3VycmVudEVudHJpZXMgPSBqUHJvai5nZXRSYXdDbGFzc3BhdGgoKTsKLQkJCQotCQkJTGlzdCBsID0gbmV3IEFycmF5TGlzdCgpOwotCQkJbC5hZGRBbGwoQXJyYXlzLmFzTGlzdChjdXJyZW50RW50cmllcykpOwotCQkJbC5hZGQoc3RydXRzSmFyRW50cnkpOwotCQkJCi0JCQlJQ2xhc3NwYXRoRW50cnlbXSBuZXdFbnRyaWVzID0gKElDbGFzc3BhdGhFbnRyeVtdKWwudG9BcnJheShuZXcgSUNsYXNzcGF0aEVudHJ5W2wuc2l6ZSgpXSk7Ci0JCQlqUHJvai5zZXRSYXdDbGFzc3BhdGgobmV3RW50cmllcywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9CQotCX0KLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBlbnRyeW5hbWUgcGF0aCByZWxhdGl2ZSB0byBURVNUIHBsdWdpbiBzdGFydGluZyB3LyBhICIvIgotCSAqIAkJCQkJCShlZy4gIi90ZXN0ZmlsZXMvYnVnbnVtYmVyL3N0cnV0cy1sb2dpYy50bGQiKQotCSAqIEBwYXJhbSBmdWxsUGF0aCBwYXRoIHJlbGF0aXZlIHRvIGp1bml0IHRlc3Qgd29ya3BhY2UKLQkgKiAJCQkJCQkoZWcuICIvbXlydW50aW1lcHJvai9zdHJ1dHMtbG9naWMudGxkIikKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJRmlsZSBjb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKFN0cmluZyBlbnRyeW5hbWUsIFN0cmluZyBmdWxsUGF0aCkgewotCQlJRmlsZSBmaWxlID0gbnVsbDsKLQkJVVJMIGVudHJ5ID0gSlNQVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoZW50cnluYW1lKTsKLQkJaWYgKGVudHJ5ICE9IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJYnl0ZVtdIGIgPSBuZXcgYnl0ZVsyMDQ4XTsKLQkJCQlJbnB1dFN0cmVhbSBpbnB1dCA9IGVudHJ5Lm9wZW5TdHJlYW0oKTsKLQkJCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJCWludCBpID0gLTE7Ci0JCQkJd2hpbGUgKChpID0gaW5wdXQucmVhZChiKSkgPiAtMSkgewotCQkJCQlvdXRwdXQud3JpdGUoYiwgMCwgaSk7Ci0JCQkJfQotCQkJCWZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZnVsbFBhdGgpKTsKLQkJCQlpZiAoZmlsZSAhPSBudWxsKSB7Ci0JCQkJCWZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShvdXRwdXQudG9CeXRlQXJyYXkoKSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBmaWxlOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljICBJUHJvamVjdCBjcmVhdGVQcm9qZWN0KFN0cmluZyBuYW1lLCBJUGF0aCBsb2NhdGlvbiwgU3RyaW5nW10gbmF0dXJlSWRzKSB7Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKG5hbWUpOwotCQlpZiAobG9jYXRpb24gIT0gbnVsbCkgewotCQkJZGVzY3JpcHRpb24uc2V0TG9jYXRpb24obG9jYXRpb24pOwotCQl9Ci0JCWlmIChuYXR1cmVJZHMgIT0gbnVsbCkgewotCQkJZGVzY3JpcHRpb24uc2V0TmF0dXJlSWRzKG5hdHVyZUlkcyk7Ci0JCX0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChuYW1lKTsKLQkJdHJ5IHsKLQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBwcm9qZWN0OwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9UaW1lc3RhbXBVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvVGltZXN0YW1wVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODU2ZGM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9UaW1lc3RhbXBVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuRGF0ZUZvcm1hdDsKLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7Ci0KLS8qKgotICogQGF1dGhvciBkYXZpZHcKLSAqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIG9uZSB0aW1lc3RhbXAgcGVyIFZNIHJ1bi4KLSAqIChUZWNobmljYWxseSwgcGVyIGNsYXNzIGxvYWRpbmcuKQotICovCi1wdWJsaWMgY2xhc3MgVGltZXN0YW1wVXRpbCB7Ci0KLQlwcml2YXRlIHN0YXRpYyBEYXRlIHRpbWVzdGFtcCA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgRGF0ZUZvcm1hdCBzaG9ydEZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5Jy0nTU0nLSdkZCIpOwotCS8vCXByaXZhdGUgc3RhdGljIERhdGVGb3JtYXQgbG9uZ0Zvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5Jy0nTU0nLSdkZCctJ2trJy0nbW0nLSdzcyIpOwotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIG5vd1Nob3J0ID0gbnVsbDsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHRpbWVzdGFtcCgpIHsKLQotCQlpZiAoVGltZXN0YW1wVXRpbC5ub3dTaG9ydCA9PSBudWxsKSB7Ci0JCQlUaW1lc3RhbXBVdGlsLm5vd1Nob3J0ID0gc2hvcnRGb3JtYXQuZm9ybWF0KGVuc3VyZVRpbWVzdGFtcCgpKTsKLQkJfQotCQlyZXR1cm4gVGltZXN0YW1wVXRpbC5ub3dTaG9ydDsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIERhdGUgZW5zdXJlVGltZXN0YW1wKCkgewotCQkvLyBqdXN0IGNhbGN1bGF0ZSAndGltZXN0YW1wJyBvbmNlIHBlciBjbGFzcyBsb2FkaW5nLCAKLQkJLy8gc28gdGhpcyAndGltZXN0YW1wJyByZW1haW5zIHRoZSBzYW1lIGR1cmluZyAKLQkJLy8gZW50aXJlIHJ1bi4gCi0JCWlmIChUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcCA9PSBudWxsKSB7Ci0JCQlDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7Ci0JCQlUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcCA9IGNhbGVuZGFyLmdldFRpbWUoKTsKLQkJfQotCQlyZXR1cm4gVGltZXN0YW1wVXRpbC50aW1lc3RhbXA7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2YxMDdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9Xb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci0KLWNsYXNzIFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBpbXBsZW1lbnRzIElQcm9ncmVzc01vbml0b3IgewotCXByaXZhdGUgYm9vbGVhbiBmaW5pc2hlZCA9IGZhbHNlOwotCi0JcHVibGljIHZvaWQgYmVnaW5UYXNrKFN0cmluZyBuYW1lLCBpbnQgdG90YWxXb3JrKSB7Ci0JfQotCi0JcHVibGljIHZvaWQgZG9uZSgpIHsKLQkJZmluaXNoZWQgPSB0cnVlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzRmluaXNoZWQoKSB7Ci0JCXJldHVybiBmaW5pc2hlZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbnRlcm5hbFdvcmtlZChkb3VibGUgd29yaykgewotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzQ2FuY2VsZWQoKSB7Ci0JCXJldHVybiBmaW5pc2hlZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDYW5jZWxlZChib29sZWFuIHZhbHVlKSB7Ci0JCWlmICh2YWx1ZSA9PSB0cnVlKQotCQkJZmluaXNoZWQgPSB0cnVlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFRhc2tOYW1lKFN0cmluZyBuYW1lKSB7Ci0JfQotCi0JcHVibGljIHZvaWQgc3ViVGFzayhTdHJpbmcgbmFtZSkgewotCX0KLQotCXB1YmxpYyB2b2lkIHdvcmtlZChpbnQgd29yaykgewotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkpTUC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25KU1AuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZlOWEyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkpTUC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklBdXRvRWRpdFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUluZm9ybWF0aW9uQ29udHJvbENyZWF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dEhvdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29udGVudEFzc2lzdGFudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmZvcm1hdHRlci5JQ29udGVudEZvcm1hdHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0Lmh5cGVybGluay5JSHlwZXJsaW5rRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5pbmZvcm1hdGlvbi5JSW5mb3JtYXRpb25QcmVzZW50ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5yZWNvbmNpbGVyLklSZWNvbmNpbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklBbm5vdGF0aW9uSG92ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRleHQuSUpTUFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGV4dC5JSFRNTFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXh0LklYTUxQYXJ0aXRpb25zOwotCi0vKioKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkpTUCBleHRlbmRzIFRlc3RDYXNlIHsKLSAgICAKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkpTUCBmQ29uZmlnID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gZkRpc3BsYXlFeGlzdHMgPSB0cnVlOwotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXIgZlZpZXdlciA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQkKLSAgICBwdWJsaWMgVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25KU1AoKSB7Ci0gICAgICAgIHN1cGVyKCJUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkpTUCIpOwotICAgIH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLSAgICAJc3VwZXIuc2V0VXAoKTsKLQkJaWYoIXRoaXMuaXNTZXR1cCl7Ci0JCQlzZXRVcFZpZXdlckNvbmZpZ3VyYXRpb24oKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLSAgICB9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQotCQlpZiAoRGlzcGxheS5nZXRDdXJyZW50KCkgIT0gbnVsbCkgewotCQkJCi0JCQlTaGVsbCBzaGVsbCA9IG51bGw7Ci0JCQlDb21wb3NpdGUgcGFyZW50ID0gbnVsbDsKLQkJCQotCQkJaWYoUGxhdGZvcm1VSS5pc1dvcmtiZW5jaFJ1bm5pbmcoKSkgewotCQkJCXNoZWxsID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpOwotCQkJfQotCQkJZWxzZSB7CQotCQkJCXNoZWxsID0gbmV3IFNoZWxsKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJCX0KLQkJCXBhcmVudCA9IG5ldyBDb21wb3NpdGUoc2hlbGwsIFNXVC5OT05FKTsKLQkJCQotCQkJLy8gZHVtbXkgdmlld2VyCi0JCQlmVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJCWZDb25maWcgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNQKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlmRGlzcGxheUV4aXN0cyA9IGZhbHNlOwotCQkJTG9nZ2VyLmxvZyhMb2dnZXIuSU5GTywgIlJlbWVtYmVyLCB2aWV3ZXIgY29uZmlndXJhdGlvbiB0ZXN0cyBhcmUgbm90IHJ1biBiZWNhdXNlIHdvcmtiZW5jaCBpcyBub3Qgb3BlbiAobm9ybWFsIG9uIGJ1aWxkIG1hY2hpbmUpIik7Ci0JCX0KLQl9Ci0gICAgCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRBbm5vdGF0aW9uSG92ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlBbm5vdGF0aW9uSG92ZXIgaG92ZXIgPSBmQ29uZmlnLmdldEFubm90YXRpb25Ib3ZlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiQW5ub3RhdGlvbkhvdmVyIGlzIG51bGwiLCBob3Zlcik7Ci0gICAgfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRBdXRvRWRpdFN0cmF0ZWdpZXMoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlBdXRvRWRpdFN0cmF0ZWd5W10gc3RyYXRlZ2llcyA9IGZDb25maWcuZ2V0QXV0b0VkaXRTdHJhdGVnaWVzKGZWaWV3ZXIsIElKU1BQYXJ0aXRpb25zLkpTUF9ERUZBVUxUKTsKLQkJYXNzZXJ0Tm90TnVsbChzdHJhdGVnaWVzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGF1dG8gZWRpdCBzdHJhdGVnaWVzIiwgc3RyYXRlZ2llcy5sZW5ndGggPiAwKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoY29uZmlndXJlZENvbnRlbnRUeXBlcyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGNvbnRlbnQgdHlwZXMiLCBjb25maWd1cmVkQ29udGVudFR5cGVzLmxlbmd0aCA+IDEpOwotCX0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRBc3Npc3RhbnQoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlDb250ZW50QXNzaXN0YW50IGNhID0gZkNvbmZpZy5nZXRDb250ZW50QXNzaXN0YW50KGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBpcyBubyBjb250ZW50IGFzc2lzdGFudCIsIGNhKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRGb3JtYXR0ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlDb250ZW50Rm9ybWF0dGVyIGNmID0gZkNvbmZpZy5nZXRDb250ZW50Rm9ybWF0dGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBpcyBubyBjb250ZW50IGZvcm1hdHRlciIsIGNmKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldERvdWJsZUNsaWNrU3RyYXRlZ3koKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0RG91YmxlQ2xpY2tTdHJhdGVneSBzdHJhdGVneSA9IGZDb25maWcuZ2V0RG91YmxlQ2xpY2tTdHJhdGVneShmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYoc3RyYXRlZ3kgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBkb3VibGUgY2xpY2sgc3RyYXRlZ2llcyIsIGZhbHNlKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldEh5cGVybGlua0RldGVjdG9ycygpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUh5cGVybGlua0RldGVjdG9yW10gZGV0ZWN0b3JzID0gZkNvbmZpZy5nZXRIeXBlcmxpbmtEZXRlY3RvcnMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGFyZSBubyBoeXBlcmxpbmsgZGV0ZWN0b3JzIiwgZGV0ZWN0b3JzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGh5cGVybGluayBkZXRlY3RvcnMiLCBkZXRlY3RvcnMubGVuZ3RoID4gMSk7Ci0JfQotCQotICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRJbmRlbnRQcmVmaXhlcygpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlTdHJpbmcgcHJlZml4ZXNbXSA9IGZDb25maWcuZ2V0SW5kZW50UHJlZml4ZXMoZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmKHByZWZpeGVzICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgaW5kZW50IHByZWZpeGVzIiwgZmFsc2UpOwotCX0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0gICAgcHVibGljIHZvaWQgdGVzdEdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IgaW5mb0NyZWF0b3IgPSBmQ29uZmlnLmdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IgaXMgbnVsbCIsIGluZm9DcmVhdG9yKTsKLSAgICB9Ci0gICAgCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbmZvcm1hdGlvblByZXNlbnRlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUluZm9ybWF0aW9uUHJlc2VudGVyIHByZXNlbnRlciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25QcmVzZW50ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkluZm9ybWF0aW9uUHJlc2VudGVyIGlzIG51bGwiLCBwcmVzZW50ZXIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TGluZVN0eWxlUHJvdmlkZXJzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUxpbmVTdHlsZVByb3ZpZGVyIHByb3ZpZGVyc1tdID0gZkNvbmZpZy5nZXRMaW5lU3R5bGVQcm92aWRlcnMoZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmKHByb3ZpZGVycyAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGxpbmUgc3R5bGUgcHJvdmlkZXJzIiwgZmFsc2UpOwotCX0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldFJlY29uY2lsZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlSZWNvbmNpbGVyIHIgPSBmQ29uZmlnLmdldFJlY29uY2lsZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIlJlY29uY2lsZXIgaXMgbnVsbCIsIHIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VGV4dEhvdmVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gaG92ZXJQYXJ0aXRpb25zID0gbmV3IFN0cmluZ1tde0lIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsCi0JCQkJCQkJCQkJCQkJSUhUTUxQYXJ0aXRpb25zLlNDUklQVCwKLQkJCQkJCQkJCQkJCQlJSlNQUGFydGl0aW9ucy5KU1BfREVGQVVMVCwKLQkJCQkJCQkJCQkJCQlJSlNQUGFydGl0aW9ucy5KU1BfRElSRUNUSVZFLAotCQkJCQkJCQkJCQkJCUlKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0pBVkEsCi0JCQkJCQkJCQkJCQkJSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFR9OwotCQkKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBob3ZlclBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0SG92ZXIgaG92ZXIgPSBmQ29uZmlnLmdldFRleHRIb3ZlcihmVmlld2VyLCBob3ZlclBhcnRpdGlvbnNbaV0sIFNXVC5OT05FKTsKLQkJCWFzc2VydE5vdE51bGwoImhvdmVyIHdhcyBudWxsIGZvciBwYXJ0aXRpb246ICIgKyBob3ZlclBhcnRpdGlvbnNbaV0sIGhvdmVyKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3RKU1AuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3RKU1AuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ0NTczNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZpZXdlci9WaWV3ZXJUZXN0SlNQLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnZpZXdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSkZhY2VSZXNvdXJjZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQnVzeUluZGljYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklNZW1lbnRvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3U2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSW5kZXhlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci0KLXB1YmxpYyBjbGFzcyBWaWV3ZXJUZXN0SlNQIGV4dGVuZHMgVmlld1BhcnQgewotCXByaXZhdGUgZmluYWwgU3RyaW5nIFNTRV9FRElUT1JfRk9OVCA9ICJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRleHRmb250IjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX1ZJRVdFUl9DT05URU5UUyA9ICI8JUAgcGFnZSBjb250ZW50VHlwZT1cInRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xXCIgJT5cbiI7Ci0KLQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciBmU291cmNlVmlld2VyID0gbnVsbDsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbiBmQ29uZmlnID0gbnVsbDsKLQlwcml2YXRlIElDb250ZW50T3V0bGluZVBhZ2UgZkNvbnRlbnRPdXRsaW5lUGFnZSA9IG51bGw7Ci0JcHJpdmF0ZSBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID0gbnVsbDsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZpZXdlcidzIGhpZ2hsaWdodGluZyB0ZXh0IHJhbmdlIHRvIHRoZSB0ZXh0IHJhbmdlIGluZGljYXRlZAotCSAqIGJ5IHRoZSBzZWxlY3RlZCBOb2Rlcy4KLQkgKi8KLQlwcm90ZWN0ZWQgY2xhc3MgTm9kZVJhbmdlU2VsZWN0aW9uTGlzdGVuZXIgaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKLQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKLQkJCWlmICghZXZlbnQuZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpICYmIGV2ZW50LmdldFNlbGVjdGlvbigpIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGV2ZW50LmdldFNlbGVjdGlvbigpOwotCQkJCUluZGV4ZWRSZWdpb24gc3RhcnROb2RlID0gKEluZGV4ZWRSZWdpb24pIHNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJCQlJbmRleGVkUmVnaW9uIGVuZE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgc2VsZWN0aW9uLnRvQXJyYXkoKVtzZWxlY3Rpb24uc2l6ZSgpIC0gMV07Ci0KLQkJCQlpZiAoc3RhcnROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJc3RhcnROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgc3RhcnROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQkJCQlpZiAoZW5kTm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0JCQkJCWVuZE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBlbmROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQotCQkJCWludCBzdGFydCA9IHN0YXJ0Tm9kZS5nZXRTdGFydE9mZnNldCgpOwotCQkJCWludCBlbmQgPSBlbmROb2RlLmdldEVuZE9mZnNldCgpOwotCi0JCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLQkJCQlmU291cmNlVmlld2VyLnNldFNlbGVjdGVkUmFuZ2Uoc3RhcnQsIDApOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCX0KLQkJfQotCX0KLQotCXByb3RlY3RlZCBjbGFzcyBOdW1iZXJJbnB1dERpYWxvZyBleHRlbmRzIERpYWxvZyB7Ci0JCXB1YmxpYyBOdW1iZXJJbnB1dERpYWxvZyhTaGVsbCBzaGVsbCkgewotCQkJc3VwZXIoc2hlbGwpOwotCQl9Ci0KLQkJcHVibGljIFRleHQgc3RhcnQ7Ci0JCWludCBzdGFydFZhbHVlOwotCQlwdWJsaWMgVGV4dCBsZW5ndGg7Ci0JCWludCBsZW5ndGhWYWx1ZTsKLQotCQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0JCQlDb21wb3NpdGUgY29udGFpbmVyID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsIFNXVC5OVUxMKTsKLQkJCWNvbnRhaW5lci5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQkJCWNvbnRhaW5lci5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMiwgdHJ1ZSkpOwotCQkJc2V0U2hlbGxTdHlsZShnZXRTaGVsbCgpLmdldFN0eWxlKCkgfCBTV1QuUkVTSVpFKTsKLQotCQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoY29udGFpbmVyLCBTV1QuTlVMTCk7Ci0JCQlsYWJlbC5zZXRUZXh0KCJTdGFydCIpOwotCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCWxhYmVsID0gbmV3IExhYmVsKGNvbnRhaW5lciwgU1dULk5VTEwpOwotCQkJbGFiZWwuc2V0VGV4dCgiTGVuZ3RoIik7Ci0JCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQotCQkJc3RhcnQgPSBuZXcgVGV4dChjb250YWluZXIsIFNXVC5CT1JERVIpOwotCQkJc3RhcnRWYWx1ZSA9IGZTb3VyY2VWaWV3ZXIuZ2V0VmlzaWJsZVJlZ2lvbigpLmdldE9mZnNldCgpOwotCQkJc3RhcnQuc2V0VGV4dCgiIiArIHN0YXJ0VmFsdWUpOwotCQkJc3RhcnQuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCWxlbmd0aCA9IG5ldyBUZXh0KGNvbnRhaW5lciwgU1dULkJPUkRFUik7Ci0JCQlsZW5ndGhWYWx1ZSA9IGZTb3VyY2VWaWV3ZXIuZ2V0VmlzaWJsZVJlZ2lvbigpLmdldExlbmd0aCgpOwotCQkJbGVuZ3RoLnNldFRleHQoIiIgKyBsZW5ndGhWYWx1ZSk7Ci0JCQlsZW5ndGguc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCS8vIHN0YXJ0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCS8vIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJLy8gaWYgKGUud2lkZ2V0ID09IHN0YXJ0KSB7Ci0JCQkvLyB0cnkgewotCQkJLy8gc3RhcnRWYWx1ZSA9IEludGVnZXIuZGVjb2RlKHN0YXJ0LmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCS8vIH0KLQkJCS8vIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCS8vIHN0YXJ0VmFsdWUgPSAwOwotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfSk7Ci0JCQkvLyBsZW5ndGguYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgewotCQkJLy8gcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7Ci0JCQkvLyBpZiAoZS53aWRnZXQgPT0gbGVuZ3RoKSB7Ci0JCQkvLyB0cnkgewotCQkJLy8gbGVuZ3RoVmFsdWUgPSBJbnRlZ2VyLmRlY29kZShsZW5ndGguZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJLy8gfQotCQkJLy8gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJLy8gbGVuZ3RoVmFsdWUgPSAwOwotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfSk7Ci0KLQkJCXJldHVybiBjb21wb3NpdGU7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nI29rUHJlc3NlZCgpCi0JCSAqLwotCQlwcm90ZWN0ZWQgdm9pZCBva1ByZXNzZWQoKSB7Ci0JCQl0cnkgewotCQkJCXN0YXJ0VmFsdWUgPSBJbnRlZ2VyLmRlY29kZShzdGFydC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkJc3RhcnRWYWx1ZSA9IDA7Ci0JCQl9Ci0JCQl0cnkgewotCQkJCWxlbmd0aFZhbHVlID0gSW50ZWdlci5kZWNvZGUobGVuZ3RoLmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCX0KLQkJCWNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCQlsZW5ndGhWYWx1ZSA9IDA7Ci0JCQl9Ci0JCQlzdXBlci5va1ByZXNzZWQoKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIGFkZEFjdGlvbnMoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWdyKSB7Ci0JCWlmIChtZ3IgIT0gbnVsbCkgewotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJOZXcgSlNQIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlCdXN5SW5kaWNhdG9yLnNob3dXaGlsZShnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCksIG5ldyBSdW5uYWJsZSgpIHsKLQkJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJCQlzZXR1cFZpZXdlckZvck5ldygpOwotCQkJCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJCQl9Ci0JCQkJCX0pOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJDaGFuZ2UgVmlzaWJpbGl0eSI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJTnVtYmVySW5wdXREaWFsb2cgZGxnID0gbmV3IE51bWJlcklucHV0RGlhbG9nKGZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCkpOwotCQkJCQlpbnQgcHJvY2VlZCA9IGRsZy5vcGVuKCk7Ci0JCQkJCWlmIChwcm9jZWVkID09IFdpbmRvdy5DQU5DRUwpCi0JCQkJCQlyZXR1cm47Ci0JCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihkbGcuc3RhcnRWYWx1ZSwgZGxnLmxlbmd0aFZhbHVlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiU2hvdyBBbGwiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0JCQkvLyBubyBsb25nZXIgYWJsZSB0byBzZXQgaW5wdXQgdG8gTlVMTAotCQkJLy8gbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJLy8gcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJLy8gcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkvLyB9Ci0JCQkvLwotCQkJLy8gcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCS8vIHJldHVybiAiU2V0IElucHV0IHRvIE5VTEwiOwotCQkJLy8gfQotCQkJLy8gcHVibGljIHZvaWQgcnVuKCkgewotCQkJLy8gc3VwZXIucnVuKCk7Ci0JCQkvLyB2aWV3ZXIuc2V0SW5wdXQobnVsbCk7Ci0JCQkvLyB9Ci0JCQkvLyB9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBmcm9tIEFjdGl2ZSBFZGl0b3IiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCUlUZXh0RWRpdG9yIHRleHRFZGl0b3IgPSBnZXRBY3RpdmVFZGl0b3IoKTsKLQkJCQkJaWYgKHRleHRFZGl0b3IgIT0gbnVsbCkgewotCQkJCQkJc2V0dXBWaWV3ZXJGb3JFZGl0b3IodGV4dEVkaXRvcik7Ci0JCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKHRydWUpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgYW5kIEZvbGxvdyBTZWxlY3Rpb24iOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCWZvbGxvd1NlbGVjdGlvbigpOwotCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKHRydWUpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGFuZCBGb2xsb3cgU2VsZWN0aW9uIEFzIFJlYWRPbmx5IjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZShmYWxzZSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlN0b3AgRm9sbG93aW5nIFNlbGVjdGlvbiI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOwotCQkJCX0KLQkJCX0pOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUpCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgewotCQlJQ29udHJpYnV0aW9uTWFuYWdlciBtZ3IgPSBnZXRWaWV3U2l0ZSgpLmdldEFjdGlvbkJhcnMoKS5nZXRNZW51TWFuYWdlcigpOwotCQlhZGRBY3Rpb25zKG1ncik7Ci0KLQkJLy8gY3JlYXRlIHNvdXJjZSB2aWV3ZXIgJiBpdHMgY29udGVudCB0eXBlLXNwZWNpZmljIHZpZXdlcgotCQkvLyBjb25maWd1cmF0aW9uCi0JCWZTb3VyY2VWaWV3ZXIgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXIocGFyZW50LCBudWxsLCBudWxsLCBmYWxzZSwgU1dULk5PTkUpOwotCQlmQ29uZmlnID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkpTUCgpOwotCi0JCS8vIHNldCB1cCB0aGUgdmlld2VyIHdpdGggYSBkb2N1bWVudCAmIHZpZXdlciBjb25maWcKLQkJc2V0dXBWaWV3ZXJGb3JOZXcoKTsKLQotCQlzZXR1cFZpZXdlclByZWZlcmVuY2VzKCk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNkaXNwb3NlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7Ci0JCWZTb3VyY2VWaWV3ZXIudW5jb25maWd1cmUoKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I3NldEZvY3VzKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKLQkJaWYgKGZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpICE9IG51bGwgJiYgIWZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkKLQkJCWZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLnNldEZvY3VzKCk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JVmlld1BhcnQjaW5pdChJVmlld1NpdGUsIElNZW1lbnRvKQotCSAqLwotCXB1YmxpYyB2b2lkIGluaXQoSVZpZXdTaXRlIHNpdGUsIElNZW1lbnRvIG1lbWVudG8pIHRocm93cyBQYXJ0SW5pdEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLmluaXQoc2l0ZSwgbWVtZW50byk7Ci0JfQotCi0JLyoqCi0JICogU2V0IHVwIHNvdXJjZSB2aWV3ZXIgd2l0aCBhbnkgYWRkaXRpb25hbCBwcmVmZXJlbmNlcyBpdCBzaG91bGQgaGF2ZSBFeDoKLQkgKiBmb250LCB0YWIgd2lkdGgKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJQcmVmZXJlbmNlcygpIHsKLQkJZlNvdXJjZVZpZXdlci5nZXRUZXh0V2lkZ2V0KCkuc2V0Rm9udChKRmFjZVJlc291cmNlcy5nZXRGb250KFNTRV9FRElUT1JfRk9OVCkpOwotCX0KLQotCS8qKgotCSAqIFNldCB1cCBzb3VyY2Ugdmlld2VyIHdpdGggYSBuZXcgZG9jdW1lbnQgJiBjb25maWd1cmUgaXQKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJGb3JOZXcoKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsgLy8gaWYgd2FzIGZvbGxvd2luZyBzZWxlY3Rpb24sIHN0b3AKLQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0KLQkJSURvY3VtZW50IGRvYyA9IG1vZGVsTWFuYWdlci5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWRvYy5zZXQoREVGQVVMVF9WSUVXRVJfQ09OVEVOVFMpOwotCi0JCWZTb3VyY2VWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jKTsKLQkJLy8gbmVlZCB0byByZWNvbmZpZ3VyZSBhZnRlciBzZXQgZG9jdW1lbnQganVzdCBzbyBoaWdobGlnaHRlciB3b3JrcwotCQlmU291cmNlVmlld2VyLmNvbmZpZ3VyZShmQ29uZmlnKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFjdGl2ZSB0ZXh0IGVkaXRvciBpZiBwb3NzaWJsZQotCSAqIAotCSAqIEByZXR1cm4gSVRleHRFZGl0b3IKLQkgKi8KLQlwcml2YXRlIElUZXh0RWRpdG9yIGdldEFjdGl2ZUVkaXRvcigpIHsKLQkJSVRleHRFZGl0b3IgZWRpdG9yID0gbnVsbDsKLQkJSUVkaXRvclBhcnQgZWRpdG9yUGFydCA9IGdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCWlmIChlZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVRleHRFZGl0b3IpCi0JCQllZGl0b3IgPSAoSVRleHRFZGl0b3IpIGVkaXRvclBhcnQ7Ci0JCWlmIChlZGl0b3IgPT0gbnVsbCAmJiBlZGl0b3JQYXJ0ICE9IG51bGwpCi0JCQllZGl0b3IgPSAoSVRleHRFZGl0b3IpIGVkaXRvclBhcnQuZ2V0QWRhcHRlcihJVGV4dEVkaXRvci5jbGFzcyk7Ci0JCXJldHVybiBlZGl0b3I7Ci0JfQotCi0JLyoqCi0JICogU2V0cyB1cCB0aGUgdmlld2VyIHdpdGggdGhlIHNhbWUgZG9jdW1lbnQvaW5wdXQgYXMgdGhlIGdpdmVuIGVkaXRvcgotCSAqIAotCSAqIEBwYXJhbSBJVGV4dEVkaXRvcgotCSAqICAgICAgICAgICAgZWRpdG9yIC0gdGhlIGVkaXRvciB0byB1c2UgKmNhbm5vdCB0byBiZSBudWxsKgotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cFZpZXdlckZvckVkaXRvcihJVGV4dEVkaXRvciBlZGl0b3IpIHsKLQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOyAvLyBpZiB3YXMgZm9sbG93aW5nIHNlbGVjdGlvbiwgc3RvcAotCQlJRG9jdW1lbnQgZG9jID0gZWRpdG9yLmdldERvY3VtZW50UHJvdmlkZXIoKS5nZXREb2N1bWVudChlZGl0b3IuZ2V0RWRpdG9ySW5wdXQoKSk7Ci0JCWZTb3VyY2VWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jKTsKLQotCQkvLyBuZWVkIHRvIHJlY29uZmlndXJlIGFmdGVyIHNldCBkb2N1bWVudCBqdXN0IHNvIGhpZ2hsaWdodGVyIHdvcmtzCi0JCWZTb3VyY2VWaWV3ZXIuY29uZmlndXJlKG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU1AoKSk7Ci0JfQotCi0JLyoqCi0JICogSG9va3MgdXAgdGhlIHZpZXdlciB0byBmb2xsb3cgdGhlIHNlbGVjdGlvbiBtYWRlIGluIHRoZSBhY3RpdmUgZWRpdG9yCi0JICovCi0JcHJpdmF0ZSB2b2lkIGZvbGxvd1NlbGVjdGlvbigpIHsKLQkJSVRleHRFZGl0b3IgZWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCWlmIChlZGl0b3IgIT0gbnVsbCkgewotCQkJc2V0dXBWaWV3ZXJGb3JFZGl0b3IoZWRpdG9yKTsKLQkJCWlmIChmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9PSBudWxsKQotCQkJCWZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID0gbmV3IE5vZGVSYW5nZVNlbGVjdGlvbkxpc3RlbmVyKCk7Ci0KLQkJCWZDb250ZW50T3V0bGluZVBhZ2UgPSAoKElDb250ZW50T3V0bGluZVBhZ2UpIGVkaXRvci5nZXRBZGFwdGVyKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKTsKLQkJCWlmIChmQ29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKLQkJCQlmQ29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lcik7Ci0KLQkJCQlpZiAoIWZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpICYmIGZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCi0JCQkJCU9iamVjdFtdIG5vZGVzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZkNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSkudG9BcnJheSgpOwotCQkJCQlJbmRleGVkUmVnaW9uIHN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSBub2Rlc1swXTsKLQkJCQkJSW5kZXhlZFJlZ2lvbiBlbmROb2RlID0gKEluZGV4ZWRSZWdpb24pIG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdOwotCi0JCQkJCWlmIChzdGFydE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQkJc3RhcnROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgc3RhcnROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQkJCQkJaWYgKGVuZE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQkJZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIGVuZE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCi0JCQkJCWludCBzdGFydCA9IHN0YXJ0Tm9kZS5nZXRTdGFydE9mZnNldCgpOwotCQkJCQlpbnQgZW5kID0gZW5kTm9kZS5nZXRFbmRPZmZzZXQoKTsKLQotCQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRTZWxlY3RlZFJhbmdlKHN0YXJ0LCAwKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDZWFzZSBmb2xsb3dpbmcgdGhlIHNlbGVjdGlvbiBtYWRlIGluIHRoZSBlZGl0b3IKLQkgKi8KLQlwcml2YXRlIHZvaWQgc3RvcEZvbGxvd1NlbGVjdGlvbigpIHsKLQkJaWYgKGZDb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgewotCQkJZkNvbnRlbnRPdXRsaW5lUGFnZS5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIpOwotCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCWZDb250ZW50T3V0bGluZVBhZ2UgPSBudWxsOwotCQl9Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkYzQyZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLTxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KLQk8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotCTwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0JPCEtLTxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIi8+LS0+Ci0KLQk8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgcGx1Z2luLW5hbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0JPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cyIgLz4KLQk8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLQotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy4qeG1sIiAvPgotCQk8L2RlbGV0ZT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0JPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0JCTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPgotCQk8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLkpTUFVJVGVzdFN1aXRlIiAvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLQk8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLQkJPCEtLTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+LS0+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0JPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotCTx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotCQk8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLip4bWwiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0JCTwvYW50PgotCQk8IS0tCQk8ZW1haWxSZXN1bHRzIHJlc3VsdHNGaWxlPSIke2J1aWxkLXJlc3VsdHMtaG9tZX0vJHtwbHVnaW4tbmFtZX0ueG1sIiBhZGRyZXNzbGlzdD0iZGF2aWRfd2lsbGlhbXNAdXMuaWJtLmNvbSIgLz4gLS0+Ci0JPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy56aXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViNDgwYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvMTE2NTIzL3N0cnV0cy1sb2dpYy50bGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy8xMTY1MjMvc3RydXRzLWxvZ2ljLnRsZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk3NTk3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy8xMTY1MjMvc3RydXRzLWxvZ2ljLnRsZAorKysgL2Rldi9udWxsCkBAIC0xLDY0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi0KLQotCi0KLQotPCFET0NUWVBFIHRhZ2xpYiBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBKU1AgVGFnIExpYnJhcnkgMS4xLy9FTiIgImh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS9kdGRzL3dlYi1qc3B0YWdsaWJyYXJ5XzFfMS5kdGQiPgotPHRhZ2xpYj4KLTx0bGlidmVyc2lvbj4xLjA8L3RsaWJ2ZXJzaW9uPgotPGpzcHZlcnNpb24+MS4xPC9qc3B2ZXJzaW9uPgotPHNob3J0bmFtZT5sb2dpYzwvc2hvcnRuYW1lPgotPHVyaT5odHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL3N0cnV0cy90YWdzLWxvZ2ljPC91cmk+Ci08dGFnPgotPG5hbWU+ZW1wdHk8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLkVtcHR5VGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5lcXVhbDwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuRXF1YWxUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+Y29va2llPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmhlYWRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtZXRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5zY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT52YWx1ZTwvbmFtZT4KLTxyZXF1aXJlZD50cnVlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+Zm9yd2FyZDwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuRm9yd2FyZFRhZzwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+ZW1wdHk8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+dHJ1ZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPmdyZWF0ZXJFcXVhbDwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuR3JlYXRlckVxdWFsVGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPmNvb2tpZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+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+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPmdyZWF0ZXJUaGFuPC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5HcmVhdGVyVGhhblRhZzwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5jb29raWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+aGVhZGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cGFyYW1ldGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnZhbHVlPC9uYW1lPgotPHJlcXVpcmVkPnRydWU8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5pdGVyYXRlPC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5JdGVyYXRlVGFnPC90YWdjbGFzcz4KLTx0ZWljbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuSXRlcmF0ZVRlaTwvdGVpY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5jb2xsZWN0aW9uPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmlkPC9uYW1lPgotPHJlcXVpcmVkPnRydWU8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPmZhbHNlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmluZGV4SWQ8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPmZhbHNlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmxlbmd0aDwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPm9mZnNldDwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5zY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT50eXBlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+bGVzc0VxdWFsPC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5MZXNzRXF1YWxUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+Y29va2llPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmhlYWRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtZXRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5zY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT52YWx1ZTwvbmFtZT4KLTxyZXF1aXJlZD50cnVlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+bGVzc1RoYW48L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLkxlc3NUaGFuVGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPmNvb2tpZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+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+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPm1hdGNoPC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5NYXRjaFRhZzwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5jb29raWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+aGVhZGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmxvY2F0aW9uPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cGFyYW1ldGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnZhbHVlPC9uYW1lPgotPHJlcXVpcmVkPnRydWU8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5tZXNzYWdlc05vdFByZXNlbnQ8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLk1lc3NhZ2VzTm90UHJlc2VudFRhZzwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPm1lc3NhZ2U8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5tZXNzYWdlc1ByZXNlbnQ8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLk1lc3NhZ2VzUHJlc2VudFRhZzwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPm1lc3NhZ2U8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5ub3RFbXB0eTwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuTm90RW1wdHlUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5zY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPm5vdEVxdWFsPC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5Ob3RFcXVhbFRhZzwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5jb29raWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+aGVhZGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cGFyYW1ldGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnZhbHVlPC9uYW1lPgotPHJlcXVpcmVkPnRydWU8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5ub3RNYXRjaDwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuTm90TWF0Y2hUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+Y29va2llPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmhlYWRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5sb2NhdGlvbjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtZXRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5zY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT52YWx1ZTwvbmFtZT4KLTxyZXF1aXJlZD50cnVlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+bm90UHJlc2VudDwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuTm90UHJlc2VudFRhZzwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5jb29raWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+aGVhZGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cGFyYW1ldGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnJvbGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+dXNlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPnByZXNlbnQ8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLlByZXNlbnRUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+Y29va2llPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmhlYWRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtZXRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5yb2xlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnVzZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5yZWRpcmVjdDwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuUmVkaXJlY3RUYWc8L3RhZ2NsYXNzPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmFuY2hvcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5mb3J3YXJkPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmhyZWY8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYWdlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtSWQ8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cGFyYW1OYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtUHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cGFyYW1TY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5zY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT50cmFuc2FjdGlvbjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPC90YWdsaWI+Ci0KLQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy8xMTY1MjMvc3RydXRzLmphciBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzLzExNjUyMy9zdHJ1dHMuamFyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjMyZjlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzLzExNjUyMy9zdHJ1dHMuamFyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTEvd21sXzFfMS5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMS93bWxfMV8xLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk0NTI2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMS93bWxfMV8xLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDM1MyArMCwwIEBACi08IS0tDQotV2lyZWxlc3MgTWFya3VwIExhbmd1YWdlIChXTUwpIERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbi4NCi0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OCwxOTk5Lg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotDQotV01MIGlzIGFuIFhNTCBsYW5ndWFnZS4gIFR5cGljYWwgdXNhZ2U6DQotICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+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+PC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL1hIVE1ML3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvWEhUTUwveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMzIxYzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvWEhUTUwveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwxMTk2ICswLDAgQEAKLTwhLS0NCi0gICBFeHRlbnNpYmxlIEhUTUwgdmVyc2lvbiAxLjAgVHJhbnNpdGlvbmFsIERURA0KLQ0KLSAgIFRoaXMgaXMgdGhlIHNhbWUgYXMgSFRNTCA0LjAgVHJhbnNpdGlvbmFsIGV4Y2VwdCBmb3INCi0gICBjaGFuZ2VzIGR1ZSB0byB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBYTUwgYW5kIFNHTUwuDQotDQotICAgTmFtZXNwYWNlID0gaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbA0KLQ0KLSAgIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLCBzZWU6IGh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMQ0KLQ0KLSAgIENvcHlyaWdodCAoYykgMTk5OC0yMDAwIFczQyAoTUlULCBJTlJJQSwgS2VpbyksDQotICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gDQotDQotICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iDQotICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIg0KLQ0KLSAgICRSZXZpc2lvbjogMS4xICQNCi0gICAkRGF0ZTogMjAwMC8wMS8yNiAxNDowODo1NiAkDQotDQotLS0+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gQ2hhcmFjdGVyIG1uZW1vbmljIGVudGl0aWVzID09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVOVElUWSAlIEhUTUxsYXQxIFBVQkxJQw0KLSAgICItLy9XM0MvL0VOVElUSUVTIExhdGluIDEgZm9yIFhIVE1MLy9FTiINCi0gICAieGh0bWwtbGF0MS5lbnQiPg0KLSVIVE1MbGF0MTsNCi0NCi08IUVOVElUWSAlIEhUTUxzeW1ib2wgUFVCTElDDQotICAgIi0vL1czQy8vRU5USVRJRVMgU3ltYm9scyBmb3IgWEhUTUwvL0VOIg0KLSAgICJ4aHRtbC1zeW1ib2wuZW50Ij4NCi0lSFRNTHN5bWJvbDsNCi0NCi08IUVOVElUWSAlIEhUTUxzcGVjaWFsIFBVQkxJQw0KLSAgICItLy9XM0MvL0VOVElUSUVTIFNwZWNpYWwgZm9yIFhIVE1MLy9FTiINCi0gICAieGh0bWwtc3BlY2lhbC5lbnQiPg0KLSVIVE1Mc3BlY2lhbDsNCi0NCi08IS0tPT09PT09PT09PT09PT09PT09IEltcG9ydGVkIE5hbWVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRU5USVRZICUgQ29udGVudFR5cGUgIkNEQVRBIj4NCi0gICAgPCEtLSBtZWRpYSB0eXBlLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLQ0KLTwhRU5USVRZICUgQ29udGVudFR5cGVzICJDREFUQSI+DQotICAgIDwhLS0gY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbWVkaWEgdHlwZXMsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotDQotPCFFTlRJVFkgJSBDaGFyc2V0ICJDREFUQSI+DQotICAgIDwhLS0gYSBjaGFyYWN0ZXIgZW5jb2RpbmcsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotDQotPCFFTlRJVFkgJSBDaGFyc2V0cyAiQ0RBVEEiPg0KLSAgICA8IS0tIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2hhcmFjdGVyIGVuY29kaW5ncywgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi0NCi08IUVOVElUWSAlIExhbmd1YWdlQ29kZSAiTk1UT0tFTiI+DQotICAgIDwhLS0gYSBsYW5ndWFnZSBjb2RlLCBhcyBwZXIgW1JGQzE3NjZdIC0tPg0KLQ0KLTwhRU5USVRZICUgQ2hhcmFjdGVyICJDREFUQSI+DQotICAgIDwhLS0gYSBzaW5nbGUgY2hhcmFjdGVyIGZyb20gW0lTTzEwNjQ2XSAtLT4NCi0NCi08IUVOVElUWSAlIE51bWJlciAiQ0RBVEEiPg0KLSAgICA8IS0tIG9uZSBvciBtb3JlIGRpZ2l0cyAtLT4NCi0NCi08IUVOVElUWSAlIExpbmtUeXBlcyAiQ0RBVEEiPg0KLSAgICA8IS0tIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGxpbmsgdHlwZXMgLS0+DQotDQotPCFFTlRJVFkgJSBNZWRpYURlc2MgIkNEQVRBIj4NCi0gICAgPCEtLSBzaW5nbGUgb3IgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbWVkaWEgZGVzY3JpcHRvcnMgLS0+DQotDQotPCFFTlRJVFkgJSBVUkkgIkNEQVRBIj4NCi0gICAgPCEtLSBhIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgc2VlIFtSRkMyMzk2XSAtLT4NCi0NCi08IUVOVElUWSAlIFVyaUxpc3QgIkNEQVRBIj4NCi0gICAgPCEtLSBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllcnMgLS0+DQotDQotPCFFTlRJVFkgJSBEYXRldGltZSAiQ0RBVEEiPg0KLSAgICA8IS0tIGRhdGUgYW5kIHRpbWUgaW5mb3JtYXRpb24uIElTTyBkYXRlIGZvcm1hdCAtLT4NCi0NCi08IUVOVElUWSAlIFNjcmlwdCAiQ0RBVEEiPg0KLSAgICA8IS0tIHNjcmlwdCBleHByZXNzaW9uIC0tPg0KLQ0KLTwhRU5USVRZICUgU3R5bGVTaGVldCAiQ0RBVEEiPg0KLSAgICA8IS0tIHN0eWxlIHNoZWV0IGRhdGEgLS0+DQotDQotPCFFTlRJVFkgJSBUZXh0ICJDREFUQSI+DQotICAgIDwhLS0gdXNlZCBmb3IgdGl0bGVzIGV0Yy4gLS0+DQotDQotPCFFTlRJVFkgJSBGcmFtZVRhcmdldCAiTk1UT0tFTiI+DQotICAgIDwhLS0gcmVuZGVyIGluIHRoaXMgZnJhbWUgLS0+DQotDQotPCFFTlRJVFkgJSBMZW5ndGggIkNEQVRBIj4NCi0gICAgPCEtLSBubiBmb3IgcGl4ZWxzIG9yIG5uJSBmb3IgcGVyY2VudGFnZSBsZW5ndGggLS0+DQotDQotPCFFTlRJVFkgJSBNdWx0aUxlbmd0aCAiQ0RBVEEiPg0KLSAgICA8IS0tIHBpeGVsLCBwZXJjZW50YWdlLCBvciByZWxhdGl2ZSAtLT4NCi0NCi08IUVOVElUWSAlIE11bHRpTGVuZ3RocyAiQ0RBVEEiPg0KLSAgICA8IS0tIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIE11bHRpTGVuZ3RoIC0tPg0KLQ0KLTwhRU5USVRZICUgUGl4ZWxzICJDREFUQSI+DQotICAgIDwhLS0gaW50ZWdlciByZXByZXNlbnRpbmcgbGVuZ3RoIGluIHBpeGVscyAtLT4NCi0NCi08IS0tIHRoZXNlIGFyZSB1c2VkIGZvciBpbWFnZSBtYXBzIC0tPg0KLQ0KLTwhRU5USVRZICUgU2hhcGUgIihyZWN0fGNpcmNsZXxwb2x5fGRlZmF1bHQpIj4NCi0NCi08IUVOVElUWSAlIENvb3JkcyAiQ0RBVEEiPg0KLSAgICA8IS0tIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGxlbmd0aHMgLS0+DQotDQotPCEtLSB1c2VkIGZvciBvYmplY3QsIGFwcGxldCwgaW1nLCBpbnB1dCBhbmQgaWZyYW1lIC0tPg0KLTwhRU5USVRZICUgSW1nQWxpZ24gIih0b3B8bWlkZGxlfGJvdHRvbXxsZWZ0fHJpZ2h0KSI+DQotDQotPCEtLSBhIGNvbG9yIHVzaW5nIHNSR0I6ICNSUkdHQkIgYXMgSGV4IHZhbHVlcyAtLT4NCi08IUVOVElUWSAlIENvbG9yICJDREFUQSI+DQotDQotPCEtLSBUaGVyZSBhcmUgYWxzbyAxNiB3aWRlbHkga25vd24gY29sb3IgbmFtZXMgd2l0aCB0aGVpciBzUkdCIHZhbHVlczoNCi0NCi0gICAgQmxhY2sgID0gIzAwMDAwMCAgICBHcmVlbiAgPSAjMDA4MDAwDQotICAgIFNpbHZlciA9ICNDMEMwQzAgICAgTGltZSAgID0gIzAwRkYwMA0KLSAgICBHcmF5ICAgPSAjODA4MDgwICAgIE9saXZlICA9ICM4MDgwMDANCi0gICAgV2hpdGUgID0gI0ZGRkZGRiAgICBZZWxsb3cgPSAjRkZGRjAwDQotICAgIE1hcm9vbiA9ICM4MDAwMDAgICAgTmF2eSAgID0gIzAwMDA4MA0KLSAgICBSZWQgICAgPSAjRkYwMDAwICAgIEJsdWUgICA9ICMwMDAwRkYNCi0gICAgUHVycGxlID0gIzgwMDA4MCAgICBUZWFsICAgPSAjMDA4MDgwDQotICAgIEZ1Y2hzaWE9ICNGRjAwRkYgICAgQXF1YSAgID0gIzAwRkZGRg0KLS0tPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IEdlbmVyaWMgQXR0cmlidXRlcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLSBjb3JlIGF0dHJpYnV0ZXMgY29tbW9uIHRvIG1vc3QgZWxlbWVudHMNCi0gIGlkICAgICAgIGRvY3VtZW50LXdpZGUgdW5pcXVlIGlkDQotICBjbGFzcyAgICBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjbGFzc2VzDQotICBzdHlsZSAgICBhc3NvY2lhdGVkIHN0eWxlIGluZm8NCi0gIHRpdGxlICAgIGFkdmlzb3J5IHRpdGxlL2FtcGxpZmljYXRpb24NCi0tLT4NCi08IUVOVElUWSAlIGNvcmVhdHRycw0KLSAiaWQgICAgICAgICAgSUQgICAgICAgICAgICAgI0lNUExJRUQNCi0gIGNsYXNzICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBzdHlsZSAgICAgICAlU3R5bGVTaGVldDsgICAjSU1QTElFRA0KLSAgdGl0bGUgICAgICAgJVRleHQ7ICAgICAgICAgI0lNUExJRUQiDQotICA+DQotDQotPCEtLSBpbnRlcm5hdGlvbmFsaXphdGlvbiBhdHRyaWJ1dGVzDQotICBsYW5nICAgICAgICBsYW5ndWFnZSBjb2RlIChiYWNrd2FyZHMgY29tcGF0aWJsZSkNCi0gIHhtbDpsYW5nICAgIGxhbmd1YWdlIGNvZGUgKGFzIHBlciBYTUwgMS4wIHNwZWMpDQotICBkaXIgICAgICAgICBkaXJlY3Rpb24gZm9yIHdlYWsvbmV1dHJhbCB0ZXh0DQotLS0+DQotPCFFTlRJVFkgJSBpMThuDQotICJsYW5nICAgICAgICAlTGFuZ3VhZ2VDb2RlOyAjSU1QTElFRA0KLSAgeG1sOmxhbmcgICAgJUxhbmd1YWdlQ29kZTsgI0lNUExJRUQNCi0gIGRpciAgICAgICAgIChsdHJ8cnRsKSAgICAgICNJTVBMSUVEIg0KLSAgPg0KLQ0KLTwhLS0gYXR0cmlidXRlcyBmb3IgY29tbW9uIFVJIGV2ZW50cw0KLSAgb25jbGljayAgICAgYSBwb2ludGVyIGJ1dHRvbiB3YXMgY2xpY2tlZA0KLSAgb25kYmxjbGljayAgYSBwb2ludGVyIGJ1dHRvbiB3YXMgZG91YmxlIGNsaWNrZWQNCi0gIG9ubW91c2Vkb3duIGEgcG9pbnRlciBidXR0b24gd2FzIHByZXNzZWQgZG93bg0KLSAgb25tb3VzZXVwICAgYSBwb2ludGVyIGJ1dHRvbiB3YXMgcmVsZWFzZWQNCi0gIG9ubW91c2Vtb3ZlIGEgcG9pbnRlciB3YXMgbW92ZWQgb250byB0aGUgZWxlbWVudA0KLSAgb25tb3VzZW91dCAgYSBwb2ludGVyIHdhcyBtb3ZlZCBhd2F5IGZyb20gdGhlIGVsZW1lbnQNCi0gIG9ua2V5cHJlc3MgIGEga2V5IHdhcyBwcmVzc2VkIGFuZCByZWxlYXNlZA0KLSAgb25rZXlkb3duICAgYSBrZXkgd2FzIHByZXNzZWQgZG93bg0KLSAgb25rZXl1cCAgICAgYSBrZXkgd2FzIHJlbGVhc2VkDQotLS0+DQotPCFFTlRJVFkgJSBldmVudHMNCi0gIm9uY2xpY2sgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbmRibGNsaWNrICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25tb3VzZWRvd24gJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9ubW91c2V1cCAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbm1vdXNlb3ZlciAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25tb3VzZW1vdmUgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9ubW91c2VvdXQgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbmtleXByZXNzICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25rZXlkb3duICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9ua2V5dXAgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEIg0KLSAgPg0KLQ0KLTwhLS0gYXR0cmlidXRlcyBmb3IgZWxlbWVudHMgdGhhdCBjYW4gZ2V0IHRoZSBmb2N1cw0KLSAgYWNjZXNza2V5ICAgYWNjZXNzaWJpbGl0eSBrZXkgY2hhcmFjdGVyDQotICB0YWJpbmRleCAgICBwb3NpdGlvbiBpbiB0YWJiaW5nIG9yZGVyDQotICBvbmZvY3VzICAgICB0aGUgZWxlbWVudCBnb3QgdGhlIGZvY3VzDQotICBvbmJsdXIgICAgICB0aGUgZWxlbWVudCBsb3N0IHRoZSBmb2N1cw0KLS0tPg0KLTwhRU5USVRZICUgZm9jdXMNCi0gImFjY2Vzc2tleSAgICVDaGFyYWN0ZXI7ICAgICNJTVBMSUVEDQotICB0YWJpbmRleCAgICAlTnVtYmVyOyAgICAgICAjSU1QTElFRA0KLSAgb25mb2N1cyAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uYmx1ciAgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEIg0KLSAgPg0KLQ0KLTwhRU5USVRZICUgYXR0cnMgIiVjb3JlYXR0cnM7ICVpMThuOyAlZXZlbnRzOyI+DQotDQotPCEtLSB0ZXh0IGFsaWdubWVudCBmb3IgcCwgZGl2LCBoMS1oNi4gVGhlIGRlZmF1bHQgaXMNCi0gICAgIGFsaWduPSJsZWZ0IiBmb3IgbHRyIGhlYWRpbmdzLCAicmlnaHQiIGZvciBydGwgLS0+DQotDQotPCFFTlRJVFkgJSBUZXh0QWxpZ24gImFsaWduIChsZWZ0fGNlbnRlcnxyaWdodCkgI0lNUExJRUQiPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IFRleHQgRWxlbWVudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTlRJVFkgJSBzcGVjaWFsDQotICAgImJyIHwgc3BhbiB8IGJkbyB8IG9iamVjdCB8IGFwcGxldCB8IGltZyB8IG1hcCB8IGlmcmFtZSI+DQotDQotPCFFTlRJVFkgJSBmb250c3R5bGUgInR0IHwgaSB8IGIgfCBiaWcgfCBzbWFsbCB8IHUNCi0gICAgICAgICAgICAgICAgICAgICAgfCBzIHwgc3RyaWtlIHxmb250IHwgYmFzZWZvbnQiPg0KLQ0KLTwhRU5USVRZICUgcGhyYXNlICJlbSB8IHN0cm9uZyB8IGRmbiB8IGNvZGUgfCBxIHwgc3ViIHwgc3VwIHwNCi0gICAgICAgICAgICAgICAgICAgc2FtcCB8IGtiZCB8IHZhciB8IGNpdGUgfCBhYmJyIHwgYWNyb255bSI+DQotDQotPCFFTlRJVFkgJSBpbmxpbmUuZm9ybXMgImlucHV0IHwgc2VsZWN0IHwgdGV4dGFyZWEgfCBsYWJlbCB8IGJ1dHRvbiI+DQotDQotPCEtLSB0aGVzZSBjYW4gb2NjdXIgYXQgYmxvY2sgb3IgaW5saW5lIGxldmVsIC0tPg0KLTwhRU5USVRZICUgbWlzYyAiaW5zIHwgZGVsIHwgc2NyaXB0IHwgbm9zY3JpcHQiPg0KLQ0KLTwhRU5USVRZICUgaW5saW5lICJhIHwgJXNwZWNpYWw7IHwgJWZvbnRzdHlsZTsgfCAlcGhyYXNlOyB8ICVpbmxpbmUuZm9ybXM7Ij4NCi0NCi08IS0tICVJbmxpbmU7IGNvdmVycyBpbmxpbmUgb3IgInRleHQtbGV2ZWwiIGVsZW1lbnRzIC0tPg0KLTwhRU5USVRZICUgSW5saW5lICIoI1BDREFUQSB8ICVpbmxpbmU7IHwgJW1pc2M7KSoiPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT0gQmxvY2sgbGV2ZWwgZWxlbWVudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTlRJVFkgJSBoZWFkaW5nICJoMXxoMnxoM3xoNHxoNXxoNiI+DQotPCFFTlRJVFkgJSBsaXN0cyAidWwgfCBvbCB8IGRsIHwgbWVudSB8IGRpciI+DQotPCFFTlRJVFkgJSBibG9ja3RleHQgInByZSB8IGhyIHwgYmxvY2txdW90ZSB8IGFkZHJlc3MgfCBjZW50ZXIgfCBub2ZyYW1lcyI+DQotDQotPCFFTlRJVFkgJSBibG9jaw0KLSAgICAicCB8ICVoZWFkaW5nOyB8IGRpdiB8ICVsaXN0czsgfCAlYmxvY2t0ZXh0OyB8IGlzaW5kZXggfGZpZWxkc2V0IHwgdGFibGUiPg0KLQ0KLTwhRU5USVRZICUgQmxvY2sgIiglYmxvY2s7IHwgZm9ybSB8ICVtaXNjOykqIj4NCi0NCi08IS0tICVGbG93OyBtaXhlcyBCbG9jayBhbmQgSW5saW5lIGFuZCBpcyB1c2VkIGZvciBsaXN0IGl0ZW1zIGV0Yy4gLS0+DQotPCFFTlRJVFkgJSBGbG93ICIoI1BDREFUQSB8ICVibG9jazsgfCBmb3JtIHwgJWlubGluZTsgfCAlbWlzYzspKiI+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PSBDb250ZW50IG1vZGVscyBmb3IgZXhjbHVzaW9ucyA9PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tIGEgZWxlbWVudHMgdXNlICVJbmxpbmU7IGV4Y2x1ZGluZyBhIC0tPg0KLQ0KLTwhRU5USVRZICUgYS5jb250ZW50DQotICAgIigjUENEQVRBIHwgJXNwZWNpYWw7IHwgJWZvbnRzdHlsZTsgfCAlcGhyYXNlOyB8ICVpbmxpbmUuZm9ybXM7IHwgJW1pc2M7KSoiPg0KLQ0KLTwhLS0gcHJlIHVzZXMgJUlubGluZSBleGNsdWRpbmcgaW1nLCBvYmplY3QsIGFwcGxldCwgYmlnLCBzbWFsbCwNCi0gICAgIHN1Yiwgc3VwLCBmb250LCBvciBiYXNlZm9udCAtLT4NCi0NCi08IUVOVElUWSAlIHByZS5jb250ZW50DQotICAgIigjUENEQVRBIHwgYSB8IGJyIHwgc3BhbiB8IGJkbyB8IG1hcCB8IHR0IHwgaSB8IGIgfCB1IHwgcyB8DQotICAgICAgJXBocmFzZTsgfCAlaW5saW5lLmZvcm1zOykqIj4NCi0NCi08IS0tIGZvcm0gdXNlcyAlRmxvdzsgZXhjbHVkaW5nIGZvcm0gLS0+DQotDQotPCFFTlRJVFkgJSBmb3JtLmNvbnRlbnQgIigjUENEQVRBIHwgJWJsb2NrOyB8ICVpbmxpbmU7IHwgJW1pc2M7KSoiPg0KLQ0KLTwhLS0gYnV0dG9uIHVzZXMgJUZsb3c7IGJ1dCBleGNsdWRlcyBhLCBmb3JtLCBmb3JtIGNvbnRyb2xzLCBpZnJhbWUgLS0+DQotDQotPCFFTlRJVFkgJSBidXR0b24uY29udGVudA0KLSAgICIoI1BDREFUQSB8IHAgfCAlaGVhZGluZzsgfCBkaXYgfCAlbGlzdHM7IHwgJWJsb2NrdGV4dDsgfA0KLSAgICAgIHRhYmxlIHwgYnIgfCBzcGFuIHwgYmRvIHwgb2JqZWN0IHwgYXBwbGV0IHwgaW1nIHwgbWFwIHwNCi0gICAgICAlZm9udHN0eWxlOyB8ICVwaHJhc2U7IHwgJW1pc2M7KSoiPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09IERvY3VtZW50IFN0cnVjdHVyZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLSB0aGUgbmFtZXNwYWNlIFVSSSBkZXNpZ25hdGVzIHRoZSBkb2N1bWVudCBwcm9maWxlIC0tPg0KLQ0KLTwhRUxFTUVOVCBodG1sIChoZWFkLCBib2R5KT4NCi08IUFUVExJU1QgaHRtbA0KLSAgJWkxOG47DQotICB4bWxucyAgICAgICAlVVJJOyAgICAgICAgICAjRklYRUQgJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnDQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gRG9jdW1lbnQgSGVhZCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVOVElUWSAlIGhlYWQubWlzYyAiKHNjcmlwdHxzdHlsZXxtZXRhfGxpbmt8b2JqZWN0fGlzaW5kZXgpKiI+DQotDQotPCEtLSBjb250ZW50IG1vZGVsIGlzICVoZWFkLm1pc2M7IGNvbWJpbmVkIHdpdGggYSBzaW5nbGUNCi0gICAgIHRpdGxlIGFuZCBhbiBvcHRpb25hbCBiYXNlIGVsZW1lbnQgaW4gYW55IG9yZGVyIC0tPg0KLQ0KLTwhRUxFTUVOVCBoZWFkICglaGVhZC5taXNjOywNCi0gICAgICgodGl0bGUsICVoZWFkLm1pc2M7LCAoYmFzZSwgJWhlYWQubWlzYzspPykgfA0KLSAgICAgIChiYXNlLCAlaGVhZC5taXNjOywgKHRpdGxlLCAlaGVhZC5taXNjOykpKSk+DQotDQotPCFBVFRMSVNUIGhlYWQNCi0gICVpMThuOw0KLSAgcHJvZmlsZSAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIFRoZSB0aXRsZSBlbGVtZW50IGlzIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGZsb3cgb2YgdGV4dC4NCi0gICAgICAgSXQgc2hvdWxkIGJlIGRpc3BsYXllZCwgZm9yIGV4YW1wbGUgYXMgdGhlIHBhZ2UgaGVhZGVyIG9yDQotICAgICAgIHdpbmRvdyB0aXRsZS4gRXhhY3RseSBvbmUgdGl0bGUgaXMgcmVxdWlyZWQgcGVyIGRvY3VtZW50Lg0KLSAgICAtLT4NCi08IUVMRU1FTlQgdGl0bGUgKCNQQ0RBVEEpPg0KLTwhQVRUTElTVCB0aXRsZSAlaTE4bjs+DQotDQotPCEtLSBkb2N1bWVudCBiYXNlIFVSSSAtLT4NCi0NCi08IUVMRU1FTlQgYmFzZSBFTVBUWT4NCi08IUFUVExJU1QgYmFzZQ0KLSAgaHJlZiAgICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIHRhcmdldCAgICAgICVGcmFtZVRhcmdldDsgICNJTVBMSUVEDQotICA+DQotDQotPCEtLSBnZW5lcmljIG1ldGFpbmZvcm1hdGlvbiAtLT4NCi08IUVMRU1FTlQgbWV0YSBFTVBUWT4NCi08IUFUVExJU1QgbWV0YQ0KLSAgJWkxOG47DQotICBodHRwLWVxdWl2ICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgbmFtZSAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIGNvbnRlbnQgICAgIENEQVRBICAgICAgICAgICNSRVFVSVJFRA0KLSAgc2NoZW1lICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tDQotICBSZWxhdGlvbnNoaXAgdmFsdWVzIGNhbiBiZSB1c2VkIGluIHByaW5jaXBsZToNCi0NCi0gICBhKSBmb3IgZG9jdW1lbnQgc3BlY2lmaWMgdG9vbGJhcnMvbWVudXMgd2hlbiB1c2VkDQotICAgICAgd2l0aCB0aGUgbGluayBlbGVtZW50IGluIGRvY3VtZW50IGhlYWQgZS5nLg0KLSAgICAgICAgc3RhcnQsIGNvbnRlbnRzLCBwcmV2aW91cywgbmV4dCwgaW5kZXgsIGVuZCwgaGVscA0KLSAgIGIpIHRvIGxpbmsgdG8gYSBzZXBhcmF0ZSBzdHlsZSBzaGVldCAocmVsPSJzdHlsZXNoZWV0IikNCi0gICBjKSB0byBtYWtlIGEgbGluayB0byBhIHNjcmlwdCAocmVsPSJzY3JpcHQiKQ0KLSAgIGQpIGJ5IHN0eWxlc2hlZXRzIHRvIGNvbnRyb2wgaG93IGNvbGxlY3Rpb25zIG9mDQotICAgICAgaHRtbCBub2RlcyBhcmUgcmVuZGVyZWQgaW50byBwcmludGVkIGRvY3VtZW50cw0KLSAgIGUpIHRvIG1ha2UgYSBsaW5rIHRvIGEgcHJpbnRhYmxlIHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudA0KLSAgICAgIGUuZy4gYSBQb3N0U2NyaXB0IG9yIFBERiB2ZXJzaW9uIChyZWw9ImFsdGVybmF0ZSIgbWVkaWE9InByaW50IikNCi0tLT4NCi0NCi08IUVMRU1FTlQgbGluayBFTVBUWT4NCi08IUFUVExJU1QgbGluaw0KLSAgJWF0dHJzOw0KLSAgY2hhcnNldCAgICAgJUNoYXJzZXQ7ICAgICAgI0lNUExJRUQNCi0gIGhyZWYgICAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBocmVmbGFuZyAgICAlTGFuZ3VhZ2VDb2RlOyAjSU1QTElFRA0KLSAgdHlwZSAgICAgICAgJUNvbnRlbnRUeXBlOyAgI0lNUExJRUQNCi0gIHJlbCAgICAgICAgICVMaW5rVHlwZXM7ICAgICNJTVBMSUVEDQotICByZXYgICAgICAgICAlTGlua1R5cGVzOyAgICAjSU1QTElFRA0KLSAgbWVkaWEgICAgICAgJU1lZGlhRGVzYzsgICAgI0lNUExJRUQNCi0gIHRhcmdldCAgICAgICVGcmFtZVRhcmdldDsgICNJTVBMSUVEDQotICA+DQotDQotPCEtLSBzdHlsZSBpbmZvLCB3aGljaCBtYXkgaW5jbHVkZSBDREFUQSBzZWN0aW9ucyAtLT4NCi08IUVMRU1FTlQgc3R5bGUgKCNQQ0RBVEEpPg0KLTwhQVRUTElTVCBzdHlsZQ0KLSAgJWkxOG47DQotICB0eXBlICAgICAgICAlQ29udGVudFR5cGU7ICAjUkVRVUlSRUQNCi0gIG1lZGlhICAgICAgICVNZWRpYURlc2M7ICAgICNJTVBMSUVEDQotICB0aXRsZSAgICAgICAlVGV4dDsgICAgICAgICAjSU1QTElFRA0KLSAgeG1sOnNwYWNlICAgKHByZXNlcnZlKSAgICAgI0ZJWEVEICdwcmVzZXJ2ZScNCi0gID4NCi0NCi08IS0tIHNjcmlwdCBzdGF0ZW1lbnRzLCB3aGljaCBtYXkgaW5jbHVkZSBDREFUQSBzZWN0aW9ucyAtLT4NCi08IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCi08IUFUVExJU1Qgc2NyaXB0DQotICBjaGFyc2V0ICAgICAlQ2hhcnNldDsgICAgICAjSU1QTElFRA0KLSAgdHlwZSAgICAgICAgJUNvbnRlbnRUeXBlOyAgI1JFUVVJUkVEDQotICBsYW5ndWFnZSAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgc3JjICAgICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGRlZmVyICAgICAgIChkZWZlcikgICAgICAgICNJTVBMSUVEDQotICB4bWw6c3BhY2UgICAocHJlc2VydmUpICAgICAjRklYRUQgJ3ByZXNlcnZlJw0KLSAgPg0KLQ0KLTwhLS0gYWx0ZXJuYXRlIGNvbnRlbnQgY29udGFpbmVyIGZvciBub24gc2NyaXB0LWJhc2VkIHJlbmRlcmluZyAtLT4NCi0NCi08IUVMRU1FTlQgbm9zY3JpcHQgJUZsb3c7Pg0KLTwhQVRUTElTVCBub3NjcmlwdA0KLSAgJWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09PT09PSBGcmFtZXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLSBpbmxpbmUgc3Vid2luZG93IC0tPg0KLQ0KLTwhRUxFTUVOVCBpZnJhbWUgJUZsb3c7Pg0KLTwhQVRUTElTVCBpZnJhbWUNCi0gICVjb3JlYXR0cnM7DQotICBsb25nZGVzYyAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgbmFtZSAgICAgICAgTk1UT0tFTiAgICAgICAgI0lNUExJRUQNCi0gIHNyYyAgICAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBmcmFtZWJvcmRlciAoMXwwKSAgICAgICAgICAiMSINCi0gIG1hcmdpbndpZHRoICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICBtYXJnaW5oZWlnaHQgJVBpeGVsczsgICAgICAjSU1QTElFRA0KLSAgc2Nyb2xsaW5nICAgKHllc3xub3xhdXRvKSAgImF1dG8iDQotICBhbGlnbiAgICAgICAlSW1nQWxpZ247ICAgICAjSU1QTElFRA0KLSAgaGVpZ2h0ICAgICAgJUxlbmd0aDsgICAgICAgI0lNUExJRUQNCi0gIHdpZHRoICAgICAgICVMZW5ndGg7ICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLSBhbHRlcm5hdGUgY29udGVudCBjb250YWluZXIgZm9yIG5vbiBmcmFtZS1iYXNlZCByZW5kZXJpbmcgLS0+DQotDQotPCFFTEVNRU5UIG5vZnJhbWVzICVGbG93Oz4NCi08IUFUVExJU1Qgbm9mcmFtZXMNCi0gICVhdHRyczsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBEb2N1bWVudCBCb2R5ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRUxFTUVOVCBib2R5ICVGbG93Oz4NCi08IUFUVExJU1QgYm9keQ0KLSAgJWF0dHJzOw0KLSAgb25sb2FkICAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9udW5sb2FkICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBiYWNrZ3JvdW5kICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgYmdjb2xvciAgICAgJUNvbG9yOyAgICAgICAgI0lNUExJRUQNCi0gIHRleHQgICAgICAgICVDb2xvcjsgICAgICAgICNJTVBMSUVEDQotICBsaW5rICAgICAgICAlQ29sb3I7ICAgICAgICAjSU1QTElFRA0KLSAgdmxpbmsgICAgICAgJUNvbG9yOyAgICAgICAgI0lNUExJRUQNCi0gIGFsaW5rICAgICAgICVDb2xvcjsgICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCFFTEVNRU5UIGRpdiAlRmxvdzs+ICA8IS0tIGdlbmVyaWMgbGFuZ3VhZ2Uvc3R5bGUgY29udGFpbmVyIC0tPg0KLTwhQVRUTElTVCBkaXYNCi0gICVhdHRyczsNCi0gICVUZXh0QWxpZ247DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT0gUGFyYWdyYXBocyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVMRU1FTlQgcCAlSW5saW5lOz4NCi08IUFUVExJU1QgcA0KLSAgJWF0dHJzOw0KLSAgJVRleHRBbGlnbjsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBIZWFkaW5ncyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhLS0NCi0gIFRoZXJlIGFyZSBzaXggbGV2ZWxzIG9mIGhlYWRpbmdzIGZyb20gaDEgKHRoZSBtb3N0IGltcG9ydGFudCkNCi0gIHRvIGg2ICh0aGUgbGVhc3QgaW1wb3J0YW50KS4NCi0tLT4NCi0NCi08IUVMRU1FTlQgaDEgICVJbmxpbmU7Pg0KLTwhQVRUTElTVCBoMQ0KLSAgJWF0dHJzOw0KLSAgJVRleHRBbGlnbjsNCi0gID4NCi0NCi08IUVMRU1FTlQgaDIgJUlubGluZTs+DQotPCFBVFRMSVNUIGgyDQotICAlYXR0cnM7DQotICAlVGV4dEFsaWduOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBoMyAlSW5saW5lOz4NCi08IUFUVExJU1QgaDMNCi0gICVhdHRyczsNCi0gICVUZXh0QWxpZ247DQotICA+DQotDQotPCFFTEVNRU5UIGg0ICVJbmxpbmU7Pg0KLTwhQVRUTElTVCBoNA0KLSAgJWF0dHJzOw0KLSAgJVRleHRBbGlnbjsNCi0gID4NCi0NCi08IUVMRU1FTlQgaDUgJUlubGluZTs+DQotPCFBVFRMSVNUIGg1DQotICAlYXR0cnM7DQotICAlVGV4dEFsaWduOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBoNiAlSW5saW5lOz4NCi08IUFUVExJU1QgaDYNCi0gICVhdHRyczsNCi0gICVUZXh0QWxpZ247DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT0gTGlzdHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tIFVub3JkZXJlZCBsaXN0IGJ1bGxldCBzdHlsZXMgLS0+DQotDQotPCFFTlRJVFkgJSBVTFN0eWxlICIoZGlzY3xzcXVhcmV8Y2lyY2xlKSI+DQotDQotPCEtLSBVbm9yZGVyZWQgbGlzdCAtLT4NCi0NCi08IUVMRU1FTlQgdWwgKGxpKSs+DQotPCFBVFRMSVNUIHVsDQotICAlYXR0cnM7DQotICB0eXBlICAgICAgICAlVUxTdHlsZTsgICAgICNJTVBMSUVEDQotICBjb21wYWN0ICAgICAoY29tcGFjdCkgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLSBPcmRlcmVkIGxpc3QgbnVtYmVyaW5nIHN0eWxlDQotDQotICAgIDEgICBhcmFiaWMgbnVtYmVycyAgICAgIDEsIDIsIDMsIC4uLg0KLSAgICBhICAgbG93ZXIgYWxwaGEgICAgICAgICBhLCBiLCBjLCAuLi4NCi0gICAgQSAgIHVwcGVyIGFscGhhICAgICAgICAgQSwgQiwgQywgLi4uDQotICAgIGkgICBsb3dlciByb21hbiAgICAgICAgIGksIGlpLCBpaWksIC4uLg0KLSAgICBJICAgdXBwZXIgcm9tYW4gICAgICAgICBJLCBJSSwgSUlJLCAuLi4NCi0NCi0gICAgVGhlIHN0eWxlIGlzIGFwcGxpZWQgdG8gdGhlIHNlcXVlbmNlIG51bWJlciB3aGljaCBieSBkZWZhdWx0DQotICAgIGlzIHJlc2V0IHRvIDEgZm9yIHRoZSBmaXJzdCBsaXN0IGl0ZW0gaW4gYW4gb3JkZXJlZCBsaXN0Lg0KLS0tPg0KLTwhRU5USVRZICUgT0xTdHlsZSAiQ0RBVEEiPg0KLQ0KLTwhLS0gT3JkZXJlZCAobnVtYmVyZWQpIGxpc3QgLS0+DQotDQotPCFFTEVNRU5UIG9sIChsaSkrPg0KLTwhQVRUTElTVCBvbA0KLSAgJWF0dHJzOw0KLSAgdHlwZSAgICAgICAgJU9MU3R5bGU7ICAgICAgI0lNUExJRUQNCi0gIGNvbXBhY3QgICAgIChjb21wYWN0KSAgICAgICNJTVBMSUVEDQotICBzdGFydCAgICAgICAlTnVtYmVyOyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0gc2luZ2xlIGNvbHVtbiBsaXN0IChERVBSRUNBVEVEKSAtLT4gDQotPCFFTEVNRU5UIG1lbnUgKGxpKSs+DQotPCFBVFRMSVNUIG1lbnUNCi0gICVhdHRyczsNCi0gIGNvbXBhY3QgICAgIChjb21wYWN0KSAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIG11bHRpcGxlIGNvbHVtbiBsaXN0IChERVBSRUNBVEVEKSAtLT4gDQotPCFFTEVNRU5UIGRpciAobGkpKz4NCi08IUFUVExJU1QgZGlyDQotICAlYXR0cnM7DQotICBjb21wYWN0ICAgICAoY29tcGFjdCkgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLSBMSVN0eWxlIGlzIGNvbnN0cmFpbmVkIHRvOiAiKCVVTFN0eWxlO3wlT0xTdHlsZTspIiAtLT4NCi08IUVOVElUWSAlIExJU3R5bGUgIkNEQVRBIj4NCi0NCi08IS0tIGxpc3QgaXRlbSAtLT4NCi0NCi08IUVMRU1FTlQgbGkgJUZsb3c7Pg0KLTwhQVRUTElTVCBsaQ0KLSAgJWF0dHJzOw0KLSAgdHlwZSAgICAgICAgJUxJU3R5bGU7ICAgICAgI0lNUExJRUQNCi0gIHZhbHVlICAgICAgICVOdW1iZXI7ICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLSBkZWZpbml0aW9uIGxpc3RzIC0gZHQgZm9yIHRlcm0sIGRkIGZvciBpdHMgZGVmaW5pdGlvbiAtLT4NCi0NCi08IUVMRU1FTlQgZGwgKGR0fGRkKSs+DQotPCFBVFRMSVNUIGRsDQotICAlYXR0cnM7DQotICBjb21wYWN0ICAgICAoY29tcGFjdCkgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBkdCAlSW5saW5lOz4NCi08IUFUVExJU1QgZHQNCi0gICVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgZGQgJUZsb3c7Pg0KLTwhQVRUTElTVCBkZA0KLSAgJWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IEFkZHJlc3MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLSBpbmZvcm1hdGlvbiBvbiBhdXRob3IgLS0+DQotDQotPCFFTEVNRU5UIGFkZHJlc3MgJUlubGluZTs+DQotPCFBVFRMSVNUIGFkZHJlc3MNCi0gICVhdHRyczsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBIb3Jpem9udGFsIFJ1bGUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRUxFTUVOVCBociBFTVBUWT4NCi08IUFUVExJU1QgaHINCi0gICVhdHRyczsNCi0gIGFsaWduICAgICAgIChsZWZ0fGNlbnRlcnxyaWdodCkgI0lNUExJRUQNCi0gIG5vc2hhZGUgICAgIChub3NoYWRlKSAgICAgICNJTVBMSUVEDQotICBzaXplICAgICAgICAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgd2lkdGggICAgICAgJUxlbmd0aDsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBQcmVmb3JtYXR0ZWQgVGV4dCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhLS0gY29udGVudCBpcyAlSW5saW5lOyBleGNsdWRpbmcgDQotICAgICAgICAiaW1nfG9iamVjdHxhcHBsZXR8YmlnfHNtYWxsfHN1YnxzdXB8Zm9udHxiYXNlZm9udCIgLS0+DQotDQotPCFFTEVNRU5UIHByZSAlcHJlLmNvbnRlbnQ7Pg0KLTwhQVRUTElTVCBwcmUNCi0gICVhdHRyczsNCi0gIHdpZHRoICAgICAgICVOdW1iZXI7ICAgICAgI0lNUExJRUQNCi0gIHhtbDpzcGFjZSAgIChwcmVzZXJ2ZSkgICAgI0ZJWEVEICdwcmVzZXJ2ZScNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBCbG9jay1saWtlIFF1b3RlcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRUxFTUVOVCBibG9ja3F1b3RlICVGbG93Oz4NCi08IUFUVExJU1QgYmxvY2txdW90ZQ0KLSAgJWF0dHJzOw0KLSAgY2l0ZSAgICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBUZXh0IGFsaWdubWVudCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhLS0gY2VudGVyIGNvbnRlbnQgLS0+DQotPCFFTEVNRU5UIGNlbnRlciAlRmxvdzs+DQotPCFBVFRMSVNUIGNlbnRlcg0KLSAgJWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IEluc2VydGVkL0RlbGV0ZWQgVGV4dCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLQ0KLSAgaW5zL2RlbCBhcmUgYWxsb3dlZCBpbiBibG9jayBhbmQgaW5saW5lIGNvbnRlbnQsIGJ1dCBpdHMNCi0gIGluYXBwcm9wcmlhdGUgdG8gaW5jbHVkZSBibG9jayBjb250ZW50IHdpdGhpbiBhbiBpbnMgZWxlbWVudA0KLSAgb2NjdXJyaW5nIGluIGlubGluZSBjb250ZW50Lg0KLS0tPg0KLTwhRUxFTUVOVCBpbnMgJUZsb3c7Pg0KLTwhQVRUTElTVCBpbnMNCi0gICVhdHRyczsNCi0gIGNpdGUgICAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBkYXRldGltZSAgICAlRGF0ZXRpbWU7ICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBkZWwgJUZsb3c7Pg0KLTwhQVRUTElTVCBkZWwNCi0gICVhdHRyczsNCi0gIGNpdGUgICAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBkYXRldGltZSAgICAlRGF0ZXRpbWU7ICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT0gVGhlIEFuY2hvciBFbGVtZW50ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLSBjb250ZW50IGlzICVJbmxpbmU7IGV4Y2VwdCB0aGF0IGFuY2hvcnMgc2hvdWxkbid0IGJlIG5lc3RlZCAtLT4NCi0NCi08IUVMRU1FTlQgYSAlYS5jb250ZW50Oz4NCi08IUFUVExJU1QgYQ0KLSAgJWF0dHJzOw0KLSAgY2hhcnNldCAgICAgJUNoYXJzZXQ7ICAgICAgI0lNUExJRUQNCi0gIHR5cGUgICAgICAgICVDb250ZW50VHlwZTsgICNJTVBMSUVEDQotICBuYW1lICAgICAgICBOTVRPS0VOICAgICAgICAjSU1QTElFRA0KLSAgaHJlZiAgICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGhyZWZsYW5nICAgICVMYW5ndWFnZUNvZGU7ICNJTVBMSUVEDQotICByZWwgICAgICAgICAlTGlua1R5cGVzOyAgICAjSU1QTElFRA0KLSAgcmV2ICAgICAgICAgJUxpbmtUeXBlczsgICAgI0lNUExJRUQNCi0gIGFjY2Vzc2tleSAgICVDaGFyYWN0ZXI7ICAgICNJTVBMSUVEDQotICBzaGFwZSAgICAgICAlU2hhcGU7ICAgICAgICAicmVjdCINCi0gIGNvb3JkcyAgICAgICVDb29yZHM7ICAgICAgICNJTVBMSUVEDQotICB0YWJpbmRleCAgICAlTnVtYmVyOyAgICAgICAjSU1QTElFRA0KLSAgb25mb2N1cyAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uYmx1ciAgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICB0YXJnZXQgICAgICAlRnJhbWVUYXJnZXQ7ICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09PT0gSW5saW5lIEVsZW1lbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIHNwYW4gJUlubGluZTs+IDwhLS0gZ2VuZXJpYyBsYW5ndWFnZS9zdHlsZSBjb250YWluZXIgLS0+DQotPCFBVFRMSVNUIHNwYW4NCi0gICVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgYmRvICVJbmxpbmU7PiAgPCEtLSBJMThOIEJpRGkgb3Zlci1yaWRlIC0tPg0KLTwhQVRUTElTVCBiZG8NCi0gICVjb3JlYXR0cnM7DQotICAlZXZlbnRzOw0KLSAgbGFuZyAgICAgICAgJUxhbmd1YWdlQ29kZTsgI0lNUExJRUQNCi0gIHhtbDpsYW5nICAgICVMYW5ndWFnZUNvZGU7ICNJTVBMSUVEDQotICBkaXIgICAgICAgICAobHRyfHJ0bCkgICAgICAjUkVRVUlSRUQNCi0gID4NCi0NCi08IUVMRU1FTlQgYnIgRU1QVFk+ICAgPCEtLSBmb3JjZWQgbGluZSBicmVhayAtLT4NCi08IUFUVExJU1QgYnINCi0gICVjb3JlYXR0cnM7DQotICBjbGVhciAgICAgICAobGVmdHxhbGx8cmlnaHR8bm9uZSkgIm5vbmUiDQotICA+DQotDQotPCFFTEVNRU5UIGVtICVJbmxpbmU7PiAgIDwhLS0gZW1waGFzaXMgLS0+DQotPCFBVFRMSVNUIGVtICVhdHRyczs+DQotDQotPCFFTEVNRU5UIHN0cm9uZyAlSW5saW5lOz4gICA8IS0tIHN0cm9uZyBlbXBoYXNpcyAtLT4NCi08IUFUVExJU1Qgc3Ryb25nICVhdHRyczs+DQotDQotPCFFTEVNRU5UIGRmbiAlSW5saW5lOz4gICA8IS0tIGRlZmluaXRpb25hbCAtLT4NCi08IUFUVExJU1QgZGZuICVhdHRyczs+DQotDQotPCFFTEVNRU5UIGNvZGUgJUlubGluZTs+ICAgPCEtLSBwcm9ncmFtIGNvZGUgLS0+DQotPCFBVFRMSVNUIGNvZGUgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgc2FtcCAlSW5saW5lOz4gICA8IS0tIHNhbXBsZSAtLT4NCi08IUFUVExJU1Qgc2FtcCAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBrYmQgJUlubGluZTs+ICA8IS0tIHNvbWV0aGluZyB1c2VyIHdvdWxkIHR5cGUgLS0+DQotPCFBVFRMSVNUIGtiZCAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCB2YXIgJUlubGluZTs+ICAgPCEtLSB2YXJpYWJsZSAtLT4NCi08IUFUVExJU1QgdmFyICVhdHRyczs+DQotDQotPCFFTEVNRU5UIGNpdGUgJUlubGluZTs+ICAgPCEtLSBjaXRhdGlvbiAtLT4NCi08IUFUVExJU1QgY2l0ZSAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBhYmJyICVJbmxpbmU7PiAgIDwhLS0gYWJicmV2aWF0aW9uIC0tPg0KLTwhQVRUTElTVCBhYmJyICVhdHRyczs+DQotDQotPCFFTEVNRU5UIGFjcm9ueW0gJUlubGluZTs+ICAgPCEtLSBhY3JvbnltIC0tPg0KLTwhQVRUTElTVCBhY3JvbnltICVhdHRyczs+DQotDQotPCFFTEVNRU5UIHEgJUlubGluZTs+ICAgPCEtLSBpbmxpbmVkIHF1b3RlIC0tPg0KLTwhQVRUTElTVCBxDQotICAlYXR0cnM7DQotICBjaXRlICAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBzdWIgJUlubGluZTs+IDwhLS0gc3Vic2NyaXB0IC0tPg0KLTwhQVRUTElTVCBzdWIgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgc3VwICVJbmxpbmU7PiA8IS0tIHN1cGVyc2NyaXB0IC0tPg0KLTwhQVRUTElTVCBzdXAgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgdHQgJUlubGluZTs+ICAgPCEtLSBmaXhlZCBwaXRjaCBmb250IC0tPg0KLTwhQVRUTElTVCB0dCAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBpICVJbmxpbmU7PiAgIDwhLS0gaXRhbGljIGZvbnQgLS0+DQotPCFBVFRMSVNUIGkgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgYiAlSW5saW5lOz4gICA8IS0tIGJvbGQgZm9udCAtLT4NCi08IUFUVExJU1QgYiAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBiaWcgJUlubGluZTs+ICAgPCEtLSBiaWdnZXIgZm9udCAtLT4NCi08IUFUVExJU1QgYmlnICVhdHRyczs+DQotDQotPCFFTEVNRU5UIHNtYWxsICVJbmxpbmU7PiAgIDwhLS0gc21hbGxlciBmb250IC0tPg0KLTwhQVRUTElTVCBzbWFsbCAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCB1ICVJbmxpbmU7PiAgIDwhLS0gdW5kZXJsaW5lIC0tPg0KLTwhQVRUTElTVCB1ICVhdHRyczs+DQotDQotPCFFTEVNRU5UIHMgJUlubGluZTs+ICAgPCEtLSBzdHJpa2UtdGhyb3VnaCAtLT4NCi08IUFUVExJU1QgcyAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBzdHJpa2UgJUlubGluZTs+ICAgPCEtLSBzdHJpa2UtdGhyb3VnaCAtLT4NCi08IUFUVExJU1Qgc3RyaWtlICVhdHRyczs+DQotDQotPCFFTEVNRU5UIGJhc2Vmb250IEVNUFRZPiAgPCEtLSBiYXNlIGZvbnQgc2l6ZSAtLT4NCi08IUFUVExJU1QgYmFzZWZvbnQNCi0gIGlkICAgICAgICAgIElEICAgICAgICAgICAgICNJTVBMSUVEDQotICBzaXplICAgICAgICBDREFUQSAgICAgICAgICAjUkVRVUlSRUQNCi0gIGNvbG9yICAgICAgICVDb2xvcjsgICAgICAgICNJTVBMSUVEDQotICBmYWNlICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBmb250ICVJbmxpbmU7PiA8IS0tIGxvY2FsIGNoYW5nZSB0byBmb250IC0tPg0KLTwhQVRUTElTVCBmb250DQotICAlY29yZWF0dHJzOw0KLSAgJWkxOG47DQotICBzaXplICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgY29sb3IgICAgICAgJUNvbG9yOyAgICAgICAgI0lNUExJRUQNCi0gIGZhY2UgICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT09IE9iamVjdCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLTwhLS0NCi0gIG9iamVjdCBpcyB1c2VkIHRvIGVtYmVkIG9iamVjdHMgYXMgcGFydCBvZiBIVE1MIHBhZ2VzLg0KLSAgcGFyYW0gZWxlbWVudHMgc2hvdWxkIHByZWNlZGUgb3RoZXIgY29udGVudC4gUGFyYW1ldGVycw0KLSAgY2FuIGFsc28gYmUgZXhwcmVzc2VkIGFzIGF0dHJpYnV0ZS92YWx1ZSBwYWlycyBvbiB0aGUNCi0gIG9iamVjdCBlbGVtZW50IGl0c2VsZiB3aGVuIGJyZXZpdHkgaXMgZGVzaXJlZC4NCi0tLT4NCi0NCi08IUVMRU1FTlQgb2JqZWN0ICgjUENEQVRBIHwgcGFyYW0gfCAlYmxvY2s7IHwgZm9ybSB8ICVpbmxpbmU7IHwgJW1pc2M7KSo+DQotPCFBVFRMSVNUIG9iamVjdA0KLSAgJWF0dHJzOw0KLSAgZGVjbGFyZSAgICAgKGRlY2xhcmUpICAgICAgI0lNUExJRUQNCi0gIGNsYXNzaWQgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBjb2RlYmFzZSAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgZGF0YSAgICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIHR5cGUgICAgICAgICVDb250ZW50VHlwZTsgICNJTVBMSUVEDQotICBjb2RldHlwZSAgICAlQ29udGVudFR5cGU7ICAjSU1QTElFRA0KLSAgYXJjaGl2ZSAgICAgJVVyaUxpc3Q7ICAgICAgI0lNUExJRUQNCi0gIHN0YW5kYnkgICAgICVUZXh0OyAgICAgICAgICNJTVBMSUVEDQotICBoZWlnaHQgICAgICAlTGVuZ3RoOyAgICAgICAjSU1QTElFRA0KLSAgd2lkdGggICAgICAgJUxlbmd0aDsgICAgICAgI0lNUExJRUQNCi0gIHVzZW1hcCAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBuYW1lICAgICAgICBOTVRPS0VOICAgICAgICAjSU1QTElFRA0KLSAgdGFiaW5kZXggICAgJU51bWJlcjsgICAgICAgI0lNUExJRUQNCi0gIGFsaWduICAgICAgICVJbWdBbGlnbjsgICAgICNJTVBMSUVEDQotICBib3JkZXIgICAgICAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgaHNwYWNlICAgICAgJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gIHZzcGFjZSAgICAgICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLQ0KLSAgcGFyYW0gaXMgdXNlZCB0byBzdXBwbHkgYSBuYW1lZCBwcm9wZXJ0eSB2YWx1ZS4NCi0gIEluIFhNTCBpdCB3b3VsZCBzZWVtIG5hdHVyYWwgdG8gZm9sbG93IFJERiBhbmQgc3VwcG9ydCBhbg0KLSAgYWJicmV2aWF0ZWQgc3ludGF4IHdoZXJlIHRoZSBwYXJhbSBlbGVtZW50cyBhcmUgcmVwbGFjZWQNCi0gIGJ5IGF0dHJpYnV0ZSB2YWx1ZSBwYWlycyBvbiB0aGUgb2JqZWN0IHN0YXJ0IHRhZy4NCi0tLT4NCi08IUVMRU1FTlQgcGFyYW0gRU1QVFk+DQotPCFBVFRMSVNUIHBhcmFtDQotICBpZCAgICAgICAgICBJRCAgICAgICAgICAgICAjSU1QTElFRA0KLSAgbmFtZSAgICAgICAgQ0RBVEEgICAgICAgICAgI1JFUVVJUkVEDQotICB2YWx1ZSAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgdmFsdWV0eXBlICAgKGRhdGF8cmVmfG9iamVjdCkgImRhdGEiDQotICB0eXBlICAgICAgICAlQ29udGVudFR5cGU7ICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IEphdmEgYXBwbGV0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi08IS0tDQotICBPbmUgb2YgY29kZSBvciBvYmplY3QgYXR0cmlidXRlcyBtdXN0IGJlIHByZXNlbnQuDQotICBQbGFjZSBwYXJhbSBlbGVtZW50cyBiZWZvcmUgb3RoZXIgY29udGVudC4NCi0tLT4NCi08IUVMRU1FTlQgYXBwbGV0ICgjUENEQVRBIHwgcGFyYW0gfCAlYmxvY2s7IHwgZm9ybSB8ICVpbmxpbmU7IHwgJW1pc2M7KSo+DQotPCFBVFRMSVNUIGFwcGxldA0KLSAgJWNvcmVhdHRyczsNCi0gIGNvZGViYXNlICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBhcmNoaXZlICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgY29kZSAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIG9iamVjdCAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBhbHQgICAgICAgICAlVGV4dDsgICAgICAgICAjSU1QTElFRA0KLSAgbmFtZSAgICAgICAgTk1UT0tFTiAgICAgICAgI0lNUExJRUQNCi0gIHdpZHRoICAgICAgICVMZW5ndGg7ICAgICAgICNSRVFVSVJFRA0KLSAgaGVpZ2h0ICAgICAgJUxlbmd0aDsgICAgICAgI1JFUVVJUkVEDQotICBhbGlnbiAgICAgICAlSW1nQWxpZ247ICAgICAjSU1QTElFRA0KLSAgaHNwYWNlICAgICAgJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gIHZzcGFjZSAgICAgICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT0gSW1hZ2VzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tDQotICAgVG8gYXZvaWQgYWNjZXNzaWJpbGl0eSBwcm9ibGVtcyBmb3IgcGVvcGxlIHdobyBhcmVuJ3QNCi0gICBhYmxlIHRvIHNlZSB0aGUgaW1hZ2UsIHlvdSBzaG91bGQgcHJvdmlkZSBhIHRleHQNCi0gICBkZXNjcmlwdGlvbiB1c2luZyB0aGUgYWx0IGFuZCBsb25nZGVzYyBhdHRyaWJ1dGVzLg0KLSAgIEluIGFkZGl0aW9uLCBhdm9pZCB0aGUgdXNlIG9mIHNlcnZlci1zaWRlIGltYWdlIG1hcHMuDQotLS0+DQotDQotPCFFTEVNRU5UIGltZyBFTVBUWT4NCi08IUFUVExJU1QgaW1nDQotICAlYXR0cnM7DQotICBzcmMgICAgICAgICAlVVJJOyAgICAgICAgICAjUkVRVUlSRUQNCi0gIGFsdCAgICAgICAgICVUZXh0OyAgICAgICAgICNSRVFVSVJFRA0KLSAgbmFtZSAgICAgICAgTk1UT0tFTiAgICAgICAgI0lNUExJRUQNCi0gIGxvbmdkZXNjICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBoZWlnaHQgICAgICAlTGVuZ3RoOyAgICAgICAjSU1QTElFRA0KLSAgd2lkdGggICAgICAgJUxlbmd0aDsgICAgICAgI0lNUExJRUQNCi0gIHVzZW1hcCAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBpc21hcCAgICAgICAoaXNtYXApICAgICAgICAjSU1QTElFRA0KLSAgYWxpZ24gICAgICAgJUltZ0FsaWduOyAgICAgI0lNUExJRUQNCi0gIGJvcmRlciAgICAgICVMZW5ndGg7ICAgICAgICNJTVBMSUVEDQotICBoc3BhY2UgICAgICAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgdnNwYWNlICAgICAgJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIHVzZW1hcCBwb2ludHMgdG8gYSBtYXAgZWxlbWVudCB3aGljaCBtYXkgYmUgaW4gdGhpcyBkb2N1bWVudA0KLSAgb3IgYW4gZXh0ZXJuYWwgZG9jdW1lbnQsIGFsdGhvdWdoIHRoZSBsYXR0ZXIgaXMgbm90IHdpZGVseSBzdXBwb3J0ZWQgLS0+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PSBDbGllbnQtc2lkZSBpbWFnZSBtYXBzID09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tIFRoZXNlIGNhbiBiZSBwbGFjZWQgaW4gdGhlIHNhbWUgZG9jdW1lbnQgb3IgZ3JvdXBlZCBpbiBhDQotICAgICBzZXBhcmF0ZSBkb2N1bWVudCBhbHRob3VnaCB0aGlzIGlzbid0IHlldCB3aWRlbHkgc3VwcG9ydGVkIC0tPg0KLQ0KLTwhRUxFTUVOVCBtYXAgKCglYmxvY2s7IHwgZm9ybSB8ICVtaXNjOykrIHwgYXJlYSspPg0KLTwhQVRUTElTVCBtYXANCi0gICVpMThuOw0KLSAgJWV2ZW50czsNCi0gIGlkICAgICAgICAgIElEICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgY2xhc3MgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIHN0eWxlICAgICAgICVTdHlsZVNoZWV0OyAgICNJTVBMSUVEDQotICB0aXRsZSAgICAgICAlVGV4dDsgICAgICAgICAjSU1QTElFRA0KLSAgbmFtZSAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IUVMRU1FTlQgYXJlYSBFTVBUWT4NCi08IUFUVExJU1QgYXJlYQ0KLSAgJWF0dHJzOw0KLSAgc2hhcGUgICAgICAgJVNoYXBlOyAgICAgICAgInJlY3QiDQotICBjb29yZHMgICAgICAlQ29vcmRzOyAgICAgICAjSU1QTElFRA0KLSAgaHJlZiAgICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIG5vaHJlZiAgICAgIChub2hyZWYpICAgICAgICNJTVBMSUVEDQotICBhbHQgICAgICAgICAlVGV4dDsgICAgICAgICAjUkVRVUlSRUQNCi0gIHRhYmluZGV4ICAgICVOdW1iZXI7ICAgICAgICNJTVBMSUVEDQotICBhY2Nlc3NrZXkgICAlQ2hhcmFjdGVyOyAgICAjSU1QTElFRA0KLSAgb25mb2N1cyAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uYmx1ciAgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICB0YXJnZXQgICAgICAlRnJhbWVUYXJnZXQ7ICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09IEZvcm1zID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIGZvcm0gJWZvcm0uY29udGVudDs+ICAgPCEtLSBmb3JtcyBzaG91bGRuJ3QgYmUgbmVzdGVkIC0tPg0KLQ0KLTwhQVRUTElTVCBmb3JtDQotICAlYXR0cnM7DQotICBhY3Rpb24gICAgICAlVVJJOyAgICAgICAgICAjUkVRVUlSRUQNCi0gIG1ldGhvZCAgICAgIChnZXR8cG9zdCkgICAgICJnZXQiDQotICBuYW1lICAgICAgICBOTVRPS0VOICAgICAgICAjSU1QTElFRA0KLSAgZW5jdHlwZSAgICAgJUNvbnRlbnRUeXBlOyAgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCINCi0gIG9uc3VibWl0ICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbnJlc2V0ICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgYWNjZXB0ICAgICAgJUNvbnRlbnRUeXBlczsgI0lNUExJRUQNCi0gIGFjY2VwdC1jaGFyc2V0ICVDaGFyc2V0czsgICNJTVBMSUVEDQotICB0YXJnZXQgICAgICAlRnJhbWVUYXJnZXQ7ICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0NCi0gIEVhY2ggbGFiZWwgbXVzdCBub3QgY29udGFpbiBtb3JlIHRoYW4gT05FIGZpZWxkDQotICBMYWJlbCBlbGVtZW50cyBzaG91bGRuJ3QgYmUgbmVzdGVkLg0KLS0tPg0KLTwhRUxFTUVOVCBsYWJlbCAlSW5saW5lOz4NCi08IUFUVExJU1QgbGFiZWwNCi0gICVhdHRyczsNCi0gIGZvciAgICAgICAgIElEUkVGICAgICAgICAgICNJTVBMSUVEDQotICBhY2Nlc3NrZXkgICAlQ2hhcmFjdGVyOyAgICAjSU1QTElFRA0KLSAgb25mb2N1cyAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uYmx1ciAgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCFFTlRJVFkgJSBJbnB1dFR5cGUNCi0gICIodGV4dCB8IHBhc3N3b3JkIHwgY2hlY2tib3ggfA0KLSAgICByYWRpbyB8IHN1Ym1pdCB8IHJlc2V0IHwNCi0gICAgZmlsZSB8IGhpZGRlbiB8IGltYWdlIHwgYnV0dG9uKSINCi0gICA+DQotDQotPCEtLSB0aGUgbmFtZSBhdHRyaWJ1dGUgaXMgcmVxdWlyZWQgZm9yIGFsbCBidXQgc3VibWl0ICYgcmVzZXQgLS0+DQotDQotPCFFTEVNRU5UIGlucHV0IEVNUFRZPiAgICAgPCEtLSBmb3JtIGNvbnRyb2wgLS0+DQotPCFBVFRMSVNUIGlucHV0DQotICAlYXR0cnM7DQotICB0eXBlICAgICAgICAlSW5wdXRUeXBlOyAgICAidGV4dCINCi0gIG5hbWUgICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICB2YWx1ZSAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgY2hlY2tlZCAgICAgKGNoZWNrZWQpICAgICAgI0lNUExJRUQNCi0gIGRpc2FibGVkICAgIChkaXNhYmxlZCkgICAgICNJTVBMSUVEDQotICByZWFkb25seSAgICAocmVhZG9ubHkpICAgICAjSU1QTElFRA0KLSAgc2l6ZSAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIG1heGxlbmd0aCAgICVOdW1iZXI7ICAgICAgICNJTVBMSUVEDQotICBzcmMgICAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgYWx0ICAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIHVzZW1hcCAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICB0YWJpbmRleCAgICAlTnVtYmVyOyAgICAgICAjSU1QTElFRA0KLSAgYWNjZXNza2V5ICAgJUNoYXJhY3RlcjsgICAgI0lNUExJRUQNCi0gIG9uZm9jdXMgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbmJsdXIgICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25zZWxlY3QgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uY2hhbmdlICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBhY2NlcHQgICAgICAlQ29udGVudFR5cGVzOyAjSU1QTElFRA0KLSAgYWxpZ24gICAgICAgJUltZ0FsaWduOyAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IUVMRU1FTlQgc2VsZWN0IChvcHRncm91cHxvcHRpb24pKz4gIDwhLS0gb3B0aW9uIHNlbGVjdG9yIC0tPg0KLTwhQVRUTElTVCBzZWxlY3QNCi0gICVhdHRyczsNCi0gIG5hbWUgICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBzaXplICAgICAgICAlTnVtYmVyOyAgICAgICAjSU1QTElFRA0KLSAgbXVsdGlwbGUgICAgKG11bHRpcGxlKSAgICAgI0lNUExJRUQNCi0gIGRpc2FibGVkICAgIChkaXNhYmxlZCkgICAgICNJTVBMSUVEDQotICB0YWJpbmRleCAgICAlTnVtYmVyOyAgICAgICAjSU1QTElFRA0KLSAgb25mb2N1cyAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uYmx1ciAgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbmNoYW5nZSAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBvcHRncm91cCAob3B0aW9uKSs+ICAgPCEtLSBvcHRpb24gZ3JvdXAgLS0+DQotPCFBVFRMSVNUIG9wdGdyb3VwDQotICAlYXR0cnM7DQotICBkaXNhYmxlZCAgICAoZGlzYWJsZWQpICAgICAjSU1QTElFRA0KLSAgbGFiZWwgICAgICAgJVRleHQ7ICAgICAgICAgI1JFUVVJUkVEDQotICA+DQotDQotPCFFTEVNRU5UIG9wdGlvbiAoI1BDREFUQSk+ICAgICA8IS0tIHNlbGVjdGFibGUgY2hvaWNlIC0tPg0KLTwhQVRUTElTVCBvcHRpb24NCi0gICVhdHRyczsNCi0gIHNlbGVjdGVkICAgIChzZWxlY3RlZCkgICAgICNJTVBMSUVEDQotICBkaXNhYmxlZCAgICAoZGlzYWJsZWQpICAgICAjSU1QTElFRA0KLSAgbGFiZWwgICAgICAgJVRleHQ7ICAgICAgICAgI0lNUExJRUQNCi0gIHZhbHVlICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCFFTEVNRU5UIHRleHRhcmVhICgjUENEQVRBKT4gICAgIDwhLS0gbXVsdGktbGluZSB0ZXh0IGZpZWxkIC0tPg0KLTwhQVRUTElTVCB0ZXh0YXJlYQ0KLSAgJWF0dHJzOw0KLSAgbmFtZSAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIHJvd3MgICAgICAgICVOdW1iZXI7ICAgICAgICNSRVFVSVJFRA0KLSAgY29scyAgICAgICAgJU51bWJlcjsgICAgICAgI1JFUVVJUkVEDQotICBkaXNhYmxlZCAgICAoZGlzYWJsZWQpICAgICAjSU1QTElFRA0KLSAgcmVhZG9ubHkgICAgKHJlYWRvbmx5KSAgICAgI0lNUExJRUQNCi0gIHRhYmluZGV4ICAgICVOdW1iZXI7ICAgICAgICNJTVBMSUVEDQotICBhY2Nlc3NrZXkgICAlQ2hhcmFjdGVyOyAgICAjSU1QTElFRA0KLSAgb25mb2N1cyAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uYmx1ciAgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbnNlbGVjdCAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25jaGFuZ2UgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tDQotICBUaGUgZmllbGRzZXQgZWxlbWVudCBpcyB1c2VkIHRvIGdyb3VwIGZvcm0gZmllbGRzLg0KLSAgT25seSBvbmUgbGVnZW5kIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGluIHRoZSBjb250ZW50DQotICBhbmQgaWYgcHJlc2VudCBzaG91bGQgb25seSBiZSBwcmVjZWRlZCBieSB3aGl0ZXNwYWNlLg0KLS0tPg0KLTwhRUxFTUVOVCBmaWVsZHNldCAoI1BDREFUQSB8IGxlZ2VuZCB8ICVibG9jazsgfCBmb3JtIHwgJWlubGluZTsgfCAlbWlzYzspKj4NCi08IUFUVExJU1QgZmllbGRzZXQNCi0gICVhdHRyczsNCi0gID4NCi0NCi08IUVOVElUWSAlIExBbGlnbiAiKHRvcHxib3R0b218bGVmdHxyaWdodCkiPg0KLQ0KLTwhRUxFTUVOVCBsZWdlbmQgJUlubGluZTs+ICAgICA8IS0tIGZpZWxkc2V0IGxhYmVsIC0tPg0KLTwhQVRUTElTVCBsZWdlbmQNCi0gICVhdHRyczsNCi0gIGFjY2Vzc2tleSAgICVDaGFyYWN0ZXI7ICAgICNJTVBMSUVEDQotICBhbGlnbiAgICAgICAlTEFsaWduOyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0NCi0gQ29udGVudCBpcyAlRmxvdzsgZXhjbHVkaW5nIGEsIGZvcm0sIGZvcm0gY29udHJvbHMsIGlmcmFtZQ0KLS0tPiANCi08IUVMRU1FTlQgYnV0dG9uICVidXR0b24uY29udGVudDs+ICA8IS0tIHB1c2ggYnV0dG9uIC0tPg0KLTwhQVRUTElTVCBidXR0b24NCi0gICVhdHRyczsNCi0gIG5hbWUgICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICB2YWx1ZSAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgdHlwZSAgICAgICAgKGJ1dHRvbnxzdWJtaXR8cmVzZXQpICJzdWJtaXQiDQotICBkaXNhYmxlZCAgICAoZGlzYWJsZWQpICAgICAjSU1QTElFRA0KLSAgdGFiaW5kZXggICAgJU51bWJlcjsgICAgICAgI0lNUExJRUQNCi0gIGFjY2Vzc2tleSAgICVDaGFyYWN0ZXI7ICAgICNJTVBMSUVEDQotICBvbmZvY3VzICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25ibHVyICAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIHNpbmdsZS1saW5lIHRleHQgaW5wdXQgY29udHJvbCAoREVQUkVDQVRFRCkgLS0+DQotPCFFTEVNRU5UIGlzaW5kZXggRU1QVFk+DQotPCFBVFRMSVNUIGlzaW5kZXgNCi0gICVjb3JlYXR0cnM7DQotICAlaTE4bjsNCi0gIHByb21wdCAgICAgICVUZXh0OyAgICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT09PT09IFRhYmxlcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tIERlcml2ZWQgZnJvbSBJRVRGIEhUTUwgdGFibGUgc3RhbmRhcmQsIHNlZSBbUkZDMTk0Ml0gLS0+DQotDQotPCEtLQ0KLSBUaGUgYm9yZGVyIGF0dHJpYnV0ZSBzZXRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIGZyYW1lIGFyb3VuZCB0aGUNCi0gdGFibGUuIFRoZSBkZWZhdWx0IHVuaXRzIGFyZSBzY3JlZW4gcGl4ZWxzLg0KLQ0KLSBUaGUgZnJhbWUgYXR0cmlidXRlIHNwZWNpZmllcyB3aGljaCBwYXJ0cyBvZiB0aGUgZnJhbWUgYXJvdW5kDQotIHRoZSB0YWJsZSBzaG91bGQgYmUgcmVuZGVyZWQuIFRoZSB2YWx1ZXMgYXJlIG5vdCB0aGUgc2FtZSBhcw0KLSBDQUxTIHRvIGF2b2lkIGEgbmFtZSBjbGFzaCB3aXRoIHRoZSB2YWxpZ24gYXR0cmlidXRlLg0KLS0tPg0KLTwhRU5USVRZICUgVEZyYW1lICIodm9pZHxhYm92ZXxiZWxvd3xoc2lkZXN8bGhzfHJoc3x2c2lkZXN8Ym94fGJvcmRlcikiPg0KLQ0KLTwhLS0NCi0gVGhlIHJ1bGVzIGF0dHJpYnV0ZSBkZWZpbmVzIHdoaWNoIHJ1bGVzIHRvIGRyYXcgYmV0d2VlbiBjZWxsczoNCi0NCi0gSWYgcnVsZXMgaXMgYWJzZW50IHRoZW4gYXNzdW1lOg0KLSAgICAgIm5vbmUiIGlmIGJvcmRlciBpcyBhYnNlbnQgb3IgYm9yZGVyPSIwIiBvdGhlcndpc2UgImFsbCINCi0tLT4NCi0NCi08IUVOVElUWSAlIFRSdWxlcyAiKG5vbmUgfCBncm91cHMgfCByb3dzIHwgY29scyB8IGFsbCkiPg0KLSAgDQotPCEtLSBob3Jpem9udGFsIHBsYWNlbWVudCBvZiB0YWJsZSByZWxhdGl2ZSB0byBkb2N1bWVudCAtLT4NCi08IUVOVElUWSAlIFRBbGlnbiAiKGxlZnR8Y2VudGVyfHJpZ2h0KSI+DQotDQotPCEtLSBob3Jpem9udGFsIGFsaWdubWVudCBhdHRyaWJ1dGVzIGZvciBjZWxsIGNvbnRlbnRzDQotDQotICBjaGFyICAgICAgICBhbGlnbm1lbnQgY2hhciwgZS5nLiBjaGFyPSc6Jw0KLSAgY2hhcm9mZiAgICAgb2Zmc2V0IGZvciBhbGlnbm1lbnQgY2hhcg0KLS0tPg0KLTwhRU5USVRZICUgY2VsbGhhbGlnbg0KLSAgImFsaWduICAgICAgKGxlZnR8Y2VudGVyfHJpZ2h0fGp1c3RpZnl8Y2hhcikgI0lNUExJRUQNCi0gICBjaGFyICAgICAgICVDaGFyYWN0ZXI7ICAgICNJTVBMSUVEDQotICAgY2hhcm9mZiAgICAlTGVuZ3RoOyAgICAgICAjSU1QTElFRCINCi0gID4NCi0NCi08IS0tIHZlcnRpY2FsIGFsaWdubWVudCBhdHRyaWJ1dGVzIGZvciBjZWxsIGNvbnRlbnRzIC0tPg0KLTwhRU5USVRZICUgY2VsbHZhbGlnbg0KLSAgInZhbGlnbiAgICAgKHRvcHxtaWRkbGV8Ym90dG9tfGJhc2VsaW5lKSAjSU1QTElFRCINCi0gID4NCi0NCi08IUVMRU1FTlQgdGFibGUNCi0gICAgIChjYXB0aW9uPywgKGNvbCp8Y29sZ3JvdXAqKSwgdGhlYWQ/LCB0Zm9vdD8sICh0Ym9keSt8dHIrKSk+DQotPCFFTEVNRU5UIGNhcHRpb24gICVJbmxpbmU7Pg0KLTwhRUxFTUVOVCB0aGVhZCAgICAodHIpKz4NCi08IUVMRU1FTlQgdGZvb3QgICAgKHRyKSs+DQotPCFFTEVNRU5UIHRib2R5ICAgICh0cikrPg0KLTwhRUxFTUVOVCBjb2xncm91cCAoY29sKSo+DQotPCFFTEVNRU5UIGNvbCAgICAgIEVNUFRZPg0KLTwhRUxFTUVOVCB0ciAgICAgICAodGh8dGQpKz4NCi08IUVMRU1FTlQgdGggICAgICAgJUZsb3c7Pg0KLTwhRUxFTUVOVCB0ZCAgICAgICAlRmxvdzs+DQotDQotPCFBVFRMSVNUIHRhYmxlDQotICAlYXR0cnM7DQotICBzdW1tYXJ5ICAgICAlVGV4dDsgICAgICAgICAjSU1QTElFRA0KLSAgd2lkdGggICAgICAgJUxlbmd0aDsgICAgICAgI0lNUExJRUQNCi0gIGJvcmRlciAgICAgICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICBmcmFtZSAgICAgICAlVEZyYW1lOyAgICAgICAjSU1QTElFRA0KLSAgcnVsZXMgICAgICAgJVRSdWxlczsgICAgICAgI0lNUExJRUQNCi0gIGNlbGxzcGFjaW5nICVMZW5ndGg7ICAgICAgICNJTVBMSUVEDQotICBjZWxscGFkZGluZyAlTGVuZ3RoOyAgICAgICAjSU1QTElFRA0KLSAgYWxpZ24gICAgICAgJVRBbGlnbjsgICAgICAgI0lNUExJRUQNCi0gIGJnY29sb3IgICAgICVDb2xvcjsgICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCFFTlRJVFkgJSBDQWxpZ24gIih0b3B8Ym90dG9tfGxlZnR8cmlnaHQpIj4NCi0NCi08IUFUVExJU1QgY2FwdGlvbg0KLSAgJWF0dHJzOw0KLSAgYWxpZ24gICAgICAgJUNBbGlnbjsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tDQotY29sZ3JvdXAgZ3JvdXBzIGEgc2V0IG9mIGNvbCBlbGVtZW50cy4gSXQgYWxsb3dzIHlvdSB0byBncm91cA0KLXNldmVyYWwgc2VtYW50aWNhbGx5IHJlbGF0ZWQgY29sdW1ucyB0b2dldGhlci4NCi0tLT4NCi08IUFUVExJU1QgY29sZ3JvdXANCi0gICVhdHRyczsNCi0gIHNwYW4gICAgICAgICVOdW1iZXI7ICAgICAgICIxIg0KLSAgd2lkdGggICAgICAgJU11bHRpTGVuZ3RoOyAgI0lNUExJRUQNCi0gICVjZWxsaGFsaWduOw0KLSAgJWNlbGx2YWxpZ247DQotICA+DQotDQotPCEtLQ0KLSBjb2wgZWxlbWVudHMgZGVmaW5lIHRoZSBhbGlnbm1lbnQgcHJvcGVydGllcyBmb3IgY2VsbHMgaW4NCi0gb25lIG9yIG1vcmUgY29sdW1ucy4NCi0NCi0gVGhlIHdpZHRoIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW5zLCBlLmcuDQotDQotICAgICB3aWR0aD02NCAgICAgICAgd2lkdGggaW4gc2NyZWVuIHBpeGVscw0KLSAgICAgd2lkdGg9MC41KiAgICAgIHJlbGF0aXZlIHdpZHRoIG9mIDAuNQ0KLQ0KLSBUaGUgc3BhbiBhdHRyaWJ1dGUgY2F1c2VzIHRoZSBhdHRyaWJ1dGVzIG9mIG9uZQ0KLSBjb2wgZWxlbWVudCB0byBhcHBseSB0byBtb3JlIHRoYW4gb25lIGNvbHVtbi4NCi0tLT4NCi08IUFUVExJU1QgY29sDQotICAlYXR0cnM7DQotICBzcGFuICAgICAgICAlTnVtYmVyOyAgICAgICAiMSINCi0gIHdpZHRoICAgICAgICVNdWx0aUxlbmd0aDsgICNJTVBMSUVEDQotICAlY2VsbGhhbGlnbjsNCi0gICVjZWxsdmFsaWduOw0KLSAgPg0KLQ0KLTwhLS0NCi0gICAgVXNlIHRoZWFkIHRvIGR1cGxpY2F0ZSBoZWFkZXJzIHdoZW4gYnJlYWtpbmcgdGFibGUNCi0gICAgYWNyb3NzIHBhZ2UgYm91bmRhcmllcywgb3IgZm9yIHN0YXRpYyBoZWFkZXJzIHdoZW4NCi0gICAgdGJvZHkgc2VjdGlvbnMgYXJlIHJlbmRlcmVkIGluIHNjcm9sbGluZyBwYW5lbC4NCi0NCi0gICAgVXNlIHRmb290IHRvIGR1cGxpY2F0ZSBmb290ZXJzIHdoZW4gYnJlYWtpbmcgdGFibGUNCi0gICAgYWNyb3NzIHBhZ2UgYm91bmRhcmllcywgb3IgZm9yIHN0YXRpYyBmb290ZXJzIHdoZW4NCi0gICAgdGJvZHkgc2VjdGlvbnMgYXJlIHJlbmRlcmVkIGluIHNjcm9sbGluZyBwYW5lbC4NCi0NCi0gICAgVXNlIG11bHRpcGxlIHRib2R5IHNlY3Rpb25zIHdoZW4gcnVsZXMgYXJlIG5lZWRlZA0KLSAgICBiZXR3ZWVuIGdyb3VwcyBvZiB0YWJsZSByb3dzLg0KLS0tPg0KLTwhQVRUTElTVCB0aGVhZA0KLSAgJWF0dHJzOw0KLSAgJWNlbGxoYWxpZ247DQotICAlY2VsbHZhbGlnbjsNCi0gID4NCi0NCi08IUFUVExJU1QgdGZvb3QNCi0gICVhdHRyczsNCi0gICVjZWxsaGFsaWduOw0KLSAgJWNlbGx2YWxpZ247DQotICA+DQotDQotPCFBVFRMSVNUIHRib2R5DQotICAlYXR0cnM7DQotICAlY2VsbGhhbGlnbjsNCi0gICVjZWxsdmFsaWduOw0KLSAgPg0KLQ0KLTwhQVRUTElTVCB0cg0KLSAgJWF0dHJzOw0KLSAgJWNlbGxoYWxpZ247DQotICAlY2VsbHZhbGlnbjsNCi0gIGJnY29sb3IgICAgICVDb2xvcjsgICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLSBTY29wZSBpcyBzaW1wbGVyIHRoYW4gaGVhZGVycyBhdHRyaWJ1dGUgZm9yIGNvbW1vbiB0YWJsZXMgLS0+DQotPCFFTlRJVFkgJSBTY29wZSAiKHJvd3xjb2x8cm93Z3JvdXB8Y29sZ3JvdXApIj4NCi0NCi08IS0tIHRoIGlzIGZvciBoZWFkZXJzLCB0ZCBmb3IgZGF0YSBhbmQgZm9yIGNlbGxzIGFjdGluZyBhcyBib3RoIC0tPg0KLQ0KLTwhQVRUTElTVCB0aA0KLSAgJWF0dHJzOw0KLSAgYWJiciAgICAgICAgJVRleHQ7ICAgICAgICAgI0lNUExJRUQNCi0gIGF4aXMgICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBoZWFkZXJzICAgICBJRFJFRlMgICAgICAgICAjSU1QTElFRA0KLSAgc2NvcGUgICAgICAgJVNjb3BlOyAgICAgICAgI0lNUExJRUQNCi0gIHJvd3NwYW4gICAgICVOdW1iZXI7ICAgICAgICIxIg0KLSAgY29sc3BhbiAgICAgJU51bWJlcjsgICAgICAgIjEiDQotICAlY2VsbGhhbGlnbjsNCi0gICVjZWxsdmFsaWduOw0KLSAgbm93cmFwICAgICAgKG5vd3JhcCkgICAgICAgI0lNUExJRUQNCi0gIGJnY29sb3IgICAgICVDb2xvcjsgICAgICAgICNJTVBMSUVEDQotICB3aWR0aCAgICAgICAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgaGVpZ2h0ICAgICAgJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IUFUVExJU1QgdGQNCi0gICVhdHRyczsNCi0gIGFiYnIgICAgICAgICVUZXh0OyAgICAgICAgICNJTVBMSUVEDQotICBheGlzICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgaGVhZGVycyAgICAgSURSRUZTICAgICAgICAgI0lNUExJRUQNCi0gIHNjb3BlICAgICAgICVTY29wZTsgICAgICAgICNJTVBMSUVEDQotICByb3dzcGFuICAgICAlTnVtYmVyOyAgICAgICAiMSINCi0gIGNvbHNwYW4gICAgICVOdW1iZXI7ICAgICAgICIxIg0KLSAgJWNlbGxoYWxpZ247DQotICAlY2VsbHZhbGlnbjsNCi0gIG5vd3JhcCAgICAgIChub3dyYXApICAgICAgICNJTVBMSUVEDQotICBiZ2NvbG9yICAgICAlQ29sb3I7ICAgICAgICAjSU1QTElFRA0KLSAgd2lkdGggICAgICAgJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gIGhlaWdodCAgICAgICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICA+DQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTFjOGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYxMDFiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotY3NzZW5jb2Rpbmd0ZXN0cy5qYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTM1OGQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZDhiNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU3VuIEFwciAxNiAxNDozNzoyMSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjJhYzY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5lbmFibGUucHJvamVjdC5yZWZhY3RvcmluZy5oaXN0b3J5PWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MjQ5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6MDU6MjkgRURUIDIwMDYKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2MWM0MTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAKLUJ1bmRsZS1DbGFzc1BhdGg6IGNzc2VuY29kaW5ndGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLkNTU0VuY29kaW5nVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3MKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLAotIG9yZy5qdW5pdCwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZwotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVjNTk4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5NYXkgMiwgMjAwNjwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5NjAwNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBjc3NlbmNvZGluZ3Rlc3RzLmphcixcCi0gICAgICAgICAgICAgICB0ZXN0ZmlsZXMvLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCi1zcmMuaW5jbHVkZXMgPSBjc3NlbmNvZGluZ3Rlc3RzLmphcgotc291cmNlLmNzc2VuY29kaW5ndGVzdHMuamFyID0gc3JjLwotb3V0cHV0LmNzc2VuY29kaW5ndGVzdHMuamFyID0gYmluLwotICAgICAgICAgICAgICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1M2U5NjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2Uub3JnCi1CdW5kbGUtTmFtZS4wID0gQ1NTIEVuY29kaW5nIFRlc3RzIFBsdWctaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL0NTU0VuY29kaW5nVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL0NTU0VuY29kaW5nVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzZTcyODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9DU1NFbmNvZGluZ1Rlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcuY3NzLkNTU0VuY29kaW5nVGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcuY3NzLkNTU0hlYWRUb2tlbml6ZXJUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3MuVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yQ1NTOwotCi1wdWJsaWMgY2xhc3MgQ1NTRW5jb2RpbmdUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCi0JcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBjbGFzc2VzID0gbmV3IENsYXNzW117Q1NTRW5jb2RpbmdUZXN0ZXIuY2xhc3MsIENTU0hlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIFRlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckNTUy5jbGFzc307Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgQ1NTRW5jb2RpbmdUZXN0U3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgQ1NTRW5jb2RpbmdUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJDU1MgRW5jb2RpbmcgVGVzdCBTdWl0ZSIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKyspIHsKLQkJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShjbGFzc2VzW2ldLCBjbGFzc2VzW2ldLmdldE5hbWUoKSkpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRoZUNsYXNzCi0JICovCi0JcHVibGljIENTU0VuY29kaW5nVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzKSB7Ci0JCXN1cGVyKHRoZUNsYXNzKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGhlQ2xhc3MKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBDU1NFbmNvZGluZ1Rlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcywgU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIodGhlQ2xhc3MsIG5hbWUpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIENTU0VuY29kaW5nVGVzdFN1aXRlKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL0NTU0VuY29kaW5nVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWVkMzI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIENTU0VuY29kaW5nVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLQlwdWJsaWMgc3RhdGljIExpc3QgZ2V0QWxsVGVzdEZpbGVzKFN0cmluZyB0b3BEaXJOYW1lKSB7Ci0JCUxpc3QgcmVzdWx0ID0gbnVsbDsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIHRvcERpck5hbWU7Ci0JCUZpbGUgdG9wRGlyID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlpZiAoIXRvcERpci5pc0RpcmVjdG9yeSgpKSB7Ci0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKHRvcERpck5hbWUgKyAiIGlzIG5vdCBhIGRpcmVjdG9yeSIpOwotCQl9Ci0JCXJlc3VsdCA9IGdldEZpbGVzSW5EaXIodG9wRGlyKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBDU1NFbmNvZGluZ1Rlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgTGlzdCBnZXRGaWxlc0luRGlyKEZpbGUgdG9wRGlyKSB7Ci0JCUxpc3QgZmlsZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUZpbGVbXSB0b3BGaWxlcyA9IHRvcERpci5saXN0RmlsZXMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0b3BGaWxlcy5sZW5ndGg7IGkrKykgewotCQkJRmlsZSBmaWxlID0gdG9wRmlsZXNbaV07Ci0JCQlpZiAoZmlsZS5pc0ZpbGUoKSkgewotCQkJCWZpbGVzLmFkZChmaWxlKTsKLQkJCX0KLQkJCWVsc2UgaWYgKGZpbGUuaXNEaXJlY3RvcnkoKSAmJiAhZmlsZS5nZXROYW1lKCkuZW5kc1dpdGgoIkNWUyIpKSB7Ci0JCQkJTGlzdCBpbm5lckZpbGVzID0gZ2V0RmlsZXNJbkRpcihmaWxlKTsKLQkJCQlmaWxlcy5hZGRBbGwoaW5uZXJGaWxlcyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZpbGVzOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgVVJMIGdldEluc3RhbGxMb2NhdGlvbigpIHsKLQkJVVJMIGluc3RhbGxMb2NhdGlvbiA9IFBsYXRmb3JtLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZyIpLmdldEVudHJ5KCIvIik7Ci0JCVVSTCByZXNvbHZlZExvY2F0aW9uID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc29sdmVkTG9jYXRpb24gPSBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbGxMb2NhdGlvbik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUKLQkJCXRocm93IG5ldyBFcnJvcihlKTsKLQkJfQotCQlyZXR1cm4gcmVzb2x2ZWRMb2NhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLCBvciAna2V5JyBpZiBub3QKLQkgKiBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IENTU0VuY29kaW5nVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5KTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgZ2V0VGVzdEZpbGUoU3RyaW5nIGZpbGVwYXRoKSB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJRmlsZSByZXN1bHQgPSBuZXcgRmlsZShsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBSZWFkZXIgZ2V0VGVzdFJlYWRlcihTdHJpbmcgZmlsZXBhdGgpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24gewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvLyBTdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgZmlsZXBhdGg7Ci0JCVJlYWRlciByZXN1bHQgPSBuZXcgRmlsZVJlYWRlcihsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgd29ya3NwYWNlIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVdvcmtzcGFjZSBnZXRXb3Jrc3BhY2UoKSB7Ci0JCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JfQotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBDU1NFbmNvZGluZ1Rlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL0NTU0VuY29kaW5nVGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL2Nzcy9DU1NFbmNvZGluZ1Rlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjBiMGZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL0NTU0VuY29kaW5nVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLmNzczsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldERlY29kZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5Db2RpbmdFcnJvckFjdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5DU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5DU1NFbmNvZGluZ1Rlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5FbmNvZGluZ01lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLklSZXNvdXJjZUNoYXJzZXREZXRlY3RvcjsKLQotcHVibGljIGNsYXNzIENTU0VuY29kaW5nVGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogRW5zdXJlcyB0aGF0IGFuIElucHV0U3RyZWFtIGhhcyBtYXJrL3Jlc2V0IHN1cHBvcnQuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSW5wdXRTdHJlYW0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShJbnB1dFN0cmVhbSBvcmlnaW5hbCkgewotCQlpZiAob3JpZ2luYWwgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQlpZiAob3JpZ2luYWwubWFya1N1cHBvcnRlZCgpKQotCQkJcmV0dXJuIG9yaWdpbmFsOwotCQlyZXR1cm4gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0ob3JpZ2luYWwpOwotCX0KLQlwcml2YXRlIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlRGlyID0gImNzcy8iOwotCS8vIHByaXZhdGUgZmluYWwgU3RyaW5nIHBsdWdpbkxvY2F0aW9uID0KLQkvLyBUZXN0c1BsdWdpbi5nZXRJbnN0YWxsTG9jYXRpb24oKS50b1N0cmluZygpOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVIb21lID0gInRlc3RmaWxlcy8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVIb21lICsgZmlsZURpcjsKLQlwcml2YXRlIGludCBSRUFEX0JVRkZFUl9TSVpFID0gODAwMDsKLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlU3RyZWFtKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkSUFOQUVuY29kaW5nLCBJUmVzb3VyY2VDaGFyc2V0RGV0ZWN0b3IgZGV0ZWN0b3IpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUZpbGUgZmlsZSA9IENTU0VuY29kaW5nVGVzdHNQbHVnaW4uZ2V0VGVzdEZpbGUoZmlsZW5hbWUpOwotCQlpZiAoIWZpbGUuZXhpc3RzKCkpCi0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGZpbGVuYW1lICsgIiB3YXMgbm90IGZvdW5kIik7Ci0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLQkJLy8gSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlJbnB1dFN0cmVhbSBpc3RyZWFtID0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShpbnB1dFN0cmVhbSk7Ci0JCXRyeSB7Ci0JCQlkZXRlY3Rvci5zZXQoaXN0cmVhbSk7Ci0JCQlFbmNvZGluZ01lbWVudG8gZW5jb2RpbmdNZW1lbnRvID0gKChDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IpZGV0ZWN0b3IpLmdldEVuY29kaW5nTWVtZW50bygpOwotCi0JCQlTdHJpbmcgZm91bmRJQU5BRW5jb2RpbmcgPSBudWxsOwotCi0JCQlpZiAoZW5jb2RpbmdNZW1lbnRvICE9IG51bGwpIHsKLQkJCQlmb3VuZElBTkFFbmNvZGluZyA9IGVuY29kaW5nTWVtZW50by5nZXREZXRlY3RlZENoYXJzZXROYW1lKCk7Ci0JCQl9Ci0JCQkvLyBJIGNoYW5nZWQgbWFueSAiZXF1YWxzIiB0byAiZXF1YWxzSWdub3JlQ2FzZSIgb24gMTEvNC8yMDAyLAotCQkJLy8gc2luY2UKLQkJCS8vIHNvbWUgaXNzdWVzIHdpdGggU0hJRlRfSklTIHZzLiBTaGlmdF9KSVMgd2VyZSBjYXVzaW5nIGZhaWx1cmVzLgotCQkJLy8gV2UgZG8gd2FudCB0byBiZSB0b2xlcmFudCBvbiBpbnB1dCwgYW5kIGFjY2VwdCBlaXRoZXIsIGJ1dCBJCi0JCQkvLyB0aGluawotCQkJLy8gdGhhdCBTdXBwb3J0ZWRKYXZhRW5jb2RpbmdzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gInJlY29tbWVuZCIKLQkJCS8vIFNoaWZ0X0pJUy4KLQkJCWJvb2xlYW4gZXhwZWN0ZWRJQU5BUmVzdWx0ID0gZmFsc2U7Ci0JCQlpZiAoZXhwZWN0ZWRJQU5BRW5jb2RpbmcgPT0gbnVsbCkgewotCQkJCWV4cGVjdGVkSUFOQVJlc3VsdCA9IGV4cGVjdGVkSUFOQUVuY29kaW5nID09IGZvdW5kSUFOQUVuY29kaW5nOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJZXhwZWN0ZWRJQU5BUmVzdWx0ID0gZXhwZWN0ZWRJQU5BRW5jb2RpbmcuZXF1YWxzSWdub3JlQ2FzZShmb3VuZElBTkFFbmNvZGluZyk7Ci0JCQl9Ci0KLQkJCWFzc2VydFRydWUoImVuY29kaW5nIHRlc3QgZmlsZSAiICsgZmlsZW5hbWUgKyAiIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRJQU5BRW5jb2RpbmcgKyAiIGZvdW5kOiAiICsgZm91bmRJQU5BRW5jb2RpbmcsIGV4cGVjdGVkSUFOQVJlc3VsdCk7Ci0JCQkvLyBhIHZlcnkgc2ltcGxlIHJlYWQgdGVzdCAuLi4gd2lsbCBjYXVzZSBKVW5pdCBlcnJvciAobm90IGZhaWwpCi0JCQkvLyBpZgotCQkJLy8gdGhyb3dzIGV4Y2VwdGlvbi4KLQkJCWlmIChmb3VuZElBTkFFbmNvZGluZyAhPSBudWxsKSB7Ci0JCQkJZW5zdXJlQ2FuUmVhZChmaWxlbmFtZSwgZm91bmRJQU5BRW5jb2RpbmcsIGlzdHJlYW0pOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGlzdHJlYW0gIT0gbnVsbCkgewotCQkJCWlzdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJCWlmIChpbnB1dFN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGp1c3QgcmVhZHMgdG8gc3RyZWFtLCB0byBiZSBzdXJlIGl0IGNhbiBiZSByZWFkIHBlcgotCSAqIGVuY29kaW5nLCB3aXRob3V0IGV4Y2VwdGlvbi4KLQkgKi8KLQlwcml2YXRlIHZvaWQgZW5zdXJlQ2FuUmVhZChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBlbmNvZGluZywgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUNoYXJzZXQgY2hhcnNldCA9IENoYXJzZXQuZm9yTmFtZShlbmNvZGluZyk7Ci0JCUNoYXJzZXREZWNvZGVyIGNoYXJzZXREZWNvZGVyID0gY2hhcnNldC5uZXdEZWNvZGVyKCk7Ci0JCWNoYXJzZXREZWNvZGVyLm9uTWFsZm9ybWVkSW5wdXQoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQkJY2hhcnNldERlY29kZXIub25Vbm1hcHBhYmxlQ2hhcmFjdGVyKENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0KLQkJSW5wdXRTdHJlYW1SZWFkZXIgcmVhZGVyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKGlucHV0U3RyZWFtLCBjaGFyc2V0RGVjb2Rlcik7Ci0JCVN0cmluZ0J1ZmZlciBzdHJpbmdCdWZmZXIgPSByZWFkSW5wdXRTdHJlYW0ocmVhZGVyKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihmaWxlbmFtZSk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oc3RyaW5nQnVmZmVyLnRvU3RyaW5nKCkpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmdCdWZmZXIgcmVhZElucHV0U3RyZWFtKFJlYWRlciByZWFkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0KLQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJaW50IG51bVJlYWQgPSAwOwotCQljaGFyIHRCdWZmW10gPSBuZXcgY2hhcltSRUFEX0JVRkZFUl9TSVpFXTsKLQkJd2hpbGUgKChudW1SZWFkID0gcmVhZGVyLnJlYWQodEJ1ZmYsIDAsIHRCdWZmLmxlbmd0aCkpICE9IC0xKSB7Ci0JCQlidWZmZXIuYXBwZW5kKHRCdWZmLCAwLCBudW1SZWFkKTsKLQkJfQotCQlyZXR1cm4gYnVmZmVyOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCZXN0Q2FzZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub25TdGFuZGFyZC5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiSVNPLTg4NTktNiIsIG5ldyBDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1wdHlGaWxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgImVtcHR5RmlsZS5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBudWxsLCBuZXcgQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFVUNKUCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJlbmNvZGluZ190ZXN0X2V1Y2pwLmNzcyI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJFVUMtSlAiLCBuZXcgQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKSVMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiZW5jb2RpbmdfdGVzdF9qaXMuY3NzIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIklTTy0yMDIyLUpQIiwgbmV3IENTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9FbmNvZGluZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub0VuY29kaW5nLmNzcyI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsIG51bGwsIG5ldyBDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdG5vblN0YW5kYXJkSWxsRm9ybWVkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIm5vblN0YW5kYXJkSWxsRm9ybWVkLmNzcyI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJJU08tODg1OS02IiwgbmV3IENTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0bm9uU3RhbmRhcmRJbGxGb3JtZWQyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIm5vblN0YW5kYXJkSWxsRm9ybWVkMi5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiSVNPLTg4NTktNiIsIG5ldyBDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNoaWZ0SklTKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgImVuY29kaW5nX3Rlc3Rfc2ppcy5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiU0hJRlRfSklTIiwgbmV3IENTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL2Nzcy9DU1NIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL2Nzcy9DU1NIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4OTc0MWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvQ1NTSGVhZFRva2VuaXplclRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3M7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkNTU0hlYWRUb2tlbml6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkNTU0hlYWRUb2tlbml6ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkhlYWRQYXJzZXJUb2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLkNTU0VuY29kaW5nVGVzdHNQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBDU1NIZWFkVG9rZW5pemVyVGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCXByaXZhdGUgU3RyaW5nIGZjaGFyc2V0OwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAiY3NzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUhvbWUgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gdGhpcy5maWxlSG9tZSArIHRoaXMuZmlsZURpcjsKLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkTmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgZXhwZWN0ZWROYW1lLCBudWxsKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZE5hbWUsIFN0cmluZyBmaW5hbFRva2VuVHlwZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQ1NTSGVhZFRva2VuaXplciB0b2tlbml6ZXIgPSBudWxsOwotCQlSZWFkZXIgZmlsZVJlYWRlciA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlpZiAodGhpcy5ERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICIgKyBmaWxlbmFtZSk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQl9Ci0JCQlmaWxlUmVhZGVyID0gQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbi5nZXRUZXN0UmVhZGVyKGZpbGVuYW1lKTsKLQkJCXRva2VuaXplciA9IG5ldyBDU1NIZWFkVG9rZW5pemVyKGZpbGVSZWFkZXIpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIG9wZW5pbmcgZmlsZSBcIiIgKyBmaWxlbmFtZSArICJcIiIpOwotCQkJdGhyb3cgZTsKLQkJfQotCi0JCUhlYWRQYXJzZXJUb2tlbiByZXN1bHRUb2tlbiA9IG51bGw7Ci0JCUhlYWRQYXJzZXJUb2tlbiB0b2tlbiA9IHBhcnNlSGVhZGVyKHRva2VuaXplcik7Ci0JCVN0cmluZyByZXN1bHRWYWx1ZSA9IHRoaXMuZmNoYXJzZXQ7Ci0JCWZpbGVSZWFkZXIuY2xvc2UoKTsKLQkJaWYgKGZpbmFsVG9rZW5UeXBlICE9IG51bGwpIHsKLQkJCWFzc2VydFRydWUoImRpZCBub3QgZW5kIGFzIGV4cGVjdGVkLiBmb3VuZDogICIgKyB0b2tlbi5nZXRUeXBlKCksIGZpbmFsVG9rZW5UeXBlLmVxdWFscyh0b2tlbi5nZXRUeXBlKCkpKTsKLQkJfQotCQllbHNlIHsKLQkJCWlmIChleHBlY3RlZE5hbWUgPT0gbnVsbCkgewotCQkJCWFzc2VydFRydWUoImV4cGVjdGVkIG5vIGVuY29kaW5nLCBidXQgZm91bmQ6ICIgKyByZXN1bHRWYWx1ZSwgcmVzdWx0VG9rZW4gPT0gbnVsbCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlhc3NlcnRUcnVlKCJleHBlY3RlZCAiICsgZXhwZWN0ZWROYW1lICsgIiBidXQgZm91bmQgIiArIHJlc3VsdFZhbHVlLCBleHBlY3RlZE5hbWUuZXF1YWxzKHJlc3VsdFZhbHVlKSk7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0xlZ2FsU3RyaW5nKFN0cmluZyB0b2tlblR5cGUpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkJaWYgKHRva2VuVHlwZSA9PSBudWxsKSB7Ci0JCQlyZXN1bHQgPSBmYWxzZTsKLQkJfQotCQllbHNlIHsKLQkJCXJlc3VsdCA9IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5JbnZhbGlkVGVybWluYXRlZFN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLkludmFsaWRUZXJtaW50YXRlZFVuRGVsaW1pdGVkU3RyaW5nVmFsdWUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogR2l2ZSdzIHByaW9yaXR5IHRvIGVuY29kaW5nIHZhbHVlLCBpZiBmb3VuZCBlbHNlLCBsb29rcyBmb3IgY29udGVudFR5cGUKLQkgKiB2YWx1ZTsKLQkgKi8KLQlwcml2YXRlIEhlYWRQYXJzZXJUb2tlbiBwYXJzZUhlYWRlcihDU1NIZWFkVG9rZW5pemVyIHRva2VuaXplcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSGVhZFBhcnNlclRva2VuIHRva2VuID0gbnVsbDsKLQkJSGVhZFBhcnNlclRva2VuIGZpbmFsVG9rZW4gPSBudWxsOwotCQlkbyB7Ci0JCQl0b2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKLQkJCVN0cmluZyB0b2tlblR5cGUgPSB0b2tlbi5nZXRUeXBlKCk7Ci0JCQlpZiAodG9rZW5UeXBlID09IENTU0hlYWRUb2tlbml6ZXJDb25zdGFudHMuQ0hBUlNFVF9SVUxFKSB7Ci0JCQkJaWYgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQkJSGVhZFBhcnNlclRva2VuIHZhbHVlVG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQkJCVN0cmluZyB2YWx1ZVRva2VuVHlwZSA9IHZhbHVlVG9rZW4uZ2V0VHlwZSgpOwotCQkJCQlpZiAoaXNMZWdhbFN0cmluZyh2YWx1ZVRva2VuVHlwZSkpIHsKLQkJCQkJCXRoaXMuZmNoYXJzZXQgPSB2YWx1ZVRva2VuLmdldFRleHQoKTsKLQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKTsKLQkJZmluYWxUb2tlbiA9IHRva2VuOwotCQlyZXR1cm4gZmluYWxUb2tlbjsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCZXN0Q2FzZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgIm5vblN0YW5kYXJkLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS02Iik7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1wdHlGaWxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAiZW1wdHlGaWxlLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFVUNKUCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgImVuY29kaW5nX3Rlc3RfZXVjanAuY3NzIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIkVVQy1KUCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKSVMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJlbmNvZGluZ190ZXN0X2ppcy5jc3MiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTIwMjItSlAiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9FbmNvZGluZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgIm5vRW5jb2RpbmcuY3NzIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdG5vblN0YW5kYXJkSWxsRm9ybWVkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAibm9uU3RhbmRhcmRJbGxGb3JtZWQuY3NzIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTYiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0bm9uU3RhbmRhcmRJbGxGb3JtZWQyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAibm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS02Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNoaWZ0SklTKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAiZW5jb2RpbmdfdGVzdF9zamlzLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJTSElGVF9KSVMiKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL0VuY29kaW5nUGFyc2VyQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjNjBjZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3M7Ci0KLQotcHVibGljIGludGVyZmFjZSBFbmNvZGluZ1BhcnNlckNvbnN0YW50cyB7Ci0KLQlmaW5hbCBTdHJpbmcgRU9GID0gIkVPRiI7IC8vJE5PTi1OTFMtMSQKLQlmaW5hbCBTdHJpbmcgSW52YWxpZFRlcm1pbmF0ZWRTdHJpbmdWYWx1ZSA9ICJJbnZhbGlkVGVybWluYXRlZFN0cmluZ1ZhbHVlIjsgLy8kTk9OLU5MUy0xJAotCWZpbmFsIFN0cmluZyBJbnZhbGlkVGVybWludGF0ZWRVbkRlbGltaXRlZFN0cmluZ1ZhbHVlID0gIkludmFsaWRUZXJtaW50YXRlZFVuRGVsaW1pdGVkU3RyaW5nVmFsdWUiOyAvLyROT04tTkxTLTEkCi0JZmluYWwgU3RyaW5nIE1BWF9DSEFSU19SRUFDSEVEID0gIk1BWF9DSEFSU19SRUFDSEVEIjsgLy8kTk9OLU5MUy0xJAotCWZpbmFsIFN0cmluZyBTdHJpbmdWYWx1ZSA9ICJzdHJ2YWwiOyAvLyROT04tTkxTLTEkCi0JZmluYWwgU3RyaW5nIFVuRGVsaW1pdGVkU3RyaW5nVmFsdWUgPSAiVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgZmluYWwgU3RyaW5nIFVURjE2QkUgPSAiVVRGMTZCRSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgZmluYWwgU3RyaW5nIFVURjE2TEUgPSAiVVRGMTZMRSI7IC8vJE5PTi1OTFMtMSQKLQotCi0JcHVibGljIGZpbmFsIFN0cmluZyBVVEY4M0J5dGVCT00gPSAiVVRGODNCeXRlQk9NIjsgLy8kTk9OLU5MUy0xJAotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL2Nzcy9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JDU1MuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckNTUy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDY4NzI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckNTUy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcuY3NzOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucmVhZC5UZXN0Q29udGVudFR5cGVEZXRlY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JDU1MgZXh0ZW5kcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb24gewotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAwMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMDIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5jc3Nzb3VyY2UiLCAidGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2V1Y2pwLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfamlzLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MiLCBudWxsKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL25vRW5jb2RpbmcuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcyIsIG51bGwpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZjBiYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdAotCW5hbWU9InRlc3RzdWl0ZSIKLQlkZWZhdWx0PSJydW4iCi0JYmFzZWRpcj0iLiI+Ci0KLQk8IS0tIENvbmZpZ3VyYWJsZSBQcm9wZXJ0aWVzIC0tPgotCi0JPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLQk8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotCTwhLS0gPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iIC8+IC0tPgotCi0JPGVjaG8gbWVzc2FnZT0iYmFzZWRpciAke2Jhc2VkaXJ9IiAvPgotCTxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UgcGxhY2UgJHtlY2xpcHNlLWhvbWV9IiAvPgotCi0JPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIHBsdWdpbi1uYW1lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmciIC8+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9ImxpYnJhcnktZmlsZSIKLQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0JPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLQk8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLQk8dGFyZ2V0IG5hbWU9ImluaXQiPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQKLQkJCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLQkJCQlpbmNsdWRlcz0ib3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy4qeG1sIiAvPgotCQk8L2RlbGV0ZT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0JPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0JCTxwcm9wZXJ0eQotCQkJbmFtZT0id3N0LWZvbGRlciIKLQkJCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd3N0X2ZvbGRlciIgLz4KLQkJPGRlbGV0ZQotCQkJZGlyPSIke3dzdC1mb2xkZXJ9IgotCQkJcXVpZXQ9InRydWUiIC8+Ci0JCTxhbnQKLQkJCXRhcmdldD0iY29yZS10ZXN0IgotCQkJYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iZGF0YS1kaXIiCi0JCQkJdmFsdWU9IiR7d3N0LWZvbGRlcn0iIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZyIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImNsYXNzbmFtZSIKLQkJCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5DU1NFbmNvZGluZ1Rlc3RTdWl0ZSIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9InBsdWdpbi1wYXRoIgotCQkJCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLQk8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0JPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotCTx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0JCTwhLS08ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4tLT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLQk8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0JPHRhcmdldAotCQluYW1lPSJydW4iCi0JCWRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0JCTxhbnQKLQkJCXRhcmdldD0iY29sbGVjdCIKLQkJCWFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImluY2x1ZGVzIgotCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLip4bWwiIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJvdXRwdXQtZmlsZSIKLQkJCQl2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotCQk8L2FudD4KLQkJPCEtLTxlbWFpbFJlc3VsdHMgcmVzdWx0c0ZpbGU9IiR7YnVpbGQtcmVzdWx0cy1ob21lfS8ke3BsdWdpbi1uYW1lfS54bWwiIGFkZHJlc3NsaXN0PSJkYXZpZF93aWxsaWFtc0B1cy5pYm0uY29tIiAvPiAtLT4KLQk8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfZXVjanAuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfZXVjanAuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTI1NmU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2V1Y2pwLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGNoYXJzZXQgIkVVQy1KUCI7DQotDQotQk9EWSB7DQotCWZvbnQtZmFtaWx5IDogIqPNo9Mgo9CltKW3pcOlryI7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2ppcy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9qaXMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODQ3NjhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2ppcy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBjaGFyc2V0ICJJU08tMjAyMi1KUCI7DQotDQotQk9EWSB7DQotCWZvbnQtZmFtaWx5IDogIhskQiNNI1MbKEIgGyRCI1AlNCU3JUMlLxsoQiI7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X3NqaXMuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MjljZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBjaGFyc2V0ICJTSElGVF9KSVMiOw0KLQ0KLUJPRFkgew0KLQlmb250LWZhbWlseSA6ICKCbIJyIIJvg1ODVoNig04iOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9FbmNvZGluZy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9FbmNvZGluZy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZjA2YmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vRW5jb2RpbmcuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotQk9EWSB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgIk1TIFNhbnMgU2VyaWYiOw0KLQl0ZXh0LWRlY29yYXRpb246IG5vbmU7DQotCWJhY2tncm91bmQtY29sb3I6IHdoaXRlOw0KLX0NCi0NCi1URCB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIjsNCi0JZm9udC1zaXplOiAxMnB0Ow0KLQljb2xvcjogYmxhY2s7DQotCWZvbnQtc3R5bGU6IG5vcm1hbDsNCi0JdGV4dC1hbGlnbjogbGVmdDsNCi19DQotDQotVEggew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTJwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBub3JtYWw7DQotCWZvbnQtd2VpZ2h0OiBib2xkZXI7DQotCXRleHQtYWxpZ246IGxlZnQ7DQotfQ0KLQ0KLUgxIHsNCi0JZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iOw0KLQlmb250LXNpemU6IDE0cHQ7DQotCWNvbG9yOiBibGFjazsNCi0JZm9udC1zdHlsZTogbm9ybWFsOw0KLQlmb250LXdlaWdodDogYm9sZGVyOw0KLQl0ZXh0LWFsaWduOiBjZW50ZXINCi19DQotDQotSDIgew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTJwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBub3JtYWw7DQotCWZvbnQtd2VpZ2h0OiBib2xkZXINCi19DQotDQotSDMgew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTJwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBpdGFsaWMgIA0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM5OTdlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AY2hhcnNldCAiSVNPLTg4NTktNiI7DQotDQotDQotDQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxYTRlNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGNoYXJzZXQgIklTTy04ODU5LTY7DQotDQotDQotDQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkMi5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNjOGExZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotDQotDQotICAgIEBjaGFyc2V0ICJJU08tODg1OS02IjsNCi0NCi0NCi0NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MWM4ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjYyMWU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotYmluCi1iaW4ucHJvamVjdAotYnVpbGQueG1sCi1kZXYucHJvcGVydGllcwotb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0c18xLjAuMC5qYXIKLWNzc3VpdGVzdHMuamFyCi10ZW1wLmZvbGRlcgotUGVyZm9ybWFuY2VSZXN1bHRzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQxZDE2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGQ4YjVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6Mzc6MjEgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyYWM2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTM2OGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzI0OTU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjA1OjI5IEVEVCAyMDA2Ci1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmQzMmI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMC4wCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLkNTU1VJVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy52aWV3ZXIKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy51aSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLAotIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZSwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaCwKLSBvcmcuZWNsaXBzZS51aS5lZGl0b3JzLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuanVuaXQKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtQ2xhc3NQYXRoOiBjc3N1aXRlc3RzLmphcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWM1OTg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPk1heSAyLCAyMDA2PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFlNTNiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBjc3N1aXRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHNyYy8sXAotICAgICAgICAgICAgICAgdGVzdC54bWwKLWphcnMuY29tcGlsZS5vcmRlciA9IGNzc3VpdGVzdHMuamFyCi1zb3VyY2UuY3NzdWl0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuY3NzdWl0ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFhZDFmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZQotQnVuZGxlLU5hbWUuMCA9IENTUyBVSSBUZXN0cyBQbHVnLWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9DU1NVSVRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9DU1NVSVRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWJlZjVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvQ1NTVUlUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLnZpZXdlci5UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkNTUzsKLQotcHVibGljIGNsYXNzIENTU1VJVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgQ1NTVUlUZXN0U3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgQ1NTVUlUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJDU1MgVUkgVGVzdCBTdWl0ZSIpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRXhpc3RlbmNlVGVzdC5jbGFzcywgIkNTUyBVSSBFeGlzdGVuY2UgVGVzdCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uQ1NTLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkNTUy5jbGFzcykpOwotCX0KLX0JClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9DU1NVSVRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL0NTU1VJVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFmMGYwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL0NTU1VJVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIENTU1VJVGVzdHNQbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKLQotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBDU1NVSVRlc3RzUGx1Z2luIHBsdWdpbjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIENTU1VJVGVzdHNQbHVnaW4oKSB7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQkJcGx1Z2luID0gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBDU1NVSVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZvciB0aGUgaW1hZ2UgZmlsZSBhdCB0aGUgZ2l2ZW4KLQkgKiBwbHVnLWluIHJlbGF0aXZlIHBhdGguCi0JICoKLQkgKiBAcGFyYW0gcGF0aCB0aGUgcGF0aAotCSAqIEByZXR1cm4gdGhlIGltYWdlIGRlc2NyaXB0b3IKLQkgKi8KLQlwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIHBhdGgpIHsKLQkJcmV0dXJuIEFic3RyYWN0VUlQbHVnaW4uaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigib3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cyIsIHBhdGgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9FeGlzdGVuY2VUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5MzEyN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9FeGlzdGVuY2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudWkuaW50ZXJuYWwuQ1NTVUlQbHVnaW47Ci0KLS8qKgotICogCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBFeGlzdGVuY2VUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIHRlc3RzIGlmIENTU1VJUGx1Z2luIGNhbiBiZSBsb2FkZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RXhpc3RzKCkgewotCQlQbHVnaW4gcCA9IENTU1VJUGx1Z2luLmdldERlZmF1bHQoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiY291bGRuJ3QgbG9hZCBDU1MgVUkgcGx1Z2luIiwgcCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkNTUy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkNTUy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGUzMGJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25DU1MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKiAKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JDU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25DU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS52aWV3cy5jb250ZW50b3V0bGluZS5DU1NDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS52aWV3cy5wcm9wZXJ0aWVzLkNTU1Byb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlcjsKLQotLyoqCi0gKiBUZXN0cyByZXRyaWV2aW5nIGVkaXRvciBjb250cmlidXRpb25zIGZvciBjc3MgY29udGVudCB0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkNTUyBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U291cmNlVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLlNPVVJDRVZJRVdFUkNPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1MpOwotCQlhc3NlcnROb3ROdWxsKCJubyBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTLCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIHNvdXJjZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1MsIG8uZ2V0Q2xhc3MoKSwgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uQ1NTLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudE91dGxpbmVWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuQ09OVEVOVE9VVExJTkVDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gY29udGVudCBvdXRsaW5lIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTLCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGNvbnRlbnQgb3V0bGluZSBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUywgby5nZXRDbGFzcygpLCBDU1NDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24uY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLlBST1BFUlRZU0hFRVRDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gcHJvcGVydHkgc2hlZXQgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1MsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgcHJvcGVydHkgc2hlZXQgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1MsIG8uZ2V0Q2xhc3MoKSwgQ1NTUHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24uY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uQ1NTLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkNTUy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWExYWQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uQ1NTLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLnZpZXdlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUF1dG9FZGl0U3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0RG91YmxlQ2xpY2tTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0SG92ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0YW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuZm9ybWF0dGVyLklDb250ZW50Rm9ybWF0dGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuaHlwZXJsaW5rLklIeXBlcmxpbmtEZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmluZm9ybWF0aW9uLklJbmZvcm1hdGlvblByZXNlbnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJlY29uY2lsZXIuSVJlY29uY2lsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXh0LklDU1NQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uQ1NTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudWkuaW50ZXJuYWwuTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5zdHlsZS5MaW5lU3R5bGVQcm92aWRlcjsKLQotcHVibGljIGNsYXNzIFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uQ1NTIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25DU1MgZkNvbmZpZyA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGZEaXNwbGF5RXhpc3RzID0gdHJ1ZTsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyIGZWaWV3ZXIgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0KLQlwdWJsaWMgVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25DU1MoKSB7Ci0JCXN1cGVyKCJUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkNTUyIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCF0aGlzLmlzU2V0dXApIHsKLQkJCXNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBzZXRVcFZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0KLQkJaWYgKERpc3BsYXkuZ2V0Q3VycmVudCgpICE9IG51bGwpIHsKLQotCQkJU2hlbGwgc2hlbGwgPSBudWxsOwotCQkJQ29tcG9zaXRlIHBhcmVudCA9IG51bGw7Ci0KLQkJCWlmIChQbGF0Zm9ybVVJLmlzV29ya2JlbmNoUnVubmluZygpKSB7Ci0JCQkJc2hlbGwgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlzaGVsbCA9IG5ldyBTaGVsbChEaXNwbGF5LmdldEN1cnJlbnQoKSk7Ci0JCQl9Ci0JCQlwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKHNoZWxsLCBTV1QuTk9ORSk7Ci0KLQkJCS8vIGR1bW15IHZpZXdlcgotCQkJZlZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCQlmQ29uZmlnID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkNTUygpOwotCQl9Ci0JCWVsc2UgewotCQkJZkRpc3BsYXlFeGlzdHMgPSBmYWxzZTsKLQkJCUxvZ2dlci5sb2coTG9nZ2VyLklORk8sICJSZW1lbWJlciwgdmlld2VyIGNvbmZpZ3VyYXRpb24gdGVzdHMgYXJlIG5vdCBydW4gYmVjYXVzZSB3b3JrYmVuY2ggaXMgbm90IG9wZW4gKG5vcm1hbCBvbiBidWlsZCBtYWNoaW5lKSIpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEF1dG9FZGl0U3RyYXRlZ2llcygpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUF1dG9FZGl0U3RyYXRlZ3lbXSBzdHJhdGVnaWVzID0gZkNvbmZpZy5nZXRBdXRvRWRpdFN0cmF0ZWdpZXMoZlZpZXdlciwgSUNTU1BhcnRpdGlvbnMuU1RZTEUpOwotCQlhc3NlcnROb3ROdWxsKHN0cmF0ZWdpZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gYXV0byBlZGl0IHN0cmF0ZWdpZXMiLCBzdHJhdGVnaWVzLmxlbmd0aCA+IDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb25maWd1cmVkQ29udGVudFR5cGVzKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBjb25maWd1cmVkQ29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKGNvbmZpZ3VyZWRDb250ZW50VHlwZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBjb250ZW50IHR5cGVzIiwgY29uZmlndXJlZENvbnRlbnRUeXBlcy5sZW5ndGggPiAxKTsKLQl9Ci0KLQkvKgotCSAqIG5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEFzc2lzdGFudCgpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUNvbnRlbnRBc3Npc3RhbnQgY2EgPSBmQ29uZmlnLmdldENvbnRlbnRBc3Npc3RhbnQoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGlzIG5vIGNvbnRlbnQgYXNzaXN0YW50IiwgY2EpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50Rm9ybWF0dGVyKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJQ29udGVudEZvcm1hdHRlciBjZiA9IGZDb25maWcuZ2V0Q29udGVudEZvcm1hdHRlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgaXMgbm8gY29udGVudCBmb3JtYXR0ZXIiLCBjZik7Ci0JfQotCi0JLyoKLQkgKiBub3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldERvdWJsZUNsaWNrU3RyYXRlZ3koKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0RG91YmxlQ2xpY2tTdHJhdGVneSBzdHJhdGVneSA9IGZDb25maWcuZ2V0RG91YmxlQ2xpY2tTdHJhdGVneShmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYgKHN0cmF0ZWd5ICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgZG91YmxlIGNsaWNrIHN0cmF0ZWdpZXMiLCBmYWxzZSk7Ci0JfQotCi0JLyoKLQkgKiBub3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEh5cGVybGlua0RldGVjdG9ycygpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUh5cGVybGlua0RldGVjdG9yW10gZGV0ZWN0b3JzID0gZkNvbmZpZy5nZXRIeXBlcmxpbmtEZXRlY3RvcnMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGFyZSBubyBoeXBlcmxpbmsgZGV0ZWN0b3JzIiwgZGV0ZWN0b3JzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGh5cGVybGluayBkZXRlY3RvcnMiLCBkZXRlY3RvcnMubGVuZ3RoID4gMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEluZGVudFByZWZpeGVzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJU3RyaW5nIHByZWZpeGVzW10gPSBmQ29uZmlnLmdldEluZGVudFByZWZpeGVzKGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZiAocHJlZml4ZXMgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBpbmRlbnQgcHJlZml4ZXMiLCBmYWxzZSk7Ci0JfQotCi0JLyoKLQkgKiBub3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciBpbmZvQ3JlYXRvciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciBpcyBudWxsIiwgaW5mb0NyZWF0b3IpOwotCX0KLQotCS8qCi0JICogbm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbmZvcm1hdGlvblByZXNlbnRlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUluZm9ybWF0aW9uUHJlc2VudGVyIHByZXNlbnRlciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25QcmVzZW50ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkluZm9ybWF0aW9uUHJlc2VudGVyIGlzIG51bGwiLCBwcmVzZW50ZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMaW5lU3R5bGVQcm92aWRlcnMoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlMaW5lU3R5bGVQcm92aWRlciBwcm92aWRlcnNbXSA9IGZDb25maWcuZ2V0TGluZVN0eWxlUHJvdmlkZXJzKGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZiAocHJvdmlkZXJzICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgbGluZSBzdHlsZSBwcm92aWRlcnMiLCBmYWxzZSk7Ci0JfQotCi0JLyoKLQkgKiBub3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldFJlY29uY2lsZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlSZWNvbmNpbGVyIHIgPSBmQ29uZmlnLmdldFJlY29uY2lsZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIlJlY29uY2lsZXIgbm90IG51bGwiLCByKTsKLQl9Ci0KLQkvKgotCSAqIG5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VGV4dEhvdmVyKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBob3ZlclBhcnRpdGlvbnMgPSBuZXcgU3RyaW5nW117SUNTU1BhcnRpdGlvbnMuU1RZTEV9OwotCQlmb3IgKGludCBpID0gMDsgaSA8IGhvdmVyUGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJSVRleHRIb3ZlciBob3ZlciA9IGZDb25maWcuZ2V0VGV4dEhvdmVyKGZWaWV3ZXIsIGhvdmVyUGFydGl0aW9uc1tpXSwgU1dULk5PTkUpOwotCQkJYXNzZXJ0Tm90TnVsbCgiaG92ZXIgd2FzIG51bGwgZm9yIHBhcnRpdGlvbjogIiArIGhvdmVyUGFydGl0aW9uc1tpXSwgaG92ZXIpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyZGMxMjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLTxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KLQk8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotCTwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0JPCEtLTxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIi8+LS0+Ci0KLQk8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgcGx1Z2luLW5hbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0JPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cyIgLz4KLQk8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLQotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy4qeG1sIiAvPgotCQk8L2RlbGV0ZT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0JPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0JCTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPgotCQk8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLkNTU1VJVGVzdFN1aXRlIiAvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLQk8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLQkJPCEtLTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+LS0+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0JPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotCTx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotCQk8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLip4bWwiIC8+Ci0JCQk8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0JCTwvYW50PgotCQk8IS0tCQk8ZW1haWxSZXN1bHRzIHJlc3VsdHNGaWxlPSIke2J1aWxkLXJlc3VsdHMtaG9tZX0vJHtwbHVnaW4tbmFtZX0ueG1sIiBhZGRyZXNzbGlzdD0iZGF2aWRfd2lsbGlhbXNAdXMuaWJtLmNvbSIgLz4gLS0+Ci0JPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MWM4ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWViZmU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotYmluCi1iaW4ucHJvamVjdAotYnVpbGQueG1sCi1kZXYucHJvcGVydGllcwotZHRkdWl0ZXN0cy5qYXIKLXRlbXAuZm9sZGVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ5N2UwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGQ4YjVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6Mzc6MjEgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyYWM2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTM2OGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzI0OTU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjA1OjI5IEVEVCAyMDA2Ci1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjc0MGU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMC4wCi1CdW5kbGUtQ2xhc3NQYXRoOiBkdGR1aXRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy5pbnRlcm5hbC5EVERVSVRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLAotIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuaW50ZXJuYWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLnZpZXdlcgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LAotIG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLnVpLnZpZXdzLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaCwKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gudGV4dGVkaXRvciwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LmR0ZC51aSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS51aSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmp1bml0LAotIGNvbS5pYm0uaWN1Ci1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWM1OTg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPk1heSAyLCAyMDA2PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM5YjAzNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLXNvdXJjZS5kdGR1aXRlc3RzLmphciA9IHNyYy8KLW91dHB1dC5kdGR1aXRlc3RzLmphciA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IGR0ZHVpdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWZlMjMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlLm9yZwotQnVuZGxlLU5hbWUuMCA9IERURCBVSSBUZXN0cwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvRFREVUlQcmVmZXJlbmNlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvRFREVUlQcmVmZXJlbmNlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg1MjE1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL0RURFVJUHJlZmVyZW5jZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkuaW50ZXJuYWwuRFREVUlQbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOwotCi0vKioKLSAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCBpcyB0byB2ZXJpZnkgdGhlIHZhbGlkaXR5IG9mIHRoZSBIVE1MIFNvdXJjZQotICogZWRpdG9yIHByZWZlcmVuY2VzLiBUZXN0cyBpbmNsdWRlIHNldHRpbmcvZ2V0dGluZyBwcmVmZXJlbmNlcy4KLSAqIAotICogTk9URTogVGhpcyB0ZXN0IHNob3VsZCBiZSBwcmVmb3JtZWQgb24gYSBjbGVhbiB3b3Jrc3BhY2UuIElmIHBlcmZvcm1lZCBvbgotICogYW4gZXhpc3Rpbmcgd29ya3NwYWNlLCB0aGlzIHRlc3Qgd2lsbCBtYW5pcHVsYXRlIHByZWZlcmVuY2VzIGluIHRoZQotICogd29ya3NwYWNlLCB0aG91Z2ggYXR0ZW1wdHMgd2lsbCBiZSBtYWRlIHRvIHJlc3RvcmUgb3JpZ2luYWwgdmFsdWVzIGFmdGVyCi0gKiB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgRFREVUlQcmVmZXJlbmNlc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqCi0JICogVGVzdHMgZXhpc3RhbmNlIG9mIHByZWZlcmVuY2UgdmFsdWVzIHdoZW4gZ2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcwotCSAqIHRocm91Z2ggUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QnVuZGxlR2V0UHJlZmVyZW5jZXMoKSB7Ci0JCWZpbmFsIFN0cmluZyBidW5kbGVOYW1lID0gIm9yZy5lY2xpcHNlLndzdC5kdGQudWkiOwotCi0JCS8vIG5lZWQgdG8gc3RhcnQgdXAgYnVuZGxlIGZvciBkZWZhdWx0IHZhbHVlcyB0byBiZSBsb2FkZWQKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShidW5kbGVOYW1lKTsKLQkJdHJ5IHsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkKLQkJCQlidW5kbGUuc3RhcnQoKTsKLQkJCWVsc2UKLQkJCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBjb3VsZCBub3QgZmluZCBidW5kbGU6ICIgKyBidW5kbGVOYW1lKTsKLQkJfSBjYXRjaCAoQnVuZGxlRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIG9mIGV4Y2VwdGlvbiBzdGFydGluZyBidW5kbGU6ICIgKyBidW5kbGVOYW1lICsgIiBleGNlcHRpb246ICIgKyBlKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFRlc3RzIGRlZmF1bHQgdmFsdWVzIG9mIHByZWZlcmVuY2VzLgotCSAqIAotCSAqIE5PVEU6IEV4cGVjdGVkIGRlZmF1bHQgdmFsdWVzIGFyZSBoYXJkLWNvZGVkLCBzbyBpZiBkZWZhdWx0IHZhbHVlcyBkbwotCSAqIGdldCBjaGFuZ2VkLCBhc3NlcnRpb25zIG5lZWQgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlcygpIHsKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IERURFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZHRkIHByZWZlcmVuY2Ugc3RvcmUgd2FzIG51bGwiLCBzdG9yZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcyBieSBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWUgdG8gYmUgYQotCSAqIGNlcnRhaW4gdmFsdWUsIHRoZW4gZ2V0dGluZyB0aGUgcHJlZmVyZW5jZSB2YWx1ZSB0byB2ZXJpZnkgaXQgd2FzIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luU2V0UHJlZmVyZW5jZXMoKSB7Ci0JCS8vSVNTVUU6IHRoaXMgZG9lcyBOT1QgdXNlIFNFVAotCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gRFREVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCQlhc3NlcnROb3ROdWxsKCJkdGQgcHJlZmVyZW5jZSBzdG9yZSB3YXMgbnVsbCIsIHN0b3JlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL0RURFVJVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL0RURFVJVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NmM5ZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9EVERVSVRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMudmlld2VyLlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uRFREOwotCi0KLQotcHVibGljIGNsYXNzIERURFVJVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgRFREVUlUZXN0U3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgRFREVUlUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJEVEQgVUkgVGVzdFN1aXRlIik7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShWZXJpZnlVSVBsdWdpbi5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRFREVUlQcmVmZXJlbmNlc1Rlc3QuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uRFRELmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkRURC5jbGFzcykpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uRFRELmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uRFRELmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhZjgyNjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkRURC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICBKZW5zIEx1a293c2tpL0lubm9vcHJhY3QgLSBpbml0aWFsIHJlbmFtaW5nL3Jlc3RydWN0dXJpbmcKLSAqIAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckRURDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkRURDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkRURENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLkV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXI7Ci0KLS8qKgotICogVGVzdHMgcmV0cmlldmluZyBlZGl0b3IgY29udHJpYnV0aW9ucyBmb3IgZHRkIGNvbnRlbnQgdHlwZQotICovCi1wdWJsaWMgY2xhc3MgVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25EVEQgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdEdldFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5TT1VSQ0VWSUVXRVJDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9yRFRELkNvbnRlbnRUeXBlSURfRFREKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gc291cmNlIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckRURC5Db250ZW50VHlwZUlEX0RURCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yRFRELkNvbnRlbnRUeXBlSURfRFRELCBvLmdldENsYXNzKCksIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkRURC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRPdXRsaW5lVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLkNPTlRFTlRPVVRMSU5FQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvckRURC5Db250ZW50VHlwZUlEX0RURCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGNvbnRlbnQgb3V0bGluZSBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckRURC5Db250ZW50VHlwZUlEX0RURCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBjb250ZW50IG91dGxpbmUgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JEVEQuQ29udGVudFR5cGVJRF9EVEQsIG8uZ2V0Q2xhc3MoKSwgRFREQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL1ZlcmlmeVVJUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL1ZlcmlmeVVJUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMmRhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9WZXJpZnlVSVBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKLSAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMKLSAqIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZAotICogaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLmludGVybmFsLkRURFVJUGx1Z2luOwotCi0KLXB1YmxpYyBjbGFzcyBWZXJpZnlVSVBsdWdpbiBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5FeGlzdHMoKSB7Ci0JCS8vIFRPRE86IHNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODE1MjcKLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQkJUGx1Z2luIHBsdWdpbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlwbHVnaW4gPSBEVERVSVBsdWdpbi5nZXREZWZhdWx0KCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlwbHVnaW4gPSBudWxsOwotCQl9Ci0JCWFzc2VydE5vdE51bGwoImVkaXRvciBwbHVnaW4gY291bGQgbm90IGJlIGluc3RhbnRpYXRlZCIsIHBsdWdpbik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9pbnRlcm5hbC9EVERVSVRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL2ludGVybmFsL0RURFVJVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRlZDBjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL2ludGVybmFsL0RURFVJVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIERURFVJVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgRFREVUlUZXN0c1BsdWdpbiBwbHVnaW47Ci0JLy8gUmVzb3VyY2UgYnVuZGxlLgotCXByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIERURFVJVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQkJcGx1Z2luID0gbnVsbDsKLQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERURFVJVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLCBvciAna2V5JyBpZiBub3QKLQkgKiBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IERURFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsKSA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQl0cnkgewotCQkJaWYgKHJlc291cmNlQnVuZGxlID09IG51bGwpCi0JCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuaW50ZXJuYWwuVGVzdHNQbHVnaW5SZXNvdXJjZXMiKTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9pbnRlcm5hbC9Mb2dnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvaW50ZXJuYWwvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlODRmNDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9pbnRlcm5hbC9Mb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogU21hbGwgY29udmVuaWVuY2UgY2xhc3MgdG8gbG9nIG1lc3NhZ2VzIHRvIHBsdWdpbidzIGxvZyBmaWxlIGFuZCBhbHNvLCBpZiBkZXNpcmVkLAotICogdGhlIGNvbnNvbGUuIFRoaXMgY2xhc3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBjbGFzc2VzIGluIHRoaXMgcGx1Z2luLiBPdGhlcgotICogcGx1Z2lucyBzaG91bGQgbWFrZSB0aGVpciBvd24gY29weSwgd2l0aCBhcHByb3ByaWF0ZSBJRC4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNFRklMVEVSX0xPQ0FUSU9OID0gIi9kZWJ1Zy90cmFjZWZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gSVN0YXR1cy5PSzsgLy8gMAotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk8gPSBJU3RhdHVzLklORk87IC8vIDEKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gSVN0YXR1cy5XQVJOSU5HOyAvLyAyCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSBJU3RhdHVzLkVSUk9SOyAvLyA0Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19ERUJVRyA9IDIwMCArIE9LOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fREVCVUcgPSAyMDAgKyBJTkZPOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkdfREVCVUcgPSAyMDAgKyBXQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RFQlVHID0gMjAwICsgRVJST1I7Ci0KLQkvKioKLQkgKiBBZGRzIG1lc3NhZ2UgdG8gbG9nLgotCSAqIEBwYXJhbSBsZXZlbCBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoT0ssIElORk8sIFdBUk5JTkcsIEVSUk9SLCBPS19ERUJVRywgSU5GT19ERUJVRywgV0FSTklOR19ERUJVRywgRVJST1JfREVCVUcpCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBhZGQgdG8gdGhlIGxvZwotCSAqIEBwYXJhbSBleGNlcHRpb24gZXhjZXB0aW9uIHRocm93bgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGxldmVsID09IE9LX0RFQlVHIHx8IGxldmVsID09IElORk9fREVCVUcgfHwgbGV2ZWwgPT0gV0FSTklOR19ERUJVRyB8fCBsZXZlbCA9PSBFUlJPUl9ERUJVRykgewotCQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJCXJldHVybjsKLQkJfQotCi0JCWludCBzZXZlcml0eSA9IElTdGF0dXMuT0s7Ci0JCXN3aXRjaCAobGV2ZWwpIHsKLQkJCWNhc2UgSU5GT19ERUJVRyA6Ci0JCQljYXNlIElORk8gOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5JTkZPOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXQVJOSU5HX0RFQlVHIDoKLQkJCWNhc2UgV0FSTklORyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLldBUk5JTkc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEVSUk9SX0RFQlVHIDoKLQkJCWNhc2UgRVJST1IgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5FUlJPUjsKLQkJfQotCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKHNldmVyaXR5LCBQTFVHSU5fSUQsIHNldmVyaXR5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQl9Ci0KLQkvKioKLQkgKiBQcmludHMgbWVzc2FnZSB0byBsb2cgaWYgY2F0ZWdvcnkgbWF0Y2hlcyAvZGVidWcvdHJhY2VmaWx0ZXIgb3B0aW9uLgotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gcHJpbnQKLQkgKiBAcGFyYW0gY2F0ZWdvcnkgY2F0ZWdvcnkgb2YgdGhlIG1lc3NhZ2UsIHRvIGJlIGNvbXBhcmVkIHdpdGggL2RlYnVnL3RyYWNlZmlsdGVyCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF90cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChpc1RyYWNpbmcoY2F0ZWdvcnkpKSB7Ci0JCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBQTFVHSU5fSUQsIElTdGF0dXMuT0ssIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybSBpcyBkZWJ1Z2dpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEZWJ1Z2dpbmcoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybS5pbkRlYnVnTW9kZSgpOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgaWYgY3VycmVudGx5IHRyYWNpbmcgYSBjYXRlZ29yeQotCSAqIEBwYXJhbSBjYXRlZ29yeQotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0cmFjaW5nIGNhdGVnb3J5LCBmYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcmFjaW5nKFN0cmluZyBjYXRlZ29yeSkgewotCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIHRyYWNlRmlsdGVyID0gUGxhdGZvcm0uZ2V0RGVidWdPcHRpb24oUExVR0lOX0lEICsgVFJBQ0VGSUxURVJfTE9DQVRJT04pOwotCQlpZiAodHJhY2VGaWx0ZXIgIT0gbnVsbCkgewotCQkJU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhY2VGaWx0ZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJU3RyaW5nIGNhdCA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7Ci0JCQkJaWYgKGNhdGVnb3J5LmVxdWFscyhjYXQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25EVEQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uRFRELmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyYzI0NjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25EVEQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMudmlld2VyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JQXV0b0VkaXRTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0RG91YmxlQ2xpY2tTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5yZWNvbmNpbGVyLklSZWNvbmNpbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGV4dC5JRFREUGFydGl0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkRURDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLmludGVybmFsLkxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXI7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkRURCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uRFREIGZDb25maWcgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBmRGlzcGxheUV4aXN0cyA9IHRydWU7Ci0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlciBmVmlld2VyID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCi0JcHVibGljIFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uRFREKCkgewotCQlzdXBlcigiVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25EVEQiKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmICghdGhpcy5pc1NldHVwKSB7Ci0JCQlzZXRVcFZpZXdlckNvbmZpZ3VyYXRpb24oKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgc2V0VXBWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCi0JCWlmIChEaXNwbGF5LmdldEN1cnJlbnQoKSAhPSBudWxsKSB7Ci0KLQkJCVNoZWxsIHNoZWxsID0gbnVsbDsKLQkJCUNvbXBvc2l0ZSBwYXJlbnQgPSBudWxsOwotCi0JCQlpZiAoUGxhdGZvcm1VSS5pc1dvcmtiZW5jaFJ1bm5pbmcoKSkgewotCQkJCXNoZWxsID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJc2hlbGwgPSBuZXcgU2hlbGwoRGlzcGxheS5nZXRDdXJyZW50KCkpOwotCQkJfQotCQkJcGFyZW50ID0gbmV3IENvbXBvc2l0ZShzaGVsbCwgU1dULk5PTkUpOwotCi0JCQkvLyBkdW1teSB2aWV3ZXIKLQkJCWZWaWV3ZXIgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXIocGFyZW50LCBudWxsLCBudWxsLCBmYWxzZSwgU1dULk5PTkUpOwotCQkJZkNvbmZpZyA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25EVEQoKTsKLQkJfQotCQllbHNlIHsKLQkJCWZEaXNwbGF5RXhpc3RzID0gZmFsc2U7Ci0JCQlMb2dnZXIubG9nKExvZ2dlci5JTkZPLCAiUmVtZW1iZXIsIHZpZXdlciBjb25maWd1cmF0aW9uIHRlc3RzIGFyZSBub3QgcnVuIGJlY2F1c2Ugd29ya2JlbmNoIGlzIG5vdCBvcGVuIChub3JtYWwgb24gYnVpbGQgbWFjaGluZSkiKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QXV0b0VkaXRTdHJhdGVnaWVzKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJQXV0b0VkaXRTdHJhdGVneVtdIHN0cmF0ZWdpZXMgPSBmQ29uZmlnLmdldEF1dG9FZGl0U3RyYXRlZ2llcyhmVmlld2VyLCBJRFREUGFydGl0aW9ucy5EVERfREVGQVVMVCk7Ci0JCWFzc2VydE5vdE51bGwoc3RyYXRlZ2llcyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBhdXRvIGVkaXQgc3RyYXRlZ2llcyIsIHN0cmF0ZWdpZXMubGVuZ3RoID4gMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCVN0cmluZ1tdIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoY29uZmlndXJlZENvbnRlbnRUeXBlcyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGNvbnRlbnQgdHlwZXMiLCBjb25maWd1cmVkQ29udGVudFR5cGVzLmxlbmd0aCA+IDEpOwotCX0KLQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEFzc2lzdGFudCgpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUNvbnRlbnRBc3Npc3RhbnQgY2EgPSBmQ29uZmlnLmdldENvbnRlbnRBc3Npc3RhbnQoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGlzIG5vIGNvbnRlbnQgYXNzaXN0YW50IiwgY2EpOwotCX0KLQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RG91YmxlQ2xpY2tTdHJhdGVneSgpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJSVRleHREb3VibGVDbGlja1N0cmF0ZWd5IHN0cmF0ZWd5ID0gZkNvbmZpZy5nZXREb3VibGVDbGlja1N0cmF0ZWd5KGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZiAoc3RyYXRlZ3kgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBkb3VibGUgY2xpY2sgc3RyYXRlZ2llcyIsIGZhbHNlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TGluZVN0eWxlUHJvdmlkZXJzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUxpbmVTdHlsZVByb3ZpZGVyIHByb3ZpZGVyc1tdID0gZkNvbmZpZy5nZXRMaW5lU3R5bGVQcm92aWRlcnMoZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmKHByb3ZpZGVycyAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGxpbmUgc3R5bGUgcHJvdmlkZXJzIiwgZmFsc2UpOwotCX0KLQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVjb25jaWxlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSVJlY29uY2lsZXIgciA9IGZDb25maWcuZ2V0UmVjb25jaWxlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiUmVjb25jaWxlciBpcyBudWxsIiwgcik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdERURC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdERURC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2M2NzIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3REVEQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMudmlld2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5KRmFjZVJlc291cmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5CdXN5SW5kaWNhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSU1lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yRFREOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uRFREOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JbmRleGVkUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLQotcHVibGljIGNsYXNzIFZpZXdlclRlc3REVEQgZXh0ZW5kcyBWaWV3UGFydCB7Ci0JLyoqCi0JICogU2V0cyB0aGUgdmlld2VyJ3MgaGlnaGxpZ2h0aW5nIHRleHQgcmFuZ2UgdG8gdGhlIHRleHQgcmFuZ2UgaW5kaWNhdGVkCi0JICogYnkgdGhlIHNlbGVjdGVkIE5vZGVzLgotCSAqLwotCXByb3RlY3RlZCBjbGFzcyBOb2RlUmFuZ2VTZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgewotCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgewotCQkJaWYgKCFldmVudC5nZXRTZWxlY3Rpb24oKS5pc0VtcHR5KCkgJiYgZXZlbnQuZ2V0U2VsZWN0aW9uKCkgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQuZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJSW5kZXhlZFJlZ2lvbiBzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCQkJCUluZGV4ZWRSZWdpb24gZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSBzZWxlY3Rpb24udG9BcnJheSgpW3NlbGVjdGlvbi5zaXplKCkgLSAxXTsKLQotCQkJCWlmIChzdGFydE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQlzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBzdGFydE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCQkJCWlmIChlbmROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIGVuZE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCi0JCQkJaW50IHN0YXJ0ID0gc3RhcnROb2RlLmdldFN0YXJ0T2Zmc2V0KCk7Ci0JCQkJaW50IGVuZCA9IGVuZE5vZGUuZ2V0RW5kT2Zmc2V0KCk7Ci0KLQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCWZTb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihzdGFydCwgZW5kIC0gc3RhcnQpOwotCQkJCWZTb3VyY2VWaWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShzdGFydCwgMCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIGNsYXNzIE51bWJlcklucHV0RGlhbG9nIGV4dGVuZHMgRGlhbG9nIHsKLQkJcHVibGljIFRleHQgbGVuZ3RoOwotCi0JCWludCBsZW5ndGhWYWx1ZTsKLQkJcHVibGljIFRleHQgc3RhcnQ7Ci0JCWludCBzdGFydFZhbHVlOwotCi0JCXB1YmxpYyBOdW1iZXJJbnB1dERpYWxvZyhTaGVsbCBzaGVsbCkgewotCQkJc3VwZXIoc2hlbGwpOwotCQl9Ci0KLQkJcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KSB7Ci0JCQlDb21wb3NpdGUgY29tcG9zaXRlID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOwotCQkJQ29tcG9zaXRlIGNvbnRhaW5lciA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLCBTV1QuTlVMTCk7Ci0JCQljb250YWluZXIuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0JCQljb250YWluZXIuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDIsIHRydWUpKTsKLQkJCXNldFNoZWxsU3R5bGUoZ2V0U2hlbGwoKS5nZXRTdHlsZSgpIHwgU1dULlJFU0laRSk7Ci0KLQkJCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKGNvbnRhaW5lciwgU1dULk5VTEwpOwotCQkJbGFiZWwuc2V0VGV4dCgiU3RhcnQiKTsKLQkJCWxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQlsYWJlbCA9IG5ldyBMYWJlbChjb250YWluZXIsIFNXVC5OVUxMKTsKLQkJCWxhYmVsLnNldFRleHQoIkxlbmd0aCIpOwotCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCXN0YXJ0ID0gbmV3IFRleHQoY29udGFpbmVyLCBTV1QuQk9SREVSKTsKLQkJCXN0YXJ0VmFsdWUgPSBmU291cmNlVmlld2VyLmdldFZpc2libGVSZWdpb24oKS5nZXRPZmZzZXQoKTsKLQkJCXN0YXJ0LnNldFRleHQoIiIgKyBzdGFydFZhbHVlKTsKLQkJCXN0YXJ0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQlsZW5ndGggPSBuZXcgVGV4dChjb250YWluZXIsIFNXVC5CT1JERVIpOwotCQkJbGVuZ3RoVmFsdWUgPSBmU291cmNlVmlld2VyLmdldFZpc2libGVSZWdpb24oKS5nZXRMZW5ndGgoKTsKLQkJCWxlbmd0aC5zZXRUZXh0KCIiICsgbGVuZ3RoVmFsdWUpOwotCQkJbGVuZ3RoLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQkvLyBzdGFydC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7Ci0JCQkvLyBwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKLQkJCS8vIGlmIChlLndpZGdldCA9PSBzdGFydCkgewotCQkJLy8gdHJ5IHsKLQkJCS8vIHN0YXJ0VmFsdWUgPSBJbnRlZ2VyLmRlY29kZShzdGFydC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQkvLyB9Ci0JCQkvLyBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkvLyBzdGFydFZhbHVlID0gMDsKLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0pOwotCQkJLy8gbGVuZ3RoLmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCS8vIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJLy8gaWYgKGUud2lkZ2V0ID09IGxlbmd0aCkgewotCQkJLy8gdHJ5IHsKLQkJCS8vIGxlbmd0aFZhbHVlID0gSW50ZWdlci5kZWNvZGUobGVuZ3RoLmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCS8vIH0KLQkJCS8vIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCS8vIGxlbmd0aFZhbHVlID0gMDsKLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0pOwotCi0JCQlyZXR1cm4gY29tcG9zaXRlOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZyNva1ByZXNzZWQoKQotCQkgKi8KLQkJcHJvdGVjdGVkIHZvaWQgb2tQcmVzc2VkKCkgewotCQkJdHJ5IHsKLQkJCQlzdGFydFZhbHVlID0gSW50ZWdlci5kZWNvZGUoc3RhcnQuZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJfQotCQkJY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJCXN0YXJ0VmFsdWUgPSAwOwotCQkJfQotCQkJdHJ5IHsKLQkJCQlsZW5ndGhWYWx1ZSA9IEludGVnZXIuZGVjb2RlKGxlbmd0aC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkJbGVuZ3RoVmFsdWUgPSAwOwotCQkJfQotCQkJc3VwZXIub2tQcmVzc2VkKCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX1ZJRVdFUl9DT05URU5UUyA9ICI8IURPQ1RZUEUgSFRNTCBQVUJMSUMgXCItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTlwiPlxuPEhUTUw+XG4JPEhFQUQ+XG4JCTxNRVRBIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTFcIj5cbgkJPFRJVExFPnBsYWNlIHRpdGxlIGhlcmU8L1RJVExFPlxuCTwvSEVBRD5cbgk8Qk9EWT5cbgkJcGxhY2UgY29udGVudCBoZXJlCVxuPHNjcmlwdD5cblwidGV4dFwiO1xuPC9TQ1JJUFQ+XG48L0JPRFk+XG48L0hUTUw+IjsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbiBmQ29uZmlnID0gbnVsbDsKLQlwcml2YXRlIElDb250ZW50T3V0bGluZVBhZ2UgZkNvbnRlbnRPdXRsaW5lUGFnZSA9IG51bGw7Ci0JcHJpdmF0ZSBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID0gbnVsbDsKLQotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXIgZlNvdXJjZVZpZXdlciA9IG51bGw7Ci0KLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIFNTRV9FRElUT1JfRk9OVCA9ICJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRleHRmb250IjsKLQotCXByb3RlY3RlZCB2b2lkIGFkZEFjdGlvbnMoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWdyKSB7Ci0JCWlmIChtZ3IgIT0gbnVsbCkgewotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJOZXcgSFRNTCI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJQnVzeUluZGljYXRvci5zaG93V2hpbGUoZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLCBuZXcgUnVubmFibGUoKSB7Ci0JCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCQkJc2V0dXBWaWV3ZXJGb3JOZXcoKTsKLQkJCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKHRydWUpOwotCQkJCQkJfQotCQkJCQl9KTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiQ2hhbmdlIFZpc2liaWxpdHkiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCU51bWJlcklucHV0RGlhbG9nIGRsZyA9IG5ldyBOdW1iZXJJbnB1dERpYWxvZyhmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpKTsKLQkJCQkJaW50IHByb2NlZWQgPSBkbGcub3BlbigpOwotCQkJCQlpZiAocHJvY2VlZCA9PSBXaW5kb3cuQ0FOQ0VMKQotCQkJCQkJcmV0dXJuOwotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oZGxnLnN0YXJ0VmFsdWUsIGRsZy5sZW5ndGhWYWx1ZSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlNob3cgQWxsIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQkJLy8gbm8gbG9uZ2VyIGFibGUgdG8gc2V0IGZJbnB1dCB0byBOVUxMCi0JCQkvLyBtZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkvLyBwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkvLyByZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCS8vIH0KLQkJCS8vCi0JCQkvLyBwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJLy8gcmV0dXJuICJTZXQgSW5wdXQgdG8gTlVMTCI7Ci0JCQkvLyB9Ci0JCQkvLyBwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkvLyBzdXBlci5ydW4oKTsKLQkJCS8vIHZpZXdlci5zZXRJbnB1dChudWxsKTsKLQkJCS8vIH0KLQkJCS8vIH0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGZyb20gQWN0aXZlIEVkaXRvciI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJSVRleHRFZGl0b3IgdGV4dEVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcigpOwotCQkJCQlpZiAodGV4dEVkaXRvciAhPSBudWxsKSB7Ci0JCQkJCQlzZXR1cFZpZXdlckZvckVkaXRvcih0ZXh0RWRpdG9yKTsKLQkJCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBhbmQgRm9sbG93IFNlbGVjdGlvbiI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgYW5kIEZvbGxvdyBTZWxlY3Rpb24gQXMgUmVhZE9ubHkiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCWZvbGxvd1NlbGVjdGlvbigpOwotCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKGZhbHNlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiU3RvcCBGb2xsb3dpbmcgU2VsZWN0aW9uIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJfQotCQkJfSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2NyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUlDb250cmlidXRpb25NYW5hZ2VyIG1nciA9IGdldFZpZXdTaXRlKCkuZ2V0QWN0aW9uQmFycygpLmdldE1lbnVNYW5hZ2VyKCk7Ci0JCWFkZEFjdGlvbnMobWdyKTsKLQotCQkvLyBjcmVhdGUgc291cmNlIHZpZXdlciAmIGl0cyBjb250ZW50IHR5cGUtc3BlY2lmaWMgdmlld2VyCi0JCS8vIGNvbmZpZ3VyYXRpb24KLQkJZlNvdXJjZVZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCWZDb25maWcgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uRFREKCk7Ci0KLQkJLy8gc2V0IHVwIHRoZSB2aWV3ZXIgd2l0aCBhIGRvY3VtZW50ICYgdmlld2VyIGNvbmZpZwotCQlzZXR1cFZpZXdlckZvck5ldygpOwotCi0JCXNldHVwVmlld2VyUHJlZmVyZW5jZXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2Rpc3Bvc2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsKLQkJZlNvdXJjZVZpZXdlci51bmNvbmZpZ3VyZSgpOwotCX0KLQotCS8qKgotCSAqIEhvb2tzIHVwIHRoZSB2aWV3ZXIgdG8gZm9sbG93IHRoZSBmU2VsZWN0aW9uIG1hZGUgaW4gdGhlIGFjdGl2ZSBlZGl0b3IKLQkgKi8KLQlwcml2YXRlIHZvaWQgZm9sbG93U2VsZWN0aW9uKCkgewotCQlJVGV4dEVkaXRvciBlZGl0b3IgPSBnZXRBY3RpdmVFZGl0b3IoKTsKLQkJaWYgKGVkaXRvciAhPSBudWxsKSB7Ci0JCQlzZXR1cFZpZXdlckZvckVkaXRvcihlZGl0b3IpOwotCQkJaWYgKGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID09IG51bGwpCi0JCQkJZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIgPSBuZXcgTm9kZVJhbmdlU2VsZWN0aW9uTGlzdGVuZXIoKTsKLQotCQkJZkNvbnRlbnRPdXRsaW5lUGFnZSA9ICgoSUNvbnRlbnRPdXRsaW5lUGFnZSkgZWRpdG9yLmdldEFkYXB0ZXIoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpOwotCQkJaWYgKGZDb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgewotCQkJCWZDb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyKTsKLQotCQkJCWlmICghZkNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKS5pc0VtcHR5KCkgJiYgZkNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0KLQkJCQkJT2JqZWN0W10gbm9kZXMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBmQ29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpKS50b0FycmF5KCk7Ci0JCQkJCUluZGV4ZWRSZWdpb24gc3RhcnROb2RlID0gKEluZGV4ZWRSZWdpb24pIG5vZGVzWzBdOwotCQkJCQlJbmRleGVkUmVnaW9uIGVuZE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgbm9kZXNbbm9kZXMubGVuZ3RoIC0gMV07Ci0KLQkJCQkJaW50IHN0YXJ0ID0gc3RhcnROb2RlLmdldFN0YXJ0T2Zmc2V0KCk7Ci0JCQkJCWludCBlbmQgPSBlbmROb2RlLmdldEVuZE9mZnNldCgpOwotCi0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihzdGFydCwgZW5kIC0gc3RhcnQpOwotCQkJCQlmU291cmNlVmlld2VyLnNldFNlbGVjdGVkUmFuZ2Uoc3RhcnQsIDApOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGN1cnJlbnQgYWN0aXZlIHRleHQgZWRpdG9yIGlmIHBvc3NpYmxlCi0JICogCi0JICogQHJldHVybiBJVGV4dEVkaXRvcgotCSAqLwotCXByaXZhdGUgSVRleHRFZGl0b3IgZ2V0QWN0aXZlRWRpdG9yKCkgewotCQlJVGV4dEVkaXRvciBlZGl0b3IgPSBudWxsOwotCQlJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJaWYgKGVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVGV4dEVkaXRvcikKLQkJCWVkaXRvciA9IChJVGV4dEVkaXRvcikgZWRpdG9yUGFydDsKLQkJaWYgKGVkaXRvciA9PSBudWxsICYmIGVkaXRvclBhcnQgIT0gbnVsbCkKLQkJCWVkaXRvciA9IChJVGV4dEVkaXRvcikgZWRpdG9yUGFydC5nZXRBZGFwdGVyKElUZXh0RWRpdG9yLmNsYXNzKTsKLQkJcmV0dXJuIGVkaXRvcjsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklWaWV3UGFydCNpbml0KElWaWV3U2l0ZSwgSU1lbWVudG8pCi0JICovCi0JcHVibGljIHZvaWQgaW5pdChJVmlld1NpdGUgc2l0ZSwgSU1lbWVudG8gbWVtZW50bykgdGhyb3dzIFBhcnRJbml0RXhjZXB0aW9uIHsKLQkJc3VwZXIuaW5pdChzaXRlLCBtZW1lbnRvKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I3NldEZvY3VzKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKLQkJaWYgKGZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpICE9IG51bGwgJiYgIWZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkKLQkJCWZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLnNldEZvY3VzKCk7Ci0JfQotCi0JLyoqCi0JICogU2V0cyB1cCB0aGUgdmlld2VyIHdpdGggdGhlIHNhbWUgZG9jdW1lbnQvZklucHV0IGFzIHRoZSBnaXZlbiBlZGl0b3IKLQkgKiAKLQkgKiBAcGFyYW0gSVRleHRFZGl0b3IKLQkgKiAgICAgICAgICAgIGVkaXRvciAtIHRoZSBlZGl0b3IgdG8gdXNlICpjYW5ub3QgdG8gYmUgbnVsbCoKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJGb3JFZGl0b3IoSVRleHRFZGl0b3IgZWRpdG9yKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsgLy8gaWYgd2FzIGZvbGxvd2luZyBmU2VsZWN0aW9uLCBzdG9wCi0JCUlEb2N1bWVudCBkb2MgPSBlZGl0b3IuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldERvY3VtZW50KGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpKTsKLQkJZlNvdXJjZVZpZXdlci5zZXREb2N1bWVudChkb2MpOwotCi0JCS8vIG5lZWQgdG8gcmVjb25maWd1cmUgYWZ0ZXIgc2V0IGRvY3VtZW50IGp1c3Qgc28gaGlnaGxpZ2h0ZXIgd29ya3MKLQkJZlNvdXJjZVZpZXdlci5jb25maWd1cmUobmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkRURCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdXAgc291cmNlIHZpZXdlciB3aXRoIGEgbmV3IGRvY3VtZW50ICYgY29uZmlndXJlIGl0Ci0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwVmlld2VyRm9yTmV3KCkgewotCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7IC8vIGlmIHdhcyBmb2xsb3dpbmcgZlNlbGVjdGlvbiwgc3RvcAotCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSURvY3VtZW50IGRvYyA9IG1vZGVsTWFuYWdlci5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoQ29udGVudFR5cGVJZEZvckRURC5Db250ZW50VHlwZUlEX0RURCk7Ci0JCWRvYy5zZXQoREVGQVVMVF9WSUVXRVJfQ09OVEVOVFMpOwotCi0JCWZTb3VyY2VWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jKTsKLQkJLy8gbmVlZCB0byByZWNvbmZpZ3VyZSBhZnRlciBzZXQgZG9jdW1lbnQganVzdCBzbyBoaWdobGlnaHRlciB3b3JrcwotCQlmU291cmNlVmlld2VyLmNvbmZpZ3VyZShmQ29uZmlnKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdXAgc291cmNlIHZpZXdlciB3aXRoIGFueSBhZGRpdGlvbmFsIHByZWZlcmVuY2VzIGl0IHNob3VsZCBoYXZlIEV4OgotCSAqIGZvbnQsIHRhYiB3aWR0aAotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cFZpZXdlclByZWZlcmVuY2VzKCkgewotCQlmU291cmNlVmlld2VyLmdldFRleHRXaWRnZXQoKS5zZXRGb250KEpGYWNlUmVzb3VyY2VzLmdldEZvbnQoU1NFX0VESVRPUl9GT05UKSk7Ci0JfQotCi0JLyoqCi0JICogQ2Vhc2UgZm9sbG93aW5nIHRoZSBmU2VsZWN0aW9uIG1hZGUgaW4gdGhlIGVkaXRvcgotCSAqLwotCXByaXZhdGUgdm9pZCBzdG9wRm9sbG93U2VsZWN0aW9uKCkgewotCQlpZiAoZkNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7Ci0JCQlmQ29udGVudE91dGxpbmVQYWdlLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lcik7Ci0JCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJZkNvbnRlbnRPdXRsaW5lUGFnZSA9IG51bGw7Ci0JCX0KLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUxOTI1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0Ci0JbmFtZT0idGVzdHN1aXRlIgotCWRlZmF1bHQ9InJ1biIKLQliYXNlZGlyPSIuIj4KLQk8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotCTwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0JPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIvPiAtLT4KLQotCTxlY2hvIG1lc3NhZ2U9ImJhc2VkaXIgJHtiYXNlZGlyfSIgLz4KLQk8ZWNobyBtZXNzYWdlPSJlY2xpcHNlIHBsYWNlICR7ZWNsaXBzZS1ob21lfSIgLz4KLQotCTwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLQk8cHJvcGVydHkKLQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzIiAvPgotCTxwcm9wZXJ0eQotCQluYW1lPSJsaWJyYXJ5LWZpbGUiCi0JCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLQkJPHRzdGFtcCAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQKLQkJCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLQkJCQlpbmNsdWRlcz0ib3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy4qeG1sIiAvPgotCQk8L2RlbGV0ZT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0JPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0JCTxwcm9wZXJ0eQotCQkJbmFtZT0id3N0LWZvbGRlciIKLQkJCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd3N0X2ZvbGRlciIgLz4KLQkJPGRlbGV0ZQotCQkJZGlyPSIke3dvcmtzcGFjZX0iCi0JCQlxdWlldD0idHJ1ZSIgLz4KLQkJPGFudAotCQkJdGFyZ2V0PSJ1aS10ZXN0IgotCQkJYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iZGF0YS1kaXIiCi0JCQkJdmFsdWU9IiR7d3N0LWZvbGRlcn0iIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJCQl2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJjbGFzc25hbWUiCi0JCQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuRFREVUlUZXN0U3VpdGUiIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJwbHVnaW4tcGF0aCIKLQkJCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0JCTwvYW50PgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0JPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotCTwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLQk8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotCQk8IS0tPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiLz4tLT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLQk8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0JPHRhcmdldAotCQluYW1lPSJydW4iCi0JCWRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0JCTxhbnQKLQkJCXRhcmdldD0iY29sbGVjdCIKLQkJCWFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImluY2x1ZGVzIgotCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLip4bWwiIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJvdXRwdXQtZmlsZSIKLQkJCQl2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotCQk8L2FudD4KLQkJPCEtLQkJPGVtYWlsUmVzdWx0cyByZXN1bHRzRmlsZT0iJHtidWlsZC1yZXN1bHRzLWhvbWV9LyR7cGx1Z2luLW5hbWV9LnhtbCIgYWRkcmVzc2xpc3Q9Im5pdGluZEB1cy5pYm0uY29tLGRhdmlkX3dpbGxpYW1zQHVzLmlibS5jb20iIC8+IC0tPgotCTwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTFjOGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkwYTcyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLWJpbgotYmluLnByb2plY3QKLWJ1aWxkLnhtbAotZGV2LnByb3BlcnRpZXMKLWh0bWxjb3JldGVzdHMuamFyCi10ZW1wLmZvbGRlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YmIyNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY5NTg0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjM3OjIxIEVEVCAyMDA2DQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTENCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3INCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3INCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3INCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3INCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyYWM2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTM2OGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzI0OTU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjA1OjI5IEVEVCAyMDA2Ci1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjA0ZGU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMC4wCi1CdW5kbGUtQ2xhc3NQYXRoOiBodG1sY29yZXRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5IVE1MQ29yZVRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLAotIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMubWlzYywKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1vZGVsLAotIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLAotIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLmNzcywKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnRleHQsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy50ZXh0LnRlc3RmaWxlcy5odG1sLAotIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHMKLVJlcXVpcmUtQnVuZGxlOiBvcmcuanVuaXQsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUsCi0gY29tLmlibS5pY3UsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkF0dHJUZXN0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQXR0clRlc3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjdkYjE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQXR0clRlc3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQXR0clRlc3QKLVNvdXJjZSA6Ci08YSBocmVmPSI8JT1jJT4iPmE8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDldICg8YSBocmVmPSIpCi1bOSwgMTBdICg8KQotWzEwLCAxMl0gKCU9KQotWzEyLCAxM10gKGMpCi1bMTMsIDE0XSAoJSkKLVsxNCwgMThdICg+Ij5hKQotWzE4LCAyMl0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgOV0gKDxhIGhyZWYmIzYxOyIpQFsxOCwgMjJdICg8L2E+KQotLS0tLSN0ZXh0KDwlJiM2MTtjJT4iPmEpQHtbOSwgMTBdICg8KSxbMTAsIDEyXSAoJSYjNjE7KSxbMTIsIDEzXSAoYyksWzEzLCAxNF0gKCUpLFsxNCwgMThdICg+Ij5hKX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5BdHRyVGVzdDIudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5BdHRyVGVzdDIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTYyYzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQXR0clRlc3QyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkF0dHJUZXN0MgotU291cmNlIDoKLTxhIGI9ImMiIGQ9ImUiPmY8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDE1XSAoPGEgYj0iYyIgZD0iZSI+KQotWzE1LCAxNl0gKGYpCi1bMTYsIDIwXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAxNV0gKDxhIGImIzYxOyJjIiBkJiM2MTsiZSI+KUBbMTYsIDIwXSAoPC9hPikKLS0tLS0jdGV4dChmKUBbMTUsIDE2XSAoZikKLQotYi5uYW1lPXg6YgotYi52YWx1ZT1jCi1hIGI9bnVsbAotYSB4OmI9YwotU291cmNlIDoKLTxhIHg6Yj0iYyIgZD0iZSI+ZjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMTddICg8YSB4OmI9ImMiIGQ9ImUiPikKLVsxNywgMThdIChmKQotWzE4LCAyMl0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgMTddICg8YSB4OmImIzYxOyJjIiBkJiM2MTsiZSI+KUBbMTgsIDIyXSAoPC9hPikKLS0tLS0jdGV4dChmKUBbMTcsIDE4XSAoZikKLQotU291cmNlIDoKLTxhIHg6Yj0iYyIgeTpkPSJlIj5mPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxOV0gKDxhIHg6Yj0iYyIgeTpkPSJlIj4pCi1bMTksIDIwXSAoZikKLVsyMCwgMjRdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDE5XSAoPGEgeDpiJiM2MTsiYyIgeTpkJiM2MTsiZSI+KUBbMjAsIDI0XSAoPC9hPikKLS0tLS0jdGV4dChmKUBbMTksIDIwXSAoZikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkZWI1NzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QKLVNvdXJjZSA6Ci08YT48IVtDREFUQVtjb250ZW50T2ZDREFUQVNlY3Rpb25dXT48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgMzZdICg8IVtDREFUQVtjb250ZW50T2ZDREFUQVNlY3Rpb25dXT4pCi1bMzYsIDQwXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMzYsIDQwXSAoPC9hPikKLS0tLS0jY2RhdGEtc2VjdGlvbihjb250ZW50T2ZDREFUQVNlY3Rpb24pQFszLCAzNl0gKDwhW0NEQVRBW2NvbnRlbnRPZkNEQVRBU2VjdGlvbl1dPikKLQotY29udGVudE9mQ0RBVEFTZWN0aW9uCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QyLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdDIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWY4NmFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdDIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdDIKLVNvdXJjZSA6Ci08YT48IVtDREFUQVtjb250ZW50T2ZDREFUQVNlY3Rpb25dXT48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgMzZdICg8IVtDREFUQVtjb250ZW50T2ZDREFUQVNlY3Rpb25dXT4pCi1bMzYsIDQwXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMzYsIDQwXSAoPC9hPikKLS0tLS0jY2RhdGEtc2VjdGlvbihjb250ZW50T2ZDREFUQVNlY3Rpb24pQFszLCAzNl0gKDwhW0NEQVRBW2NvbnRlbnRPZkNEQVRBU2VjdGlvbl1dPikKLQotY29udGVudE9mQ0RBVEFTZWN0aW9uCi1Tb3VyY2UgOgotPGE+PCFbQ0RBVEFbbmV3IGNvbnRlbnRdXT48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgMjZdICg8IVtDREFUQVtuZXcgY29udGVudF1dPikKLVsyNiwgMzBdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsyNiwgMzBdICg8L2E+KQotLS0tLSNjZGF0YS1zZWN0aW9uKG5ldyBjb250ZW50KUBbMywgMjZdICg8IVtDREFUQVtuZXcgY29udGVudF1dPikKLQotbmV3IGNvbnRlbnQKLVNvdXJjZSA6Ci08YT48IVtDREFUQVtuZXcgY29udGVudF1dPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCAyNl0gKDwhW0NEQVRBW25ldyBjb250ZW50XV0+KQotWzI2LCAzMF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzI2LCAzMF0gKDwvYT4pCi0tLS0tI2NkYXRhLXNlY3Rpb24obmV3IGNvbnRlbnQpQFszLCAyNl0gKDwhW0NEQVRBW25ldyBjb250ZW50XV0+KQotCi1uZXcgY29udGVudApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0My50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdjYzEyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QzCi1Tb3VyY2UgOgotPGE+PCFbQ0RBVEFbY29udGVudE9mQ0RBVEFTZWN0aW9uXV0+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDM2XSAoPCFbQ0RBVEFbY29udGVudE9mQ0RBVEFTZWN0aW9uXV0+KQotWzM2LCA0MF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzM2LCA0MF0gKDwvYT4pCi0tLS0tI2NkYXRhLXNlY3Rpb24oY29udGVudE9mQ0RBVEFTZWN0aW9uKUBbMywgMzZdICg8IVtDREFUQVtjb250ZW50T2ZDREFUQVNlY3Rpb25dXT4pCi0KLWNvbnRlbnRPZkNEQVRBU2VjdGlvbgotU291cmNlIDoKLTxhPjwhW0NEQVRBW25ldyA8IGNvbnRlbnRdXT48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgMjhdICg8IVtDREFUQVtuZXcgPCBjb250ZW50XV0+KQotWzI4LCAzMl0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzI4LCAzMl0gKDwvYT4pCi0tLS0tI2NkYXRhLXNlY3Rpb24obmV3IDwgY29udGVudClAWzMsIDI4XSAoPCFbQ0RBVEFbbmV3IDwgY29udGVudF1dPikKLQotbmV3IDwgY29udGVudAotU291cmNlIDoKLTxhPjwhW0NEQVRBW25ldyA+IGNvbnRlbnRdXT48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgMjhdICg8IVtDREFUQVtuZXcgPiBjb250ZW50XV0+KQotWzI4LCAzMl0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzI4LCAzMl0gKDwvYT4pCi0tLS0tI2NkYXRhLXNlY3Rpb24obmV3ID4gY29udGVudClAWzMsIDI4XSAoPCFbQ0RBVEFbbmV3ID4gY29udGVudF1dPikKLQotbmV3ID4gY29udGVudApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5Eb2NUeXBlVGVzdC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkRvY1R5cGVUZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNjYTk3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkRvY1R5cGVUZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkRvY1R5cGVUZXN0Ci1Tb3VyY2UgOgotPCFET0NUWVBFIEhUTUw+PGh0bWw+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxNV0gKDwhRE9DVFlQRSBIVE1MPikKLVsxNSwgMjFdICg8aHRtbD4pCi1bMjEsIDI4XSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tSFRNTChudWxsKShudWxsKUBbMCwgMTVdICg8IURPQ1RZUEUgSFRNTD4pCi0tLWh0bWwvaHRtbEBbMTUsIDIxXSAoPGh0bWw+KUBbMjEsIDI4XSAoPC9odG1sPikKLQotU291cmNlIDoKLTwhRE9DVFlQRSBIVE1MIFNZU1RFTSAic3l0ZW0iPjxodG1sPjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMzBdICg8IURPQ1RZUEUgSFRNTCBTWVNURU0gInN5dGVtIj4pCi1bMzAsIDM2XSAoPGh0bWw+KQotWzM2LCA0M10gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLUhUTUwobnVsbCkoc3l0ZW0pQFswLCAzMF0gKDwhRE9DVFlQRSBIVE1MIFNZU1RFTSAic3l0ZW0iPikKLS0taHRtbC9odG1sQFszMCwgMzZdICg8aHRtbD4pQFszNiwgNDNdICg8L2h0bWw+KQotCi1Tb3VyY2UgOgotPCFET0NUWVBFIEhUTUwgUFVCTElDICJwdWJsaWMiICJzeXRlbSI+PGh0bWw+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzOV0gKDwhRE9DVFlQRSBIVE1MIFBVQkxJQyAicHVibGljIiAic3l0ZW0iPikKLVszOSwgNDVdICg8aHRtbD4pCi1bNDUsIDUyXSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tSFRNTChwdWJsaWMpKHN5dGVtKUBbMCwgMzldICg8IURPQ1RZUEUgSFRNTCBQVUJMSUMgInB1YmxpYyIgInN5dGVtIj4pCi0tLWh0bWwvaHRtbEBbMzksIDQ1XSAoPGh0bWw+KUBbNDUsIDUyXSAoPC9odG1sPikKLQotU291cmNlIDoKLSA8IURPQ1RZUEUgSFRNTCBQVUJMSUMgInB1YmxpYyIgInN5dGVtIj48aHRtbD48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDFdICggKQotWzEsIDQwXSAoPCFET0NUWVBFIEhUTUwgUFVCTElDICJwdWJsaWMiICJzeXRlbSI+KQotWzQwLCA0Nl0gKDxodG1sPikKLVs0NiwgNTNdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS0jdGV4dCggKUBbMCwgMV0gKCApCi0tLUhUTUwocHVibGljKShzeXRlbSlAWzEsIDQwXSAoPCFET0NUWVBFIEhUTUwgUFVCTElDICJwdWJsaWMiICJzeXRlbSI+KQotLS1odG1sL2h0bWxAWzQwLCA0Nl0gKDxodG1sPilAWzQ2LCA1M10gKDwvaHRtbD4pCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmY2Q4MjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdAotU291cmNlIDoKLTxhPjxiIGU9ImYiIGM9ImQiPjxnIC8+PGggLz48L2I+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDE4XSAoPGIgZT0iZiIgYz0iZCI+KQotWzE4LCAyM10gKDxnIC8+KQotWzIzLCAyOF0gKDxoIC8+KQotWzI4LCAzMl0gKDwvYj4pCi1bMzIsIDM2XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMzIsIDM2XSAoPC9hPikKLS0tLS1iL2JAWzMsIDE4XSAoPGIgZSYjNjE7ImYiIGMmIzYxOyJkIj4pQFsyOCwgMzJdICg8L2I+KQotLS0tLS0tZy9AWzE4LCAyM10gKDxnIC8+KQotLS0tLS0taC9AWzIzLCAyOF0gKDxoIC8+KQotCi1Tb3VyY2UgOgotPGE+PGkgZT0iZiIgYz0iZCI+PGcgLz48aCAvPjwvaT48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgMThdICg8aSBlPSJmIiBjPSJkIj4pCi1bMTgsIDIzXSAoPGcgLz4pCi1bMjMsIDI4XSAoPGggLz4pCi1bMjgsIDMyXSAoPC9pPikKLVszMiwgMzZdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFszMiwgMzZdICg8L2E+KQotLS0tLWkvaUBbMywgMThdICg8aSBlJiM2MTsiZiIgYyYjNjE7ImQiPilAWzI4LCAzMl0gKDwvaT4pCi0tLS0tLS1nL0BbMTgsIDIzXSAoPGcgLz4pCi0tLS0tLS1oL0BbMjMsIDI4XSAoPGggLz4pCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QyLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ0NjA5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVsZW1lbnRUZXN0Mi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdDIKLVNvdXJjZSA6Ci08YT48Yj5jPC9iPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA2XSAoPGI+KQotWzYsIDddIChjKQotWzcsIDExXSAoPC9iPikKLVsxMSwgMTVdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsxMSwgMTVdICg8L2E+KQotLS0tLWIvYkBbMywgNl0gKDxiPilAWzcsIDExXSAoPC9iPikKLS0tLS0tLSN0ZXh0KGMpQFs2LCA3XSAoYykKLQotYS50YWdOYW1lPXg6YQotU291cmNlIDoKLTx4OmE+PGI+YzwvYj48L3g6YT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNV0gKDx4OmE+KQotWzUsIDhdICg8Yj4pCi1bOCwgOV0gKGMpCi1bOSwgMTNdICg8L2I+KQotWzEzLCAxOV0gKDwveDphPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0teDphL3g6YUBbMCwgNV0gKDx4OmE+KUBbMTMsIDE5XSAoPC94OmE+KQotLS0tLWIvYkBbNSwgOF0gKDxiPilAWzksIDEzXSAoPC9iPikKLS0tLS0tLSN0ZXh0KGMpQFs4LCA5XSAoYykKLQotU291cmNlIDoKLTx4OmE+PHk6Yj5jPC95OmI+PC94OmE+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDVdICg8eDphPikKLVs1LCAxMF0gKDx5OmI+KQotWzEwLCAxMV0gKGMpCi1bMTEsIDE3XSAoPC95OmI+KQotWzE3LCAyM10gKDwveDphPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0teDphL3g6YUBbMCwgNV0gKDx4OmE+KUBbMTcsIDIzXSAoPC94OmE+KQotLS0tLXk6Yi95OmJAWzUsIDEwXSAoPHk6Yj4pQFsxMSwgMTddICg8L3k6Yj4pCi0tLS0tLS0jdGV4dChjKUBbMTAsIDExXSAoYykKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdDMudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdDMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWRhYmY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVsZW1lbnRUZXN0MwotU291cmNlIDoKLTx4OmE+PGI+YzwvYj48L3g6YT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNV0gKDx4OmE+KQotWzUsIDhdICg8Yj4pCi1bOCwgOV0gKGMpCi1bOSwgMTNdICg8L2I+KQotWzEzLCAxOV0gKDwveDphPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0teDphL3g6YUBbMCwgNV0gKDx4OmE+KUBbMTMsIDE5XSAoPC94OmE+KQotLS0tLWIvYkBbNSwgOF0gKDxiPilAWzksIDEzXSAoPC9iPikKLS0tLS0tLSN0ZXh0KGMpQFs4LCA5XSAoYykKLQotYS50YWdOYW1lPWEKLVNvdXJjZSA6Ci08YT48Yj5jPC9iPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA2XSAoPGI+KQotWzYsIDddIChjKQotWzcsIDExXSAoPC9iPikKLVsxMSwgMTVdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsxMSwgMTVdICg8L2E+KQotLS0tLWIvYkBbMywgNl0gKDxiPilAWzcsIDExXSAoPC9iPikKLS0tLS0tLSN0ZXh0KGMpQFs2LCA3XSAoYykKLQotYS50YWdOYW1lPXk6YQotU291cmNlIDoKLTx5OmE+PGI+YzwvYj48L3k6YT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNV0gKDx5OmE+KQotWzUsIDhdICg8Yj4pCi1bOCwgOV0gKGMpCi1bOSwgMTNdICg8L2I+KQotWzEzLCAxOV0gKDwveTphPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0teTphL3k6YUBbMCwgNV0gKDx5OmE+KUBbMTMsIDE5XSAoPC95OmE+KQotLS0tLWIvYkBbNSwgOF0gKDxiPilAWzksIDEzXSAoPC9iPikKLS0tLS0tLSN0ZXh0KGMpQFs4LCA5XSAoYykKLQotU291cmNlIDoKLTx5OmE+PGI+YzwvYj48L3k6YT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNV0gKDx5OmE+KQotWzUsIDhdICg8Yj4pCi1bOCwgOV0gKGMpCi1bOSwgMTNdICg8L2I+KQotWzEzLCAxOV0gKDwveTphPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0teTphL3k6YUBbMCwgNV0gKDx5OmE+KUBbMTMsIDE5XSAoPC95OmE+KQotLS0tLWIvYkBbNSwgOF0gKDxiPilAWzksIDEzXSAoPC9iPikKLS0tLS0tLSN0ZXh0KGMpQFs4LCA5XSAoYykKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlY2FmZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVtcHR5VGV4dFRlc3QKLVNvdXJjZSA6Ci08cD5hPGJyPjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA4XSAoPGJyPikKLVs4LCAxMl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzgsIDEyXSAoPC9wPikKLS0tLS0jdGV4dChhKUBbMywgNF0gKGEpCi0tLS0tYnJAWzQsIDhdICg8YnI+KQotLS0tLSN0ZXh0KCkKLQotU291cmNlIDoKLTxwPmE8YnI+PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDRdIChhKQotWzQsIDhdICg8YnI+KQotWzgsIDEyXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbOCwgMTJdICg8L3A+KQotLS0tLSN0ZXh0KGEpQFszLCA0XSAoYSkKLS0tLS1ickBbNCwgOF0gKDxicj4pCi0tLS0tI3RleHQoKQotLS0tLSN0ZXh0KCkKLQotU291cmNlIDoKLTxwPmE8YnI+YjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA4XSAoPGJyPikKLVs4LCA5XSAoYikKLVs5LCAxM10gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzksIDEzXSAoPC9wPikKLS0tLS0jdGV4dChhKUBbMywgNF0gKGEpCi0tLS0tYnJAWzQsIDhdICg8YnI+KQotLS0tLSN0ZXh0KGIpQFs4LCA5XSAoYikKLS0tLS0jdGV4dCgpCi0KLVNvdXJjZSA6Ci08cD5hPGJyPmI8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOF0gKDxicj4pCi1bOCwgOV0gKGIpCi1bOSwgMTNdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs5LCAxM10gKDwvcD4pCi0tLS0tI3RleHQoYSlAWzMsIDRdIChhKQotLS0tLWJyQFs0LCA4XSAoPGJyPikKLS0tLS0jdGV4dChiKUBbOCwgOV0gKGIpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDIudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0Mi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzODZlZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0Mi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0MgotU291cmNlIDoKLTxwPjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA3XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMywgN10gKDwvcD4pCi0tLS0tI3RleHQoKQotCi1Tb3VyY2UgOgotPHA+YTwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA4XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbNCwgOF0gKDwvcD4pCi0tLS0tI3RleHQoYSlAWzMsIDRdIChhKQotCi1Tb3VyY2UgOgotPHA+PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDddICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFszLCA3XSAoPC9wPikKLS0tLS0jdGV4dCgpCi0KLVNvdXJjZSA6Ci08cD48Yj48L2I+PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDZdICg8Yj4pCi1bNiwgMTBdICg8L2I+KQotWzEwLCAxNF0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEwLCAxNF0gKDwvcD4pCi0tLS0tYi9iQFszLCA2XSAoPGI+KUBbNiwgMTBdICg8L2I+KQotLS0tLS0tI3RleHQoKQotCi1Tb3VyY2UgOgotPHA+PGI+YTwvYj48L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNl0gKDxiPikKLVs2LCA3XSAoYSkKLVs3LCAxMV0gKDwvYj4pCi1bMTEsIDE1XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTEsIDE1XSAoPC9wPikKLS0tLS1iL2JAWzMsIDZdICg8Yj4pQFs3LCAxMV0gKDwvYj4pCi0tLS0tLS0jdGV4dChhKUBbNiwgN10gKGEpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDMudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0My50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNjVlZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0My50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0MwotU291cmNlIDoKLQotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoKQotCi1Tb3VyY2UgOgotPGE+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDddICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFszLCA3XSAoPC9hPikKLS0tI3RleHQoKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE3MmY4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdAotU291cmNlIDoKLTxwPjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA3XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMywgN10gKDwvcD4pCi0KLVNvdXJjZSA6Ci08cD4mYW1wO2d0OzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA4XSAoJmFtcDspCi1bOCwgMTFdIChndDspCi1bMTEsIDE1XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTEsIDE1XSAoPC9wPikKLS0tLS0jdGV4dCgmZ3Q7KUB7WzMsIDhdICgmYW1wOyksWzgsIDExXSAoZ3Q7KX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0Mi50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE3MmVmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QyCi1Tb3VyY2UgOgotPHA+YTwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA4XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbNCwgOF0gKDwvcD4pCi0tLS0tI3RleHQoYSlAWzMsIDRdIChhKQotCi1Tb3VyY2UgOgotPHA+YSZhbXA7Z3Q7PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDRdIChhKQotWzQsIDldICgmYW1wOykKLVs5LCAxMl0gKGd0OykKLVsxMiwgMTZdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMiwgMTZdICg8L3A+KQotLS0tLSN0ZXh0KGEmZ3Q7KUB7WzMsIDRdIChhKSxbNCwgOV0gKCZhbXA7KSxbOSwgMTJdIChndDspfQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QzLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmNiM2M5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDMKLVNvdXJjZSA6Ci08cD5hPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDRdIChhKQotWzQsIDhdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs0LCA4XSAoPC9wPikKLS0tLS0jdGV4dChhKUBbMywgNF0gKGEpCi0KLVNvdXJjZSA6Ci08cD5hYjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoYWIpCi1bNSwgOV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzUsIDldICg8L3A+KQotLS0tLSN0ZXh0KGFiKUBbMywgNV0gKGFiKQotCi1Tb3VyY2UgOgotPHA+YWImYW1wOzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoYWIpCi1bNSwgMTBdICgmYW1wOykKLVsxMCwgMTRdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMCwgMTRdICg8L3A+KQotLS0tLSN0ZXh0KGFiJilAe1szLCA1XSAoYWIpLFs1LCAxMF0gKCZhbXA7KX0KLQotU291cmNlIDoKLTxwPmFiJmFtcDtjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChhYikKLVs1LCAxMF0gKCZhbXA7KQotWzEwLCAxMV0gKGMpCi1bMTEsIDE1XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTEsIDE1XSAoPC9wPikKLS0tLS0jdGV4dChhYiZjKUB7WzMsIDVdIChhYiksWzUsIDEwXSAoJmFtcDspLFsxMCwgMTFdIChjKX0KLQotU291cmNlIDoKLTxwPmRhYiZhbXA7YzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA2XSAoZGFiKQotWzYsIDExXSAoJmFtcDspCi1bMTEsIDEyXSAoYykKLVsxMiwgMTZdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMiwgMTZdICg8L3A+KQotLS0tLSN0ZXh0KGRhYiZjKUB7WzMsIDZdIChkYWIpLFs2LCAxMV0gKCZhbXA7KSxbMTEsIDEyXSAoYyl9Ci0KLVNvdXJjZSA6Ci08cD5kYWImYW1wO2NlPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDZdIChkYWIpCi1bNiwgMTFdICgmYW1wOykKLVsxMSwgMTNdIChjZSkKLVsxMywgMTddICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMywgMTddICg8L3A+KQotLS0tLSN0ZXh0KGRhYiZjZSlAe1szLCA2XSAoZGFiKSxbNiwgMTFdICgmYW1wOyksWzExLCAxM10gKGNlKX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNlODBmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q0Ci1Tb3VyY2UgOgotPHA+YSZhbXA7YjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA5XSAoJmFtcDspCi1bOSwgMTBdIChiKQotWzEwLCAxNF0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEwLCAxNF0gKDwvcD4pCi0tLS0tI3RleHQoYSZiKUB7WzMsIDRdIChhKSxbNCwgOV0gKCZhbXA7KSxbOSwgMTBdIChiKX0KLQotU291cmNlIDoKLTxwPmEmYW1wO2I8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOV0gKCZhbXA7KQotWzksIDEwXSAoYikKLVsxMCwgMTRdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMCwgMTRdICg8L3A+KQotLS0tLSN0ZXh0KCkKLS0tLS0jdGV4dChhJmIpQHtbMywgNF0gKGEpLFs0LCA5XSAoJmFtcDspLFs5LCAxMF0gKGIpfQotCi1Tb3VyY2UgOgotPHA+Y2EmYW1wO2I8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGNhKQotWzUsIDEwXSAoJmFtcDspCi1bMTAsIDExXSAoYikKLVsxMSwgMTVdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMSwgMTVdICg8L3A+KQotLS0tLSN0ZXh0KGMpQFszLDRdKFszLCA1XSAoY2EpKQotLS0tLSN0ZXh0KGEmYilAe1s0LDVdKFszLCA1XSAoY2EpKSxbNSwgMTBdICgmYW1wOyksWzEwLCAxMV0gKGIpfQotCi1Tb3VyY2UgOgotPHA+Y2EmYW1wO2JhJmFtcDtiPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChjYSkKLVs1LCAxMF0gKCZhbXA7KQotWzEwLCAxMl0gKGJhKQotWzEyLCAxN10gKCZhbXA7KQotWzE3LCAxOF0gKGIpCi1bMTgsIDIyXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTgsIDIyXSAoPC9wPikKLS0tLS0jdGV4dChjYSZiKUB7WzMsIDVdIChjYSksWzUsIDEwXSAoJmFtcDspLFsxMCwxMV0oWzEwLCAxMl0gKGJhKSl9Ci0tLS0tI3RleHQoYSZiKUB7WzExLDEyXShbMTAsIDEyXSAoYmEpKSxbMTIsIDE3XSAoJmFtcDspLFsxNywgMThdIChiKX0KLQotU291cmNlIDoKLTxwPmNhJmFtcDtiPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChjYSkKLVs1LCAxMF0gKCZhbXA7KQotWzEwLCAxMV0gKGIpCi1bMTEsIDE1XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTEsIDE1XSAoPC9wPikKLS0tLS0jdGV4dChjYSZiKUB7WzMsIDVdIChjYSksWzUsIDEwXSAoJmFtcDspLFsxMCwgMTFdIChiKX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NS50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q1LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhlYjhjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q1LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q1Ci1Tb3VyY2UgOgotPHA+YSZhbXA7YjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA5XSAoJmFtcDspCi1bOSwgMTBdIChiKQotWzEwLCAxNF0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEwLCAxNF0gKDwvcD4pCi0tLS0tI3RleHQoYSZiKUB7WzMsIDRdIChhKSxbNCwgOV0gKCZhbXA7KSxbOSwgMTBdIChiKX0KLQotU291cmNlIDoKLTxwPmEmYW1wO2JhJmFtcDtiPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDRdIChhKQotWzQsIDldICgmYW1wOykKLVs5LCAxMV0gKGJhKQotWzExLCAxNl0gKCZhbXA7KQotWzE2LCAxN10gKGIpCi1bMTcsIDIxXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTcsIDIxXSAoPC9wPikKLS0tLS0jdGV4dChhJmIpQHtbMywgNF0gKGEpLFs0LCA5XSAoJmFtcDspLFs5LDEwXShbOSwgMTFdIChiYSkpfQotLS0tLSN0ZXh0KGEmYilAe1sxMCwxMV0oWzksIDExXSAoYmEpKSxbMTEsIDE2XSAoJmFtcDspLFsxNiwgMTddIChiKX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0Ni50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q2LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjEzMTVmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q2LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q2Ci1Tb3VyY2UgOgotPHA+YSZhbXA7PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDRdIChhKQotWzQsIDldICgmYW1wOykKLVs5LCAxM10gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzksIDEzXSAoPC9wPikKLS0tLS0jdGV4dChhJilAe1szLCA0XSAoYSksWzQsIDldICgmYW1wOyl9Ci0KLVNvdXJjZSA6Ci08cD5hJmFtcDthJmFtcDs8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOV0gKCZhbXA7KQotWzksIDEwXSAoYSkKLVsxMCwgMTVdICgmYW1wOykKLVsxNSwgMTldICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxNSwgMTldICg8L3A+KQotLS0tLSN0ZXh0KGEmKUB7WzMsIDRdIChhKSxbNCwgOV0gKCZhbXA7KX0KLS0tLS0jdGV4dChhJilAe1s5LCAxMF0gKGEpLFsxMCwgMTVdICgmYW1wOyl9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDcudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0Ny50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNWQ5ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0Ny50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NwotU291cmNlIDoKLTxhPmEmIzY1OyYjeDQxOyZ1bms7JnVuayZ1bms8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKGEpCi1bNCwgOV0gKCYjNjU7KQotWzksIDE1XSAoJiN4NDE7KQotWzE1LCAyMF0gKCZ1bms7KQotWzIwLCAyNF0gKCZ1bmspCi1bMjQsIDI4XSAoJnVuaykKLVsyOCwgMzJdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsyOCwgMzJdICg8L2E+KQotLS0tLSN0ZXh0KGFBQSlAe1szLCA0XSAoYSksWzQsIDldICgmIzY1OyksWzksIDE1XSAoJiN4NDE7KX0KLS0tLS11bmsKLS0tLS0jdGV4dCgmdW5rJnVuaylAe1syMCwgMjRdICgmdW5rKSxbMjQsIDI4XSAoJnVuayl9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDgudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0OC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZWNiMWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0OC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0OAotU291cmNlIDoKLSZpYm07JnJ0cDsKLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNV0gKCZpYm07KQotWzUsIDEwXSAoJnJ0cDspCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWlibQotLS1ydHAKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0OS50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q5LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDgwMmUzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q5LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q5Ci1Tb3VyY2UgOgotJmx0OwotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA0XSAoJmx0OykKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoPClAWzAsIDRdICgmbHQ7KQotCi1Tb3VyY2UgOgotJmx0OyZndAotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA0XSAoJmx0OykKLVs0LCA3XSAoJmd0KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS0jdGV4dCg8Jmd0KUB7WzAsIDRdICgmbHQ7KSxbNCwgN10gKCZndCl9Ci0KLVNvdXJjZSA6Ci0mbHQ7Jmd0OwotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA0XSAoJmx0OykKLVs0LCA4XSAoJmd0OykKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoPD4pQHtbMCwgNF0gKCZsdDspLFs0LCA4XSAoJmd0Oyl9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUElUZXN0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUElUZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZhZWE2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBJVGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QSVRlc3QKLVNvdXJjZSA6Ci08YT48P2VjaG8gJFBIUF9TRUxGPz48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgMjFdICg8P2VjaG8gJFBIUF9TRUxGPz4pCi1bMjEsIDI1XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMjEsIDI1XSAoPC9hPikKLS0tLS1lY2hvKCRQSFBfU0VMRikKLQotdGFyZ2V0KGVjaG8pIGRhdGEgKCRQSFBfU0VMRikKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDk2Nzk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdAotU291cmNlIDoKLTxQPjxCPjwvQj48Qj48L0I+PC9QPjxQPjwvUD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxQPikKLVszLCA2XSAoPEI+KQotWzYsIDEwXSAoPC9CPikKLVsxMCwgMTNdICg8Qj4pCi1bMTMsIDE3XSAoPC9CPikKLVsxNywgMjFdICg8L1A+KQotWzIxLCAyNF0gKDxQPikKLVsyNCwgMjhdICg8L1A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1QL1BAWzAsIDNdICg8UD4pQFsxNywgMjFdICg8L1A+KQotLS0tLUIvQkBbMywgNl0gKDxCPilAWzYsIDEwXSAoPC9CPikKLS0tLS1CL0JAWzEwLCAxM10gKDxCPilAWzEzLCAxN10gKDwvQj4pCi0tLVAvUEBbMjEsIDI0XSAoPFA+KUBbMjQsIDI4XSAoPC9QPikKLQotU291cmNlIDoKLWE8UD48Qj48L0I+PEI+PC9CPjwvUD48UD48L1A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDFdIChhKQotWzEsIDRdICg8UD4pCi1bNCwgN10gKDxCPikKLVs3LCAxMV0gKDwvQj4pCi1bMTEsIDE0XSAoPEI+KQotWzE0LCAxOF0gKDwvQj4pCi1bMTgsIDIyXSAoPC9QPikKLVsyMiwgMjVdICg8UD4pCi1bMjUsIDI5XSAoPC9QPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoYSlAWzAsIDFdIChhKQotLS1QL1BAWzEsIDRdICg8UD4pQFsxOCwgMjJdICg8L1A+KQotLS0tLUIvQkBbNCwgN10gKDxCPilAWzcsIDExXSAoPC9CPikKLS0tLS1CL0JAWzExLCAxNF0gKDxCPilAWzE0LCAxOF0gKDwvQj4pCi0tLVAvUEBbMjIsIDI1XSAoPFA+KUBbMjUsIDI5XSAoPC9QPikKLQotU291cmNlIDoKLWE8UD5iPEI+PC9CPjxCPjwvQj48L1A+PFA+PC9QPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxXSAoYSkKLVsxLCA0XSAoPFA+KQotWzQsIDVdIChiKQotWzUsIDhdICg8Qj4pCi1bOCwgMTJdICg8L0I+KQotWzEyLCAxNV0gKDxCPikKLVsxNSwgMTldICg8L0I+KQotWzE5LCAyM10gKDwvUD4pCi1bMjMsIDI2XSAoPFA+KQotWzI2LCAzMF0gKDwvUD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KGEpQFswLCAxXSAoYSkKLS0tUC9QQFsxLCA0XSAoPFA+KUBbMTksIDIzXSAoPC9QPikKLS0tLS0jdGV4dChiKUBbNCwgNV0gKGIpCi0tLS0tQi9CQFs1LCA4XSAoPEI+KUBbOCwgMTJdICg8L0I+KQotLS0tLUIvQkBbMTIsIDE1XSAoPEI+KUBbMTUsIDE5XSAoPC9CPikKLS0tUC9QQFsyMywgMjZdICg8UD4pQFsyNiwgMzBdICg8L1A+KQotCi1Tb3VyY2UgOgotYTxQPmI8Qj48L0I+YzxCPjwvQj48L1A+PFA+PC9QPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxXSAoYSkKLVsxLCA0XSAoPFA+KQotWzQsIDVdIChiKQotWzUsIDhdICg8Qj4pCi1bOCwgMTJdICg8L0I+KQotWzEyLCAxM10gKGMpCi1bMTMsIDE2XSAoPEI+KQotWzE2LCAyMF0gKDwvQj4pCi1bMjAsIDI0XSAoPC9QPikKLVsyNCwgMjddICg8UD4pCi1bMjcsIDMxXSAoPC9QPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoYSlAWzAsIDFdIChhKQotLS1QL1BAWzEsIDRdICg8UD4pQFsyMCwgMjRdICg8L1A+KQotLS0tLSN0ZXh0KGIpQFs0LCA1XSAoYikKLS0tLS1CL0JAWzUsIDhdICg8Qj4pQFs4LCAxMl0gKDwvQj4pCi0tLS0tI3RleHQoYylAWzEyLCAxM10gKGMpCi0tLS0tQi9CQFsxMywgMTZdICg8Qj4pQFsxNiwgMjBdICg8L0I+KQotLS1QL1BAWzI0LCAyN10gKDxQPilAWzI3LCAzMV0gKDwvUD4pCi0KLVNvdXJjZSA6Ci1hPFA+YjxCPjwvQj5jPEI+PC9CPmQ8L1A+PFA+PC9QPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxXSAoYSkKLVsxLCA0XSAoPFA+KQotWzQsIDVdIChiKQotWzUsIDhdICg8Qj4pCi1bOCwgMTJdICg8L0I+KQotWzEyLCAxM10gKGMpCi1bMTMsIDE2XSAoPEI+KQotWzE2LCAyMF0gKDwvQj4pCi1bMjAsIDIxXSAoZCkKLVsyMSwgMjVdICg8L1A+KQotWzI1LCAyOF0gKDxQPikKLVsyOCwgMzJdICg8L1A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS0jdGV4dChhKUBbMCwgMV0gKGEpCi0tLVAvUEBbMSwgNF0gKDxQPilAWzIxLCAyNV0gKDwvUD4pCi0tLS0tI3RleHQoYilAWzQsIDVdIChiKQotLS0tLUIvQkBbNSwgOF0gKDxCPilAWzgsIDEyXSAoPC9CPikKLS0tLS0jdGV4dChjKUBbMTIsIDEzXSAoYykKLS0tLS1CL0JAWzEzLCAxNl0gKDxCPilAWzE2LCAyMF0gKDwvQj4pCi0tLS0tI3RleHQoZClAWzIwLCAyMV0gKGQpCi0tLVAvUEBbMjUsIDI4XSAoPFA+KUBbMjgsIDMyXSAoPC9QPikKLQotU291cmNlIDoKLWE8UD5iPEI+PC9CPmM8Qj48L0I+ZDwvUD5lPFA+PC9QPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxXSAoYSkKLVsxLCA0XSAoPFA+KQotWzQsIDVdIChiKQotWzUsIDhdICg8Qj4pCi1bOCwgMTJdICg8L0I+KQotWzEyLCAxM10gKGMpCi1bMTMsIDE2XSAoPEI+KQotWzE2LCAyMF0gKDwvQj4pCi1bMjAsIDIxXSAoZCkKLVsyMSwgMjVdICg8L1A+KQotWzI1LCAyNl0gKGUpCi1bMjYsIDI5XSAoPFA+KQotWzI5LCAzM10gKDwvUD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KGEpQFswLCAxXSAoYSkKLS0tUC9QQFsxLCA0XSAoPFA+KUBbMjEsIDI1XSAoPC9QPikKLS0tLS0jdGV4dChiKUBbNCwgNV0gKGIpCi0tLS0tQi9CQFs1LCA4XSAoPEI+KUBbOCwgMTJdICg8L0I+KQotLS0tLSN0ZXh0KGMpQFsxMiwgMTNdIChjKQotLS0tLUIvQkBbMTMsIDE2XSAoPEI+KUBbMTYsIDIwXSAoPC9CPikKLS0tLS0jdGV4dChkKUBbMjAsIDIxXSAoZCkKLS0tI3RleHQoZSlAWzI1LCAyNl0gKGUpCi0tLVAvUEBbMjYsIDI5XSAoPFA+KUBbMjksIDMzXSAoPC9QPikKLQotU291cmNlIDoKLWE8UD5iPEI+PC9CPmM8Qj48L0I+ZDwvUD5lPFA+ZjwvUD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMV0gKGEpCi1bMSwgNF0gKDxQPikKLVs0LCA1XSAoYikKLVs1LCA4XSAoPEI+KQotWzgsIDEyXSAoPC9CPikKLVsxMiwgMTNdIChjKQotWzEzLCAxNl0gKDxCPikKLVsxNiwgMjBdICg8L0I+KQotWzIwLCAyMV0gKGQpCi1bMjEsIDI1XSAoPC9QPikKLVsyNSwgMjZdIChlKQotWzI2LCAyOV0gKDxQPikKLVsyOSwgMzBdIChmKQotWzMwLCAzNF0gKDwvUD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KGEpQFswLCAxXSAoYSkKLS0tUC9QQFsxLCA0XSAoPFA+KUBbMjEsIDI1XSAoPC9QPikKLS0tLS0jdGV4dChiKUBbNCwgNV0gKGIpCi0tLS0tQi9CQFs1LCA4XSAoPEI+KUBbOCwgMTJdICg8L0I+KQotLS0tLSN0ZXh0KGMpQFsxMiwgMTNdIChjKQotLS0tLUIvQkBbMTMsIDE2XSAoPEI+KUBbMTYsIDIwXSAoPC9CPikKLS0tLS0jdGV4dChkKUBbMjAsIDIxXSAoZCkKLS0tI3RleHQoZSlAWzI1LCAyNl0gKGUpCi0tLVAvUEBbMjYsIDI5XSAoPFA+KUBbMzAsIDM0XSAoPC9QPikKLS0tLS0jdGV4dChmKUBbMjksIDMwXSAoZikKLQotU291cmNlIDoKLWE8UD5iPEI+PC9CPmM8Qj48L0I+ZDwvUD5lPFA+ZjwvUD5nCi0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDFdIChhKQotWzEsIDRdICg8UD4pCi1bNCwgNV0gKGIpCi1bNSwgOF0gKDxCPikKLVs4LCAxMl0gKDwvQj4pCi1bMTIsIDEzXSAoYykKLVsxMywgMTZdICg8Qj4pCi1bMTYsIDIwXSAoPC9CPikKLVsyMCwgMjFdIChkKQotWzIxLCAyNV0gKDwvUD4pCi1bMjUsIDI2XSAoZSkKLVsyNiwgMjldICg8UD4pCi1bMjksIDMwXSAoZikKLVszMCwgMzRdICg8L1A+KQotWzM0LCAzNV0gKGcpCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KGEpQFswLCAxXSAoYSkKLS0tUC9QQFsxLCA0XSAoPFA+KUBbMjEsIDI1XSAoPC9QPikKLS0tLS0jdGV4dChiKUBbNCwgNV0gKGIpCi0tLS0tQi9CQFs1LCA4XSAoPEI+KUBbOCwgMTJdICg8L0I+KQotLS0tLSN0ZXh0KGMpQFsxMiwgMTNdIChjKQotLS0tLUIvQkBbMTMsIDE2XSAoPEI+KUBbMTYsIDIwXSAoPC9CPikKLS0tLS0jdGV4dChkKUBbMjAsIDIxXSAoZCkKLS0tI3RleHQoZSlAWzI1LCAyNl0gKGUpCi0tLVAvUEBbMjYsIDI5XSAoPFA+KUBbMzAsIDM0XSAoPC9QPikKLS0tLS0jdGV4dChmKUBbMjksIDMwXSAoZikKLS0tI3RleHQoZylAWzM0LCAzNV0gKGcpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDIudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0Mi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzOTkwYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0Mi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0MgotU291cmNlIDoKLTxhIGI9IiIgIGM9ImMiPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxNV0gKDxhIGI9IiIgIGM9ImMiPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYUBbMCwgMTVdICg8YSBiJiM2MTsiIiAgYyYjNjE7ImMiPikKLQotYj1bXQotYz1bY10KLVNvdXJjZSA6Ci08YSBiPSIiIGQgYz0iYyI+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDE2XSAoPGEgYj0iIiBkIGM9ImMiPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYUBbMCwgMTZdICg8YSBiJiM2MTsiIiBkIGMmIzYxOyJjIj4pCi0KLWI9W10KLWQ9W10KLWM9W2NdCi1Tb3VyY2UgOgotPGEgYj0iIiAgYz0iYyI+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDE1XSAoPGEgYj0iIiAgYz0iYyI+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hQFswLCAxNV0gKDxhIGImIzYxOyIiICBjJiM2MTsiYyI+KQotCi1iPVtdCi1jPVtjXQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0My50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMzOGFmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QzCi1Tb3VyY2UgOgotPGEgYiAgPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA3XSAoPGEgYiAgPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYUBbMCwgN10gKDxhIGIgID4pCi0KLWI9W10KLW9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuUmVnaW9uQ2hhbmdlZEV2ZW50Ci1Tb3VyY2UgOgotPGEgYiA+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8YSBiID4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWFAWzAsIDZdICg8YSBiID4pCi0KLWI9W10KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDQudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0NC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMzJjZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0NC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNDMgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDQKLVNvdXJjZSA6Ci08YT4KLQotPCUgYSAlPgotPCUgYiAlPgotPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDVdICgKLQotKQotWzUsIDZdICg8KQotWzYsIDhdICglICkKLVs4LCAxMF0gKGEgKQotWzEwLCAxMV0gKCUpCi1bMTEsIDEzXSAoPgotKQotWzEzLCAxNF0gKDwpCi1bMTQsIDE2XSAoJSApCi1bMTYsIDE4XSAoYiApCi1bMTgsIDE5XSAoJSkKLVsxOSwgMjFdICg+Ci0pCi1bMjEsIDI1XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMjEsIDI1XSAoPC9hPikKLS0tLS0jdGV4dChcblxuPCUgYSAlPlxuPCUgYiAlPlxuKUB7WzMsIDVdIChcblxuKSxbNSwgNl0gKDwpLFs2LCA4XSAoJSApLFs4LCAxMF0gKGEgKSxbMTAsIDExXSAoJSksWzExLCAxM10gKD5cbiksWzEzLCAxNF0gKDwpLFsxNCwgMTZdICglICksWzE2LCAxOF0gKGIgKSxbMTgsIDE5XSAoJSksWzE5LCAyMV0gKD5cbil9Ci0KLVNvdXJjZSA6Ci08YT4KLTwKLTwlIGEgJT4KLTwlIGIgJT4KLTwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoCi0pCi1bNCwgNV0gKDwpCi1bNSwgNl0gKAotKQotWzYsIDddICg8KQotWzcsIDldICglICkKLVs5LCAxMV0gKGEgKQotWzExLCAxMl0gKCUpCi1bMTIsIDE0XSAoPgotKQotWzE0LCAxNV0gKDwpCi1bMTUsIDE3XSAoJSApCi1bMTcsIDE5XSAoYiApCi1bMTksIDIwXSAoJSkKLVsyMCwgMjJdICg+Ci0pCi1bMjIsIDI2XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMjIsIDI2XSAoPC9hPikKLS0tLS0jdGV4dChcbjxcbjwlIGEgJT5cbjwlIGIgJT5cbilAe1szLCA0XSAoXG4pLFs0LCA1XSAoPCksWzUsIDZdIChcbiksWzYsIDddICg8KSxbNywgOV0gKCUgKSxbOSwgMTFdIChhICksWzExLCAxMl0gKCUpLFsxMiwgMTRdICg+XG4pLFsxNCwgMTVdICg8KSxbMTUsIDE3XSAoJSApLFsxNywgMTldIChiICksWzE5LCAyMF0gKCUpLFsyMCwgMjJdICg+XG4pfQotCi1Tb3VyY2UgOgotPGE+Ci08YgotPCUgYSAlPgotPCUgYiAlPgotPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdICgKLSkKLVs0LCA3XSAoPGIKLSkKLVs3LCA4XSAoPCkKLVs4LCAxMF0gKCUgKQotWzEwLCAxMl0gKGEgKQotWzEyLCAxM10gKCUpCi1bMTMsIDE1XSAoPgotKQotWzE1LCAxNl0gKDwpCi1bMTYsIDE4XSAoJSApCi1bMTgsIDIwXSAoYiApCi1bMjAsIDIxXSAoJSkKLVsyMSwgMjNdICg+Ci0pCi1bMjMsIDI3XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMjMsIDI3XSAoPC9hPikKLS0tLS0jdGV4dChcbilAWzMsIDRdIChcbikKLS0tLS1iQFs0LCA3XSAoPGJcbikKLS0tLS0tLSN0ZXh0KDwlIGEgJT5cbjwlIGIgJT5cbilAe1s3LCA4XSAoPCksWzgsIDEwXSAoJSApLFsxMCwgMTJdIChhICksWzEyLCAxM10gKCUpLFsxMywgMTVdICg+XG4pLFsxNSwgMTZdICg8KSxbMTYsIDE4XSAoJSApLFsxOCwgMjBdIChiICksWzIwLCAyMV0gKCUpLFsyMSwgMjNdICg+XG4pfQotCi1Tb3VyY2UgOgotPGE+Ci08YmMKLTwlIGEgJT4KLTwlIGIgJT4KLTwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoCi0pCi1bNCwgOF0gKDxiYwotKQotWzgsIDldICg8KQotWzksIDExXSAoJSApCi1bMTEsIDEzXSAoYSApCi1bMTMsIDE0XSAoJSkKLVsxNCwgMTZdICg+Ci0pCi1bMTYsIDE3XSAoPCkKLVsxNywgMTldICglICkKLVsxOSwgMjFdIChiICkKLVsyMSwgMjJdICglKQotWzIyLCAyNF0gKD4KLSkKLVsyNCwgMjhdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsyNCwgMjhdICg8L2E+KQotLS0tLSN0ZXh0KFxuKUBbMywgNF0gKFxuKQotLS0tLWJjQFs0LCA4XSAoPGJjXG4pCi0tLS0tLS0jdGV4dCg8JSBhICU+XG48JSBiICU+XG4pQHtbOCwgOV0gKDwpLFs5LCAxMV0gKCUgKSxbMTEsIDEzXSAoYSApLFsxMywgMTRdICglKSxbMTQsIDE2XSAoPlxuKSxbMTYsIDE3XSAoPCksWzE3LCAxOV0gKCUgKSxbMTksIDIxXSAoYiApLFsyMSwgMjJdICglKSxbMjIsIDI0XSAoPlxuKX0KLQotU291cmNlIDoKLTxhPgotPGJjZAotPCUgYSAlPgotPCUgYiAlPgotPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdICgKLSkKLVs0LCA5XSAoPGJjZAotKQotWzksIDEwXSAoPCkKLVsxMCwgMTJdICglICkKLVsxMiwgMTRdIChhICkKLVsxNCwgMTVdICglKQotWzE1LCAxN10gKD4KLSkKLVsxNywgMThdICg8KQotWzE4LCAyMF0gKCUgKQotWzIwLCAyMl0gKGIgKQotWzIyLCAyM10gKCUpCi1bMjMsIDI1XSAoPgotKQotWzI1LCAyOV0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzI1LCAyOV0gKDwvYT4pCi0tLS0tI3RleHQoXG4pQFszLCA0XSAoXG4pCi0tLS0tYmNkQFs0LCA5XSAoPGJjZFxuKQotLS0tLS0tI3RleHQoPCUgYSAlPlxuPCUgYiAlPlxuKUB7WzksIDEwXSAoPCksWzEwLCAxMl0gKCUgKSxbMTIsIDE0XSAoYSApLFsxNCwgMTVdICglKSxbMTUsIDE3XSAoPlxuKSxbMTcsIDE4XSAoPCksWzE4LCAyMF0gKCUgKSxbMjAsIDIyXSAoYiApLFsyMiwgMjNdICglKSxbMjMsIDI1XSAoPlxuKX0KLQotU291cmNlIDoKLTxhPgotPGJjZGUKLTwlIGEgJT4KLTwlIGIgJT4KLTwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoCi0pCi1bNCwgMTBdICg8YmNkZQotKQotWzEwLCAxMV0gKDwpCi1bMTEsIDEzXSAoJSApCi1bMTMsIDE1XSAoYSApCi1bMTUsIDE2XSAoJSkKLVsxNiwgMThdICg+Ci0pCi1bMTgsIDE5XSAoPCkKLVsxOSwgMjFdICglICkKLVsyMSwgMjNdIChiICkKLVsyMywgMjRdICglKQotWzI0LCAyNl0gKD4KLSkKLVsyNiwgMzBdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsyNiwgMzBdICg8L2E+KQotLS0tLSN0ZXh0KFxuKUBbMywgNF0gKFxuKQotLS0tLWJjZGVAWzQsIDEwXSAoPGJjZGVcbikKLS0tLS0tLSN0ZXh0KDwlIGEgJT5cbjwlIGIgJT5cbilAe1sxMCwgMTFdICg8KSxbMTEsIDEzXSAoJSApLFsxMywgMTVdIChhICksWzE1LCAxNl0gKCUpLFsxNiwgMThdICg+XG4pLFsxOCwgMTldICg8KSxbMTksIDIxXSAoJSApLFsyMSwgMjNdIChiICksWzIzLCAyNF0gKCUpLFsyNCwgMjZdICg+XG4pfQotCi1Tb3VyY2UgOgotPGE+Ci08YmNkZT4KLTwlIGEgJT4KLTwlIGIgJT4KLTwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoCi0pCi1bNCwgMTBdICg8YmNkZT4pCi1bMTAsIDExXSAoCi0pCi1bMTEsIDEyXSAoPCkKLVsxMiwgMTRdICglICkKLVsxNCwgMTZdIChhICkKLVsxNiwgMTddICglKQotWzE3LCAxOV0gKD4KLSkKLVsxOSwgMjBdICg8KQotWzIwLCAyMl0gKCUgKQotWzIyLCAyNF0gKGIgKQotWzI0LCAyNV0gKCUpCi1bMjUsIDI3XSAoPgotKQotWzI3LCAzMV0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzI3LCAzMV0gKDwvYT4pCi0tLS0tI3RleHQoXG4pQFszLCA0XSAoXG4pCi0tLS0tYmNkZUBbNCwgMTBdICg8YmNkZT4pCi0tLS0tLS0jdGV4dChcbjwlIGEgJT5cbjwlIGIgJT5cbilAe1sxMCwgMTFdIChcbiksWzExLCAxMl0gKDwpLFsxMiwgMTRdICglICksWzE0LCAxNl0gKGEgKSxbMTYsIDE3XSAoJSksWzE3LCAxOV0gKD5cbiksWzE5LCAyMF0gKDwpLFsyMCwgMjJdICglICksWzIyLCAyNF0gKGIgKSxbMjQsIDI1XSAoJSksWzI1LCAyN10gKD5cbil9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmE5MDAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdAotU291cmNlIDoKLTxwPmFhYmJiYmNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxMl0gKGFhYmJiYmNjYykKLVsxMiwgMTZdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMiwgMTZdICg8L3A+KQotLS0tLSN0ZXh0KGFhYmJiYmNjYylAWzMsIDEyXSAoYWFiYmJiY2NjKQotCi1Tb3VyY2UgOgotPHA+YWFiYmJiY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDEyXSAoYWFiYmJiY2NjKQotWzEyLCAxNl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEyLCAxNl0gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLDVdKFszLCAxMl0gKGFhYmJiYmNjYykpCi0tLS0tI3RleHQoYmJiYmNjYylAWzUsMTJdKFszLCAxMl0gKGFhYmJiYmNjYykpCi0KLVNvdXJjZSA6Ci08cD5hYWJiYmJjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTJdIChhYWJiYmJjY2MpCi1bMTIsIDE2XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTIsIDE2XSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsNV0oWzMsIDEyXSAoYWFiYmJiY2NjKSkKLS0tLS0jdGV4dChiYmJiKUBbNSw5XShbMywgMTJdIChhYWJiYmJjY2MpKQotLS0tLSN0ZXh0KGNjYylAWzksMTJdKFszLCAxMl0gKGFhYmJiYmNjYykpCi0KLVNvdXJjZSA6Ci08cD5hYWNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA4XSAoYWFjY2MpCi1bOCwgMTJdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs4LCAxMl0gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLDVdKFszLCA4XSAoYWFjY2MpKQotLS0tLSN0ZXh0KGNjYylAWzUsOF0oWzMsIDhdIChhYWNjYykpCi0KLVNvdXJjZSA6Ci08cD5hYWRkZGRkZGRjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTVdIChhYWRkZGRkZGRjY2MpCi1bMTUsIDE5XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTUsIDE5XSAoPC9wPikKLS0tLS0jdGV4dChhYWRkZGRkZGQpQFszLDEyXShbMywgMTVdIChhYWRkZGRkZGRjY2MpKQotLS0tLSN0ZXh0KGNjYylAWzEyLDE1XShbMywgMTVdIChhYWRkZGRkZGRjY2MpKQotCi1Tb3VyY2UgOgotPHA+YWFkZGRkZGRkY2NjZWVlPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDE4XSAoYWFkZGRkZGRkY2NjZWVlKQotWzE4LCAyMl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzE4LCAyMl0gKDwvcD4pCi0tLS0tI3RleHQoYWFkZGRkZGRkKUBbMywxMl0oWzMsIDE4XSAoYWFkZGRkZGRkY2NjZWVlKSkKLS0tLS0jdGV4dChjY2NlZWUpQFsxMiwxOF0oWzMsIDE4XSAoYWFkZGRkZGRkY2NjZWVlKSkKLQotU291cmNlIDoKLTxwPmFhZGRkZGRkZGJiYmJjY2NlZWU8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMjJdIChhYWRkZGRkZGRiYmJiY2NjZWVlKQotWzIyLCAyNl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzIyLCAyNl0gKDwvcD4pCi0tLS0tI3RleHQoYWFkZGRkZGRkKUBbMywxMl0oWzMsIDIyXSAoYWFkZGRkZGRkYmJiYmNjY2VlZSkpCi0tLS0tI3RleHQoYmJiYilAWzEyLDE2XShbMywgMjJdIChhYWRkZGRkZGRiYmJiY2NjZWVlKSkKLS0tLS0jdGV4dChjY2NlZWUpQFsxNiwyMl0oWzMsIDIyXSAoYWFkZGRkZGRkYmJiYmNjY2VlZSkpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDIudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0Mi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhMTIyYzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0Mi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0MgotU291cmNlIDoKLTxwPmFhYmJiYmNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxMl0gKGFhYmJiYmNjYykKLVsxMiwgMTZdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMiwgMTZdICg8L3A+KQotLS0tLSN0ZXh0KGFhYmJiYmNjYylAWzMsIDEyXSAoYWFiYmJiY2NjKQotCi1Tb3VyY2UgOgotPHA+YWFiYmJiY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDEyXSAoYWFiYmJiY2NjKQotWzEyLCAxNl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEyLCAxNl0gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLDVdKFszLCAxMl0gKGFhYmJiYmNjYykpCi0tLS0tI3RleHQoYmJiYmNjYylAWzUsMTJdKFszLCAxMl0gKGFhYmJiYmNjYykpCi0KLVNvdXJjZSA6Ci08cD5hYWJiYmJjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTJdIChhYWJiYmJjY2MpCi1bMTIsIDE2XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTIsIDE2XSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsNV0oWzMsIDEyXSAoYWFiYmJiY2NjKSkKLS0tLS0jdGV4dChiYmJiKUBbNSw5XShbMywgMTJdIChhYWJiYmJjY2MpKQotLS0tLSN0ZXh0KGNjYylAWzksMTJdKFszLCAxMl0gKGFhYmJiYmNjYykpCi0KLVNvdXJjZSA6Ci08cD5hYWNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA4XSAoYWFjY2MpCi1bOCwgMTJdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs4LCAxMl0gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLDVdKFszLCA4XSAoYWFjY2MpKQotLS0tLSN0ZXh0KGNjYylAWzUsOF0oWzMsIDhdIChhYWNjYykpCi0KLVNvdXJjZSA6Ci08cD5hYTxiPmJiYmI8L2I+Y2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChhYSkKLVs1LCA4XSAoPGI+KQotWzgsIDEyXSAoYmJiYikKLVsxMiwgMTZdICg8L2I+KQotWzE2LCAxOV0gKGNjYykKLVsxOSwgMjNdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxOSwgMjNdICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMywgNV0gKGFhKQotLS0tLWIvYkBbNSwgOF0gKDxiPilAWzEyLCAxNl0gKDwvYj4pCi0tLS0tLS0jdGV4dChiYmJiKUBbOCwgMTJdIChiYmJiKQotLS0tLSN0ZXh0KGNjYylAWzE2LCAxOV0gKGNjYykKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0My50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ1M2E1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QzCi1Tb3VyY2UgOgotPHA+YWE8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGFhKQotWzUsIDldICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs1LCA5XSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsIDVdIChhYSkKLQotU291cmNlIDoKLTxwPmFhPGI+YmJiYjwvYj48L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGFhKQotWzUsIDhdICg8Yj4pCi1bOCwgMTJdIChiYmJiKQotWzEyLCAxNl0gKDwvYj4pCi1bMTYsIDIwXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTYsIDIwXSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsIDVdIChhYSkKLS0tLS1iL2JAWzUsIDhdICg8Yj4pQFsxMiwgMTZdICg8L2I+KQotLS0tLS0tI3RleHQoYmJiYilAWzgsIDEyXSAoYmJiYikKLQotU291cmNlIDoKLTxwPmFhPGI+YmJiYjwvYj5jY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGFhKQotWzUsIDhdICg8Yj4pCi1bOCwgMTJdIChiYmJiKQotWzEyLCAxNl0gKDwvYj4pCi1bMTYsIDE5XSAoY2NjKQotWzE5LCAyM10gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzE5LCAyM10gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLCA1XSAoYWEpCi0tLS0tYi9iQFs1LCA4XSAoPGI+KUBbMTIsIDE2XSAoPC9iPikKLS0tLS0tLSN0ZXh0KGJiYmIpQFs4LCAxMl0gKGJiYmIpCi0tLS0tI3RleHQoY2NjKUBbMTYsIDE5XSAoY2NjKQotCi1Tb3VyY2UgOgotPHA+YWFjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgOF0gKGFhY2NjKQotWzgsIDEyXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbOCwgMTJdICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMyw1XShbMywgOF0gKGFhY2NjKSkKLS0tLS0jdGV4dChjY2MpQFs1LDhdKFszLCA4XSAoYWFjY2MpKQotCi1Tb3VyY2UgOgotPHA+YWE8Yj5iYmJiPC9iPmNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoYWEpCi1bNSwgOF0gKDxiPikKLVs4LCAxMl0gKGJiYmIpCi1bMTIsIDE2XSAoPC9iPikKLVsxNiwgMTldIChjY2MpCi1bMTksIDIzXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTksIDIzXSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsIDVdIChhYSkKLS0tLS1iL2JAWzUsIDhdICg8Yj4pQFsxMiwgMTZdICg8L2I+KQotLS0tLS0tI3RleHQoYmJiYilAWzgsIDEyXSAoYmJiYikKLS0tLS0jdGV4dChjY2MpQFsxNiwgMTldIChjY2MpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDQudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0NC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YmJmMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0NC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0NAotU291cmNlIDoKLTxwPjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA3XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMywgN10gKDwvcD4pCi0tLS0tI3RleHQoKQotCi1Tb3VyY2UgOgotPHA+YWFhPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDZdIChhYWEpCi1bNiwgMTBdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs2LCAxMF0gKDwvcD4pCi0tLS0tI3RleHQoYWFhKUBbMywgNl0gKGFhYSkKLQotU291cmNlIDoKLTxwPjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA3XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMywgN10gKDwvcD4pCi0tLS0tI3RleHQoKQotCi1Tb3VyY2UgOgotPHA+Y2NjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA3XSAoY2NjYykKLVs3LCAxMV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzcsIDExXSAoPC9wPikKLS0tLS0jdGV4dChjY2NjKUBbMywgN10gKGNjY2MpCi0tLS0tI3RleHQoKQotCi1Tb3VyY2UgOgotPHA+Y2NjY2FhYTwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxMF0gKGNjY2NhYWEpCi1bMTAsIDE0XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTAsIDE0XSAoPC9wPikKLS0tLS0jdGV4dChjY2NjKUBbMyw3XShbMywgMTBdIChjY2NjYWFhKSkKLS0tLS0jdGV4dChhYWEpQFs3LDEwXShbMywgMTBdIChjY2NjYWFhKSkKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0NS50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q1LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNlZGI1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q1LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0NQotU291cmNlIDoKLTxwPmFhYmJiYmNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxMl0gKGFhYmJiYmNjYykKLVsxMiwgMTZdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMiwgMTZdICg8L3A+KQotLS0tLSN0ZXh0KGFhYmJiYmNjYylAWzMsIDEyXSAoYWFiYmJiY2NjKQotCi1Tb3VyY2UgOgotPHA+YWFiYmJiY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDEyXSAoYWFiYmJiY2NjKQotWzEyLCAxNl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEyLCAxNl0gKDwvcD4pCi0tLS0tI3RleHQoYWFiYmJiKUBbMyw5XShbMywgMTJdIChhYWJiYmJjY2MpKQotLS0tLSN0ZXh0KGNjYylAWzksMTJdKFszLCAxMl0gKGFhYmJiYmNjYykpCi0KLVNvdXJjZSA6Ci08cD5hYWJiYmI8YnI+Y2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDldIChhYWJiYmIpCi1bOSwgMTNdICg8YnI+KQotWzEzLCAxNl0gKGNjYykKLVsxNiwgMjBdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxNiwgMjBdICg8L3A+KQotLS0tLSN0ZXh0KGFhYmJiYilAWzMsIDldIChhYWJiYmIpCi0tLS0tYnJAWzksIDEzXSAoPGJyPikKLS0tLS0jdGV4dChjY2MpQFsxMywgMTZdIChjY2MpCi0KLVNvdXJjZSA6Ci08cD5hYWJiYmI8YnI+Y2NjZDwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA5XSAoYWFiYmJiKQotWzksIDEzXSAoPGJyPikKLVsxMywgMTddIChjY2NkKQotWzE3LCAyMV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzE3LCAyMV0gKDwvcD4pCi0tLS0tI3RleHQoYWFiYmJiKUBbMywgOV0gKGFhYmJiYikKLS0tLS1ickBbOSwgMTNdICg8YnI+KQotLS0tLSN0ZXh0KGNjY2QpQFsxMywgMTddIChjY2NkKQotCi1Tb3VyY2UgOgotPHA+YWFiYmJiPGJyPmNjY2RlPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDldIChhYWJiYmIpCi1bOSwgMTNdICg8YnI+KQotWzEzLCAxOF0gKGNjY2RlKQotWzE4LCAyMl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzE4LCAyMl0gKDwvcD4pCi0tLS0tI3RleHQoYWFiYmJiKUBbMywgOV0gKGFhYmJiYikKLS0tLS1ickBbOSwgMTNdICg8YnI+KQotLS0tLSN0ZXh0KGNjY2RlKUBbMTMsIDE4XSAoY2NjZGUpCi0KLVNvdXJjZSA6Ci08cD5hYTxiPmJiYmI8L2I+PGJyPmNjY2RlPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChhYSkKLVs1LCA4XSAoPGI+KQotWzgsIDEyXSAoYmJiYikKLVsxMiwgMTZdICg8L2I+KQotWzE2LCAyMF0gKDxicj4pCi1bMjAsIDI1XSAoY2NjZGUpCi1bMjUsIDI5XSAoPC9wPikKLQotU3RydWN0dXJlZERvY3VtZW50UmVnaW9uQ2hlY2tlciA6IHdhcm5pbmcgOiB2YWluCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsyNSwgMjldICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMyw1XShbMywgNV0gKGFhKSkKLS0tLS1iL2JAWzUsIDhdICg8Yj4pQFsxMiwgMTZdICg8L2I+KQotLS0tLS0tI3RleHQoYmJiYilAWzgsIDEyXSAoYmJiYikKLS0tLS1ickBbMTYsIDIwXSAoPGJyPikKLS0tLS0jdGV4dChjY2NkZSlAWzIwLCAyNV0gKGNjY2RlKQotCi1Tb3VyY2UgOgotPHA+YWE8Yj5iYmJiPC9iPjxicj48aT5jY2M8L2k+ZGU8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGFhKQotWzUsIDhdICg8Yj4pCi1bOCwgMTJdIChiYmJiKQotWzEyLCAxNl0gKDwvYj4pCi1bMTYsIDIwXSAoPGJyPikKLVsyMCwgMjNdICg8aT4pCi1bMjMsIDI2XSAoY2NjKQotWzI2LCAzMF0gKDwvaT4pCi1bMzAsIDMyXSAoZGUpCi1bMzIsIDM2XSAoPC9wPikKLQotU3RydWN0dXJlZERvY3VtZW50UmVnaW9uQ2hlY2tlciA6IHdhcm5pbmcgOiB2YWluCi1TdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25DaGVja2VyIDogd2FybmluZyA6IHZhaW4KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzMyLCAzNl0gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLDVdKFszLCA1XSAoYWEpKQotLS0tLWIvYkBbNSwgOF0gKDxiPilAWzEyLCAxNl0gKDwvYj4pCi0tLS0tLS0jdGV4dChiYmJiKUBbOCwgMTJdIChiYmJiKQotLS0tLWJyQFsxNiwgMjBdICg8YnI+KQotLS0tLWkvaUBbMjAsIDIzXSAoPGk+KUBbMjYsIDMwXSAoPC9pPikKLS0tLS0tLSN0ZXh0KGNjYylAWzIzLCAyNl0gKGNjYykKLS0tLS0jdGV4dChkZSlAWzMwLDMyXShbMzAsIDMyXSAoZGUpKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q2LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDYudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTE3NWY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDYudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDYKLVNvdXJjZSA6Ci08cD5hYWJiYmJjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTJdIChhYWJiYmJjY2MpCi1bMTIsIDE2XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTIsIDE2XSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsNV0oWzMsIDEyXSAoYWFiYmJiY2NjKSkKLS0tLS0jdGV4dChiYmJiKUBbNSw5XShbMywgMTJdIChhYWJiYmJjY2MpKQotLS0tLSN0ZXh0KGNjYylAWzksMTJdKFszLCAxMl0gKGFhYmJiYmNjYykpCi0KLVNvdXJjZSA6Ci08cD5hYWJiYmJkY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDEzXSAoYWFiYmJiZGNjYykKLVsxMywgMTddICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMywgMTddICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMyw1XShbMywgMTNdIChhYWJiYmJkY2NjKSkKLS0tLS0jdGV4dChiYmJiZClAWzUsMTBdKFszLCAxM10gKGFhYmJiYmRjY2MpKQotLS0tLSN0ZXh0KGNjYylAWzEwLDEzXShbMywgMTNdIChhYWJiYmJkY2NjKSkKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0Ny50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q3LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYzOWU3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q3LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q3Ci1Tb3VyY2UgOgotPHA+YWFhYWJiYmI8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTFdIChhYWFhYmJiYikKLVsxMSwgMTVdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMSwgMTVdICg8L3A+KQotLS0tLSN0ZXh0KGFhYWEpQFszLDddKFszLCAxMV0gKGFhYWFiYmJiKSkKLS0tLS0jdGV4dChiYmJiKUBbNywxMV0oWzMsIDExXSAoYWFhYWJiYmIpKQotCi1Tb3VyY2UgOgotPHA+YWFhYmI8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgOF0gKGFhYWJiKQotWzgsIDEyXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbOCwgMTJdICg8L3A+KQotLS0tLSN0ZXh0KGFhYWJiKUBbMywgOF0gKGFhYWJiKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q4LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDgudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTRlNzgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDgudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDgKLVNvdXJjZSA6Ci08cD5hYWFhYmJiYjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxMV0gKGFhYWFiYmJiKQotWzExLCAxNV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzExLCAxNV0gKDwvcD4pCi0tLS0tI3RleHQoYWFhYSlAWzMsN10oWzMsIDExXSAoYWFhYWJiYmIpKQotLS0tLSN0ZXh0KGJiYmIpQFs3LDExXShbMywgMTFdIChhYWFhYmJiYikpCi0KLVNvdXJjZSA6Ci08cD5hYjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoYWIpCi1bNSwgOV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzUsIDldICg8L3A+KQotLS0tLSN0ZXh0KGFiKUBbMywgNV0gKGFiKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRhYmxlVGVzdC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRhYmxlVGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4NGViZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UYWJsZVRlc3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRhYmxlVGVzdAotU291cmNlIDoKLTxodG1sPjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxM10gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWh0bWwvaHRtbEBbMCwgNl0gKDxodG1sPilAWzYsIDEzXSAoPC9odG1sPikKLQotU291cmNlIDoKLTxodG1sPjxib2R5PjwvYm9keT48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8aHRtbD4pCi1bNiwgMTJdICg8Ym9keT4pCi1bMTIsIDE5XSAoPC9ib2R5PikKLVsxOSwgMjZdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFsxOSwgMjZdICg8L2h0bWw+KQotLS0tLWJvZHkvYm9keUBbNiwgMTJdICg8Ym9keT4pQFsxMiwgMTldICg8L2JvZHk+KQotCi1Tb3VyY2UgOgotPGh0bWw+PGJvZHk+PHRhYmxlIGJvcmRlcj0iMSI+PHRyPjx0ZD48L3RkPjx0ZD48L3RkPjwvdHI+PHRyPjx0ZD48L3RkPjx0ZD48L3RkPjwvdHI+PC90YWJsZT48L2JvZHk+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEyXSAoPGJvZHk+KQotWzEyLCAzMF0gKDx0YWJsZSBib3JkZXI9IjEiPikKLVszMCwgMzRdICg8dHI+KQotWzM0LCAzOF0gKDx0ZD4pCi1bMzgsIDQzXSAoPC90ZD4pCi1bNDMsIDQ3XSAoPHRkPikKLVs0NywgNTJdICg8L3RkPikKLVs1MiwgNTddICg8L3RyPikKLVs1NywgNjFdICg8dHI+KQotWzYxLCA2NV0gKDx0ZD4pCi1bNjUsIDcwXSAoPC90ZD4pCi1bNzAsIDc0XSAoPHRkPikKLVs3NCwgNzldICg8L3RkPikKLVs3OSwgODRdICg8L3RyPikKLVs4NCwgOTJdICg8L3RhYmxlPikKLVs5MiwgOTldICg8L2JvZHk+KQotWzk5LCAxMDZdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFs5OSwgMTA2XSAoPC9odG1sPikKLS0tLS1ib2R5L2JvZHlAWzYsIDEyXSAoPGJvZHk+KUBbOTIsIDk5XSAoPC9ib2R5PikKLS0tLS0tLXRhYmxlL3RhYmxlQFsxMiwgMzBdICg8dGFibGUgYm9yZGVyJiM2MTsiMSI+KUBbODQsIDkyXSAoPC90YWJsZT4pCi0tLS0tLS0tLXRyL3RyQFszMCwgMzRdICg8dHI+KUBbNTIsIDU3XSAoPC90cj4pCi0tLS0tLS0tLS0tdGQvdGRAWzM0LCAzOF0gKDx0ZD4pQFszOCwgNDNdICg8L3RkPikKLS0tLS0tLS0tLS10ZC90ZEBbNDMsIDQ3XSAoPHRkPilAWzQ3LCA1Ml0gKDwvdGQ+KQotLS0tLS0tLS10ci90ckBbNTcsIDYxXSAoPHRyPilAWzc5LCA4NF0gKDwvdHI+KQotLS0tLS0tLS0tLXRkL3RkQFs2MSwgNjVdICg8dGQ+KUBbNjUsIDcwXSAoPC90ZD4pCi0tLS0tLS0tLS0tdGQvdGRAWzcwLCA3NF0gKDx0ZD4pQFs3NCwgNzldICg8L3RkPikKLQotU291cmNlIDoKLTxodG1sPjxib2R5Pjx0YWJsZSBib3JkZXI9IjEiPjx0cj48dGQ+PC90ZD48dGQ+PC90ZD48L3RyPjx0cj48dGQ+PC90ZD48dGQ+PGZvbnQgY29sb3I9InJlZCI+dGV4dDwvZm9udD48L3RkPjwvdHI+PC90YWJsZT48L2JvZHk+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEyXSAoPGJvZHk+KQotWzEyLCAzMF0gKDx0YWJsZSBib3JkZXI9IjEiPikKLVszMCwgMzRdICg8dHI+KQotWzM0LCAzOF0gKDx0ZD4pCi1bMzgsIDQzXSAoPC90ZD4pCi1bNDMsIDQ3XSAoPHRkPikKLVs0NywgNTJdICg8L3RkPikKLVs1MiwgNTddICg8L3RyPikKLVs1NywgNjFdICg8dHI+KQotWzYxLCA2NV0gKDx0ZD4pCi1bNjUsIDcwXSAoPC90ZD4pCi1bNzAsIDc0XSAoPHRkPikKLVs3NCwgOTJdICg8Zm9udCBjb2xvcj0icmVkIj4pCi1bOTIsIDk2XSAodGV4dCkKLVs5NiwgMTAzXSAoPC9mb250PikKLVsxMDMsIDEwOF0gKDwvdGQ+KQotWzEwOCwgMTEzXSAoPC90cj4pCi1bMTEzLCAxMjFdICg8L3RhYmxlPikKLVsxMjEsIDEyOF0gKDwvYm9keT4pCi1bMTI4LCAxMzVdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFsxMjgsIDEzNV0gKDwvaHRtbD4pCi0tLS0tYm9keS9ib2R5QFs2LCAxMl0gKDxib2R5PilAWzEyMSwgMTI4XSAoPC9ib2R5PikKLS0tLS0tLXRhYmxlL3RhYmxlQFsxMiwgMzBdICg8dGFibGUgYm9yZGVyJiM2MTsiMSI+KUBbMTEzLCAxMjFdICg8L3RhYmxlPikKLS0tLS0tLS0tdHIvdHJAWzMwLCAzNF0gKDx0cj4pQFs1MiwgNTddICg8L3RyPikKLS0tLS0tLS0tLS10ZC90ZEBbMzQsIDM4XSAoPHRkPilAWzM4LCA0M10gKDwvdGQ+KQotLS0tLS0tLS0tLXRkL3RkQFs0MywgNDddICg8dGQ+KUBbNDcsIDUyXSAoPC90ZD4pCi0tLS0tLS0tLXRyL3RyQFs1NywgNjFdICg8dHI+KUBbMTA4LCAxMTNdICg8L3RyPikKLS0tLS0tLS0tLS10ZC90ZEBbNjEsIDY1XSAoPHRkPilAWzY1LCA3MF0gKDwvdGQ+KQotLS0tLS0tLS0tLXRkL3RkQFs3MCwgNzRdICg8dGQ+KUBbMTAzLCAxMDhdICg8L3RkPikKLS0tLS0tLS0tLS0tLWZvbnQvZm9udEBbNzQsIDkyXSAoPGZvbnQgY29sb3ImIzYxOyJyZWQiPilAWzk2LCAxMDNdICg8L2ZvbnQ+KQotLS0tLS0tLS0tLS0tLS0jdGV4dCh0ZXh0KUBbOTIsIDk2XSAodGV4dCkKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg5MmNmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0Ci1Tb3VyY2UgOgotPGE+aGVsbG8gJmFtcDtsdDs8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgOV0gKGhlbGxvICkKLVs5LCAxNF0gKCZhbXA7KQotWzE0LCAxN10gKGx0OykKLVsxNywgMjFdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsxNywgMjFdICg8L2E+KQotLS0tLSN0ZXh0KGhlbGxvICZsdDspQHtbMywgOV0gKGhlbGxvICksWzksIDE0XSAoJmFtcDspLFsxNCwgMTddIChsdDspfQotCi1oZWxsbyAmbHQ7CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0Mi50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0Mi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMmJhNTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdDIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGV4dFRlc3QyCi1Tb3VyY2UgOgotPGE+aGVsbG8gJmFtcDtsdDs8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgOV0gKGhlbGxvICkKLVs5LCAxNF0gKCZhbXA7KQotWzE0LCAxN10gKGx0OykKLVsxNywgMjFdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsxNywgMjFdICg8L2E+KQotLS0tLSN0ZXh0KGhlbGxvICZsdDspQHtbMywgOV0gKGhlbGxvICksWzksIDE0XSAoJmFtcDspLFsxNCwgMTddIChsdDspfQotCi1oZWxsbyAmbHQ7CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0My50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0My50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMDRhM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdDMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGV4dFRlc3QzCi1JbnZhbGlkIGNoYXJhY3RlciAoJzwnKSBmb3VuZAotU291cmNlIDoKLTxhPnRleHQ8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgN10gKHRleHQpCi1bNywgMTFdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFs3LCAxMV0gKDwvYT4pCi0tLS0tI3RleHQodGV4dClAWzMsIDddICh0ZXh0KQotCi1Tb3VyY2UgOgotPGE+aGVsbG8gJmx0OzwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA5XSAoaGVsbG8gKQotWzksIDEzXSAoJmx0OykKLVsxMywgMTddICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsxMywgMTddICg8L2E+KQotLS0tLSN0ZXh0KGhlbGxvIDwpQHtbMywgOV0gKGhlbGxvICksWzksIDEzXSAoJmx0Oyl9Ci0KLUludmFsaWQgY2hhcmFjdGVyICgnJicpIGZvdW5kCi1Tb3VyY2UgOgotPGE+aGVsbG8gJmx0OzwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA5XSAoaGVsbG8gKQotWzksIDEzXSAoJmx0OykKLVsxMywgMTddICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsxMywgMTddICg8L2E+KQotLS0tLSN0ZXh0KGhlbGxvIDwpQHtbMywgOV0gKGhlbGxvICksWzksIDEzXSAoJmx0Oyl9Ci0KLVNvdXJjZSA6Ci08YT5oZWxsbyAmIzY1OzwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA5XSAoaGVsbG8gKQotWzksIDE0XSAoJiM2NTspCi1bMTQsIDE4XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTQsIDE4XSAoPC9hPikKLS0tLS0jdGV4dChoZWxsbyBBKUB7WzMsIDldIChoZWxsbyApLFs5LCAxNF0gKCYjNjU7KX0KLQotSW52YWxpZCBjaGFyYWN0ZXIgKCcmJykgZm91bmQKLVNvdXJjZSA6Ci08YT5oZWxsbyAmIzY1OzwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA5XSAoaGVsbG8gKQotWzksIDE0XSAoJiM2NTspCi1bMTQsIDE4XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTQsIDE4XSAoPC9hPikKLS0tLS0jdGV4dChoZWxsbyBBKUB7WzMsIDldIChoZWxsbyApLFs5LCAxNF0gKCYjNjU7KX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjlmZTk4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE5NyArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdAotU291cmNlIDoKLTxodG1sPjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxM10gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWh0bWwvaHRtbEBbMCwgNl0gKDxodG1sPilAWzYsIDEzXSAoPC9odG1sPikKLQotU291cmNlIDoKLTxodG1sPjxib2R5PjwvYm9keT48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8aHRtbD4pCi1bNiwgMTJdICg8Ym9keT4pCi1bMTIsIDE5XSAoPC9ib2R5PikKLVsxOSwgMjZdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFsxOSwgMjZdICg8L2h0bWw+KQotLS0tLWJvZHkvYm9keUBbNiwgMTJdICg8Ym9keT4pQFsxMiwgMTldICg8L2JvZHk+KQotCi1Tb3VyY2UgOgotPGh0bWw+PGJvZHk+PHA+PC9wPjwvYm9keT48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8aHRtbD4pCi1bNiwgMTJdICg8Ym9keT4pCi1bMTIsIDE1XSAoPHA+KQotWzE1LCAxOV0gKDwvcD4pCi1bMTksIDI2XSAoPC9ib2R5PikKLVsyNiwgMzNdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFsyNiwgMzNdICg8L2h0bWw+KQotLS0tLWJvZHkvYm9keUBbNiwgMTJdICg8Ym9keT4pQFsxOSwgMjZdICg8L2JvZHk+KQotLS0tLS0tcC9wQFsxMiwgMTVdICg8cD4pQFsxNSwgMTldICg8L3A+KQotCi1Tb3VyY2UgOgotPGh0bWw+PGJvZHk+PHA+dGV4dDwvcD48L2JvZHk+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEyXSAoPGJvZHk+KQotWzEyLCAxNV0gKDxwPikKLVsxNSwgMTldICh0ZXh0KQotWzE5LCAyM10gKDwvcD4pCi1bMjMsIDMwXSAoPC9ib2R5PikKLVszMCwgMzddICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFszMCwgMzddICg8L2h0bWw+KQotLS0tLWJvZHkvYm9keUBbNiwgMTJdICg8Ym9keT4pQFsyMywgMzBdICg8L2JvZHk+KQotLS0tLS0tcC9wQFsxMiwgMTVdICg8cD4pQFsxOSwgMjNdICg8L3A+KQotLS0tLS0tLS0jdGV4dCh0ZXh0KUBbMTUsIDE5XSAodGV4dCkKLQotU291cmNlIDoKLTxodG1sPjxib2R5PjxwPjxicj50ZXh0PC9wPjwvYm9keT48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8aHRtbD4pCi1bNiwgMTJdICg8Ym9keT4pCi1bMTIsIDE1XSAoPHA+KQotWzE1LCAxOV0gKDxicj4pCi1bMTksIDIzXSAodGV4dCkKLVsyMywgMjddICg8L3A+KQotWzI3LCAzNF0gKDwvYm9keT4pCi1bMzQsIDQxXSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbMzQsIDQxXSAoPC9odG1sPikKLS0tLS1ib2R5L2JvZHlAWzYsIDEyXSAoPGJvZHk+KUBbMjcsIDM0XSAoPC9ib2R5PikKLS0tLS0tLXAvcEBbMTIsIDE1XSAoPHA+KUBbMjMsIDI3XSAoPC9wPikKLS0tLS0tLS0tYnJAWzE1LCAxOV0gKDxicj4pCi0tLS0tLS0tLSN0ZXh0KHRleHQpQFsxOSwgMjNdICh0ZXh0KQotCi1Tb3VyY2UgOgotPGh0bWw+PGJvZHk+PHA+PGJyPnRleHQ8aW1nPjwvcD48L2JvZHk+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEyXSAoPGJvZHk+KQotWzEyLCAxNV0gKDxwPikKLVsxNSwgMTldICg8YnI+KQotWzE5LCAyM10gKHRleHQpCi1bMjMsIDI4XSAoPGltZz4pCi1bMjgsIDMyXSAoPC9wPikKLVszMiwgMzldICg8L2JvZHk+KQotWzM5LCA0Nl0gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWh0bWwvaHRtbEBbMCwgNl0gKDxodG1sPilAWzM5LCA0Nl0gKDwvaHRtbD4pCi0tLS0tYm9keS9ib2R5QFs2LCAxMl0gKDxib2R5PilAWzMyLCAzOV0gKDwvYm9keT4pCi0tLS0tLS1wL3BAWzEyLCAxNV0gKDxwPilAWzI4LCAzMl0gKDwvcD4pCi0tLS0tLS0tLWJyQFsxNSwgMTldICg8YnI+KQotLS0tLS0tLS0jdGV4dCh0ZXh0KUBbMTksIDIzXSAodGV4dCkKLS0tLS0tLS0taW1nQFsyMywgMjhdICg8aW1nPikKLQotU291cmNlIDoKLTxodG1sPjxib2R5PjxwPjxicj48aW1nPjwvcD48L2JvZHk+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEyXSAoPGJvZHk+KQotWzEyLCAxNV0gKDxwPikKLVsxNSwgMTldICg8YnI+KQotWzE5LCAyNF0gKDxpbWc+KQotWzI0LCAyOF0gKDwvcD4pCi1bMjgsIDM1XSAoPC9ib2R5PikKLVszNSwgNDJdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFszNSwgNDJdICg8L2h0bWw+KQotLS0tLWJvZHkvYm9keUBbNiwgMTJdICg8Ym9keT4pQFsyOCwgMzVdICg8L2JvZHk+KQotLS0tLS0tcC9wQFsxMiwgMTVdICg8cD4pQFsyNCwgMjhdICg8L3A+KQotLS0tLS0tLS1ickBbMTUsIDE5XSAoPGJyPikKLS0tLS0tLS0taW1nQFsxOSwgMjRdICg8aW1nPikKLQotU291cmNlIDoKLTxodG1sPjxib2R5PjxwPjxicj50ZXh0PGltZz48L3A+PC9ib2R5PjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxMl0gKDxib2R5PikKLVsxMiwgMTVdICg8cD4pCi1bMTUsIDE5XSAoPGJyPikKLVsxOSwgMjNdICh0ZXh0KQotWzIzLCAyOF0gKDxpbWc+KQotWzI4LCAzMl0gKDwvcD4pCi1bMzIsIDM5XSAoPC9ib2R5PikKLVszOSwgNDZdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFszOSwgNDZdICg8L2h0bWw+KQotLS0tLWJvZHkvYm9keUBbNiwgMTJdICg8Ym9keT4pQFszMiwgMzldICg8L2JvZHk+KQotLS0tLS0tcC9wQFsxMiwgMTVdICg8cD4pQFsyOCwgMzJdICg8L3A+KQotLS0tLS0tLS1ickBbMTUsIDE5XSAoPGJyPikKLS0tLS0tLS0tI3RleHQodGV4dClAWzE5LCAyM10gKHRleHQpCi0tLS0tLS0tLWltZ0BbMjMsIDI4XSAoPGltZz4pCi0KLVNvdXJjZSA6Ci08aHRtbD48Ym9keT48L2JvZHk+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEyXSAoPGJvZHk+KQotWzEyLCAxOV0gKDwvYm9keT4pCi1bMTksIDI2XSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbMTksIDI2XSAoPC9odG1sPikKLS0tLS1ib2R5L2JvZHlAWzYsIDEyXSAoPGJvZHk+KUBbMTIsIDE5XSAoPC9ib2R5PikKLQotU291cmNlIDoKLTxodG1sPjxib2R5PjxwPjxicj50ZXh0PGltZz48L3A+PC9ib2R5PjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxMl0gKDxib2R5PikKLVsxMiwgMTVdICg8cD4pCi1bMTUsIDE5XSAoPGJyPikKLVsxOSwgMjNdICh0ZXh0KQotWzIzLCAyOF0gKDxpbWc+KQotWzI4LCAzMl0gKDwvcD4pCi1bMzIsIDM5XSAoPC9ib2R5PikKLVszOSwgNDZdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFszOSwgNDZdICg8L2h0bWw+KQotLS0tLWJvZHkvYm9keUBbNiwgMTJdICg8Ym9keT4pQFszMiwgMzldICg8L2JvZHk+KQotLS0tLS0tcC9wQFsxMiwgMTVdICg8cD4pQFsyOCwgMzJdICg8L3A+KQotLS0tLS0tLS1ickBbMTUsIDE5XSAoPGJyPikKLS0tLS0tLS0tI3RleHQodGV4dClAWzE5LCAyM10gKHRleHQpCi0tLS0tLS0tLWltZ0BbMjMsIDI4XSAoPGltZz4pCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTAudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGY3ZGEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEwCi1Tb3VyY2UgOgotPGEgYj0iYyI+PGI+PC9iPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgOV0gKDxhIGI9ImMiPikKLVs5LCAxMl0gKDxiPikKLVsxMiwgMTZdICg8L2I+KQotWzE2LCAyMF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgOV0gKDxhIGImIzYxOyJjIj4pQFsxNiwgMjBdICg8L2E+KQotLS0tLWIvYkBbOSwgMTJdICg8Yj4pQFsxMiwgMTZdICg8L2I+KQotCi1JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOgotPGI+Ci0wKDwpdHJ1ZQotMChiKXRydWUKLTAoPil0cnVlCi0KLVNvdXJjZSA6Ci08YSBiPSJjIj48YiBjPSJkIj48L2I+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA5XSAoPGEgYj0iYyI+KQotWzksIDE4XSAoPGIgYz0iZCI+KQotWzE4LCAyMl0gKDwvYj4pCi1bMjIsIDI2XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCA5XSAoPGEgYiYjNjE7ImMiPilAWzIyLCAyNl0gKDwvYT4pCi0tLS0tYi9iQFs5LCAxOF0gKDxiIGMmIzYxOyJkIj4pQFsxOCwgMjJdICg8L2I+KQotCi1JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOgotPGIgYz0iZCI+Ci0wKDwpdHJ1ZQotMChiKXRydWUKLTAoYyl0cnVlCi0wKD0pdHJ1ZQotMCgiZCIpdHJ1ZQotMCg+KXRydWUKLQotU291cmNlIDoKLTxhIGI9ImNkIj48YiBjPSJkIj48L2I+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxMF0gKDxhIGI9ImNkIj4pCi1bMTAsIDE5XSAoPGIgYz0iZCI+KQotWzE5LCAyM10gKDwvYj4pCi1bMjMsIDI3XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAxMF0gKDxhIGImIzYxOyJjZCI+KUBbMjMsIDI3XSAoPC9hPikKLS0tLS1iL2JAWzEwLCAxOV0gKDxiIGMmIzYxOyJkIj4pQFsxOSwgMjNdICg8L2I+KQotCi1JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOgotPGIgYz0iZCI+Ci0wKDwpdHJ1ZQotMChiKXRydWUKLTAoYyl0cnVlCi0wKD0pdHJ1ZQotMCgiZCIpdHJ1ZQotMCg+KXRydWUKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDExLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ODhjYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDExLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTEKLVNvdXJjZSA6Ci08YT5iPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdIChiKQotWzQsIDhdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFs0LCA4XSAoPC9hPikKLS0tLS0jdGV4dChiKUBbMywgNF0gKGIpCi0KLVNvdXJjZSA6Ci08YT5iPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdIChiKQotWzQsIDhdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFs0LCA4XSAoPC9hPikKLS0tLS0jdGV4dChiKUBbMywgNF0gKGIpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMi50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTFhOGY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEyCi1Tb3VyY2UgOgotPGE+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDddICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFszLCA3XSAoPC9hPikKLQotU291cmNlIDoKLTxhPjwvYT48YT48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgN10gKDwvYT4pCi1bNywgMTBdICg8YT4pCi1bMTAsIDE0XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMywgN10gKDwvYT4pCi0tLWEvYUBbNywgMTBdICg8YT4pQFsxMCwgMTRdICg8L2E+KQotCi1Tb3VyY2UgOgotPGE+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDddICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFszLCA3XSAoPC9hPikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEzLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NTRmN2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTMKLVNvdXJjZSA6Ci08YT4KLTxiPgotPC9iPiAgPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDVdICgKLSkKLVs1LCA4XSAoPGI+KQotWzgsIDEwXSAoCi0pCi1bMTAsIDE0XSAoPC9iPikKLVsxNCwgMTZdICggICkKLVsxNiwgMjBdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsxNiwgMjBdICg8L2E+KQotLS0tLSN0ZXh0KFxyXG4pQFszLCA1XSAoXHJcbikKLS0tLS1iL2JAWzUsIDhdICg8Yj4pQFsxMCwgMTRdICg8L2I+KQotLS0tLS0tI3RleHQoXHJcbilAWzgsIDEwXSAoXHJcbikKLS0tLS0jdGV4dCggIClAWzE0LCAxNl0gKCAgKQotCi1Tb3VyY2UgOgotPGE+Ci0gIDwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA3XSAoCi0gICkKLVs3LCAxMV0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzcsIDExXSAoPC9hPikKLS0tLS0jdGV4dChcclxuKUBbMyw1XShbMywgN10gKFxyXG4gICkpCi0tLS0tI3RleHQoICApQFs1LDddKFszLCA3XSAoXHJcbiAgKSkKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDE0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxNC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNmQ1YjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDE0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTQKLVNvdXJjZSA6Ci08JT0gYWFhYSAlPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxXSAoPCkKLVsxLCA0XSAoJT0gKQotWzQsIDldIChhYWFhICkKLVs5LCAxMF0gKCUpCi1bMTAsIDExXSAoPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoPCUmIzYxOyBhYWFhICU+KUB7WzAsIDFdICg8KSxbMSwgNF0gKCUmIzYxOyApLFs0LCA5XSAoYWFhYSApLFs5LCAxMF0gKCUpLFsxMCwgMTFdICg+KX0KLQotU291cmNlIDoKLTwlID0gYWFhYSAlPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxXSAoPCkKLVsxLCA1XSAoJSA9ICkKLVs1LCAxMF0gKGFhYWEgKQotWzEwLCAxMV0gKCUpCi1bMTEsIDEyXSAoPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoPCUgJiM2MTsgYWFhYSAlPilAe1swLCAxXSAoPCksWzEsIDVdICglICYjNjE7ICksWzUsIDEwXSAoYWFhYSApLFsxMCwgMTFdICglKSxbMTEsIDEyXSAoPil9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QyLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRkY2YxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0Mi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QyCi1Tb3VyY2UgOgotPEhUTUw+Ci08SEVBRD48L0hFQUQ+Ci08Qk9EWT48L0JPRFk+Ci08L0hUTUw+Ci0KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxIVE1MPikKLVs2LCA4XSAoCi0pCi1bOCwgMTRdICg8SEVBRD4pCi1bMTQsIDIxXSAoPC9IRUFEPikKLVsyMSwgMjNdICgKLSkKLVsyMywgMjldICg8Qk9EWT4pCi1bMjksIDM2XSAoPC9CT0RZPikKLVszNiwgMzhdICgKLSkKLVszOCwgNDVdICg8L0hUTUw+KQotWzQ1LCA0N10gKAotKQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1IVE1ML0hUTUxAWzAsIDZdICg8SFRNTD4pQFszOCwgNDVdICg8L0hUTUw+KQotLS0tLSN0ZXh0KFxyXG4pQFs2LCA4XSAoXHJcbikKLS0tLS1IRUFEL0hFQURAWzgsIDE0XSAoPEhFQUQ+KUBbMTQsIDIxXSAoPC9IRUFEPikKLS0tLS0jdGV4dChcclxuKUBbMjEsIDIzXSAoXHJcbikKLS0tLS1CT0RZL0JPRFlAWzIzLCAyOV0gKDxCT0RZPilAWzI5LCAzNl0gKDwvQk9EWT4pCi0tLS0tI3RleHQoXHJcbilAWzM2LCAzOF0gKFxyXG4pCi0tLSN0ZXh0KFxyXG4pQFs0NSwgNDddIChcclxuKQotCi1Tb3VyY2UgOgotPEhUTUw+Ci08SEVBRD4KLTxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iVXBkYXRlciBUZXN0IDIiPgotPC9IRUFEPgotPEJPRFk+PC9CT0RZPgotPC9IVE1MPgotCi0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8SFRNTD4pCi1bNiwgOF0gKAotKQotWzgsIDE0XSAoPEhFQUQ+KQotWzE0LCAxNl0gKAotKQotWzE2LCA2NF0gKDxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iVXBkYXRlciBUZXN0IDIiPikKLVs2NCwgNjZdICgKLSkKLVs2NiwgNzNdICg8L0hFQUQ+KQotWzczLCA3NV0gKAotKQotWzc1LCA4MV0gKDxCT0RZPikKLVs4MSwgODhdICg8L0JPRFk+KQotWzg4LCA5MF0gKAotKQotWzkwLCA5N10gKDwvSFRNTD4pCi1bOTcsIDk5XSAoCi0pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLUhUTUwvSFRNTEBbMCwgNl0gKDxIVE1MPilAWzkwLCA5N10gKDwvSFRNTD4pCi0tLS0tI3RleHQoXHJcbilAWzYsIDhdIChcclxuKQotLS0tLUhFQUQvSEVBREBbOCwgMTRdICg8SEVBRD4pQFs2NiwgNzNdICg8L0hFQUQ+KQotLS0tLS0tI3RleHQoXHJcbilAWzE0LCAxNl0gKFxyXG4pCi0tLS0tLS1tZXRhQFsxNiwgNjRdICg8bWV0YSBuYW1lJiM2MTsiR0VORVJBVE9SIiBjb250ZW50JiM2MTsiVXBkYXRlciBUZXN0IDIiPikKLS0tLS0tLSN0ZXh0KFxyXG4pQFs2NCwgNjZdIChcclxuKQotLS0tLSN0ZXh0KFxyXG4pQFs3MywgNzVdIChcclxuKQotLS0tLUJPRFkvQk9EWUBbNzUsIDgxXSAoPEJPRFk+KUBbODEsIDg4XSAoPC9CT0RZPikKLS0tLS0jdGV4dChcclxuKUBbODgsIDkwXSAoXHJcbikKLS0tI3RleHQoXHJcbilAWzk3LCA5OV0gKFxyXG4pCi0KLVNvdXJjZSA6Ci08SFRNTD4KLTxIRUFEPgotPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJVcGRhdGVyIFRlc3QgMiI+Ci08dGl0bGU+PC90aXRsZT48L0hFQUQ+Ci08Qk9EWT48L0JPRFk+Ci08L0hUTUw+Ci0KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxIVE1MPikKLVs2LCA4XSAoCi0pCi1bOCwgMTRdICg8SEVBRD4pCi1bMTQsIDE2XSAoCi0pCi1bMTYsIDY0XSAoPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJVcGRhdGVyIFRlc3QgMiI+KQotWzY0LCA2Nl0gKAotKQotWzY2LCA3M10gKDx0aXRsZT4pCi1bNzMsIDgxXSAoPC90aXRsZT4pCi1bODEsIDg4XSAoPC9IRUFEPikKLVs4OCwgOTBdICgKLSkKLVs5MCwgOTZdICg8Qk9EWT4pCi1bOTYsIDEwM10gKDwvQk9EWT4pCi1bMTAzLCAxMDVdICgKLSkKLVsxMDUsIDExMl0gKDwvSFRNTD4pCi1bMTEyLCAxMTRdICgKLSkKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tSFRNTC9IVE1MQFswLCA2XSAoPEhUTUw+KUBbMTA1LCAxMTJdICg8L0hUTUw+KQotLS0tLSN0ZXh0KFxyXG4pQFs2LCA4XSAoXHJcbikKLS0tLS1IRUFEL0hFQURAWzgsIDE0XSAoPEhFQUQ+KUBbODEsIDg4XSAoPC9IRUFEPikKLS0tLS0tLSN0ZXh0KFxyXG4pQFsxNCwgMTZdIChcclxuKQotLS0tLS0tbWV0YUBbMTYsIDY0XSAoPG1ldGEgbmFtZSYjNjE7IkdFTkVSQVRPUiIgY29udGVudCYjNjE7IlVwZGF0ZXIgVGVzdCAyIj4pCi0tLS0tLS0jdGV4dChcclxuKUBbNjQsIDY2XSAoXHJcbikKLS0tLS0tLXRpdGxlL3RpdGxlQFs2NiwgNzNdICg8dGl0bGU+KUBbNzMsIDgxXSAoPC90aXRsZT4pCi0tLS0tLS0tLSN0ZXh0KCkKLS0tLS0jdGV4dChcclxuKUBbODgsIDkwXSAoXHJcbikKLS0tLS1CT0RZL0JPRFlAWzkwLCA5Nl0gKDxCT0RZPilAWzk2LCAxMDNdICg8L0JPRFk+KQotLS0tLSN0ZXh0KFxyXG4pQFsxMDMsIDEwNV0gKFxyXG4pCi0tLSN0ZXh0KFxyXG4pQFsxMTIsIDExNF0gKFxyXG4pCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QzLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFjNzNhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0My50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDMKLVNvdXJjZSA6Ci08YT48Yj48L2I+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDZdICg8Yj4pCi1bNiwgMTBdICg8L2I+KQotWzEwLCAxNF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzEwLCAxNF0gKDwvYT4pCi0tLS0tYi9iQFszLCA2XSAoPGI+KUBbNiwgMTBdICg8L2I+KQotCi1Tb3VyY2UgOgotPGE+Ci08Yj48L2I+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdICgKLSkKLVs0LCA3XSAoPGI+KQotWzcsIDExXSAoPC9iPikKLVsxMSwgMTVdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsxMSwgMTVdICg8L2E+KQotLS0tLSN0ZXh0KFxuKUBbMywgNF0gKFxuKQotLS0tLWIvYkBbNCwgN10gKDxiPilAWzcsIDExXSAoPC9iPikKLQotU291cmNlIDoKLTxhPgotPGI+PC9iPgotPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdICgKLSkKLVs0LCA3XSAoPGI+KQotWzcsIDExXSAoPC9iPikKLVsxMSwgMTJdICgKLSkKLVsxMiwgMTZdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsxMiwgMTZdICg8L2E+KQotLS0tLSN0ZXh0KFxuKUBbMywgNF0gKFxuKQotLS0tLWIvYkBbNCwgN10gKDxiPilAWzcsIDExXSAoPC9iPikKLS0tLS0jdGV4dChcbilAWzExLCAxMl0gKFxuKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMGQwMjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q0Ci1Tb3VyY2UgOgotPGE+YjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoYikKLVs0LCA4XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbNCwgOF0gKDwvYT4pCi0tLS0tI3RleHQoYilAWzMsIDRdIChiKQotCi1Tb3VyY2UgOgotPGE+YjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoYikKLVs0LCA4XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbNCwgOF0gKDwvYT4pCi0tLS0tI3RleHQoYilAWzMsIDRdIChiKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NS50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZTEzZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q1Ci1Tb3VyY2UgOgotPGE+JmFwb3M7PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDldICgmYXBvczspCi1bOSwgMTNdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFs5LCAxM10gKDwvYT4pCi0tLS0tI3RleHQoJylAWzMsIDldICgmYXBvczspCi0KLVNvdXJjZSA6Ci08YT4mYXBvczs8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgOV0gKCZhcG9zOykKLVs5LCAxM10gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzksIDEzXSAoPC9hPikKLS0tLS0jdGV4dCgnKUBbMywgOV0gKCZhcG9zOykKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDYudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDYudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWM0ZDdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q2LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NgotU291cmNlIDoKLTxhPmI8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKGIpCi1bNCwgOF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzQsIDhdICg8L2E+KQotLS0tLSN0ZXh0KGIpQFszLCA0XSAoYikKLQotU291cmNlIDoKLTxhPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA3XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMywgN10gKDwvYT4pCi0KLVNvdXJjZSA6Ci08YT5iPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdIChiKQotWzQsIDhdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFs0LCA4XSAoPC9hPikKLS0tLS0jdGV4dChiKUBbMywgNF0gKGIpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q3LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q3LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI0YTQ4Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0Ny50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDcKLVNvdXJjZSA6Ci08UD48Qj48L0I+PC9QPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPFA+KQotWzMsIDZdICg8Qj4pCi1bNiwgMTBdICg8L0I+KQotWzEwLCAxNF0gKDwvUD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLVAvUEBbMCwgM10gKDxQPilAWzEwLCAxNF0gKDwvUD4pCi0tLS0tQi9CQFszLCA2XSAoPEI+KUBbNiwgMTBdICg8L0I+KQotCi1Tb3VyY2UgOgotPFA+PEI+PC9CPjxCPjwvQj48L1A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8UD4pCi1bMywgNl0gKDxCPikKLVs2LCAxMF0gKDwvQj4pCi1bMTAsIDEzXSAoPEI+KQotWzEzLCAxN10gKDwvQj4pCi1bMTcsIDIxXSAoPC9QPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tUC9QQFswLCAzXSAoPFA+KUBbMTcsIDIxXSAoPC9QPikKLS0tLS1CL0JAWzMsIDZdICg8Qj4pQFs2LCAxMF0gKDwvQj4pCi0tLS0tQi9CQFsxMCwgMTNdICg8Qj4pQFsxMywgMTddICg8L0I+KQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0OC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0OC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1ZjZlMzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDgudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q4Ci1Tb3VyY2UgOgotPFA+PC9QPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPFA+KQotWzMsIDddICg8L1A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1QL1BAWzAsIDNdICg8UD4pQFszLCA3XSAoPC9QPikKLQotU291cmNlIDoKLTxQPjwvUD48UD48L1A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8UD4pCi1bMywgN10gKDwvUD4pCi1bNywgMTBdICg8UD4pCi1bMTAsIDE0XSAoPC9QPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tUC9QQFswLCAzXSAoPFA+KUBbMywgN10gKDwvUD4pCi0tLVAvUEBbNywgMTBdICg8UD4pQFsxMCwgMTRdICg8L1A+KQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0OS50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0OS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNGE4YWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDkudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q5Ci1Tb3VyY2UgOgotPHN0eWxlPjwvc3R5bGU+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDddICg8c3R5bGU+KQotWzcsIDE1XSAoPC9zdHlsZT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXN0eWxlL3N0eWxlQFswLCA3XSAoPHN0eWxlPilAWzcsIDE1XSAoPC9zdHlsZT4pCi0KLVNvdXJjZSA6Ci08c3R5bGU+cDwvc3R5bGU+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDddICg8c3R5bGU+KQotWzcsIDhdIChwKQotWzgsIDE2XSAoPC9zdHlsZT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXN0eWxlL3N0eWxlQFswLCA3XSAoPHN0eWxlPilAWzgsIDE2XSAoPC9zdHlsZT4pCi0tLS0tI3RleHQocClAWzcsIDhdIChwKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL2FOb3RlT25QYXJzZXJSZXN1bHRzRGlyZWN0b3JpZXMudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9hTm90ZU9uUGFyc2VyUmVzdWx0c0RpcmVjdG9yaWVzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUyNDE4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL2FOb3RlT25QYXJzZXJSZXN1bHRzRGlyZWN0b3JpZXMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotVGhlc2Ugbm90ZXMgcGVydGFpbiB0byB0aGUgdjIwMDQxMjEwXzIzMDAgdmVyc2lvbiAKLWluIENWUyByZXBvc2l0b3J5LiAKLQotTm90ZSwgdGhlICIwNS0yNCIgZGlyZWN0b3J5ICpzaG91bGQqIG1hdGNoCi10aGUgcGFyc2VyIHJlc3VsdHMgZnJvbSBwYXJzZXIgb2Ygc2FtZSBkYXRlLCAKLSpidXQqIGFmdGVyIHRyYW5zaXRpb24gdG8gb3JnLmVjbGlwc2UsIGl0IHNlZW1zIAotdGhlIGNhc2Ugb2YgdGFncyBpcyBkaWZmZXJlbnQuIE9kZGx5LCBzZWVtcyAKLWxpa2UgdGhlIGN1cnJlbnQgdHJlYXRlbWVudCBvZiBjYXNlIGlzIGNvcnJlY3QsIAotc28gLi4uIDEyLTEwIHBhcnNlciByZXN1bHRzIHNob3VsZCBiZSB1c2VkIGFzIAotcmVmZXJlbmNlLCB1bmxlc3Mgc29tZSBuZXcgaW5zaWdodCBpcyBnYWluZWQuIAotSXQgZG9lcyBtYXRjaCBwcmV2aW91cyB2ZXJzaW9uIGV4Y2VwdCBmb3IgY2FzZS4gCi0oQW5kLCB0aGUgcHJldmlvdXMgdmVyc2lvbiB3YXMgY2hhbmdlZCAiYnkgaGFuZCIgCi10byBhY2NvbWlkYXRlIHRoZSB0cmFuc2l0aW9uIHRvIG9yZy5lY2xpcHNlKS4gCi0KLVRPRE86IHRoaXMgZmlsZSwgYW5kIDA1LTI0IHJlZmVyZW5jZSBkaXJlY3RvcnkKLWNhbiBiZSBkZWxldGVkIGFyb3VuZCBNMywgb25jZSB3aG9sZSB0ZWFtIGhhcyAKLXJldmlld2VkIGFuZCBjb25maWRlbnQgMTItMTAgdmVyc2lvbiBpcyBjb3JyZWN0Ci1yZWZlcmVuY2UuIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVjNTk4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5NYXkgMiwgMjAwNjwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZGY2MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS5odG1sY29yZXRlc3RzLmphciA9IHNyYy8KLW91dHB1dC5odG1sY29yZXRlc3RzLmphciA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IGh0bWxjb3JldGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThiMzc3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZS5vcmcKLUJ1bmRsZS1OYW1lLjAgPSBIVE1MIENvcmUgVGVzdHMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNmFlZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLQotCTwhLS0gbGVhdmUgdGhpcyBlbXB0eSBwbHVnaW4ueG1sIGhlcmUgZm9yIG5vdywgCi0JCWJlY2F1c2Ugd2UgZG8gYSBmdW5reSB0aGluZyAKLQkJdG8gZmluZCBpdCBkdXJpbmcgdGhlIHRlc3RzIC0tPgotCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvSFRNTENvcmVUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvSFRNTENvcmVUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMwOTUyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL0hUTUxDb3JlVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5taXNjLkhUTUxDb3JlUHJlZmVyZW5jZXNUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMubWlzYy5IVE1MVGFnSW5mb1Rlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5tb2RlbC5CVUcxMjQ4MzVTZXRTdHlsZUF0dHJpYnV0ZVZhbHVlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1vZGVsLkdldE92ZXJyaWRlU3R5bGVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMubW9kZWwuTW9kZWxNb2RpZmljYXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMubW9kZWwuVGVzdEZvck5QRUluQ1NTQ3JlYXRpb247Ci0KLQotCi1wdWJsaWMgY2xhc3MgSFRNTENvcmVUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCi0JLyoqCi0JICogdG8gZ2V0IHBpY2tlZCB1cCBieSBCVlQKLQkgKiAKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IEhUTUxDb3JlVGVzdFN1aXRlKCk7Ci0JfQotCi0JcHVibGljIEhUTUxDb3JlVGVzdFN1aXRlKCkgewotCQlzdXBlcigiSFRNTCBDb3JlIFRlc3RTdWl0ZSIpOwotCi0JCWFkZFRlc3QoTW9kZWxQYXJzZXJUZXN0cy5zdWl0ZSgpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEhUTUxDb3JlUHJlZmVyZW5jZXNUZXN0LmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShIVE1MVGFnSW5mb1Rlc3QuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKE1vZGVsTW9kaWZpY2F0aW9ucy5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdEZvck5QRUluQ1NTQ3JlYXRpb24uY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEdldE92ZXJyaWRlU3R5bGVUZXN0LmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShCVUcxMjQ4MzVTZXRTdHlsZUF0dHJpYnV0ZVZhbHVlVGVzdC5jbGFzcykpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL0hUTUxDb3JlVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvSFRNTENvcmVUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzdjMDA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvSFRNTENvcmVUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgSFRNTENvcmVUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIEhUTUxDb3JlVGVzdHNQbHVnaW4gcGx1Z2luOwotCS8vUmVzb3VyY2UgYnVuZGxlLgotCXByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEhUTUxDb3JlVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JCXRyeSB7Ci0JCQlyZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5TU0VNb2RlbEhUTUxUZXN0c1BsdWdpblJlc291cmNlcyIpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSFRNTENvcmVUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gSFRNTENvcmVUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9Mb2dnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwOTE5NGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9Mb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogU21hbGwgY29udmVuaWVuY2UgY2xhc3MgdG8gbG9nIG1lc3NhZ2VzIHRvIHBsdWdpbidzIGxvZyBmaWxlIGFuZCBhbHNvLCBpZiBkZXNpcmVkLAotICogdGhlIGNvbnNvbGUuIFRoaXMgY2xhc3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBjbGFzc2VzIGluIHRoaXMgcGx1Z2luLiBPdGhlcgotICogcGx1Z2lucyBzaG91bGQgbWFrZSB0aGVpciBvd24gY29weSwgd2l0aCBhcHByb3ByaWF0ZSBJRC4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzIjsgLy8kTk9OLU5MUy0xJAotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFDRUZJTFRFUl9MT0NBVElPTiA9ICIvZGVidWcvdHJhY2VmaWx0ZXIiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPSyA9IElTdGF0dXMuT0s7IC8vIDAKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPID0gSVN0YXR1cy5JTkZPOyAvLyAxCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklORyA9IElTdGF0dXMuV0FSTklORzsgLy8gMgotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SID0gSVN0YXR1cy5FUlJPUjsgLy8gNAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0tfREVCVUcgPSAyMDAgKyBPSzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPX0RFQlVHID0gMjAwICsgSU5GTzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HX0RFQlVHID0gMjAwICsgV0FSTklORzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9ERUJVRyA9IDIwMCArIEVSUk9SOwotCi0JLyoqCi0JICogQWRkcyBtZXNzYWdlIHRvIGxvZy4KLQkgKiBAcGFyYW0gbGV2ZWwgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgKE9LLCBJTkZPLCBXQVJOSU5HLCBFUlJPUiwgT0tfREVCVUcsIElORk9fREVCVUcsIFdBUk5JTkdfREVCVUcsIEVSUk9SX0RFQlVHKQotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gYWRkIHRvIHRoZSBsb2cKLQkgKiBAcGFyYW0gZXhjZXB0aW9uIGV4Y2VwdGlvbiB0aHJvd24KLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX2xvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChsZXZlbCA9PSBPS19ERUJVRyB8fCBsZXZlbCA9PSBJTkZPX0RFQlVHIHx8IGxldmVsID09IFdBUk5JTkdfREVCVUcgfHwgbGV2ZWwgPT0gRVJST1JfREVCVUcpIHsKLQkJCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCQlyZXR1cm47Ci0JCX0KLQotCQlpbnQgc2V2ZXJpdHkgPSBJU3RhdHVzLk9LOwotCQlzd2l0Y2ggKGxldmVsKSB7Ci0JCQljYXNlIElORk9fREVCVUcgOgotCQkJY2FzZSBJTkZPIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuSU5GTzsKLQkJCQlicmVhazsKLQkJCWNhc2UgV0FSTklOR19ERUJVRyA6Ci0JCQljYXNlIFdBUk5JTkcgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5XQVJOSU5HOwotCQkJCWJyZWFrOwotCQkJY2FzZSBFUlJPUl9ERUJVRyA6Ci0JCQljYXNlIEVSUk9SIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuRVJST1I7Ci0JCX0KLQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhzZXZlcml0eSwgUExVR0lOX0lELCBzZXZlcml0eSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JfQotCi0JLyoqCi0JICogUHJpbnRzIG1lc3NhZ2UgdG8gbG9nIGlmIGNhdGVnb3J5IG1hdGNoZXMgL2RlYnVnL3RyYWNlZmlsdGVyIG9wdGlvbi4KLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIHByaW50Ci0JICogQHBhcmFtIGNhdGVnb3J5IGNhdGVnb3J5IG9mIHRoZSBtZXNzYWdlLCB0byBiZSBjb21wYXJlZCB3aXRoIC9kZWJ1Zy90cmFjZWZpbHRlcgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAoaXNUcmFjaW5nKGNhdGVnb3J5KSkgewotCQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgUExVR0lOX0lELCBJU3RhdHVzLk9LLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gaXMgZGVidWdnaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRGVidWdnaW5nKCkgewotCQlyZXR1cm4gUGxhdGZvcm0uaW5EZWJ1Z01vZGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmVzIGlmIGN1cnJlbnRseSB0cmFjaW5nIGEgY2F0ZWdvcnkKLQkgKiBAcGFyYW0gY2F0ZWdvcnkKLQkgKiBAcmV0dXJuIHRydWUgaWYgdHJhY2luZyBjYXRlZ29yeSwgZmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzVHJhY2luZyhTdHJpbmcgY2F0ZWdvcnkpIHsKLQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyB0cmFjZUZpbHRlciA9IFBsYXRmb3JtLmdldERlYnVnT3B0aW9uKFBMVUdJTl9JRCArIFRSQUNFRklMVEVSX0xPQ0FUSU9OKTsKLQkJaWYgKHRyYWNlRmlsdGVyICE9IG51bGwpIHsKLQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHRyYWNlRmlsdGVyLCAiLCIpOyAvLyROT04tTkxTLTEkCi0JCQl3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCVN0cmluZyBjYXQgPSB0b2tlbml6ZXIubmV4dFRva2VuKCkudHJpbSgpOwotCQkJCWlmIChjYXRlZ29yeS5lcXVhbHMoY2F0KSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSkgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvTW9kZWxQYXJzZXJUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9Nb2RlbFBhcnNlclRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2NTJhNTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9Nb2RlbFBhcnNlclRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkF0dHJUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkF0dHJUZXN0MjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkRvY1R5cGVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVsZW1lbnRUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVsZW1lbnRUZXN0MjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdDM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0MjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0MzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q1OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q2OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q3OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q4OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBJVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3Q0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDY7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGFibGVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0MjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdDM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDExOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDE0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDY7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q3OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0ODsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDk7Ci0KLQotCi1wdWJsaWMgY2xhc3MgTW9kZWxQYXJzZXJUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE1vZGVsUGFyc2VyVGVzdHMoKTsKLQl9Ci0KLQlwdWJsaWMgTW9kZWxQYXJzZXJUZXN0cygpIHsKLQkJc3VwZXIoIk1vZGVsUGFyc2VyVGVzdHMiKTsKLQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoUGFyc2VyVGVzdC5jbGFzcywgIlBhcnNlclRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShQYXJzZXJUZXN0Mi5jbGFzcywgIlBhcnNlclRlc3QyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoUGFyc2VyVGVzdDMuY2xhc3MsICJQYXJzZXJUZXN0MyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFBhcnNlclRlc3Q0LmNsYXNzLCAiUGFyc2VyVGVzdDQiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShVcGRhdGVyVGVzdC5jbGFzcywgIlVwZGF0ZXJUZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3QyLmNsYXNzLCAiVXBkYXRlclRlc3QyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3QzLmNsYXNzLCAiVXBkYXRlclRlc3QzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3Q0LmNsYXNzLCAiVXBkYXRlclRlc3Q0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3Q1LmNsYXNzLCAiVXBkYXRlclRlc3Q1IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3Q2LmNsYXNzLCAiVXBkYXRlclRlc3Q2IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3Q3LmNsYXNzLCAiVXBkYXRlclRlc3Q3IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3Q4LmNsYXNzLCAiVXBkYXRlclRlc3Q4IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3Q5LmNsYXNzLCAiVXBkYXRlclRlc3Q5IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3QxMC5jbGFzcywgIlVwZGF0ZXJUZXN0MTAiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShVcGRhdGVyVGVzdDExLmNsYXNzLCAiVXBkYXRlclRlc3QxMSIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTIuY2xhc3MsICJVcGRhdGVyVGVzdDEyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3QxMy5jbGFzcywgIlVwZGF0ZXJUZXN0MTMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShVcGRhdGVyVGVzdDE0LmNsYXNzLCAiVXBkYXRlclRlc3QxNCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVsZW1lbnRUZXN0LmNsYXNzLCAiRWxlbWVudFRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbGVtZW50VGVzdDIuY2xhc3MsICJFbGVtZW50VGVzdDIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbGVtZW50VGVzdDMuY2xhc3MsICJFbGVtZW50VGVzdDMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUYWJsZVRlc3QuY2xhc3MsICJUYWJsZVRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXh0VGVzdC5jbGFzcywgIlRleHRUZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGV4dFRlc3QyLmNsYXNzLCAiVGV4dFRlc3QyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGV4dFRlc3QzLmNsYXNzLCAiVGV4dFRlc3QzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdC5jbGFzcywgIlNwbGl0VGV4dFRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0Mi5jbGFzcywgIlNwbGl0VGV4dFRlc3QyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdDMuY2xhc3MsICJTcGxpdFRleHRUZXN0MyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3Q0LmNsYXNzLCAiU3BsaXRUZXh0VGVzdDQiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0NS5jbGFzcywgIlNwbGl0VGV4dFRlc3Q1IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdDYuY2xhc3MsICJTcGxpdFRleHRUZXN0NiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3Q3LmNsYXNzLCAiU3BsaXRUZXh0VGVzdDciKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0OC5jbGFzcywgIlNwbGl0VGV4dFRlc3Q4IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRW1wdHlUZXh0VGVzdC5jbGFzcywgIkVtcHR5VGV4dFRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbXB0eVRleHRUZXN0Mi5jbGFzcywgIkVtcHR5VGV4dFRlc3QyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRW1wdHlUZXh0VGVzdDMuY2xhc3MsICJFbXB0eVRleHRUZXN0MyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEF0dHJUZXN0LmNsYXNzLCAiQXR0clRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShBdHRyVGVzdDIuY2xhc3MsICJBdHRyVGVzdDIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbnRpdHlUZXN0LmNsYXNzLCAiRW50aXR5VGVzdCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVudGl0eVRlc3QyLmNsYXNzLCAiRW50aXR5VGVzdDIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbnRpdHlUZXN0My5jbGFzcywgIkVudGl0eVRlc3QzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRW50aXR5VGVzdDQuY2xhc3MsICJFbnRpdHlUZXN0NCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVudGl0eVRlc3Q1LmNsYXNzLCAiRW50aXR5VGVzdDUiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbnRpdHlUZXN0Ni5jbGFzcywgIkVudGl0eVRlc3Q2IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRW50aXR5VGVzdDcuY2xhc3MsICJFbnRpdHlUZXN0NyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVudGl0eVRlc3Q4LmNsYXNzLCAiRW50aXR5VGVzdDgiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbnRpdHlUZXN0OS5jbGFzcywgIkVudGl0eVRlc3Q5IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRG9jVHlwZVRlc3QuY2xhc3MsICJEb2NUeXBlVGVzdCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKENEQVRBU2VjdGlvblRlc3QuY2xhc3MsICJDREFUQVNlY3Rpb25UZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoQ0RBVEFTZWN0aW9uVGVzdDIuY2xhc3MsICJDREFUQVNlY3Rpb25UZXN0MiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKENEQVRBU2VjdGlvblRlc3QzLmNsYXNzLCAiQ0RBVEFTZWN0aW9uVGVzdDMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShQSVRlc3QuY2xhc3MsICJQSVRlc3QiKSk7Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9taXNjL0hUTUxDb3JlUHJlZmVyZW5jZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL21pc2MvSFRNTENvcmVQcmVmZXJlbmNlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkyNzZmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL21pc2MvSFRNTENvcmVQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMubWlzYzsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuRGVmYXVsdFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JRWNsaXBzZVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JbnN0YW5jZVNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwuSFRNTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5IVE1MRG9jdW1lbnRMb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5IVE1MQ29yZVByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JIVE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29udGVudEJhc2VkUHJlZmVyZW5jZUdhdGV3YXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbnRlbnRUeXBlRW5jb2RpbmdQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUVuY29kZWREb2N1bWVudDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLm9zZ2kuc2VydmljZS5wcmVmcy5QcmVmZXJlbmNlczsKLQotLyoqCi0gKiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUgSFRNTCBTb3VyY2UKLSAqIGVkaXRvciBwcmVmZXJlbmNlcy4gVGVzdHMgaW5jbHVkZSBzZXR0aW5nL2dldHRpbmcgcHJlZmVyZW5jZXMuCi0gKiAKLSAqIE5PVEU6IFRoaXMgdGVzdCBzaG91bGQgYmUgcHJlZm9ybWVkIG9uIGEgY2xlYW4gd29ya3NwYWNlLiBJZiBwZXJmb3JtZWQgb24KLSAqIGFuIGV4aXN0aW5nIHdvcmtzcGFjZSwgdGhpcyB0ZXN0IHdpbGwgbWFuaXB1bGF0ZSBwcmVmZXJlbmNlcyBpbiB0aGUKLSAqIHdvcmtzcGFjZSwgdGhvdWdoIGF0dGVtcHRzIHdpbGwgYmUgbWFkZSB0byByZXN0b3JlIG9yaWdpbmFsIHZhbHVlcyBhZnRlcgotICogdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIEhUTUxDb3JlUHJlZmVyZW5jZXNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRlc3RzIGV4aXN0YW5jZSBvZiBwcmVmZXJlbmNlIHZhbHVlcyB3aGVuIGdldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMKLQkgKiB0aHJvdWdoIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1bmRsZUdldFByZWZlcmVuY2VzKCkgewotCQlmaW5hbCBTdHJpbmcgYnVuZGxlTmFtZSA9ICJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlIjsKLQotCQkvLyBuZWVkIHRvIHN0YXJ0IHVwIGJ1bmRsZSBmb3IgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgbG9hZGVkCi0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlTmFtZSk7Ci0JCXRyeSB7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpCi0JCQkJYnVuZGxlLnN0YXJ0KCk7Ci0JCQllbHNlCi0JCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2UgY291bGQgbm90IGZpbmQgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSk7Ci0JCX0KLQkJY2F0Y2ggKEJ1bmRsZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBvZiBleGNlcHRpb24gc3RhcnRpbmcgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSArICIgZXhjZXB0aW9uOiAiICsgZSk7Ci0JCX0KLQotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIEhUTUxDb3JlUHJlZmVyZW5jZU5hbWVzLlRBR19OQU1FX0NBU0UpOwotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIEhUTUxDb3JlUHJlZmVyZW5jZU5hbWVzLkFUVFJfTkFNRV9DQVNFKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVuZGxlR2V0UHJlZmVyZW5jZShTdHJpbmcgYnVuZGxlTmFtZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJaW50IGRlZmF1bHRWYWx1ZSA9IC0xOwotCi0JCWludCB2YWx1ZSA9IFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpLmdldEludChidW5kbGVOYW1lLCBwcmVmS2V5LCBkZWZhdWx0VmFsdWUsIG51bGwpOwotCQlhc3NlcnRUcnVlKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlLiBLZXk6ICIgKyBwcmVmS2V5LCBkZWZhdWx0VmFsdWUgIT0gdmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGRlZmF1bHQgdmFsdWVzIG9mIHByZWZlcmVuY2VzLgotCSAqIAotCSAqIE5PVEU6IEV4cGVjdGVkIGRlZmF1bHQgdmFsdWVzIGFyZSBoYXJkLWNvZGVkLCBzbyBpZiBkZWZhdWx0IHZhbHVlcyBkbwotCSAqIGdldCBjaGFuZ2VkLCBhc3NlcnRpb25zIG5lZWQgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlcygpIHsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlID0gbmV3IERlZmF1bHRTY29wZSgpLmdldE5vZGUoSFRNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpKTsKLQotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShub2RlLCBIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5TUExJVF9NVUxUSV9BVFRSUywgQm9vbGVhbi50b1N0cmluZyhmYWxzZSkpOwotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShub2RlLCBIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5BVFRSX05BTUVfQ0FTRSwgSW50ZWdlci50b1N0cmluZyhIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5MT1dFUikpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUsIFN0cmluZyBwcmVmS2V5LCBTdHJpbmcgZXhwZWN0ZWQpIHsKLQkJU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IExvbmcudG9TdHJpbmcoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOyAvLyByYW5kb20KLQkJLy8gc3RyaW5nCi0KLQkJU3RyaW5nIHRoZURlZmF1bHRWYWx1ZSA9IG5vZGUuZ2V0KHByZWZLZXksIGRlZmF1bHRWYWx1ZSk7Ci0JCWFzc2VydEVxdWFscygiR2V0IGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSwgZXhwZWN0ZWQsIHRoZURlZmF1bHRWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcyBieSBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWUgdG8gYmUgYQotCSAqIGNlcnRhaW4gdmFsdWUsIHRoZW4gZ2V0dGluZyB0aGUgcHJlZmVyZW5jZSB2YWx1ZSB0byB2ZXJpZnkgaXQgd2FzIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luU2V0UHJlZmVyZW5jZXMoKSB7Ci0JCUlFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSA9IG5ldyBJbnN0YW5jZVNjb3BlKCkuZ2V0Tm9kZShIVE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCkpOwotCi0JCXBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKG5vZGUsIEhUTUxDb3JlUHJlZmVyZW5jZU5hbWVzLlNQTElUX01VTFRJX0FUVFJTKTsKLQkJcGx1Z2luU2V0UHJlZmVyZW5jZVN0cmluZyhub2RlLCBIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5UQUdfTkFNRV9DQVNFKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZUJvb2xlYW4oSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlLCBTdHJpbmcgcHJlZktleSkgewotCQlib29sZWFuIG9yaWdpbmFsVmFsdWUgPSBmYWxzZTsKLQkJYm9vbGVhbiBleHBlY3RlZFZhbHVlID0gdHJ1ZTsKLQotCQlTdHJpbmcgb3JpZ2luYWxTdHJpbmcgPSBub2RlLmdldChwcmVmS2V5LCAiYm9ndXMiKTsKLQkJaWYgKCEiYm9ndXMiLmVxdWFscyhvcmlnaW5hbFN0cmluZykpIHsKLQkJCW9yaWdpbmFsVmFsdWUgPSBCb29sZWFuLnZhbHVlT2Yob3JpZ2luYWxTdHJpbmcpLmJvb2xlYW5WYWx1ZSgpOwotCQkJZXhwZWN0ZWRWYWx1ZSA9ICFvcmlnaW5hbFZhbHVlOwotCQl9Ci0JCW5vZGUucHV0Qm9vbGVhbihwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJYm9vbGVhbiBmb3VuZFZhbHVlID0gbm9kZS5nZXRCb29sZWFuKHByZWZLZXksIHRydWUpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5ICsgIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCWlmICgiYm9ndXMiLmVxdWFscyhvcmlnaW5hbFN0cmluZykpCi0JCQlub2RlLnJlbW92ZShwcmVmS2V5KTsKLQkJZWxzZQotCQkJbm9kZS5wdXQocHJlZktleSwgb3JpZ2luYWxTdHJpbmcpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJU3RyaW5nIG9yaWdpbmFsVmFsdWUgPSBub2RlLmdldChwcmVmS2V5LCAiYm9ndXMiKTsKLQkJU3RyaW5nIGV4cGVjdGVkVmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsgLy8gcmFuZG9tCi0JCS8vIHN0cmluZwotCQlub2RlLnB1dChwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJU3RyaW5nIGZvdW5kVmFsdWUgPSBub2RlLmdldChwcmVmS2V5LCAiIik7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXkgKyAiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJaWYgKCJib2d1cyIuZXF1YWxzKG9yaWdpbmFsVmFsdWUpKQotCQkJbm9kZS5yZW1vdmUocHJlZktleSk7Ci0JCWVsc2UKLQkJCW5vZGUucHV0KHByZWZLZXksIG9yaWdpbmFsVmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGxpbmUgZGVsaW1pdGVyIHByZWZlcmVuY2VzIGJ5IG1ha2luZyBzdXJlIGRvY3VtZW50IGNyZWF0ZWQKLQkgKiBmb2xsb3dzIGxpbmUgZGVsaW1pdGVyIHByZWZlcmVuY2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdERlbGltaXRlclByZWZlcmVuY2VzKCkgewotCQkvLyBjaGVjayBpZiBjb250ZW50IHR5cGUgcHJlZmVyZW5jZXMgbWF0Y2gKLQkJU3RyaW5nIHByZWZlcnJlZERlbGltaXRlciA9IENvbnRlbnRUeXBlRW5jb2RpbmdQcmVmZXJlbmNlcy5nZXRQcmVmZXJyZWROZXdMaW5lRGVsaW1pdGVyKENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCVByZWZlcmVuY2VzIHByZWZzID0gQ29udGVudEJhc2VkUHJlZmVyZW5jZUdhdGV3YXkuZ2V0UHJlZmVyZW5jZXMoQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MKTsKLQkJU3RyaW5nIGdhdGV3YXlEZWxpbWl0ZXIgPSBwcmVmcy5nZXQoQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuRU5EX09GX0xJTkVfQ09ERSwgbnVsbCk7Ci0JCWFzc2VydEVxdWFscygiQ29udGVudFR5cGVFbmNvZGluZ1ByZWZlcmVuY2VzIGFuZCBDb250ZW50QmFzZWRQcmVmZXJlbmNlR2F0ZXdheSBwcmVmZXJlbmNlcyBkbyBub3QgbWF0Y2giLCBnYXRld2F5RGVsaW1pdGVyLCBwcmVmZXJyZWREZWxpbWl0ZXIpOwotCi0JCS8vIHNldCBhIHBhcnRpY3VsYXIgbGluZSBkZWxpbWl0ZXIKLQkJcHJlZnMucHV0KENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkVORF9PRl9MSU5FX0NPREUsIENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkxGKTsKLQotCQkvLyBjcmVhdGUgZG9jdW1lbnQKLQkJSFRNTERvY3VtZW50TG9hZGVyIGxvYWRlciA9IG5ldyBIVE1MRG9jdW1lbnRMb2FkZXIoKTsKLQkJSUVuY29kZWREb2N1bWVudCBkb2N1bWVudCA9IGxvYWRlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJU3RyaW5nIGRvY3VtZW50RGVsaW1pdGVyID0gZG9jdW1lbnQuZ2V0UHJlZmVycmVkTGluZURlbGltaXRlcigpOwotCi0JCS8vIHZlcmlmeSBkZWxpbWl0ZXIgaW4gZG9jdW1lbnQgbWF0Y2hlcyBwcmVmZXJlbmNlCi0JCWFzc2VydEVxdWFscygiRGVsaW1pdGVyIGluIGRvY3VtZW50IGRvZXMgbm90IG1hdGNoIHByZWZlcmVuY2UiLCBDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5TVFJJTkdfTEYsIGRvY3VtZW50RGVsaW1pdGVyKTsKLQotCQkvLyByZXR1cm4gdG8gb3JpZ2luYWwgcHJlZmVyZW5jZQotCQlwcmVmcy5yZW1vdmUoQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuRU5EX09GX0xJTkVfQ09ERSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9taXNjL0hUTUxUYWdJbmZvVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9taXNjL0hUTUxUYWdJbmZvVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWZhNjYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbWlzYy9IVE1MVGFnSW5mb1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMubWlzYzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLk1vZGVsVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5ET01OYW1lc3BhY2VIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLm1vZGVscXVlcnkuTW9kZWxRdWVyeVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBIVE1MVGFnSW5mb1Rlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCi0JcHVibGljIEhUTUxUYWdJbmZvVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgSFRNTFRhZ0luZm9UZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBIVE1MVGFnSW5mb1Rlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGh0bWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJIVE1MIik7IC8vJE5PTi1OTFMtMSQKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGh0bWwpOwotCQkJY2hlY2tFbGVtZW50VGFnSW5mbyhodG1sKTsKLQotCQkJRWxlbWVudCBib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQk9EWSIpOyAvLyROT04tTkxTLTEkCi0JCQlodG1sLmFwcGVuZENoaWxkKGJvZHkpOwotCQkJY2hlY2tFbGVtZW50VGFnSW5mbyhib2R5KTsKLQotCQkJQXR0ciBvbmNsaWNrID0gZG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKCJvbmNsaWNrIik7IC8vJE5PTi1OTFMtMSQKLQkJCWJvZHkuc2V0QXR0cmlidXRlTm9kZShvbmNsaWNrKTsKLQkJCWNoZWNrQXR0cmlidXRlVGFnSW5mbyhib2R5LCBvbmNsaWNrKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrRWxlbWVudFRhZ0luZm8oRWxlbWVudCBub2RlKSB7Ci0JCS8vIGNoZWNrIHRhZ2luZm8KLQkJQ01FbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wgPSBnZXRDTUVsZW1lbnREZWNsYXJhdGlvbihub2RlKTsKLQkJYXNzZXJ0Tm90TnVsbCgiQ2Fubm90IGNoZWNrIHRhZ2luZm8gYmVjYXVzZSBubyBjbSBlbGVtZW50IGRlY2xhcmF0aW9uIGZvciAiICsgbm9kZS5nZXROb2RlTmFtZSgpLCBlbGVtZW50RGVjbCk7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKGVsZW1lbnREZWNsICE9IG51bGwpIHsKLQkJCVN0cmluZyB0YWdJbmZvID0gKFN0cmluZykgZWxlbWVudERlY2wuZ2V0UHJvcGVydHkoInRhZ0luZm8iKTsgLy8kTk9OLU5MUy0xJAotCQkJYXNzZXJ0Tm90TnVsbCgiTm8gdGFnaW5mbyBmb3VuZCBmb3IgIiArIGVsZW1lbnREZWNsLmdldE5vZGVOYW1lKCksIHRhZ0luZm8pOyAvLyROT04tTkxTLTEkCi0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tBdHRyaWJ1dGVUYWdJbmZvKEVsZW1lbnQgZWxlbWVudCwgQXR0ciBhdHRyaWJ1dGUpIHsKLQkJLy8gY2hlY2sgdGFnaW5mbwotCQlDTUVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbCA9IGdldENNRWxlbWVudERlY2xhcmF0aW9uKGVsZW1lbnQpOwotCQlhc3NlcnROb3ROdWxsKCJDYW5ub3QgY2hlY2sgdGFnaW5mbyBiZWNhdXNlIG5vIGVsZW1lbnQgZGVjbGFyYXRpb24gZm9yICIgKyBlbGVtZW50LmdldE5vZGVOYW1lKCksIGVsZW1lbnREZWNsKTsgLy8kTk9OLU5MUy0xJAotCQlpZiAoZWxlbWVudERlY2wgIT0gbnVsbCkgewotCQkJQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHREZWNsID0gZ2V0Q01BdHRyaWJ1dGVEZWNsYXJhdGlvbihlbGVtZW50RGVjbCwgYXR0cmlidXRlLmdldE5hbWUoKSk7Ci0JCQlhc3NlcnROb3ROdWxsKCJDYW5ub3QgY2hlY2sgdGFnaW5mbyBiZWNhdXNlIG5vIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbiBmb3IgIiArIGF0dHJpYnV0ZS5nZXROYW1lKCksIGF0dERlY2wpOyAvLyROT04tTkxTLTEkCi0KLQkJCVN0cmluZyB0YWdJbmZvID0gKFN0cmluZykgYXR0RGVjbC5nZXRQcm9wZXJ0eSgidGFnSW5mbyIpOyAvLyROT04tTkxTLTEkCi0JCQlhc3NlcnROdWxsKCJVbmV4cGVjdGVkIHRhZ2luZm8gZm91bmQgZm9yICIgKyBhdHREZWNsLmdldE5vZGVOYW1lKCksIHRhZ0luZm8pOyAvLyROT04tTkxTLTEkCi0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXRyZWl2ZXMgQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBpbmRpY2F0ZWQgYnkgYXR0cmlidXRlIG5hbWUgd2l0aGluCi0JICogZWxlbWVudERlY2wKLQkgKi8KLQlwcml2YXRlIENNQXR0cmlidXRlRGVjbGFyYXRpb24gZ2V0Q01BdHRyaWJ1dGVEZWNsYXJhdGlvbihDTUVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbCwgU3RyaW5nIGF0dE5hbWUpIHsKLQkJQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHRyRGVjbCA9IG51bGw7Ci0KLQkJaWYgKGVsZW1lbnREZWNsICE9IG51bGwpIHsKLQkJCUNNTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBlbGVtZW50RGVjbC5nZXRBdHRyaWJ1dGVzKCk7Ci0JCQlTdHJpbmcgbm9wcmVmaXhOYW1lID0gRE9NTmFtZXNwYWNlSGVscGVyLmdldFVucHJlZml4ZWROYW1lKGF0dE5hbWUpOwotCQkJaWYgKGF0dHJpYnV0ZXMgIT0gbnVsbCkgewotCQkJCWF0dHJEZWNsID0gKENNQXR0cmlidXRlRGVjbGFyYXRpb24pIGF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKG5vcHJlZml4TmFtZSk7Ci0JCQkJaWYgKGF0dHJEZWNsID09IG51bGwpIHsKLQkJCQkJYXR0ckRlY2wgPSAoQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbikgYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oYXR0TmFtZSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBhdHRyRGVjbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyZWl2ZXMgQ01FbGVtZW50RGVjbGFyYXRpb24gZm9yIGdpdmVuIG5vZGUKLQkgKiAKLQkgKiBAcmV0dXJuIENNRWxlbWVudERlY2xhcmF0aW9uIC0gQ01FbGVtZW50RGVjbGFyYXRpb24gb2Ygbm9kZSBvcgotCSAqICAgICAgICAgPGNvZGU+bnVsbDwvY29kZT4gaWYgbm90IHBvc3NpYmxlCi0JICovCi0JcHJpdmF0ZSBDTUVsZW1lbnREZWNsYXJhdGlvbiBnZXRDTUVsZW1lbnREZWNsYXJhdGlvbihFbGVtZW50IGVsZW1lbnQpIHsKLQkJQ01FbGVtZW50RGVjbGFyYXRpb24gcmVzdWx0ID0gbnVsbDsKLQotCQlNb2RlbFF1ZXJ5IG1vZGVsUXVlcnkgPSBNb2RlbFF1ZXJ5VXRpbC5nZXRNb2RlbFF1ZXJ5KGVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpKTsKLQkJaWYgKG1vZGVsUXVlcnkgIT0gbnVsbCkKLQkJCXJlc3VsdCA9IG1vZGVsUXVlcnkuZ2V0Q01FbGVtZW50RGVjbGFyYXRpb24oZWxlbWVudCk7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9CVUcxMjQ4MzVTZXRTdHlsZUF0dHJpYnV0ZVZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9CVUcxMjQ4MzVTZXRTdHlsZUF0dHJpYnV0ZVZhbHVlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDllNTlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvQlVHMTI0ODM1U2V0U3R5bGVBdHRyaWJ1dGVWYWx1ZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuUHJvcENNUHJvcGVydHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NTdHlsZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSFRNTDQwTmFtZXNwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHMuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkVsZW1lbnRDU1NJbmxpbmVTdHlsZTsKLQotcHVibGljIGNsYXNzIEJVRzEyNDgzNVNldFN0eWxlQXR0cmlidXRlVmFsdWVUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRlc3RzIHNldHRpbmcgc29tZSBjc3MgYXR0cmlidXRlIHZhbHVlcyBpbmNsdWRpbmcgc2V0dGluZyB0aGUgc2FtZQotCSAqIHZhbHVlIHNldmVyYWwgdGltZXMgZm9yIGRpZmZlcmVudCBhdHRyaWJ1dGVzCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFNldEF0dHJpYnV0ZVZhbHVlKCkgewotCQlmaW5hbCBTdHJpbmcgQUJTT0xVVEUgPSAiYWJzb2x1dGUiOwotCQlmaW5hbCBTdHJpbmcgT05FID0gIjEiOwotCQlmaW5hbCBTdHJpbmcgUFggPSAiNTBweCI7Ci0KLQkJSURPTU1vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUVsZW1lbnQgZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5ESVYpOwotCQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoSFRNTDQwTmFtZXNwYWNlLkFUVFJfTkFNRV9JRCwgIkxheWVyMCIpOwotCQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoSFRNTDQwTmFtZXNwYWNlLkFUVFJfTkFNRV9TVFlMRSwgIiIpOwotCQkJc2V0SW5saW5lU3R5bGUoZWxlbWVudCwgUHJvcENNUHJvcGVydHkuUF9QT1NJVElPTiwgQUJTT0xVVEUpOwotCQkJc2V0SW5saW5lU3R5bGUoZWxlbWVudCwgUHJvcENNUHJvcGVydHkuUF9aX0lOREVYLCBPTkUpOwotCQkJc2V0SW5saW5lU3R5bGUoZWxlbWVudCwgUHJvcENNUHJvcGVydHkuUF9XSURUSCwgUFgpOwotCQkJc2V0SW5saW5lU3R5bGUoZWxlbWVudCwgUHJvcENNUHJvcGVydHkuUF9IRUlHSFQsIFBYKTsKLQkJCXNldElubGluZVN0eWxlKGVsZW1lbnQsIFByb3BDTVByb3BlcnR5LlBfVE9QLCBQWCk7Ci0JCQlzZXRJbmxpbmVTdHlsZShlbGVtZW50LCBQcm9wQ01Qcm9wZXJ0eS5QX0xFRlQsIFBYKTsKLQotCQkJYXNzZXJ0RXF1YWxzKEFCU09MVVRFLCBnZXRJbmxpbmVTdHlsZShlbGVtZW50LCBQcm9wQ01Qcm9wZXJ0eS5QX1BPU0lUSU9OKSk7Ci0JCQlhc3NlcnRFcXVhbHMoT05FLCBnZXRJbmxpbmVTdHlsZShlbGVtZW50LCBQcm9wQ01Qcm9wZXJ0eS5QX1pfSU5ERVgpKTsKLQkJCWFzc2VydEVxdWFscyhQWCwgZ2V0SW5saW5lU3R5bGUoZWxlbWVudCwgUHJvcENNUHJvcGVydHkuUF9XSURUSCkpOwotCQkJYXNzZXJ0RXF1YWxzKFBYLCBnZXRJbmxpbmVTdHlsZShlbGVtZW50LCBQcm9wQ01Qcm9wZXJ0eS5QX0hFSUdIVCkpOwotCQkJYXNzZXJ0RXF1YWxzKFBYLCBnZXRJbmxpbmVTdHlsZShlbGVtZW50LCBQcm9wQ01Qcm9wZXJ0eS5QX1RPUCkpOwotCQkJYXNzZXJ0RXF1YWxzKFBYLCBnZXRJbmxpbmVTdHlsZShlbGVtZW50LCBQcm9wQ01Qcm9wZXJ0eS5QX0xFRlQpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgc2V0SW5saW5lU3R5bGUoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKSB7Ci0JCUlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2wgPSBudWxsOwotCQl0cnkgewotCQkJZGVjbCA9IChJQ1NTU3R5bGVEZWNsYXJhdGlvbikgKChFbGVtZW50Q1NTSW5saW5lU3R5bGUpIGVsZW1lbnQpLmdldFN0eWxlKCk7Ci0JCX0KLQkJY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBleCkgewotCQkJLy8gZG8gbm90aGluZwotCQl9Ci0JCWlmIChkZWNsICE9IG51bGwpIHsKLQkJCVN0cmluZyBwcmlvcml0eSA9IGRlY2wuZ2V0UHJvcGVydHlQcmlvcml0eShuYW1lKTsKLQkJCWRlY2wuc2V0UHJvcGVydHkobmFtZSwgdmFsdWUsIHByaW9yaXR5KTsKLQkJfQotCX0KLQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0SW5saW5lU3R5bGUoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgbmFtZSkgewotCQlTdHJpbmcgdmFsdWUgPSBudWxsOwotCQlJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWRlY2wgPSAoSUNTU1N0eWxlRGVjbGFyYXRpb24pICgoRWxlbWVudENTU0lubGluZVN0eWxlKSBlbGVtZW50KS5nZXRTdHlsZSgpOwotCQl9Ci0JCWNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZXgpIHsKLQkJCS8vIGRvIG5vdGhpbmcKLQkJfQotCQlpZiAoZGVjbCAhPSBudWxsKSB7Ci0JCQl2YWx1ZSA9IGRlY2wuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTsKLQkJfQotCQlyZXR1cm4gdmFsdWU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9HZXRPdmVycmlkZVN0eWxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9HZXRPdmVycmlkZVN0eWxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWQxMmFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvR2V0T3ZlcnJpZGVTdHlsZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5tb2RlbDsKLQotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlscy5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkRvY3VtZW50Q1NTOwotCi1wdWJsaWMgY2xhc3MgR2V0T3ZlcnJpZGVTdHlsZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFN0eWxlVGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBHZXRPdmVycmlkZVN0eWxlVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgR2V0T3ZlcnJpZGVTdHlsZVRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEdldE92ZXJyaWRlU3R5bGVUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVIVE1MTW9kZWwoKTsgCi0JCXRyeSB7Ci0JCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRUZXh0KG51bGwsICI8c3R5bGU+cCB7CWJvcmRlci1jb2xvcjogYmx1ZTsgbWFyZ2luOiAwOyB9IDwvc3R5bGU+IDxwIHN0eWxlPVwiYm9yZGVyLWNvbG9yOiByZWQ7IG1hcmdpbjogMTtcIj4iKTsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRG9jdW1lbnRDU1MgZGRkID0gKERvY3VtZW50Q1NTKSBkb2N1bWVudDsKLQkJCU5vZGVMaXN0IG4gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicCIpOwotCQkJZGRkLmdldE92ZXJyaWRlU3R5bGUoKEVsZW1lbnQpIG4uaXRlbSgwKSwgIiIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL21vZGVsL01vZGVsTW9kaWZpY2F0aW9ucy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9Nb2RlbE1vZGlmaWNhdGlvbnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY4Nzc2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL21vZGVsL01vZGVsTW9kaWZpY2F0aW9ucy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5IVE1MNDBOYW1lc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlscy5UZXN0V3JpdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy51dGlsLk51bGxJbnB1dFN0cmVhbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgTW9kZWxNb2RpZmljYXRpb25zIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIHZvaWQgdGVzdFBsYWluRG9jdW1lbnQoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBuZXcgRG9jdW1lbnQoKTsKLQkJZG9jdW1lbnQuc2V0KCIiKTsKLQkJZG9jdW1lbnQucmVwbGFjZSgwLCAwLCAidGVzdCIpOwotCQlkb2N1bWVudC5zZXQoIiIpOwotCQlkb2N1bWVudC5yZXBsYWNlKDAsIDAsICJ0ZXN0MiIpOwotCQlhc3NlcnRUcnVlKHRydWUpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcERvY3VtZW50SFRNTE1vZHMoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOyAvLyBhc3N1bWVzIDAtYnl0ZSBodG1sIGVtcHR5IGZpbGUKLQotCQltb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCi0JCXRyeSB7Ci0JCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUVsZW1lbnQgZWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZSk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KHRoaXMsIDAsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSwgIjx0YWc+dGV4dDwvdGFnPiIpOwotCQkJRWxlbWVudCBlbGUyID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZTIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZXREb2N1bWVudFhNTE1vZHMoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOyAvLyBhc3N1bWVzIDAtYnl0ZSBodG1sIGVtcHR5IGZpbGUKLQotCQltb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0KLQkJdHJ5IHsKLQkJCUlET01Eb2N1bWVudCBkb2MgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJRWxlbWVudCBlbGUgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiIik7Ci0JCQlFbGVtZW50IGVsZTIgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlMik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcERvY3VtZW50SlNQTW9kcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7IC8vIGFzc3VtZXMgMC1ieXRlIGh0bWwgZW1wdHkgZmlsZQotCi0JCW1vZGVsID0gY3JlYXRlSlNQTW9kZWwoKTsKLQotCQl0cnkgewotCQkJSURPTURvY3VtZW50IGRvYyA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlFbGVtZW50IGVsZSA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dCh0aGlzLCAwLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCksICI8dGFnPnRleHQ8L3RhZz4iKTsKLQkJCUVsZW1lbnQgZWxlMiA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUyKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2V0RG9jdW1lbnRIVE1MTW9kcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7IC8vIGFzc3VtZXMgMC1ieXRlIGh0bWwgZW1wdHkgZmlsZQotCi0JCW1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0KLQkJdHJ5IHsKLQkJCUlET01Eb2N1bWVudCBkb2MgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJRWxlbWVudCBlbGUgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiIik7Ci0JCQlFbGVtZW50IGVsZTIgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlMik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNldERvY3VtZW50SlNQTW9kcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7IC8vIGFzc3VtZXMgMC1ieXRlIGh0bWwgZW1wdHkgZmlsZQotCi0JCW1vZGVsID0gY3JlYXRlSlNQTW9kZWwoKTsKLQotCQl0cnkgewotCQkJSURPTURvY3VtZW50IGRvYyA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlFbGVtZW50IGVsZSA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICIiKTsKLQkJCUVsZW1lbnQgZWxlMiA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUyKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVwRG9jdW1lbnRYTUxNb2RzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsgLy8gYXNzdW1lcyAwLWJ5dGUgaHRtbCBlbXB0eSBmaWxlCi0KLQkJbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCi0JCXRyeSB7Ci0JCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUVsZW1lbnQgZWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZSk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KHRoaXMsIDAsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSwgIjx0YWc+dGV4dDwvdGFnPiIpOwotCQkJRWxlbWVudCBlbGUyID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZTIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2N1bWVudEhUTUxNb2RzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsgLy8gYXNzdW1lcyAwLWJ5dGUgaHRtbCBlbXB0eSBmaWxlCi0JCi0JCW1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCi0JCXRyeSB7Ci0JCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUVsZW1lbnQgZWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZSk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KHRoaXMsIDAsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSwgIiIpOwotCQkJRWxlbWVudCBlbGUyID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZTIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2N1bWVudEpTUE1vZHMoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOyAvLyBhc3N1bWVzIDAtYnl0ZSBodG1sIGVtcHR5IGZpbGUKLQkKLQkJbW9kZWwgPSBjcmVhdGVKU1BNb2RlbCgpOwotCQotCQl0cnkgewotCQkJSURPTURvY3VtZW50IGRvYyA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlFbGVtZW50IGVsZSA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dCh0aGlzLCAwLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCksICIiKTsKLQkJCUVsZW1lbnQgZWxlMiA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUyKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RG9jdW1lbnRYTUxNb2RzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsgLy8gYXNzdW1lcyAwLWJ5dGUgaHRtbCBlbXB0eSBmaWxlCi0JCi0JCW1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkKLQkJdHJ5IHsKLQkJCUlET01Eb2N1bWVudCBkb2MgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJRWxlbWVudCBlbGUgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQodGhpcywgMCwgc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpLCAiIik7Ci0JCQlFbGVtZW50IGVsZTIgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlMik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogQmUgc3VyZSB0byByZWxlYXNlIGFueSBtb2RlbHMgb2J0YWluZWQgZnJvbSB0aGlzIG1ldGhvZC4KLQkgKiAKLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbiAKLQkgKiBAdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSURPTU1vZGVsIGNyZWF0ZVhNTE1vZGVsKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdCgidGVzdC54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCi0JCS8vIGFsd2F5cyB1c2UgdGhlIHNhbWUgbGluZSBkZWxpbWl0ZXIgZm9yIHRoZXNlIHRlc3RzLCByZWdhcmRsZXNzCi0JCS8vIG9mCi0JCS8vIHBsYWZvcm0gb3IgcHJlZmVyZW5jZSBzZXR0aW5ncwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRMaW5lRGVsaW1pdGVyKFRlc3RXcml0ZXIuY29tbW9uRU9MKTsKLQkJcmV0dXJuIChJRE9NTW9kZWwpIG1vZGVsOwotCi0JfQotCi0JLyoqCi0JICogQmUgc3VyZSB0byByZWxlYXNlIGFueSBtb2RlbHMgb2J0YWluZWQgZnJvbSB0aGlzIG1ldGhvZC4KLQkgKiAKLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbgotCSAqLwotCXByaXZhdGUgc3RhdGljIElET01Nb2RlbCBjcmVhdGVIVE1MTW9kZWwoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0KLQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KCJ0ZXN0Lmh0bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCi0JCS8vIGFsd2F5cyB1c2UgdGhlIHNhbWUgbGluZSBkZWxpbWl0ZXIgZm9yIHRoZXNlIHRlc3RzLCByZWdhcmRsZXNzCi0JCS8vIG9mCi0JCS8vIHBsYWZvcm0gb3IgcHJlZmVyZW5jZSBzZXR0aW5ncwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRMaW5lRGVsaW1pdGVyKFRlc3RXcml0ZXIuY29tbW9uRU9MKTsKLQkJcmV0dXJuIChJRE9NTW9kZWwpIG1vZGVsOwotCi0JfQotCi0JLyoqCi0JICogQmUgc3VyZSB0byByZWxlYXNlIGFueSBtb2RlbHMgb2J0YWluZWQgZnJvbSB0aGlzIG1ldGhvZC4KLQkgKiAKLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbgotCSAqLwotCXByaXZhdGUgc3RhdGljIElET01Nb2RlbCBjcmVhdGVKU1BNb2RlbCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdCgidGVzdC54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCi0JCS8vIGFsd2F5cyB1c2UgdGhlIHNhbWUgbGluZSBkZWxpbWl0ZXIgZm9yIHRoZXNlIHRlc3RzLCByZWdhcmRsZXNzCi0JCS8vIG9mCi0JCS8vIHBsYWZvcm0gb3IgcHJlZmVyZW5jZSBzZXR0aW5ncwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRMaW5lRGVsaW1pdGVyKFRlc3RXcml0ZXIuY29tbW9uRU9MKTsKLQotCi0JCXJldHVybiAoSURPTU1vZGVsKSBtb2RlbDsKLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0Rm9yTlBFSW5DU1NDcmVhdGlvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0Rm9yTlBFSW5DU1NDcmVhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTdhMzQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdEZvck5QRUluQ1NTQ3JlYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmFkYXB0ZXJzLklTdHlsZVNoZWV0QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU1N0eWxlUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU1N0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5IVE1MNDBOYW1lc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlscy5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Rm9yTlBFSW5DU1NDcmVhdGlvbiBleHRlbmRzIFRlc3RDYXNlIHsKLQotCi0JcHVibGljIHZvaWQgdGVzdENTU01vZGVsKCkgewotCi0JCUlET01Nb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZUhUTUxNb2RlbCgpOwotCi0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldChnZXRIVE1MRG9jdW1lbnRUZXh0KCkpOwotCi0JCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJLy8gZ2V0IGhlYWQgdGFnCi0JCQlOb2RlTGlzdCBsaXN0ID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5IRUFEKTsKLQkJCUVsZW1lbnQgaGVhZCA9IChFbGVtZW50KSBsaXN0Lml0ZW0oMCk7Ci0KLQkJCS8vIGNyZWF0ZSBhbmQgYXBwZW5kIHN0eWxlIGVsZW1lbnQKLQkJCUVsZW1lbnQgZWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlNUWUxFKTsKLQkJCWVsZS5zZXRBdHRyaWJ1dGUoSFRNTDQwTmFtZXNwYWNlLkFUVFJfTkFNRV9UWVBFLCAidGV4dC9jc3MiKTsKLQotCQkJU3RyaW5nIGRlbGltID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0TGluZURlbGltaXRlcigpOwotCQkJaWYgKGRlbGltID09IG51bGwpCi0JCQkJZGVsaW0gPSAiXG4iOy8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKGRlbGltKTsKLQkJCWJ1ZmZlci5hcHBlbmQoIjwhLS0iKTsvLyROT04tTkxTLTEkCi0JCQlidWZmZXIuYXBwZW5kKGRlbGltKTsKLQkJCWJ1ZmZlci5hcHBlbmQoIi0tPiIpOy8vJE5PTi1OTFMtMSQKLQkJCWJ1ZmZlci5hcHBlbmQoZGVsaW0pOwotCQkJVGV4dCB0ZXh0ID0gZG9jLmNyZWF0ZVRleHROb2RlKGJ1ZmZlci50b1N0cmluZygpKTsKLQkJCWVsZS5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJaGVhZC5pbnNlcnRCZWZvcmUoZWxlLCBudWxsKTsKLQotCQkJLy8gZ2V0IGFkYXB0ZXIgZm9yIFN0eWxlU2hlZXQKLQkJCUlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gKElDU1NTdHlsZVNoZWV0KSAoKElTdHlsZVNoZWV0QWRhcHRlcikgKChJTm9kZU5vdGlmaWVyKSBlbGUpLmdldEFkYXB0ZXJGb3IoSVN0eWxlU2hlZXRBZGFwdGVyLmNsYXNzKSkuZ2V0U2hlZXQoKTsKLQotCQkJLy8gY3JlYXRlIHN0eWxlIGRlY2xhcmF0aW9uCi0JCQlJQ1NTU3R5bGVSdWxlIHJ1bGUgPSBzaGVldC5jcmVhdGVDU1NTdHlsZVJ1bGUoKTsKLQkJCXJ1bGUuZ2V0U3R5bGUoKS5zZXRQcm9wZXJ0eSgiYmFja2dyb3VuZC1jb2xvciIsICJsaW1lIiwgIiIpOwotCQkJcnVsZS5nZXRTdHlsZSgpLnNldFByb3BlcnR5KCJiYWNrZ3JvdW5kLWNvbG9yIiwgImJsdWUiLCAiIik7Ci0JCQlydWxlLmdldFN0eWxlKCkuc2V0UHJvcGVydHkoImJhY2tncm91bmQtY29sb3IiLCAiIzAwODBmZiIsICIiKTsKLQotCQkJLy9tb2RlbC5zYXZlKCk7Ci0KLQotCQl9Ci0KLQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCXByaXZhdGUgU3RyaW5nIGdldEhUTUxEb2N1bWVudFRleHQoKSB7Ci0JCXJldHVybiAiPGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PjwvYm9keT48L2h0bWw+IjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0FsbE1vZGVsUGFyc2VyVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0FsbE1vZGVsUGFyc2VyVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVkMjI1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9BbGxNb2RlbFBhcnNlclRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotCi1wdWJsaWMgY2xhc3MgQWxsTW9kZWxQYXJzZXJUZXN0cyB7Ci0KLQkvLwlwdWJsaWMgQWxsTW9kZWxQYXJzZXJUZXN0cyhTdHJpbmcgbmFtZSkgewotCS8vCQkvL3N1cGVyKG5hbWUpOwotCS8vCX0KLQotCXB1YmxpYyB2b2lkIGhvbGRPbGRUZXN0TWFpbigpIHsKLQkJcnVuVGVzdChuZXcgUGFyc2VyVGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgUGFyc2VyVGVzdDIoKSk7Ci0JCXJ1blRlc3QobmV3IFBhcnNlclRlc3QzKCkpOwotCQlydW5UZXN0KG5ldyBQYXJzZXJUZXN0NCgpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3QoKSk7Ci0JCXJ1blRlc3QobmV3IFVwZGF0ZXJUZXN0MigpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3QzKCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDQoKSk7Ci0JCXJ1blRlc3QobmV3IFVwZGF0ZXJUZXN0NSgpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3Q2KCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDcoKSk7Ci0JCXJ1blRlc3QobmV3IFVwZGF0ZXJUZXN0OCgpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3Q5KCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDEwKCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDExKCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDEyKCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDEzKCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDE0KCkpOwotCQlydW5UZXN0KG5ldyBFbGVtZW50VGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgRWxlbWVudFRlc3QyKCkpOwotCQlydW5UZXN0KG5ldyBFbGVtZW50VGVzdDMoKSk7Ci0JCXJ1blRlc3QobmV3IFRhYmxlVGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgVGV4dFRlc3QoKSk7Ci0JCXJ1blRlc3QobmV3IFRleHRUZXN0MigpKTsKLQkJcnVuVGVzdChuZXcgVGV4dFRlc3QzKCkpOwotCQlydW5UZXN0KG5ldyBTcGxpdFRleHRUZXN0KCkpOwotCQlydW5UZXN0KG5ldyBTcGxpdFRleHRUZXN0MigpKTsKLQkJcnVuVGVzdChuZXcgU3BsaXRUZXh0VGVzdDMoKSk7Ci0JCXJ1blRlc3QobmV3IFNwbGl0VGV4dFRlc3Q0KCkpOwotCQlydW5UZXN0KG5ldyBTcGxpdFRleHRUZXN0NSgpKTsKLQkJcnVuVGVzdChuZXcgU3BsaXRUZXh0VGVzdDYoKSk7Ci0JCXJ1blRlc3QobmV3IFNwbGl0VGV4dFRlc3Q3KCkpOwotCQlydW5UZXN0KG5ldyBTcGxpdFRleHRUZXN0OCgpKTsKLQkJcnVuVGVzdChuZXcgRW1wdHlUZXh0VGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgRW1wdHlUZXh0VGVzdDIoKSk7Ci0JCXJ1blRlc3QobmV3IEVtcHR5VGV4dFRlc3QzKCkpOwotCQlydW5UZXN0KG5ldyBBdHRyVGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgQXR0clRlc3QyKCkpOwotCQlydW5UZXN0KG5ldyBFbnRpdHlUZXN0KCkpOwotCQlydW5UZXN0KG5ldyBFbnRpdHlUZXN0MigpKTsKLQkJcnVuVGVzdChuZXcgRW50aXR5VGVzdDMoKSk7Ci0JCXJ1blRlc3QobmV3IEVudGl0eVRlc3Q0KCkpOwotCQlydW5UZXN0KG5ldyBFbnRpdHlUZXN0NSgpKTsKLQkJcnVuVGVzdChuZXcgRW50aXR5VGVzdDYoKSk7Ci0JCXJ1blRlc3QobmV3IEVudGl0eVRlc3Q3KCkpOwotCQlydW5UZXN0KG5ldyBFbnRpdHlUZXN0OCgpKTsKLQkJcnVuVGVzdChuZXcgRW50aXR5VGVzdDkoKSk7Ci0JCXJ1blRlc3QobmV3IERvY1R5cGVUZXN0KCkpOwotCQlydW5UZXN0KG5ldyBDREFUQVNlY3Rpb25UZXN0KCkpOwotCQlydW5UZXN0KG5ldyBDREFUQVNlY3Rpb25UZXN0MigpKTsKLQkJcnVuVGVzdChuZXcgQ0RBVEFTZWN0aW9uVGVzdDMoKSk7Ci0JCXJ1blRlc3QobmV3IFBJVGVzdCgpKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3RTdWl0ZSBnZXRBbGxUZXN0cygpIHsKLQotCi0JCVRlc3RTdWl0ZSB0ZXN0U3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShQYXJzZXJUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShQYXJzZXJUZXN0Mi5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoUGFyc2VyVGVzdDMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFBhcnNlclRlc3Q0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdC5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVXBkYXRlclRlc3QyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdDMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0NC5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVXBkYXRlclRlc3Q1LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdDYuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0Ny5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVXBkYXRlclRlc3Q4LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdDkuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTAuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTEuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTIuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTQuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVsZW1lbnRUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbGVtZW50VGVzdDIuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVsZW1lbnRUZXN0My5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVGFibGVUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShUZXh0VGVzdC5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVGV4dFRlc3QyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShUZXh0VGVzdDMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3QuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3QyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0My5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdDQuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3Q1LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0Ni5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdDcuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3Q4LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbXB0eVRleHRUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbXB0eVRleHRUZXN0Mi5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoRW1wdHlUZXh0VGVzdDMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEF0dHJUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShBdHRyVGVzdDIuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVudGl0eVRlc3QuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVudGl0eVRlc3QyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbnRpdHlUZXN0My5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoRW50aXR5VGVzdDQuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVudGl0eVRlc3Q1LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbnRpdHlUZXN0Ni5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoRW50aXR5VGVzdDcuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVudGl0eVRlc3Q4LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbnRpdHlUZXN0OS5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoRG9jVHlwZVRlc3QuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKENEQVRBU2VjdGlvblRlc3QuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKENEQVRBU2VjdGlvblRlc3QyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShDREFUQVNlY3Rpb25UZXN0My5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoUElUZXN0LmNsYXNzKTsKLQkJLy8gdGhlIGZvbGxvdyBpcyBmYWlybHkgbG9uZyBydW5uaW5nCi0JCS8vdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShUZXN0RXhhbXBsZUZpbGVzLmNsYXNzKTsKLQotCQlyZXR1cm4gdGVzdFN1aXRlOwotCX0KLQotCi0KLQlwcml2YXRlIHZvaWQgcnVuVGVzdChNb2RlbFRlc3QgdGVzdCkgewotCQl0cnkgewotCQkJdGVzdC50ZXN0TW9kZWwoKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQlNb2RlbFRlc3QucHJpbnRFeGNlcHRpb24oZXgpOwotCQl9Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQXR0clRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0F0dHJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNzEzZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQXR0clRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBBdHRyVGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEF0dHJUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEF0dHJUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBBdHRyVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgQXR0clRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCS8vRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGEgaHJlZj1cIjwlPWMlPlwiPmE8L2E+Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9BdHRyVGVzdDIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0F0dHJUZXN0Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGJlZjZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0F0dHJUZXN0Mi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBBdHRyVGVzdDIgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBBdHRyVGVzdDIuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgQXR0clRlc3QyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBBdHRyVGVzdDIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEF0dHJUZXN0MigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJYS5zZXRBdHRyaWJ1dGUoImIiLCAiYyIpOwotCQkJYS5zZXRBdHRyaWJ1dGUoImQiLCAiZSIpOwotCQkJVGV4dCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImYiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJYS5hcHBlbmRDaGlsZCh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJQXR0ciBiID0gYS5nZXRBdHRyaWJ1dGVOb2RlKCJiIik7Ci0JCQliLnNldFByZWZpeCgieCIpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oImIubmFtZT0iICsgYi5nZXROYW1lKCkpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJiLnZhbHVlPSIgKyBiLmdldFZhbHVlKCkpOwotCQkJU3RyaW5nIGFiID0gYS5nZXRBdHRyaWJ1dGUoImIiKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiYSBiPSIgKyBhYik7Ci0JCQlTdHJpbmcgYXhiID0gYS5nZXRBdHRyaWJ1dGUoIng6YiIpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJhIHg6Yj0iICsgYXhiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYS5nZXRBdHRyaWJ1dGVOb2RlKCJkIikuc2V0UHJlZml4KCJ5Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQXR0clRlc3QzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9BdHRyVGVzdDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYzMDY2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9BdHRyVGVzdDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgQXR0clRlc3QzIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQXR0clRlc3QzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEF0dHJUZXN0MyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgQXR0clRlc3QzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBBdHRyVGVzdDMoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGEgeG1sbnM9J2RlZmF1bHQtdXJpJyB4bWxuczpiPSdiLXVyaSc+PGMgZD0nZC12YWx1ZScgYjplPSdlLXZhbHVlJy8+PC9hPiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGEgPSAoRWxlbWVudCkgZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJRWxlbWVudCBjID0gKEVsZW1lbnQpIGEuZ2V0Rmlyc3RDaGlsZCgpOwotCi0JCQlBdHRyIHhtbG5zID0gYS5nZXRBdHRyaWJ1dGVOb2RlKCJ4bWxucyIpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJ4bWxucyBbIiArIHhtbG5zLmdldE5hbWVzcGFjZVVSSSgpICsgIl0iKTsKLQkJCUF0dHIgeG1sbnNfYiA9IGEuZ2V0QXR0cmlidXRlTm9kZSgieG1sbnM6YiIpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJ4bWxuczpiIFsiICsgeG1sbnNfYi5nZXROYW1lc3BhY2VVUkkoKSArICJdIik7Ci0JCQlBdHRyIGQgPSBjLmdldEF0dHJpYnV0ZU5vZGUoImQiKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiZCBbIiArIGQuZ2V0TmFtZXNwYWNlVVJJKCkgKyAiXSIpOwotCQkJQXR0ciBiX2UgPSBjLmdldEF0dHJpYnV0ZU5vZGUoImI6ZSIpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJiOmUgWyIgKyBiX2UuZ2V0TmFtZXNwYWNlVVJJKCkgKyAiXSIpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0NEQVRBU2VjdGlvblRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0NEQVRBU2VjdGlvblRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRlOGM4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9DREFUQVNlY3Rpb25UZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkNEQVRBU2VjdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgQ0RBVEFTZWN0aW9uVGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIENEQVRBU2VjdGlvblRlc3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgQ0RBVEFTZWN0aW9uVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgQ0RBVEFTZWN0aW9uVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgQ0RBVEFTZWN0aW9uVGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8YT48IVtDREFUQVtjb250ZW50T2ZDREFUQVNlY3Rpb25dXT48L2E+Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCU5vZGUgYSA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCWZvciAoTm9kZSBjaGlsZCA9IGEuZ2V0Rmlyc3RDaGlsZCgpOyBjaGlsZCAhPSBudWxsOyBjaGlsZCA9IGNoaWxkLmdldE5leHRTaWJsaW5nKCkpIHsKLQkJCQlpZiAoY2hpbGQuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkNEQVRBX1NFQ1RJT05fTk9ERSkKLQkJCQkJY29udGludWU7Ci0JCQkJQ0RBVEFTZWN0aW9uIGNkYXRhID0gKENEQVRBU2VjdGlvbikgY2hpbGQ7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGNkYXRhLmdldERhdGEoKSk7Ci0JCQl9Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9DREFUQVNlY3Rpb25UZXN0Mi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQ0RBVEFTZWN0aW9uVGVzdDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI0NzY2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9DREFUQVNlY3Rpb25UZXN0Mi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ0RBVEFTZWN0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBDREFUQVNlY3Rpb25UZXN0MiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIENEQVRBU2VjdGlvblRlc3QyLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIENEQVRBU2VjdGlvblRlc3QyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBDREFUQVNlY3Rpb25UZXN0MigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgQ0RBVEFTZWN0aW9uVGVzdDIoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJQ0RBVEFTZWN0aW9uIGNkYXRhID0gZG9jdW1lbnQuY3JlYXRlQ0RBVEFTZWN0aW9uKCJjb250ZW50T2ZDREFUQVNlY3Rpb24iKTsKLQkJCWEuYXBwZW5kQ2hpbGQoY2RhdGEpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oY2RhdGEuZ2V0RGF0YSgpKTsKLQotCQkJY2RhdGEuc2V0RGF0YSgibmV3IGNvbnRlbnQiKTsKLQotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oY2RhdGEuZ2V0RGF0YSgpKTsKLQotCQkJY2RhdGEuc2V0RGF0YSgibmV3IGNvbnRlbnQiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGNkYXRhLmdldERhdGEoKSk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9DREFUQVNlY3Rpb25UZXN0My5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQ0RBVEFTZWN0aW9uVGVzdDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UwMTRjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9DREFUQVNlY3Rpb25UZXN0My5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ0RBVEFTZWN0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBDREFUQVNlY3Rpb25UZXN0MyBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIENEQVRBU2VjdGlvblRlc3QzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIENEQVRBU2VjdGlvblRlc3QzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBDREFUQVNlY3Rpb25UZXN0MygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgQ0RBVEFTZWN0aW9uVGVzdDMoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJQ0RBVEFTZWN0aW9uIGNkYXRhID0gZG9jdW1lbnQuY3JlYXRlQ0RBVEFTZWN0aW9uKCJjb250ZW50T2ZDREFUQVNlY3Rpb24iKTsKLQkJCWEuYXBwZW5kQ2hpbGQoY2RhdGEpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oY2RhdGEuZ2V0RGF0YSgpKTsKLQotCQkJY2RhdGEuc2V0RGF0YSgibmV3IDwgY29udGVudCIpOwotCi0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihjZGF0YS5nZXREYXRhKCkpOwotCi0JCQljZGF0YS5zZXREYXRhKCJuZXcgPiBjb250ZW50Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihjZGF0YS5nZXREYXRhKCkpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRG9jVHlwZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0RvY1R5cGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhZWRlMDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRG9jVHlwZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIERvY1R5cGVUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRG9jVHlwZVRlc3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRG9jVHlwZVRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIERvY1R5cGVUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBEb2NUeXBlVGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJRE9NRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlJRE9NRG9jdW1lbnRUeXBlIGRvY1R5cGUgPSAoSURPTURvY3VtZW50VHlwZSkgZG9jdW1lbnQuY3JlYXRlRG9jdHlwZSgiSFRNTCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoZG9jVHlwZSk7Ci0JCQlFbGVtZW50IGh0bWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJIVE1MIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChodG1sKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZG9jVHlwZS5zZXRTeXN0ZW1JZCgic3l0ZW0iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZG9jVHlwZS5zZXRQdWJsaWNJZCgicHVibGljIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWRvY3VtZW50Lmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpLCBkb2NUeXBlKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbGVtZW50VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRWxlbWVudFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNmN2NhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbGVtZW50VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBFbGVtZW50VGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVsZW1lbnRUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVsZW1lbnRUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbGVtZW50VGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgRWxlbWVudCBjaGFuZ2VUYWdOYW1lKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIHRhZ05hbWUpIHsKLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKTsKLQkJTm9kZSBwYXJlbnQgPSBlbGVtZW50LmdldFBhcmVudE5vZGUoKTsKLQkJRWxlbWVudCBuZXdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKLQkJTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZXMoKTsKLQkJd2hpbGUgKGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCkgPiAwKSB7Ci0JCQlBdHRyIGF0dHIgPSAoQXR0cikgYXR0cmlidXRlcy5pdGVtKDApOwotCQkJYXR0ciA9IGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlTm9kZShhdHRyKTsKLQkJCW5ld0VsZW1lbnQuc2V0QXR0cmlidXRlTm9kZShhdHRyKTsKLQkJfQotCQl3aGlsZSAoZWxlbWVudC5oYXNDaGlsZE5vZGVzKCkpIHsKLQkJCU5vZGUgY2hpbGQgPSBlbGVtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCWNoaWxkID0gZWxlbWVudC5yZW1vdmVDaGlsZChjaGlsZCk7Ci0JCQluZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLQkJfQotCQlwYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld0VsZW1lbnQsIGVsZW1lbnQpOwotCQlwYXJlbnQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7Ci0JCXJldHVybiBuZXdFbGVtZW50OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbGVtZW50VGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCAiPGE+PGIgZT1cImZcIiBjPVwiZFwiPjxnIC8+PGggLz48L2I+PC9hPiIpOwotCQkJTm9kZSBhID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJRWxlbWVudCBiID0gKEVsZW1lbnQpIGEuZ2V0Rmlyc3RDaGlsZCgpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQkvL0VsZW1lbnQgaSA9Ci0JCQljaGFuZ2VUYWdOYW1lKGIsICJpIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRWxlbWVudFRlc3QyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbGVtZW50VGVzdDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNmMWE3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbGVtZW50VGVzdDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIEVsZW1lbnRUZXN0MiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVsZW1lbnRUZXN0Mi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbGVtZW50VGVzdDIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEVsZW1lbnRUZXN0MigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgRWxlbWVudFRlc3QyKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlFbGVtZW50IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiIik7Ci0JCQlUZXh0IHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYyIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoYSk7Ci0JCQlhLmFwcGVuZENoaWxkKGIpOwotCQkJYi5hcHBlbmRDaGlsZCh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYS5zZXRQcmVmaXgoIngiKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJhLnRhZ05hbWU9IiArIGEuZ2V0VGFnTmFtZSgpKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYi5zZXRQcmVmaXgoInkiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbGVtZW50VGVzdDMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VsZW1lbnRUZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWY0NjViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VsZW1lbnRUZXN0My5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgRWxlbWVudFRlc3QzIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRWxlbWVudFRlc3QzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVsZW1lbnRUZXN0MyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRWxlbWVudFRlc3QzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbGVtZW50VGVzdDMoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIng6YSIpOwotCQkJRWxlbWVudCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYiIpOwotCQkJVGV4dCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImMiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJYS5hcHBlbmRDaGlsZChiKTsKLQkJCWIuYXBwZW5kQ2hpbGQodCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWEuc2V0UHJlZml4KCIiKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJhLnRhZ05hbWU9IiArIGEuZ2V0VGFnTmFtZSgpKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYS5zZXRQcmVmaXgoInkiKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJhLnRhZ05hbWU9IiArIGEuZ2V0VGFnTmFtZSgpKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYS5zZXRQcmVmaXgoInkiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VtcHR5VGV4dFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VtcHR5VGV4dFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUwY2JmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbXB0eVRleHRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbXB0eVRleHRUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRW1wdHlUZXh0VGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbXB0eVRleHRUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbXB0eVRleHRUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbXB0eVRleHRUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYSIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQkJCUVsZW1lbnQgYnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCUiIpOwotCQkJcC5hcHBlbmRDaGlsZChicik7Ci0JCQlUZXh0IHRleHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0Mik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDMgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7Ci0JCQlwLmluc2VydEJlZm9yZSh0ZXh0MywgdGV4dDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0My5zZXREYXRhKCJiIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXAucmVtb3ZlQ2hpbGQodGV4dDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VtcHR5VGV4dFRlc3QyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbXB0eVRleHRUZXN0Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzAwNjQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VtcHR5VGV4dFRlc3QyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbXB0eVRleHRUZXN0MiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVtcHR5VGV4dFRlc3QyLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVtcHR5VGV4dFRlc3QyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbXB0eVRleHRUZXN0MigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgRW1wdHlUZXh0VGVzdDIoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuc2V0RGF0YSgiYSIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LnNldERhdGEoIiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCIik7Ci0JCQlwLmFwcGVuZENoaWxkKGIpOwotCQkJcC5yZW1vdmVDaGlsZCh0ZXh0KTsKLQkJCWIuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuc2V0RGF0YSgiYSIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VtcHR5VGV4dFRlc3QzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbXB0eVRleHRUZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWRmYjdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VtcHR5VGV4dFRlc3QzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbXB0eVRleHRUZXN0MyBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVtcHR5VGV4dFRlc3QzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVtcHR5VGV4dFRlc3QzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbXB0eVRleHRUZXN0MygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgRW1wdHlUZXh0VGVzdDMoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlkb2N1bWVudC5pbnNlcnRCZWZvcmUoYSwgdGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGViOWNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIEVudGl0eVRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbnRpdHlUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVudGl0eVRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEVudGl0eVRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVudGl0eVRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiZndDsiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3QyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYjE0NTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIEVudGl0eVRlc3QyIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRW50aXR5VGVzdDIuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRW50aXR5VGVzdDIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEVudGl0eVRlc3QyKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbnRpdHlUZXN0MigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImEiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuc2V0RGF0YSgiYSZndDsiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3QzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjU5MWU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3QzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbnRpdHlUZXN0MyBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVudGl0eVRlc3QzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVudGl0eVRlc3QzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbnRpdHlUZXN0MygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgRW50aXR5VGVzdDMoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LnNldERhdGEoImFiIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuc2V0RGF0YSgiYWImIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuc2V0RGF0YSgiYWImYyIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LnNldERhdGEoImRhYiZjIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuc2V0RGF0YSgiZGFiJmNlIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0NC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYxNzQ0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0NC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgRW50aXR5VGVzdDQgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbnRpdHlUZXN0NC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbnRpdHlUZXN0NChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRW50aXR5VGVzdDQoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVudGl0eVRlc3Q0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYSZiIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOwotCQkJcC5pbnNlcnRCZWZvcmUodGV4dDIsIHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0Mi5zZXREYXRhKCJjIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQyLnNldERhdGEoImNhJmIiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJcC5yZW1vdmVDaGlsZCh0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q1LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0NS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDZlMjY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q1LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbnRpdHlUZXN0NSBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVudGl0eVRlc3Q1LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVudGl0eVRlc3Q1KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbnRpdHlUZXN0NSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgRW50aXR5VGVzdDUoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhJmIiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYSZiIik7Ci0JCQlwLmluc2VydEJlZm9yZSh0ZXh0MiwgdGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0Ni5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU1YTljMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0Ni5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgRW50aXR5VGVzdDYgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbnRpdHlUZXN0Ni4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbnRpdHlUZXN0NihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRW50aXR5VGVzdDYoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVudGl0eVRlc3Q2KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYSYiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYSYiKTsKLQkJCXAuaW5zZXJ0QmVmb3JlKHRleHQyLCB0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q3LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0Ny5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTA5MmQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi1wdWJsaWMgY2xhc3MgRW50aXR5VGVzdDcgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbnRpdHlUZXN0Ny4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbnRpdHlUZXN0NyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRW50aXR5VGVzdDcoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVudGl0eVRlc3Q3KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJLy9Eb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGE+YSYjNjU7JiN4NDE7JnVuazsmdW5rJnVuazwvYT4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q4LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0OC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjJmOTM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi1wdWJsaWMgY2xhc3MgRW50aXR5VGVzdDggZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbnRpdHlUZXN0OC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbnRpdHlUZXN0OChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRW50aXR5VGVzdDgoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVudGl0eVRlc3Q4KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJLy9Eb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiJmlibTsmcnRwOyIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExZWZmOGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBFbnRpdHlUZXN0OSBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVudGl0eVRlc3Q5LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVudGl0eVRlc3Q5KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbnRpdHlUZXN0OSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgRW50aXR5VGVzdDkoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQkvL0RvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICImbHQ7Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dCh0aGlzLCA0LCAwLCAiJmd0Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dCh0aGlzLCA3LCAwLCAiOyIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9Nb2RlbFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU5Y2ZlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9Nb2RlbFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlscy5EYXRlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnV0aWxzLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHMuU3RyaW5nQ29tcGFyZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlscy5UZXN0V3JpdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LlN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkNoZWNrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTW9kZWxUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgdGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXggPSAiUGFyc2VyUmVzdWx0cyI7Ci0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIGZpbGVFeHRlbnNpb24gPSAiLnR4dCI7Ci0JcHJvdGVjdGVkIFRlc3RXcml0ZXIgZk91dHB1dFdyaXRlciA9IG5ldyBUZXN0V3JpdGVyKCk7Ci0JcHJpdmF0ZSBpbnQgUkVBRF9CVUZGRVJfU0laRSA9IDQwOTY7Ci0KLQlwcml2YXRlIGJvb2xlYW4gZWNob1RvU3lzdGVtT3V0ID0gZmFsc2U7Ci0JcHJpdmF0ZSBib29sZWFuIHByaW50ZWRPbmNlOwotCXByaXZhdGUgYm9vbGVhbiBwcmludFN1bW1hcnlUb1N5c3RlbU91dDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBNb2RlbFRlc3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCQl0cnkgewotCQkJcHJpbnRDbGFzcygpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JcHVibGljIE1vZGVsVGVzdCgpIHsKLQkJdGhpcygiZHVtbXkiKTsKLQkJLy8JCXRyeSB7Ci0JCS8vCQkJcHJpbnRDbGFzcygpOwotCQkvLwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkvLwkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCS8vCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJRE9NTW9kZWwgY3JlYXRlSFRNTE1vZGVsKCkgewotCi0JCS8vcmV0dXJuIG5ldyBYTUxNb2RlbEltcGwoKTsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQotCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KCJ0ZXN0Lmh0bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCi0JCQkvLyBhbHdheXMgdXNlIHRoZSBzYW1lIGxpbmUgZGVsaW1pdGVyIGZvciB0aGVzZSB0ZXN0cywgcmVnYXJkbGVzcwotCQkJLy8gb2YKLQkJCS8vIHBsYWZvcm0gb3IgcHJlZmVyZW5jZSBzZXR0aW5ncwotCQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0TGluZURlbGltaXRlcihUZXN0V3JpdGVyLmNvbW1vbkVPTCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCS8vYXNzZXJ0VHJ1ZSgiYmFzaWMgWE1MIGVtcHR5IG1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkIiwgbW9kZWwgIT0KLQkJLy8gbnVsbCk7Ci0JCXJldHVybiAoSURPTU1vZGVsKSBtb2RlbDsKLQotCX0KLQotCXB1YmxpYyBzdGF0aWMgSURPTU1vZGVsIGNyZWF0ZVhNTE1vZGVsKCkgewotCi0JCS8vcmV0dXJuIG5ldyBYTUxNb2RlbEltcGwoKTsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJCS8vYXNzZXJ0VHJ1ZSgibW9kZWxNYW5hZ2VyIG11c3Qgbm90IGJlIG51bGwiLCBtb2RlbE1hbmFnZXIgIT0KLQkJCS8vIG51bGwpOwotCi0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoInRlc3QueG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQotCQkJLy8gYWx3YXlzIHVzZSB0aGUgc2FtZSBsaW5lIGRlbGltaXRlciBmb3IgdGhlc2UgdGVzdHMsIHJlZ2FyZGxlc3MKLQkJCS8vIG9mCi0JCQkvLyBwbGFmb3JtIG9yIHByZWZlcmVuY2Ugc2V0dGluZ3MKLQkJCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldExpbmVEZWxpbWl0ZXIoVGVzdFdyaXRlci5jb21tb25FT0wpOwotCi0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJLy9hc3NlcnRUcnVlKCJiYXNpYyBYTUwgZW1wdHkgbW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQiLCBtb2RlbCAhPQotCQkvLyBudWxsKTsKLQkJcmV0dXJuIChJRE9NTW9kZWwpIG1vZGVsOwotCi0JfQotCi0JLyoqCi0JICovCi0JcHJpdmF0ZSB2b2lkIHByaW50Q2xhc3MoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBwcmludEV4Y2VwdGlvbihFeGNlcHRpb24gZXgpIHsKLQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50Tm9kZShOb2RlIG5vZGUsIGludCBpbmRlbnQpIHsKLQkJdHJ5IHsKLQkJCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKDEwKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5kZW50OyBpKyspCi0JCQkJYnVmZmVyLmFwcGVuZCgiLS0iKTsKLQkJCWJ1ZmZlci5hcHBlbmQoU3RyaW5nVXRpbHMuZXNjYXBlKG5vZGUudG9TdHJpbmcoKSkpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGJ1ZmZlci50b1N0cmluZygpKTsKLQkJCWluZGVudCsrOwotCQkJTm9kZSBjaGlsZCA9IG5vZGUuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJd2hpbGUgKGNoaWxkICE9IG51bGwpIHsKLQkJCQlwcmludE5vZGUoY2hpbGQsIGluZGVudCk7Ci0JCQkJY2hpbGQgPSBjaGlsZC5nZXROZXh0U2libGluZygpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCXByaW50RXhjZXB0aW9uKGV4KTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHByaW50U291cmNlKElET01Nb2RlbCBtb2RlbCkgewotCQl0cnkgewotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJTb3VyY2UgOiIpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldFRleHQoKSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIiIpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCXByaW50RXhjZXB0aW9uKGV4KTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHByaW50VHJlZShJRE9NTW9kZWwgbW9kZWwpIHsKLQkJdHJ5IHsKLQkJCXByaW50RmxhdE1vZGVsKG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpKTsKLQkJCW5ldyBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25DaGVja2VyKGZPdXRwdXRXcml0ZXIpLmNoZWNrTW9kZWwobW9kZWwpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJUcmVlIDoiKTsKLQkJCXByaW50Tm9kZShtb2RlbC5nZXREb2N1bWVudCgpLCAwKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiIik7Ci0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQlwcmludEV4Y2VwdGlvbihleCk7Ci0JCX0KLQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKSB7Ci0JCXRyeSB7Ci0JCQlTdHJpbmcgdGVzdE91dHB1dERpcmVjdG9yeSA9IHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4ICsgRGF0ZVV0aWwubm93KCk7Ci0JCQlTdHJpbmcgY3VycmVudEZpbGVuYW1lID0gZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyBmaWxlRXh0ZW5zaW9uOwotCQkJRmlsZSBmaWxlb3V0ID0gRmlsZVV0aWwubWFrZUZpbGVGb3IodGVzdE91dHB1dERpcmVjdG9yeSwgY3VycmVudEZpbGVuYW1lLCB0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCk7Ci0JCQlXcml0ZXIgZmlsZVdyaXRlciA9IG5ldyBGaWxlV3JpdGVyKGZpbGVvdXQpOwotCQkJZmlsZVdyaXRlci53cml0ZShmT3V0cHV0V3JpdGVyLnRvU3RyaW5nKCkpOwotCQkJZmlsZVdyaXRlci5jbG9zZSgpOwotCQkJY29tcGFyZVdpdGhQcmV2aW91c1Jlc3VsdHMoZk91dHB1dFdyaXRlciwgY3VycmVudEZpbGVuYW1lKTsKLQotCQkJaWYgKGVjaG9Ub1N5c3RlbU91dCkgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihmT3V0cHV0V3JpdGVyLnRvU3RyaW5nKCkpOwotCQkJfQotCi0JCQlmT3V0cHV0V3JpdGVyLmNsb3NlKCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBNZXRob2QgY29tcGFyZVdpdGhQcmV2aW91c1Jlc3VsdHMuCi0JICogCi0JICogQHBhcmFtIG91dHB1dFdyaXRlcgotCSAqIEBwYXJhbSBjdXJyZW50RmlsZW5hbWUKLQkgKi8KLQlwcml2YXRlIHZvaWQgY29tcGFyZVdpdGhQcmV2aW91c1Jlc3VsdHMoVGVzdFdyaXRlciBvdXRwdXRXcml0ZXIsIFN0cmluZyBjdXJyZW50RmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGZhbHNlOwotCQlGaWxlIHByZXZpb3VzUmVzdWx0c0RpciA9IEZpbGVVdGlsLmdldFByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSh0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCk7Ci0JCWlmIChwcmV2aW91c1Jlc3VsdHNEaXIgIT0gbnVsbCkgewotCQkJU3RyaW5nIGN1cnJlbnRSZXN1bHRzID0gb3V0cHV0V3JpdGVyLnRvU3RyaW5nKCk7Ci0JCQlGaWxlIHByZXZpb3VzUmVzdWx0c0ZpbGUgPSBuZXcgRmlsZShwcmV2aW91c1Jlc3VsdHNEaXIsIGN1cnJlbnRGaWxlbmFtZSk7Ci0JCQlGaWxlUmVhZGVyIHByZXZpb3VzUmVzdWx0c0ZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcihwcmV2aW91c1Jlc3VsdHNGaWxlKTsKLQkJCVN0cmluZyBwcmV2aW91c1Jlc3VsdHMgPSByZWFkU3RyaW5nKHByZXZpb3VzUmVzdWx0c0ZpbGVSZWFkZXIpOwotCQkJU3RyaW5nQ29tcGFyZVV0aWwgc3RyaW5nQ29tcGFyZSA9IG5ldyBTdHJpbmdDb21wYXJlVXRpbCgpOwotCQkJLy8gdHJ5aW5nIHRvICJmb3JjZSIgdGhlIHNhbWUgbGluZWRlbGltdGVyIGRpZG4ndCB3b3JrIHdlbGwsCi0JCQkvLyBJIHRoaW5rIHNpbmNlIHRoZSBsaW5lIGRlbGltaXRlciBpcyBpbnB1dCBvbiBzb21lIHRlc3RzLAotCQkJLy8gYW5kIENWUyBpcyBsaWtlbHkgdG8gY2hhbmdlIGFueXdheSAoZm9yIEFTQ0lJIGZpbGVzKS4KLQkJCS8vIHNvIHdlJ2xsIGlnbm9yZSBpbiBvdXIgY29tcGFyaXNvbnMuIE5vdGU6IHdlIHdvdWxkbid0Ci0JCQkvLyB3YW50IHRvIGlnbm9yZSB3aGl0ZXNwYWNlLiBUaGVyZSBtaWdodCBhY3R1YWxseSBiZSBzb21lCi0JCQkvLyB0ZXN0cyB0aGF0IGFyZSBub3QgYXMgYWNjdXJhdGUgaWYgd2UgaWdub3JlIEVPTCwgYnV0IHRoZXJlCi0JCQkvLyBzZWVtcyB0byBiZSBubyBlYXN5IHdheSB0byBoYW5kbGUsIHdpdGggb3V0IGEgbG90IG9mIHRyb3VibGUuCi0JCQlpZiAoIXN0cmluZ0NvbXBhcmUuZXF1YWxzSWdub3JlTGluZVNlcGVyYXRvcihwcmV2aW91c1Jlc3VsdHMsIGN1cnJlbnRSZXN1bHRzKSkgewotCQkJCS8vIHByZXZpb3VzUmVzdWx0cy5lcXVhbHMoY3VycmVudFJlc3VsdHMpKSB7Ci0JCQkJLy8gZmFpbAotCQkJCXN1Y2Nlc3MgPSBmYWxzZTsKLQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihjdXJyZW50RmlsZW5hbWUgKyAiIGZhaWxlZCBjb21wYXJpc29uIHRvIHByZXZpb3VzIHJlc3VsdHMiKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlByZXZpb3VzOiAiKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4ocHJldmlvdXNSZXN1bHRzKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkN1cnJlbnQ6ICIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihjdXJyZW50UmVzdWx0cyk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlzdWNjZXNzID0gdHJ1ZTsKLQkJCQlpZiAocHJpbnRTdW1tYXJ5VG9TeXN0ZW1PdXQpIHsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihjdXJyZW50RmlsZW5hbWUgKyAiIGNvbXBhcmVkIG9rIik7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCWlmICghcHJpbnRlZE9uY2UpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIk5vIFByZXZpb3VzIERpcmVjdG9yeSBmb3VuZCAuLi4gY291bGRuJ3QgY29tcGFyZSAiICsgY3VycmVudEZpbGVuYW1lICsgIiB3aXRoIHByZXZpb3VzIHJlc3VsdHMiKTsKLQkJCQlwcmludGVkT25jZSA9IHRydWU7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgiY3VycmVudCBpcyBub3QgZXF1YWwgdG8gcmVmZXJlbmNlIHJlc3VsdHMgZm9yICIgKyBjdXJyZW50RmlsZW5hbWUsIHN1Y2Nlc3MpOwotCX0KLQotCS8qKgotCSAqIE1ldGhvZCByZWFkU3RyaW5nLgotCSAqIAotCSAqIEBwYXJhbSBwcmV2aW91c1Jlc3VsdHNGaWxlUmVhZGVyCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwcml2YXRlIFN0cmluZyByZWFkU3RyaW5nKEZpbGVSZWFkZXIgZmlsZVJlYWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHJlYWRJbnB1dFN0cmVhbShmaWxlUmVhZGVyKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyByZWFkSW5wdXRTdHJlYW0oSW5wdXRTdHJlYW1SZWFkZXIgaW5wdXRTdHJlYW1SZWFkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWludCBudW1SZWFkID0gMDsKLQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJY2hhciB0QnVmZltdID0gbmV3IGNoYXJbUkVBRF9CVUZGRVJfU0laRV07Ci0JCXdoaWxlICgobnVtUmVhZCA9IGlucHV0U3RyZWFtUmVhZGVyLnJlYWQodEJ1ZmYsIDAsIHRCdWZmLmxlbmd0aCkpICE9IC0xKSB7Ci0JCQlidWZmZXIuYXBwZW5kKHRCdWZmLCAwLCBudW1SZWFkKTsKLQkJfQotCQkvLyByZW1lbWJlciAtLSB3ZSBkaWRuJ3Qgb3BlbiBzdHJlYW0gLi4uIHNvIHdlIGRvbid0IGNsb3NlIGl0Ci0JCXJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKLQl9Ci0KLQlwdWJsaWMgYWJzdHJhY3Qgdm9pZCB0ZXN0TW9kZWwoKTsKLQotCXByb3RlY3RlZCB2b2lkIHByaW50RmxhdE1vZGVsKElTdHJ1Y3R1cmVkRG9jdW1lbnQgZmxhdE1vZGVsKSB7Ci0JCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiIik7Ci0JCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOiIpOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGZsYXRub2RlID0gZmxhdE1vZGVsLmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCXdoaWxlIChmbGF0bm9kZSAhPSBudWxsKSB7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihmbGF0bm9kZS50b1N0cmluZygpKTsKLQkJCWZsYXRub2RlID0gZmxhdG5vZGUuZ2V0TmV4dCgpOwotCi0JCX0KLQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCIiKTsKLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9Ob2RlTGlzdFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL05vZGVMaXN0VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWY0YjE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL05vZGVMaXN0VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIE5vZGVMaXN0VGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFBJVGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBOb2RlTGlzdFRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIE5vZGVMaXN0VGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgTm9kZUxpc3RUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxwPjwvcD4iKTsKLQkJCU5vZGUgcGFyZW50ID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCi0JCQlmb3IgKGludCBpID0gMDsgaSA8IDE7IGkrKykgewotCQkJCXBhcmVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjIikpOwotCQkJfQotCi0JCQlpdGVyYXRlKHBhcmVudCk7Ci0KLQkJCWZvciAoaW50IGkgPSAxOyBpIDwgNTsgaSsrKSB7Ci0JCQkJcGFyZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImMiKSk7Ci0JCQl9Ci0KLQkJCWl0ZXJhdGUocGFyZW50KTsKLQotCQkJZm9yIChpbnQgaSA9IDU7IGkgPCAxMDsgaSsrKSB7Ci0JCQkJcGFyZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImMiKSk7Ci0JCQl9Ci0KLQkJCWl0ZXJhdGUocGFyZW50KTsKLQotCQkJZm9yIChpbnQgaSA9IDEwOyBpIDwgMjA7IGkrKykgewotCQkJCXBhcmVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjIikpOwotCQkJfQotCi0JCQlpdGVyYXRlKHBhcmVudCk7Ci0KLQkJCWZvciAoaW50IGkgPSAyMDsgaSA8IDUwOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gNTA7IGkgPCAxMDA7IGkrKykgewotCQkJCXBhcmVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjIikpOwotCQkJfQotCi0JCQlpdGVyYXRlKHBhcmVudCk7Ci0KLQkJCWZvciAoaW50IGkgPSAxMDA7IGkgPCAyMDA7IGkrKykgewotCQkJCXBhcmVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjIikpOwotCQkJfQotCi0JCQlpdGVyYXRlKHBhcmVudCk7Ci0KLQkJCWZvciAoaW50IGkgPSAyMDA7IGkgPCA1MDA7IGkrKykgewotCQkJCXBhcmVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjIikpOwotCQkJfQotCi0JCQlpdGVyYXRlKHBhcmVudCk7Ci0KLQkJCWZvciAoaW50IGkgPSA1MDA7IGkgPCAxMDAwOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gMTAwMDsgaSA8IDIwMDA7IGkrKykgewotCQkJCXBhcmVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjIikpOwotCQkJfQotCi0JCQlpdGVyYXRlKHBhcmVudCk7Ci0KLQkJCWZvciAoaW50IGkgPSAyMDAwOyBpIDwgNTAwMDsgaSsrKSB7Ci0JCQkJcGFyZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImMiKSk7Ci0JCQl9Ci0KLQkJCWl0ZXJhdGUocGFyZW50KTsKLQotCQkJZm9yIChpbnQgaSA9IDUwMDA7IGkgPCAxMDAwMDsgaSsrKSB7Ci0JCQkJcGFyZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImMiKSk7Ci0JCQl9Ci0KLQkJCWl0ZXJhdGUocGFyZW50KTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgaXRlcmF0ZShOb2RlIHBhcmVudCkgewotCQlsb25nIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCWludCBpID0gMDsKLQkJaW50IHQgPSAwOwotCQl3aGlsZSAodCA8IDEwMDApIHsKLQkJCU5vZGVMaXN0IGNoaWxkTm9kZXMgPSBwYXJlbnQuZ2V0Q2hpbGROb2RlcygpOwotCQkJaW50IGxlbmd0aCA9IGNoaWxkTm9kZXMuZ2V0TGVuZ3RoKCk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLQkJCQljaGlsZE5vZGVzLml0ZW0oaSk7Ci0JCQl9Ci0JCQkvLyB0aGVzZSAyIGxpbmVzIGFyZSByZXF1aXJlZCB0byBpbnZhbGlkYXRlIHRoZSBjYWNoZQotCQkJcGFyZW50LmFwcGVuZENoaWxkKHBhcmVudC5nZXRPd25lckRvY3VtZW50KCkuY3JlYXRlVGV4dE5vZGUoIiIpKTsKLQkJCXBhcmVudC5yZW1vdmVDaGlsZChwYXJlbnQuZ2V0TGFzdENoaWxkKCkpOwotCQkJdCsrOwotCQl9Ci0JCWZsb2F0IGQgPSAoKGZsb2F0KSAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydCkpIC8gdDsKLQkJU3lzdGVtLm91dC5wcmludGxuKGQgKyAiIG1zIGZvciAiICsgaSArICIgY2hpbGQgbm9kZXMiKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvTnVsbElucHV0U3RyZWFtLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9OdWxsSW5wdXRTdHJlYW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ4MTBjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9OdWxsSW5wdXRTdHJlYW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLQotY2xhc3MgTnVsbElucHV0U3RyZWFtIGV4dGVuZHMgSW5wdXRTdHJlYW0gewotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI21hcmsoaW50KQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBtYXJrKGludCByZWFkbGltaXQpIHsKLQkJLy8gbm90aGluZyB0byBkbwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNtYXJrU3VwcG9ydGVkKCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBtYXJrU3VwcG9ydGVkKCkgewotCQkvLyB3ZSBjYW4gbWFyayBub3RoaW5nLgotCQkvLyBhbmQsIHdlIGFyZSB1c2luZyB0aGlzIE51bGwgY2xhc3Mgc3BlY2lmaWNhbGx5IGZvcgotCQkvLyBhICJmYWtlIiByZXNldHRhYmxlIHN0cmVhbS4KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI3JlYWQoKQotCSAqLwotCXB1YmxpYyBpbnQgcmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0KLQkJcmV0dXJuIC0xOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNyZXNldCgpCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlc2V0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gbm90aGluZyB0byBkbwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNza2lwKGxvbmcpCi0JICovCi0JcHVibGljIGxvbmcgc2tpcChsb25nIG4pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXJldHVybiAwOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1BJVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUElUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNzJhOGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUElUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgUElUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgUElUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFBJVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgUElUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBQSVRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGE+PD9lY2hvICRQSFBfU0VMRj8+PC9hPiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlOb2RlIGEgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlmb3IgKE5vZGUgY2hpbGQgPSBhLmdldEZpcnN0Q2hpbGQoKTsgY2hpbGQgIT0gbnVsbDsgY2hpbGQgPSBjaGlsZC5nZXROZXh0U2libGluZygpKSB7Ci0JCQkJaWYgKGNoaWxkLmdldE5vZGVUeXBlKCkgIT0gTm9kZS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpCi0JCQkJCWNvbnRpbnVlOwotCQkJCVByb2Nlc3NpbmdJbnN0cnVjdGlvbiBwaSA9IChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pIGNoaWxkOwotCQkJCVN0cmluZyB0YXJnZXQgPSBwaS5nZXRUYXJnZXQoKTsKLQkJCQlpZiAodGFyZ2V0ID09IG51bGwpCi0JCQkJCXRhcmdldCA9ICJudWxsIjsKLQkJCQlTdHJpbmcgZGF0YSA9IHBpLmdldERhdGEoKTsKLQkJCQlpZiAoZGF0YSA9PSBudWxsKQotCQkJCQlkYXRhID0gIm51bGwiOwotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigidGFyZ2V0KCIgKyB0YXJnZXQgKyAiKSBkYXRhICgiICsgZGF0YSArICIpIik7Ci0JCQl9Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QYXJzZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QYXJzZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZDliOWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBQYXJzZXJUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgUGFyc2VyVGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBQYXJzZXJUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBQYXJzZXJUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBQYXJzZXJUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsICI8UD48Qj48L0I+PEI+PC9CPjwvUD48UD48L1A+Iik7Ci0JCQlOb2RlIHAgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlOb2RlIGIgPSBwLmdldEZpcnN0Q2hpbGQoKTsKLQkJCU5vZGUgYjIgPSBiLmdldE5leHRTaWJsaW5nKCk7Ci0JCQlOb2RlIHAyID0gcC5nZXROZXh0U2libGluZygpOwotCQkJLyoKLQkJCSAqIEVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCSAqIGRvY3VtZW50LmFwcGVuZENoaWxkKHApOyBFbGVtZW50IGIgPQotCQkJICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQiIpOyBwLmFwcGVuZENoaWxkKGIpOyBFbGVtZW50IGIyID0KLQkJCSAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkIiKTsgcC5hcHBlbmRDaGlsZChiMik7IEVsZW1lbnQgcDIgPQotCQkJICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOyBkb2N1bWVudC5hcHBlbmRDaGlsZChwMik7Ci0JCQkgKi8KLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsICJhIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAoKElET01Ob2RlKSBiKS5nZXRTdGFydE9mZnNldCgpLCAwLCAiYiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgKChJRE9NTm9kZSkgYjIpLmdldFN0YXJ0T2Zmc2V0KCksIDAsICJjIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAoKElET01Ob2RlKSBiMikuZ2V0RW5kT2Zmc2V0KCksIDAsICJkIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAoKElET01Ob2RlKSBwMikuZ2V0U3RhcnRPZmZzZXQoKSwgMCwgImUiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsICgoSURPTU5vZGUpIHAyKS5nZXRTdGFydE9mZnNldCgpICsgMywgMCwgImYiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsICgoSURPTU5vZGUpIHAyKS5nZXRFbmRPZmZzZXQoKSwgMCwgImciKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1BhcnNlclRlc3QyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QYXJzZXJUZXN0Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzkwYmEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1BhcnNlclRlc3QyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBQYXJzZXJUZXN0MiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFBhcnNlclRlc3QyLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFBhcnNlclRlc3QyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBQYXJzZXJUZXN0MigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgUGFyc2VyVGVzdDIoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgIjxhIGI9XCJcIiAgYz1cImNcIj4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBhID0gKEVsZW1lbnQpIGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzID0gYS5nZXRBdHRyaWJ1dGVzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJCU5vZGUgYXR0ciA9IGF0dHJpYnV0ZXMuaXRlbShpKTsKLQkJCQlTdHJpbmcgbmFtZSA9IGF0dHIuZ2V0Tm9kZU5hbWUoKTsKLQkJCQlTdHJpbmcgdmFsdWUgPSBhdHRyLmdldE5vZGVWYWx1ZSgpOwotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihuYW1lICsgIj1bIiArIHZhbHVlICsgIl0iKTsKLQkJCX0KLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDgsIDAsICJkIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWEgPSAoRWxlbWVudCkgZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJYXR0cmlidXRlcyA9IGEuZ2V0QXR0cmlidXRlcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCQlOb2RlIGF0dHIgPSBhdHRyaWJ1dGVzLml0ZW0oaSk7Ci0JCQkJU3RyaW5nIG5hbWUgPSBhdHRyLmdldE5vZGVOYW1lKCk7Ci0JCQkJU3RyaW5nIHZhbHVlID0gYXR0ci5nZXROb2RlVmFsdWUoKTsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4obmFtZSArICI9WyIgKyB2YWx1ZSArICJdIik7Ci0JCQl9Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA4LCAxLCAiIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWEgPSAoRWxlbWVudCkgZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJYXR0cmlidXRlcyA9IGEuZ2V0QXR0cmlidXRlcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCQlOb2RlIGF0dHIgPSBhdHRyaWJ1dGVzLml0ZW0oaSk7Ci0JCQkJU3RyaW5nIG5hbWUgPSBhdHRyLmdldE5vZGVOYW1lKCk7Ci0JCQkJU3RyaW5nIHZhbHVlID0gYXR0ci5nZXROb2RlVmFsdWUoKTsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4obmFtZSArICI9WyIgKyB2YWx1ZSArICJdIik7Ci0JCQl9Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdDMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1BhcnNlclRlc3QzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlNTllYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlN0cnVjdHVyZWREb2N1bWVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgUGFyc2VyVGVzdDMgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBQYXJzZXJUZXN0My4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBQYXJzZXJUZXN0MyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgUGFyc2VyVGVzdDMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFBhcnNlclRlc3QzKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJLy9TdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBldmVudCA9Ci0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgIjxhIGIgID4iKTsKLQkJCS8vIGRvbnQncyBwcmludCBpbnN0YW5jZSBvZiBldmVudCwgb3IgbWFueSB0ZXN0cyB3aWxsIGZhaWwgd2hlbgotCQkJLy8gZXZlbnQgY2xhc3MgaXMgY2hhbmdlZCAoZXhhY3RseSB3aGF0IGlzIG5vdCBuZWVkZWQgZm9yIHVuaXQKLQkJCS8vIHRlc3RzISkKLQkJCS8vIGZPdXRwdXRXcml0ZXIud3JpdGVsbihldmVudC50b1N0cmluZygpKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBhID0gKEVsZW1lbnQpIGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzID0gYS5nZXRBdHRyaWJ1dGVzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJCU5vZGUgYXR0ciA9IGF0dHJpYnV0ZXMuaXRlbShpKTsKLQkJCQlTdHJpbmcgbmFtZSA9IGF0dHIuZ2V0Tm9kZU5hbWUoKTsKLQkJCQlTdHJpbmcgdmFsdWUgPSBhdHRyLmdldE5vZGVWYWx1ZSgpOwotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihuYW1lICsgIj1bIiArIHZhbHVlICsgIl0iKTsKLQkJCX0KLQotCQkJU3RydWN0dXJlZERvY3VtZW50RXZlbnQgZXZlbnQyID0gc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDQsIDEsICIiKTsKLQkJCS8vIEkgcmVtb3ZlZCB0aGlzIHBhcnQgb2Ygb3V0cHV0LCBzaW5jZSByZW5hbWluZyBjbGFzcyBvciBwYWNrYWdlCi0JCQkvLyB3aWxsIGNhdXNlIHRlc3QgdG8gZmFpbCEKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihldmVudDIudG9TdHJpbmcoKSk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWEgPSAoRWxlbWVudCkgZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJYXR0cmlidXRlcyA9IGEuZ2V0QXR0cmlidXRlcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCQlOb2RlIGF0dHIgPSBhdHRyaWJ1dGVzLml0ZW0oaSk7Ci0JCQkJU3RyaW5nIG5hbWUgPSBhdHRyLmdldE5vZGVOYW1lKCk7Ci0JCQkJU3RyaW5nIHZhbHVlID0gYXR0ci5nZXROb2RlVmFsdWUoKTsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4obmFtZSArICI9WyIgKyB2YWx1ZSArICJdIik7Ci0JCQl9Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QYXJzZXJUZXN0NC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ2ZTYwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QYXJzZXJUZXN0NC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLQotcHVibGljIGNsYXNzIFBhcnNlclRlc3Q0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgUGFyc2VyVGVzdDQuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgUGFyc2VyVGVzdDQoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFBhcnNlclRlc3Q0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBQYXJzZXJUZXN0NCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCS8vRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgIjxhPlxuXG48JSBhICU+XG48JSBiICU+XG48L2E+Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA0LCAwLCAiPCIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgNSwgMCwgImIiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDYsIDAsICJjIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA3LCAwLCAiZCIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgOCwgMCwgImUiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDksIDAsICI+Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9Tb3VyY2VUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9Tb3VyY2VUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNGQwMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU291cmNlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU291cmNlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFNvdXJjZVRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTb3VyY2VUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFNvdXJjZVRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFNvdXJjZVRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFNvdXJjZVRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlUZXh0IHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgidCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQodCk7Ci0JCQlTb3VyY2VWYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IFNvdXJjZVZhbGlkYXRvcih0KTsKLQotCQkJU3RyaW5nIHNvdXJjZSA9IG51bGw7Ci0JCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQotCQkJc291cmNlID0gImFhYTxiYmI+Y2NjIjsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigic291cmNlOiAiICsgc291cmNlKTsKLQkJCXRyeSB7Ci0JCQkJdmFsaWRhdG9yLnZhbGlkYXRlU291cmNlKHNvdXJjZSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gdmFsaWRhdG9yLmNvbnZlcnRTb3VyY2Uoc291cmNlKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigicmVzdWx0OiAiICsgcmVzdWx0KTsKLQotCQkJc291cmNlID0gImFhYSZhbXA7XCInYmJiJmd0OyZsdDtjY2MmcXVvdDsmIzY0OyI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNvdXJjZSA9ICImYW1wOyYmIjsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigic291cmNlOiAiICsgc291cmNlKTsKLQkJCXRyeSB7Ci0JCQkJdmFsaWRhdG9yLnZhbGlkYXRlU291cmNlKHNvdXJjZSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gdmFsaWRhdG9yLmNvbnZlcnRTb3VyY2Uoc291cmNlKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigicmVzdWx0OiAiICsgcmVzdWx0KTsKLQotCQkJc291cmNlID0gIiZiYmImPD5jY2MiOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJzb3VyY2U6ICIgKyBzb3VyY2UpOwotCQkJdHJ5IHsKLQkJCQl2YWxpZGF0b3IudmFsaWRhdGVTb3VyY2Uoc291cmNlKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSB2YWxpZGF0b3IuY29udmVydFNvdXJjZShzb3VyY2UpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJyZXN1bHQ6ICIgKyByZXN1bHQpOwotCi0JCQlzb3VyY2UgPSAiJnVuazsmdW5rIjsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigic291cmNlOiAiICsgc291cmNlKTsKLQkJCXRyeSB7Ci0JCQkJdmFsaWRhdG9yLnZhbGlkYXRlU291cmNlKHNvdXJjZSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gdmFsaWRhdG9yLmNvbnZlcnRTb3VyY2Uoc291cmNlKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigicmVzdWx0OiAiICsgcmVzdWx0KTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NvdXJjZVRlc3QyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9Tb3VyY2VUZXN0Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmJiZWMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NvdXJjZVRlc3QyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5JbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5Tb3VyY2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBTb3VyY2VUZXN0MiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFNvdXJjZVRlc3QyLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFNvdXJjZVRlc3QyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBTb3VyY2VUZXN0MigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgU291cmNlVGVzdDIoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCUF0dHIgYiA9IGRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZSgiYiIpOwotCQkJYS5zZXRBdHRyaWJ1dGVOb2RlKGIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoYSk7Ci0JCQlTb3VyY2VWYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IFNvdXJjZVZhbGlkYXRvcihiKTsKLQotCQkJU3RyaW5nIHNvdXJjZSA9IG51bGw7Ci0JCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQotCQkJc291cmNlID0gImFhYTxiYmI+Y2NjIjsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigic291cmNlOiAiICsgc291cmNlKTsKLQkJCXRyeSB7Ci0JCQkJdmFsaWRhdG9yLnZhbGlkYXRlU291cmNlKHNvdXJjZSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gdmFsaWRhdG9yLmNvbnZlcnRTb3VyY2Uoc291cmNlKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigicmVzdWx0OiAiICsgcmVzdWx0KTsKLQotCQkJc291cmNlID0gImFhYSZhbXA7YmJiJmd0OyZsdDtjY2MmcXVvdDsmIzY0OyI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNvdXJjZSA9ICImYW1wOyYmIjsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigic291cmNlOiAiICsgc291cmNlKTsKLQkJCXRyeSB7Ci0JCQkJdmFsaWRhdG9yLnZhbGlkYXRlU291cmNlKHNvdXJjZSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gdmFsaWRhdG9yLmNvbnZlcnRTb3VyY2Uoc291cmNlKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigicmVzdWx0OiAiICsgcmVzdWx0KTsKLQotCQkJc291cmNlID0gIlwiYWFhXCIiOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJzb3VyY2U6ICIgKyBzb3VyY2UpOwotCQkJdHJ5IHsKLQkJCQl2YWxpZGF0b3IudmFsaWRhdGVTb3VyY2Uoc291cmNlKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSB2YWxpZGF0b3IuY29udmVydFNvdXJjZShzb3VyY2UpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJyZXN1bHQ6ICIgKyByZXN1bHQpOwotCi0JCQlzb3VyY2UgPSAiXCJhJ2FcIiI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9Tb3VyY2VUZXN0My5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU291cmNlVGVzdDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q5ZmE4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9Tb3VyY2VUZXN0My5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5JbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5Tb3VyY2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBTb3VyY2VUZXN0MyBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFNvdXJjZVRlc3QzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFNvdXJjZVRlc3QzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBTb3VyY2VUZXN0MygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgU291cmNlVGVzdDMoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCUF0dHIgYiA9IGRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZSgiYiIpOwotCQkJYS5zZXRBdHRyaWJ1dGVOb2RlKGIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoYSk7Ci0JCQlTb3VyY2VWYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IFNvdXJjZVZhbGlkYXRvcihiKTsKLQotCQkJU3RyaW5nIHNvdXJjZSA9IG51bGw7Ci0JCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQotCQkJc291cmNlID0gIjwlIGFhYSAlPjwlPSBiYmIgJT4vPCUhIGNjYyAlPmRkZCI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNvdXJjZSA9ICI8JSBhYWEiOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJzb3VyY2U6ICIgKyBzb3VyY2UpOwotCQkJdHJ5IHsKLQkJCQl2YWxpZGF0b3IudmFsaWRhdGVTb3VyY2Uoc291cmNlKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSB2YWxpZGF0b3IuY29udmVydFNvdXJjZShzb3VyY2UpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJyZXN1bHQ6ICIgKyByZXN1bHQpOwotCi0JCQlzb3VyY2UgPSAiPjwgJSBhYWEgJT4iOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJzb3VyY2U6ICIgKyBzb3VyY2UpOwotCQkJdHJ5IHsKLQkJCQl2YWxpZGF0b3IudmFsaWRhdGVTb3VyY2Uoc291cmNlKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSB2YWxpZGF0b3IuY29udmVydFNvdXJjZShzb3VyY2UpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJyZXN1bHQ6ICIgKyByZXN1bHQpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmI5ZGViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFNwbGl0VGV4dFRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTcGxpdFRleHRUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFNwbGl0VGV4dFRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFNwbGl0VGV4dFRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFNwbGl0VGV4dFRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhYWJiYmJjY2MiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDIgPSB0ZXh0LnNwbGl0VGV4dCgyKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0MyA9IHRleHQyLnNwbGl0VGV4dCg0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJcC5yZW1vdmVDaGlsZCh0ZXh0Mik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuYXBwZW5kRGF0YSgiZGRkZGRkZCIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0My5hcHBlbmREYXRhKCJlZWUiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJcC5pbnNlcnRCZWZvcmUodGV4dDIsIHRleHQzKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3QyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzA5ZDBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3QyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBTcGxpdFRleHRUZXN0MiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFNwbGl0VGV4dFRlc3QyLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFNwbGl0VGV4dFRlc3QyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBTcGxpdFRleHRUZXN0MigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgU3BsaXRUZXh0VGVzdDIoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhYWJiYmJjY2MiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDIgPSB0ZXh0LnNwbGl0VGV4dCgyKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0MyA9IHRleHQyLnNwbGl0VGV4dCg0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJcC5yZW1vdmVDaGlsZCh0ZXh0Mik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkIiKTsKLQkJCWIuYXBwZW5kQ2hpbGQodGV4dDIpOwotCQkJcC5pbnNlcnRCZWZvcmUoYiwgdGV4dDMpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3QzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYjNjYzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFNwbGl0VGV4dFRlc3QzIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU3BsaXRUZXh0VGVzdDMuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFNwbGl0VGV4dFRlc3QzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTcGxpdFRleHRUZXN0MygpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImFhIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCIik7Ci0JCQlUZXh0IHRleHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImJiYmIiKTsKLQkJCWIuYXBwZW5kQ2hpbGQodGV4dDIpOwotCQkJcC5hcHBlbmRDaGlsZChiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0MyA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJjY2MiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dDMpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlwLnJlbW92ZUNoaWxkKGIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlwLmluc2VydEJlZm9yZShiLCB0ZXh0Myk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0NC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdlYjk2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0NC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgU3BsaXRUZXh0VGVzdDQgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTcGxpdFRleHRUZXN0NC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBTcGxpdFRleHRUZXN0NChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDQoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFNwbGl0VGV4dFRlc3Q0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LmFwcGVuZERhdGEoImFhYSIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LmRlbGV0ZURhdGEoMCwgMyk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiY2NjYyIpOwotCQkJcC5pbnNlcnRCZWZvcmUodGV4dDIsIHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LmFwcGVuZERhdGEoImFhYSIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0NS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc4NjFmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0NS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgU3BsaXRUZXh0VGVzdDUgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTcGxpdFRleHRUZXN0NS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBTcGxpdFRleHRUZXN0NShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDUoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFNwbGl0VGV4dFRlc3Q1KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYWFiYmJiY2NjIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQyID0gdGV4dC5zcGxpdFRleHQoNik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgYnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCUiIpOwotCQkJcC5pbnNlcnRCZWZvcmUoYnIsIHRleHQyKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dDIuc2V0RGF0YSgiY2NjZCIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0Mi5zZXREYXRhKCJjY2NkZSIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQzID0gdGV4dC5zcGxpdFRleHQoMik7Ci0JCQlFbGVtZW50IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCIik7Ci0JCQliLmFwcGVuZENoaWxkKHRleHQzKTsKLQkJCXAuaW5zZXJ0QmVmb3JlKGIsIGJyKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0NCA9IHRleHQyLnNwbGl0VGV4dCgzKTsKLQkJCUVsZW1lbnQgaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkkiKTsKLQkJCWkuYXBwZW5kQ2hpbGQodGV4dDIpOwotCQkJcC5pbnNlcnRCZWZvcmUoaSwgdGV4dDQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDYuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2NWY0MjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFNwbGl0VGV4dFRlc3Q2IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU3BsaXRUZXh0VGVzdDYuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDYoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFNwbGl0VGV4dFRlc3Q2KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTcGxpdFRleHRUZXN0NigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImFhYmJiYmNjYyIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQkJCVRleHQgdGV4dDIgPSB0ZXh0LnNwbGl0VGV4dCgyKTsKLQkJCS8vID09PiAvLyBUZXh0IHRleHQzID0KLQkJCXRleHQyLnNwbGl0VGV4dCg0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dDIuc2V0RGF0YSgiYmJiYmQiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q3LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0Ny5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWFiMjc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBTcGxpdFRleHRUZXN0NyBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFNwbGl0VGV4dFRlc3Q3LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFNwbGl0VGV4dFRlc3Q3KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBTcGxpdFRleHRUZXN0NygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgU3BsaXRUZXh0VGVzdDcoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhYWFhIik7Ci0JCQlUZXh0IHRleHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImJiYmIiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQyKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCi0JCQkvLyBkZWxldGUgYWNjcm9zcyBub2RlIGJvdW5kcnkKLQkJCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnJlcGxhY2VUZXh0KHRoaXMsIDYsIDMsICIiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q4LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0OC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTk0ZTQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBTcGxpdFRleHRUZXN0OCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFNwbGl0VGV4dFRlc3Q4LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFNwbGl0VGV4dFRlc3Q4KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBTcGxpdFRleHRUZXN0OCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgU3BsaXRUZXh0VGVzdDgoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhYWFhIik7Ci0JCQlUZXh0IHRleHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImJiYmIiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQyKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCi0JCQkvLyBkZWxldGUgYWNjcm9zcyBub2RlIGJvdW5kcnkKLQkJCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnJlcGxhY2VUZXh0KHRoaXMsIDQsIDYsICIiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1RhYmxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVGFibGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyODUxZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVGFibGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBUYWJsZVRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBUYWJsZVRlc3QuCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVGFibGVUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBUYWJsZVRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFRhYmxlVGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQlFbGVtZW50IGh0bWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJIVE1MIik7Ci0JCWRvY3VtZW50LmFwcGVuZENoaWxkKGh0bWwpOwotCi0JCXByaW50U291cmNlKG1vZGVsKTsKLQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQlFbGVtZW50IGJvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCT0RZIik7Ci0JCWh0bWwuYXBwZW5kQ2hpbGQoYm9keSk7Ci0KLQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQlwcmludFRyZWUobW9kZWwpOwotCi0JCUVsZW1lbnQgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUQUJMRSIpOwotCQl0YWJsZS5zZXRBdHRyaWJ1dGUoImJvcmRlciIsICIxIik7Ci0JCUVsZW1lbnQgdGQgPSBudWxsOwotCQlmb3IgKGludCByb3cgPSAwOyByb3cgPCAyOyByb3crKykgewotCQkJRWxlbWVudCB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7Ci0JCQl0YWJsZS5hcHBlbmRDaGlsZCh0cik7Ci0JCQlmb3IgKGludCBjb2wgPSAwOyBjb2wgPCAyOyBjb2wrKykgewotCQkJCXRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKLQkJCQl0ci5hcHBlbmRDaGlsZCh0ZCk7Ci0JCQl9Ci0JCX0KLQkJYm9keS5hcHBlbmRDaGlsZCh0YWJsZSk7Ci0KLQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQlwcmludFRyZWUobW9kZWwpOwotCi0JCUVsZW1lbnQgZm9udCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkZPTlQiKTsKLQkJZm9udC5zZXRBdHRyaWJ1dGUoImNvbG9yIiwgInJlZCIpOwotCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgidGV4dCIpOwotCQlmb250LmFwcGVuZENoaWxkKHRleHQpOwotCQl0ZC5hcHBlbmRDaGlsZChmb250KTsKLQotCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1RleHRUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9UZXh0VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjVhYzE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1RleHRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5DaGFyYWN0ZXJEYXRhOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXh0VGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFRleHRUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFRleHRUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBUZXh0VGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVGV4dFRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJQ2hhcmFjdGVyRGF0YSB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoInRleHQiKTsKLQkJCWEuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXRleHQuc2V0RGF0YSgiaGVsbG8gJmx0OyIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4odGV4dC5nZXREYXRhKCkpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVGV4dFRlc3QyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9UZXh0VGVzdDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkzZTYxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9UZXh0VGVzdDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkNoYXJhY3RlckRhdGE7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFRleHRUZXN0MiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFRleHRUZXN0Mi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBUZXh0VGVzdDIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFRleHRUZXN0MigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVGV4dFRlc3QyKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChhKTsKLQkJCUNoYXJhY3RlckRhdGEgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ0ZXh0Iik7Ci0JCQlhLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQl0ZXh0LnNldE5vZGVWYWx1ZSgiaGVsbG8gJmx0OyIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4odGV4dC5nZXROb2RlVmFsdWUoKSk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9UZXh0VGVzdDMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1RleHRUZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjVkMTFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1RleHRUZXN0My5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVGV4dFRlc3QzIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVGV4dFRlc3QzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFRleHRUZXN0MyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVGV4dFRlc3QzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBUZXh0VGVzdDMoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJSURPTU5vZGUgdGV4dCA9IChJRE9NTm9kZSkgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoInRleHQiKTsKLQkJCWEuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXRyeSB7Ci0JCQkJdGV4dC5zZXRTb3VyY2UoImhlbGxvIDwiKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRyeSB7Ci0JCQkJdGV4dC5zZXRTb3VyY2UoImhlbGxvICZsdDsiKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRyeSB7Ci0JCQkJdGV4dC5zZXRTb3VyY2UoImhlbGxvICZ1bms7Iik7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0cnkgewotCQkJCXRleHQuc2V0U291cmNlKCJoZWxsbyAmIzY1OyIpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdHJ5IHsKLQkJCQl0ZXh0LnNldFNvdXJjZSgiaGVsbG8gJiBnb29kLWJ5ZSIpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNTk2NWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGh0bWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJIVE1MIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChodG1sKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQk9EWSIpOwotCQkJaHRtbC5hcHBlbmRDaGlsZChib2R5KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJYm9keS5hcHBlbmRDaGlsZChwKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoInRleHQiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgYnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCUiIpOwotCQkJcC5pbnNlcnRCZWZvcmUoYnIsIHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklNRyIpOwotCQkJcC5hcHBlbmRDaGlsZChpbWcpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlwLnJlbW92ZUNoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlwLmluc2VydEJlZm9yZSh0ZXh0LCBpbWcpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlib2R5LnJlbW92ZUNoaWxkKHApOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlib2R5LmFwcGVuZENoaWxkKHApOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxMC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxMC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGI2YTkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3QxMCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0MTAuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3QxMChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3QxMCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3QxMCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoYSk7Ci0JCQlhLnNldEF0dHJpYnV0ZSgiYiIsICJjIik7Ci0JCQlFbGVtZW50IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiIik7Ci0JCQlhLmFwcGVuZENoaWxkKGIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb246Iik7Ci0JCQlJRE9NTm9kZSBub2RlID0gKElET01Ob2RlKSBiOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBmbGF0Tm9kZSA9IG5vZGUuZ2V0U3RhcnRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihmbGF0Tm9kZS5nZXRUZXh0KCkpOwotCQkJSXRlcmF0b3IgZSA9IGZsYXROb2RlLmdldFJlZ2lvbnMoKS5pdGVyYXRvcigpOwotCQkJaW50IGkgPSAwOwotCQkJd2hpbGUgKGUuaGFzTmV4dCgpKSB7Ci0JCQkJSVRleHRSZWdpb24gcmVnaW9uID0gKElUZXh0UmVnaW9uKSBlLm5leHQoKTsKLQkJCQlib29sZWFuIG9rID0gdHJ1ZTsgLy8gbm8gbG9uZ2VyIGhhcyBwYXJlbnQuCi0JCQkJCQkJCSAgIC8vIC8vKHJlZ2lvbi5nZXRQYXJlbnQoKSA9PSBmbGF0Tm9kZSk7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGkgKyAiKCIgKyBmbGF0Tm9kZS5nZXRUZXh0KHJlZ2lvbikgKyAiKSIgKyBvayk7Ci0JCQl9Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIiIpOwotCi0JCQliLnNldEF0dHJpYnV0ZSgiYyIsICJkIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjoiKTsKLQkJCW5vZGUgPSAoSURPTU5vZGUpIGI7Ci0JCQlmbGF0Tm9kZSA9IG5vZGUuZ2V0U3RhcnRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihmbGF0Tm9kZS5nZXRUZXh0KCkpOwotCQkJZSA9IGZsYXROb2RlLmdldFJlZ2lvbnMoKS5pdGVyYXRvcigpOwotCQkJaSA9IDA7Ci0JCQl3aGlsZSAoZS5oYXNOZXh0KCkpIHsKLQkJCQlJVGV4dFJlZ2lvbiByZWdpb24gPSAoSVRleHRSZWdpb24pIGUubmV4dCgpOwotCQkJCWJvb2xlYW4gb2sgPSB0cnVlOyAvLyBubyBsb25nZXIgaGFzIHBhcmVudC4KLQkJCQkJCQkJICAgLy8gKHJlZ2lvbi5nZXRQYXJlbnQoKSA9PSBmbGF0Tm9kZSk7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGkgKyAiKCIgKyBmbGF0Tm9kZS5nZXRUZXh0KHJlZ2lvbikgKyAiKSIgKyBvayk7Ci0JCQl9Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIiIpOwotCi0JCQlhLnNldEF0dHJpYnV0ZSgiYiIsICJjZCIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb246Iik7Ci0JCQlub2RlID0gKElET01Ob2RlKSBiOwotCQkJZmxhdE5vZGUgPSBub2RlLmdldFN0YXJ0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZmxhdE5vZGUuZ2V0VGV4dCgpKTsKLQkJCWUgPSBmbGF0Tm9kZS5nZXRSZWdpb25zKCkuaXRlcmF0b3IoKTsKLQkJCWkgPSAwOwotCQkJd2hpbGUgKGUuaGFzTmV4dCgpKSB7Ci0JCQkJSVRleHRSZWdpb24gcmVnaW9uID0gKElUZXh0UmVnaW9uKSBlLm5leHQoKTsKLQkJCQlib29sZWFuIG9rID0gdHJ1ZTsgLy8gKHJlZ2lvbi5nZXRQYXJlbnQoKSA9PSBmbGF0Tm9kZSk7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGkgKyAiKCIgKyBmbGF0Tm9kZS5nZXRUZXh0KHJlZ2lvbikgKyAiKSIgKyBvayk7Ci0JCQl9Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIiIpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTEuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFmNmZiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDExIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3QxMS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdDExKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDExKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDExKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChhKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJiIik7Ci0JCQlhLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LnNldERhdGEoImIiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQzMTNhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDEyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3QxMiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0MTIuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3QxMihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3QxMigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3QxMigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoYSk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgYTIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlkb2N1bWVudC5pbnNlcnRCZWZvcmUoYTIsIGEpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlkb2N1bWVudC5yZW1vdmVDaGlsZChhMik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxMy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTM0MTc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3QxMyBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0MTMuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3QxMyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3QxMygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3QxMygpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCAiPGE+XHJcbjxiPlxyXG48L2E+Iik7Ci0KLQkJCUVsZW1lbnQgYSA9IChFbGVtZW50KSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlFbGVtZW50IGIgPSAoRWxlbWVudCkgYS5nZXRMYXN0Q2hpbGQoKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgICIpOwotCQkJYS5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYS5yZW1vdmVDaGlsZChiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI3YzllYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDE0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3QxNCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0MTQuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3QxNChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3QxNCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3QxNCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQkvL0RvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsICI8JT0gYWFhYSAlPiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMiwgMCwgIiAiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTMyYjExYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDE1LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3QxNSBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0MTUuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3QxNShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3QxNSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3QxNSgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJLy8gWE1MIGNhc2UKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQkvL0RvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsICI8JT0gYWFhYSAlPjxQPiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQkvLwlIVE1MIGNhc2UKLQkJCW1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCS8vZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgIjwlPSBhYWFhICU+PFA+Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjVkYTFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0Mi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDIgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDIuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3QyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0MigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPEhUTUw+XHJcbjxIRUFEPjwvSEVBRD5cclxuPEJPRFk+PC9CT0RZPlxyXG48L0hUTUw+XHJcbiIpOwotCQkJRWxlbWVudCBodG1sID0gKEVsZW1lbnQpIGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCUVsZW1lbnQgaGVhZCA9IChFbGVtZW50KSBodG1sLmdldEZpcnN0Q2hpbGQoKS5nZXROZXh0U2libGluZygpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IG1ldGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJNRVRBIik7Ci0JCQltZXRhLnNldEF0dHJpYnV0ZSgibmFtZSIsICJHRU5FUkFUT1IiKTsKLQkJCW1ldGEuc2V0QXR0cmlidXRlKCJjb250ZW50IiwgIlVwZGF0ZXIgVGVzdCAyIik7Ci0JCQloZWFkLmFwcGVuZENoaWxkKG1ldGEpOwotCQkJVGV4dCB0ZXh0NCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcclxuIik7Ci0JCQloZWFkLmluc2VydEJlZm9yZSh0ZXh0NCwgbWV0YSk7Ci0JCQlUZXh0IHRleHQ1ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlxyXG4iKTsKLQkJCWhlYWQuYXBwZW5kQ2hpbGQodGV4dDUpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IHRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVElUTEUiKTsKLQkJCVRleHQgdGV4dDYgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7Ci0JCQl0aXRsZS5hcHBlbmRDaGlsZCh0ZXh0Nik7Ci0JCQloZWFkLmFwcGVuZENoaWxkKHRpdGxlKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZThmYjc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0My5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3QzIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3QzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0MyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3QzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDMoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJRWxlbWVudCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYiIpOwotCQkJYS5hcHBlbmRDaGlsZChiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0MSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcbiIpOwotCQkJYS5pbnNlcnRCZWZvcmUodDEsIGIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlxuIik7Ci0JCQlhLmFwcGVuZENoaWxkKHQyKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0NC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NGU1NjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDQgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDQuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3Q0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDQoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0NCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoYSk7Ci0JCQlUZXh0IHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYiIpOwotCQkJYS5hcHBlbmRDaGlsZCh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdC5zZXREYXRhKCJiIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0NS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzJlOWY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0NS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3Q1IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3Q1LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0NShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3Q1KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDUoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGE+JmFwb3M7PC9hPiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlOb2RlIGEgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlOb2RlIHQgPSBhLmdldEZpcnN0Q2hpbGQoKTsKLQkJCWEucmVtb3ZlQ2hpbGQodCk7Ci0JCQlhLmFwcGVuZENoaWxkKHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q2LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2EyODM5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0NiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0Ni4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdDYoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0NigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3Q2KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChhKTsKLQkJCVRleHQgdCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJiIik7Ci0JCQlhLmFwcGVuZENoaWxkKHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlhLnJlbW92ZUNoaWxkKHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlhLmFwcGVuZENoaWxkKHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q3LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMwNDE4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDcgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDcuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3Q3KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDcoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0NygpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlFbGVtZW50IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCIik7Ci0JCQlwLmFwcGVuZENoaWxkKGIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGIyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQiIpOwotCQkJcC5pbnNlcnRCZWZvcmUoYjIsIGIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q4LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU0ZjQ3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDggZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDguCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3Q4KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDgoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0OCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgcDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwMik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0OS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmY5MTY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0OS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3Q5IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3Q5LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0OShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3Q5KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDkoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiU1RZTEUiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHN0eWxlKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0MiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJwIik7Ci0JCQlzdHlsZS5hcHBlbmRDaGlsZCh0ZXh0Mik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdFJlZ2lvbkNoYW5nZWQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0UmVnaW9uQ2hhbmdlZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmEzYzJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0UmVnaW9uQ2hhbmdlZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuUmVnaW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuU3RydWN0dXJlZERvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdFJlZ2lvbkNoYW5nZWQgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdFJlZ2lvbkNoYW5nZWQuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3RSZWdpb25DaGFuZ2VkKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdFJlZ2lvbkNoYW5nZWQoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0UmVnaW9uQ2hhbmdlZCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8YSBiPSBjPjwvYT4iKTsKLQotCQkJTm9kZSBiZWZvcmUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0KLQkJCVN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGZtRXZlbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgNSwgMSwgIiIpOwotCQkJaWYgKGZtRXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIm9rOiBSZWdpb25DaGFuZ2VkRXZlbnQiKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigibm90IG9rOiAiICsgZm1FdmVudC5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0JCQl9Ci0KLQkJCU5vZGUgYWZ0ZXIgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0KLQkJCWlmIChiZWZvcmUgIT0gYWZ0ZXIpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIm5vdCBvazogTm9kZSByZXBsYWNlZCIpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJvazogTm9kZSBub3QgcmVwbGFjZWQiKTsKLQkJCX0KLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL2Nzcy9TdHlsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL2Nzcy9TdHlsZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjlhNTgyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9jc3MvU3R5bGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLmNzczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLk1vZGVsVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTU3R5bGVTaGVldDsKLWltcG9ydCBvcmcudzNjLmRvbS5zdHlsZXNoZWV0cy5Eb2N1bWVudFN0eWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLnN0eWxlc2hlZXRzLkxpbmtTdHlsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5zdHlsZXNoZWV0cy5TdHlsZVNoZWV0TGlzdDsKLQotcHVibGljIGNsYXNzIFN0eWxlVGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFN0eWxlVGVzdC4KLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBTdHlsZVRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFN0eWxlVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgU3R5bGVUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsgLy9uZXcgSFRNTE1vZGVsSW1wbCgpOwotCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJRWxlbWVudCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlNUWUxFIik7Ci0JCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJCT0RZIHsgY29sb3IgOiByZWQ7IH0gUCB7IGNvbG9yIDogZ3JlZW47IH0gQiB7IGNvbG9yIDogYmx1ZTsgfSIpOwotCQlzdHlsZS5hcHBlbmRDaGlsZCh0ZXh0KTsKLQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoc3R5bGUpOwotCi0JCXByaW50U291cmNlKG1vZGVsKTsKLQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQlEb2N1bWVudFN0eWxlIGRzID0gKERvY3VtZW50U3R5bGUpIGRvY3VtZW50OwotCQlTdHlsZVNoZWV0TGlzdCBzc2wgPSBkcy5nZXRTdHlsZVNoZWV0cygpOwotCQlpZiAoc3NsLmdldExlbmd0aCgpID4gMCkgewotCQkJQ1NTU3R5bGVTaGVldCBzcyA9IChDU1NTdHlsZVNoZWV0KSBzc2wuaXRlbSgwKTsKLQkJCXNzLmRlbGV0ZVJ1bGUoMSk7Ci0JCX0KLQotCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJTGlua1N0eWxlIGxzID0gKExpbmtTdHlsZSkgc3R5bGU7Ci0JCUNTU1N0eWxlU2hlZXQgc3MyID0gKENTU1N0eWxlU2hlZXQpIGxzLmdldFNoZWV0KCk7Ci0JCWlmIChzczIgIT0gbnVsbCkgewotCQkJc3MyLmRlbGV0ZVJ1bGUoMCk7Ci0JCX0KLQotCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L1Rlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJIVE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckhUTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNkZTBkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckhUTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudGV4dDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ0J1ZmZlcklucHV0U3RyZWFtOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudEV4dGVuc2lvbjM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUeXBlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRleHQuSUhUTUxQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXh0LklYTUxQYXJ0aXRpb25zOwotCi1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5EZWNpbWFsRm9ybWF0OwotCi1wdWJsaWMgY2xhc3MgVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckhUTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIGJvb2xlYW4gREVCVUdfUFJJTlRfUkVTVUxUID0gZmFsc2U7Ci0JcHJvdGVjdGVkIElUeXBlZFJlZ2lvbltdIHBhcnRpdGlvbnMgPSBudWxsOwotCi0JcHJpdmF0ZSBib29sZWFuIHVzZUZvcm1hdHRlciA9IHRydWU7Ci0JcHJvdGVjdGVkIERlY2ltYWxGb3JtYXQgZm9ybWF0dGVyOwotCi0JcHVibGljIFRlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJIVE1MKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUICYmIHVzZUZvcm1hdHRlcikKLQkJCWZvcm1hdHRlciA9IG5ldyBEZWNpbWFsRm9ybWF0KCk7Ci0JfQotCQotCS8qKgotCSAqIG11c3QgcmVsZWFzZSBtb2RlbCAoZnJvbSBlZGl0KSBhZnRlcgotCSAqIEBwYXJhbSBmaWxlbmFtZSByZWxhdGl2ZSB0byB0aGlzIGNsYXNzIChUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyKQotCSAqLwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbEZvckVkaXQoU3RyaW5nIGZpbGVuYW1lKSB7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCQlpblN0cmVhbSA9IG5ldyBTdHJpbmdCdWZmZXJJbnB1dFN0cmVhbSgiIik7Ci0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKLQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBtb2RlbDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdERpc2Nvbm5lY3RDb25uZWN0KCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID1nZXRNb2RlbEZvckVkaXQoInRlc3RmaWxlcy9odG1sL2V4YW1wbGUwMS54bWwiKTsKLQkJCWlmKG1vZGVsICE9IG51bGwpIHsKLQkJCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCQlhc3NlcnRUcnVlKCJzRG9jIGltcGxlbWVudGF0aW9uIG5vdCBpbnN0YW5jZSBvZiBJRG9jdW1lbnRFeHRlbnNpb24zIiwgc0RvYyBpbnN0YW5jZW9mIElEb2N1bWVudEV4dGVuc2lvbjMpOwotCQkJCi0JCQkJSURvY3VtZW50UGFydGl0aW9uZXIgcGFydGl0aW9uZXIgPSAoKElEb2N1bWVudEV4dGVuc2lvbjMpc0RvYykuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJCQlhc3NlcnRUcnVlKCJwYXJ0aXRpb25lciBkb2Vzbid0IGltcGxlbWVudCBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lciIsIHBhcnRpdGlvbmVyIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIpOwotCQkJCQotCQkJCUlTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIHN0cCA9IChJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcilwYXJ0aXRpb25lcjsKLQkJCQlhc3NlcnROb3ROdWxsKCJwYXJ0aXRpb25lciB3YXMgbnVsbCBmb3Igc0RvYzoiICsgc0RvYywgcGFydGl0aW9uZXIpOwotCQkJCXRyeSB7Ci0JCQkJCXN0cC5kaXNjb25uZWN0KCk7Ci0JCQkJfQotCQkJCWNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWFzc2VydFRydWUoInByb2JsZW0gZGlzY29ubmVjdGluZyB3LzoiICtzRG9jICsgIi9uIiArIGUsIGZhbHNlKTsKLQkJCQl9Ci0JCQkJdHJ5IHsKLQkJCQkJc3RwLmNvbm5lY3Qoc0RvYyk7Ci0JCQkJfQotCQkJCWNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWFzc2VydFRydWUoInByb2JsZW0gY29ubmVjdGluZyB3LzoiICsgc0RvYyArICIvbiIgKyBlLCBmYWxzZSk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwiLCBmYWxzZSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSAgewotCQkJaWYobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldERlZmF1bHRQYXJ0aXRpb25UeXBlKCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID1nZXRNb2RlbEZvckVkaXQoInRlc3RmaWxlcy9odG1sL2V4YW1wbGUwMS54bWwiKTsKLQkJCWlmKG1vZGVsICE9IG51bGwpIHsKLQkJCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCQlhc3NlcnRUcnVlKCJzRG9jIGltcGxlbWVudGF0aW9uIG5vdCBpbnN0YW5jZSBvZiBJRG9jdW1lbnRFeHRlbnNpb24zIiwgc0RvYyBpbnN0YW5jZW9mIElEb2N1bWVudEV4dGVuc2lvbjMpOwotCQkJCi0JCQkJSURvY3VtZW50UGFydGl0aW9uZXIgcGFydGl0aW9uZXIgPSAoKElEb2N1bWVudEV4dGVuc2lvbjMpc0RvYykuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJCQlhc3NlcnRUcnVlKCJwYXJ0aXRpb25lciBkb2Vzbid0IGltcGxlbWVudCBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lciIsIHBhcnRpdGlvbmVyIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIpOwotCQkJCQotCQkJCUlTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIHN0cCA9IChJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcilwYXJ0aXRpb25lcjsKLQkJCQlTdHJpbmcgZGVmYXVsdFBhcnRpdGlvblR5cGUgPSBzdHAuZ2V0RGVmYXVsdFBhcnRpdGlvblR5cGUoKTsKLQkJCQlhc3NlcnRUcnVlKCJ3cm9uZyBkZWZhdWx0IHBhcnRpdGlvbiB0eXBlIHdhczogWyIgKyBkZWZhdWx0UGFydGl0aW9uVHlwZSArICJdIHNob3VsZCBiZTogWyIgKyBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCArICJdIiwgZGVmYXVsdFBhcnRpdGlvblR5cGUuZXF1YWxzKElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUKSk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlhc3NlcnRUcnVlKCJjb3VsZCBub3QgcmV0cmlldmUgc3RydWN0dXJlZCBtb2RlbCIsIGZhbHNlKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5ICB7Ci0JCQlpZihtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9CQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UGFydGl0aW9uVHlwZSgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9Z2V0TW9kZWxGb3JFZGl0KCJ0ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDEueG1sIik7Ci0JCQlpZihtb2RlbCAhPSBudWxsKSB7Ci0JCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgic0RvYyBpbXBsZW1lbnRhdGlvbiBub3QgaW5zdGFuY2Ugb2YgSURvY3VtZW50RXh0ZW5zaW9uMyIsIHNEb2MgaW5zdGFuY2VvZiBJRG9jdW1lbnRFeHRlbnNpb24zKTsKLQkJCQotCQkJCUlEb2N1bWVudFBhcnRpdGlvbmVyIHBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKXNEb2MpLmdldERvY3VtZW50UGFydGl0aW9uZXIoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORyk7Ci0JCQkJYXNzZXJ0VHJ1ZSgicGFyaXRpb25lciBkb2Vzbid0IGltcGxlbWVudCBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lciIsIHBhcnRpdGlvbmVyIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIpOwotCQkJCQotCQkJCUlTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIHN0cCA9IChJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcilwYXJ0aXRpb25lcjsKLQkJCQlTdHJpbmcgZGVmYXVsdFBhcnRpdGlvblR5cGUgPSBzdHAuZ2V0RGVmYXVsdFBhcnRpdGlvblR5cGUoKTsKLQkJCQlhc3NlcnRUcnVlKCJ3cm9uZyBkZWZhdWx0IHBhcnRpdGlvbiB0eXBlIHdhczogWyIgKyBkZWZhdWx0UGFydGl0aW9uVHlwZSArICJdIHNob3VsZCBiZTogWyIgKyBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCArICJdIiwgZGVmYXVsdFBhcnRpdGlvblR5cGUuZXF1YWxzKElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUKSk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlhc3NlcnRUcnVlKCJjb3VsZCBub3QgcmV0cmlldmUgc3RydWN0dXJlZCBtb2RlbCIsIGZhbHNlKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5ICB7Ci0JCQlpZihtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9CQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SFRNTDEoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDQ7Ci0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy9odG1sL2V4YW1wbGUwMS5odG1sIik7Ci0JCWFzc2VydFRydWUoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgblBhcnRpdGlvbnMgPT0gZXhwZWN0ZWRQYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SUhUTUxQYXJ0aXRpb25zLkhUTUxfREVDTEFSQVRJT04sIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElIVE1MUGFydGl0aW9ucy5IVE1MX0NPTU1FTlQsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFR9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SFRNTDIoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDc7Ci0JCS8vVE9ETyBOaXRpbiwgd2UgbmVlZCB0byByZXZpZXcgdGhlIFVua25vd24gdG8gU2NyaXB0IGNoYW5nZSAoOC8xLzAzLCA5OjAwUE0pCi0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy9odG1sL2V4YW1wbGUwMi5odG1sIik7Ci0JCWFzc2VydFRydWUoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgblBhcnRpdGlvbnMgPT0gZXhwZWN0ZWRQYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUhUTUxQYXJ0aXRpb25zLlNDUklQVCwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUhUTUxQYXJ0aXRpb25zLlNDUklQVCwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUhUTUxQYXJ0aXRpb25zLlNDUklQVCwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVH0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RIVE1MMygpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gMTsKLQkJU3RyaW5nIGZpbGUgPSAidGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAzLmh0bWwiOwotCQlpbnQgblBhcnRpdGlvbnMgPSBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KGZpbGUpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBudW1iZXIgb2YgcGFydGl0aW9ucyIsIG5QYXJ0aXRpb25zID09IGV4cGVjdGVkUGFydGl0aW9ucyk7Ci0JCWNoZWNrU2VhbXMoKTsKLQkJdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFR9KTsKLQotCQkvLyAxMjEgaWYgQ1JMRgotCQkvLyAgSVR5cGVkUmVnaW9uIHNjcmlwdFBhcnRpdGlvbiA9IGdldFBhcnRpdGlvblRlc3QoZmlsZSwgMTIxKTsKLQkJLy8gMTE2IGlmIExGIG9yIENSIG9ubHkKLQkJLy8gIElUeXBlZFJlZ2lvbiBzY3JpcHRQYXJ0aXRpb24gPSBnZXRQYXJ0aXRpb25UZXN0KGZpbGUsIDEyMSk7Ci0KLQkJSVR5cGVkUmVnaW9uIHBhcnQxID0gZ2V0UGFydGl0aW9uVGVzdChmaWxlLCAxMjEpOwotCQlJVHlwZWRSZWdpb24gcGFydDIgPSBnZXRQYXJ0aXRpb25UZXN0KGZpbGUsIDExNik7Ci0KLS8vCQlhc3NlcnRFcXVhbHMoInBhcnRpdGlvbiBpcyB3cm9uZyB0eXBlISIsIHNjcmlwdFBhcnRpdGlvbi5nZXRUeXBlKCksIElIVE1MUGFydGl0aW9ucy5TVF9TQ1JJUFQpOwotCQkvLyB0aGUgY3JpdGljYWwgcG9zaXRpb24gaXMgc3Vycm91bmRlZCB3aXRoIEhUTUwgPiA1IGNoYXJhY3RlcnMgaW4gZWl0aGVyIGRpcmVjdGlvbjsgdGhpcyBzaG91bGQgYmUgZ29vZCBlbm91Z2gKLQkJYXNzZXJ0VHJ1ZSgicGFydGl0aW9uIGlzIHdyb25nIHR5cGUhIDooIiArIHBhcnQxLmdldFR5cGUoKSArICJ8IiArIHBhcnQyLmdldFR5cGUoKSArICIpIiwgcGFydDEuZ2V0VHlwZSgpLmVxdWFscyhJSFRNTFBhcnRpdGlvbnMuU0NSSVBUKSB8fCBwYXJ0Mi5nZXRUeXBlKCkuZXF1YWxzKElIVE1MUGFydGl0aW9ucy5TQ1JJUFQpKTsKLQkJYXNzZXJ0VHJ1ZSgicGFydGl0aW9uIGlzIG5vdCB6ZXJvIGxlbmd0aCEiLCAocGFydDEuZ2V0TGVuZ3RoKCkgPT0gMCB8fCBwYXJ0Mi5nZXRMZW5ndGgoKSA9PSAwKSk7Ci0JfQotCQotCS8qKgotCSAqIEVuc3VyZSB0aGF0IHRoZSBjdXJyZW50IGxpc3Qgb2YgcGFydGl0aW9ucyBhcmUgYWxsIGFkamFjZW50IHRvIG9uZSBhbm90aGVyCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgY2hlY2tTZWFtcygpIHsKLQkJaWYgKHBhcnRpdGlvbnMgPT0gbnVsbCkKLQkJCXJldHVybjsKLQkJaW50IG9mZnNldCA9IDA7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKCJwYXJ0aXRpb25zIGFyZSBub3QgY29udGlndW91cyEiLCBwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpLCBvZmZzZXQpOwotCQkJb2Zmc2V0ID0gcGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSArIHBhcnRpdGlvbnNbaV0uZ2V0TGVuZ3RoKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDb21wdXRlIHRoZSBwYXJ0aXRpb25zIGZvciB0aGUgZ2l2ZW4gZmlsZW5hbWUgdXNpbmcgdGhlIGRlZmF1bHQgcGFydGl0aW9uZXIKLQkgKiBmb3IgdGhhdCBmaWxlIHR5cGUuCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogQHJldHVybiBpbnQKLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBpbnQgZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdChTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCWluU3RyZWFtID0gbmV3IFN0cmluZ0J1ZmZlcklucHV0U3RyZWFtKCIiKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUICYmIHVzZUZvcm1hdHRlcikgewotCQkJZG91YmxlIGJhc2VUZW4gPSBNYXRoLmxvZygxMCk7Ci0JCQlmb3JtYXR0ZXIuc2V0TWluaW11bUludGVnZXJEaWdpdHMoKGludCkgKE1hdGgubG9nKHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSkgLyBiYXNlVGVuKSArIDEpOwotCQkJZm9ybWF0dGVyLnNldEdyb3VwaW5nVXNlZChmYWxzZSk7Ci0JCX0KLQotCQlwYXJ0aXRpb25zID0gc3RydWN0dXJlZERvY3VtZW50LmNvbXB1dGVQYXJ0aXRpb25pbmcoMCwgc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCkgewotCQkJU3RyaW5nIGNvbnRlbnRzID0gbnVsbDsKLQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJcbmZpbGVuYW1lOiAiICsgZmlsZW5hbWUpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0aXRpb25zLmxlbmd0aDsgaSsrKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJY29udGVudHMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCksIHBhcnRpdGlvbnNbaV0uZ2V0TGVuZ3RoKCkpOwotCQkJCX0KLQkJCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJCQljb250ZW50cyA9ICIqZXJyb3IqIjsKLQkJCQl9Ci0JCQkJaWYgKHVzZUZvcm1hdHRlcikKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKGZvcm1hdHRlci5mb3JtYXQocGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSkgKyAiOiIgKyBmb3JtYXR0ZXIuZm9ybWF0KHBhcnRpdGlvbnNbaV0uZ2V0TGVuZ3RoKCkpICsgIiAtICIgKyBwYXJ0aXRpb25zW2ldLmdldFR5cGUoKSArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJCQllbHNlCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihwYXJ0aXRpb25zW2ldICsgIiBbIiArIFN0cmluZ1V0aWxzLmVzY2FwZShjb250ZW50cykgKyAiXSIpOwotCQkJfQotCQl9Ci0JCWNoZWNrU2VhbXMoKTsKLQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCWluU3RyZWFtLmNsb3NlKCk7Ci0KLQkJaWYgKHBhcnRpdGlvbnMgPT0gbnVsbCkKLQkJCXJldHVybiAtMTsKLQkJcmV0dXJuIHBhcnRpdGlvbnMubGVuZ3RoOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgc2luZ2xlIHBhcnRpdGlvbiBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGZvciB0aGUgZ2l2ZW4gZmlsZSwgdXNpbmcgdGhlCi0JICogZGVmYXVsdCBwYXJ0aXRpb25lciBmb3IgdGhhdCBmaWxlIHR5cGUuICBUaGlzIHRlc3QgYWxsb3dzIGZvciB2ZXJpZnlpbmcgdGhlIHplcm8tbGVuZ3RoCi0JICogcGFydGl0aW9uaW5nIGJlaGF2aW9yLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEBwYXJhbSBvZmZzZXQKLQkgKiBAcmV0dXJuIElUeXBlZFJlZ2lvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIElUeXBlZFJlZ2lvbiBnZXRQYXJ0aXRpb25UZXN0KFN0cmluZyBmaWxlbmFtZSwgaW50IG9mZnNldCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChmaWxlbmFtZSwgaW5TdHJlYW0sIG51bGwpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJcGFydGl0aW9ucyA9IG51bGw7Ci0JCUlUeXBlZFJlZ2lvbiBwYXJ0aXRpb24gPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UGFydGl0aW9uKG9mZnNldCk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQpIHsKLQkJCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5maWxlbmFtZTogIiArIGZpbGVuYW1lKTsKLQkJCXRyeSB7Ci0JCQkJY29udGVudHMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KHBhcnRpdGlvbi5nZXRPZmZzZXQoKSwgcGFydGl0aW9uLmdldExlbmd0aCgpKTsKLQkJCX0KLQkJCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJY29udGVudHMgPSAiKmVycm9yKiI7Ci0JCQl9Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4ocGFydGl0aW9uICsgIiBbIiArIFN0cmluZ1V0aWxzLmVzY2FwZShjb250ZW50cykgKyAiXSIpOwotCQl9Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQlpblN0cmVhbS5jbG9zZSgpOwotCi0JCXJldHVybiBwYXJ0aXRpb247Ci0JfQotCi0JLyoqCi0JICogVmVyaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gcGFydGl0aW9ucyBhcmUgb2YgdGhlIGdpdmVuIHBhcnRpdGlvbiB0eXBlcwotCSAqIEBwYXJhbSB0eXBlZFJlZ2lvbnMKLQkgKiBAcGFyYW0gdHlwZXMKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCB2ZXJpZnlQYXJ0aXRpb25UeXBlcyhJVHlwZWRSZWdpb24gYWN0dWFsVHlwZWRSZWdpb25zW10sIFN0cmluZyBleHBlY3RlZFR5cGVzW10pIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBleHBlY3RlZFR5cGVzLmxlbmd0aDsgaSsrKQotCQkJYXNzZXJ0RXF1YWxzKCJwYXJ0aXRpb24gdHlwZSBtaXNtYXRjaGVkIiwgZXhwZWN0ZWRUeXBlc1tpXSwgYWN0dWFsVHlwZWRSZWdpb25zW2ldLmdldFR5cGUoKSk7Ci0JfQotCi0JLyoqCi0JICogVmVyaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gcGFydGl0aW9ucyBiZWdpbiBhdCB0aGUgZ2l2ZW4gb2Zmc2V0cwotCSAqIEBwYXJhbSB0eXBlZFJlZ2lvbnMKLQkgKiBAcGFyYW0gdHlwZXMKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCB2ZXJpZnlQYXJ0aXRpb25SZWdpb25zKElUeXBlZFJlZ2lvbiB0eXBlZFJlZ2lvbnNbXSwgaW50IG9mZnNldHNbXSkgewotCQlmb3IgKGludCBpID0gMDsgaSA8IG9mZnNldHMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscygib2Zmc2V0IG1pc21hdGNoZWQiLCB0eXBlZFJlZ2lvbnNbaV0uZ2V0T2Zmc2V0KCksIG9mZnNldHNbaV0pOwotCQkJaWYgKGkgPiAwKSB7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJsZW5ndGhzIG1pc2FsaWduZWQiLCB0eXBlZFJlZ2lvbnNbaV0uZ2V0T2Zmc2V0KCksIHR5cGVkUmVnaW9uc1tpIC0gMV0uZ2V0T2Zmc2V0KCkgKyB0eXBlZFJlZ2lvbnNbaSAtIDFdLmdldExlbmd0aCgpKTsKLQkJCX0KLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAxLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAxLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMGZmZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwMS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBTWVNURU0gbm9uc2Vuc2U+Ci08aHRtbD4KLTxibzwhLS1jb21tZW50cy0tPmR5PgotYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAyLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMjg2YzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwMi5odG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwMy5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwMy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzhkYWYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPGh0bWw+PGhlYWQ+Ci08TUVUQSBjcmVhdG9yPXdzc2EvNC4wcHJlMTE5PgotPHRpdGxlPlNjcmlwdCBUZXN0czwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxTY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPjwvU0NSSVBUPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9Db21tb25YTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvQ29tbW9uWE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0ZTE2YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9Db21tb25YTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlsczsKLQotCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLk91dHB1dEtleXM7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5Q29uZmlndXJhdGlvbkVycm9yOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLkRPTVNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLkxvZ2dlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotLyoqCi0gKi8KLXB1YmxpYyBjbGFzcyBDb21tb25YTUwgewotCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgRG9jdW1lbnRCdWlsZGVyIGdldERvY3VtZW50QnVpbGRlcigpIHsKLQkJRG9jdW1lbnRCdWlsZGVyIHJlc3VsdCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlyZXN1bHQgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCX0KLQkJY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJTG9nZ2VyLmxvZ0V4Y2VwdGlvbihlKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIERvY3VtZW50QnVpbGRlciBnZXREb2N1bWVudEJ1aWxkZXIoYm9vbGVhbiB2YWxpZGF0aW5nKSB7Ci0JCURvY3VtZW50QnVpbGRlciByZXN1bHQgPSBudWxsOwotCQl0cnkgewotCQkJRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBpbnN0YW5jZSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQkJCWluc3RhbmNlLnNldFZhbGlkYXRpbmcodmFsaWRhdGluZyk7Ci0JCQlyZXN1bHQgPSBpbnN0YW5jZS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQkJfQotCQljYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlMb2dnZXIubG9nRXhjZXB0aW9uKGUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZShEb2N1bWVudCBkb2N1bWVudCwgT3V0cHV0U3RyZWFtIG9zdHJlYW0pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVNvdXJjZSBkb21Tb3VyY2UgPSBuZXcgRE9NU291cmNlKGRvY3VtZW50KTsKLQkJdHJ5IHsKLQkJCVRyYW5zZm9ybWVyIHNlcmlhbGl6ZXIgPSBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdUcmFuc2Zvcm1lcigpOwotCQkJdHJ5IHsKLQkJCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuSU5ERU5ULCAieWVzIik7Ci0JCQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eSgie2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0fWluZGVudC1hbW91bnQiLCAiNCIpOwotCQkJCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5FTkNPRElORywgIlVURi0xNiIpOwotCQkJfQotCQkJY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gdW5zdXBwb3J0ZWQgcHJvcGVydGllcwotCQkJfQotCQkJc2VyaWFsaXplci50cmFuc2Zvcm0oZG9tU291cmNlLCBuZXcgU3RyZWFtUmVzdWx0KG9zdHJlYW0pKTsKLQkJfQotCQljYXRjaCAoVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQkJY2F0Y2ggKFRyYW5zZm9ybWVyRmFjdG9yeUNvbmZpZ3VyYXRpb25FcnJvciBlKSB7Ci0JCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JCWNhdGNoIChUcmFuc2Zvcm1lckV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvRGF0ZVV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvRGF0ZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRkMTgzNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL0RhdGVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRhdGVGb3JtYXQ7Ci1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5TaW1wbGVEYXRlRm9ybWF0OwotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICoKLSAqIFRvIGNoYW5nZSB0aGlzIGdlbmVyYXRlZCBjb21tZW50IGVkaXQgdGhlIHRlbXBsYXRlIHZhcmlhYmxlICJ0eXBlY29tbWVudCI6Ci0gKiBXaW5kb3c+UHJlZmVyZW5jZXM+SmF2YT5UZW1wbGF0ZXMuCi0gKiBUbyBlbmFibGUgYW5kIGRpc2FibGUgdGhlIGNyZWF0aW9uIG9mIHR5cGUgY29tbWVudHMgZ28gdG8KLSAqIFdpbmRvdz5QcmVmZXJlbmNlcz5KYXZhPkNvZGUgR2VuZXJhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIERhdGVVdGlsIHsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBBbGxUZXN0cy4KLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXByaXZhdGUgc3RhdGljIFN0cmluZyBub3cgPSBudWxsOwotCi0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBub3coKSB7Ci0JCS8vIGp1c3QgY2FsY3VsYXRlIG9uY2UsIHNvIHdob2xlIHJ1biBhcyBzYW1lIHRpbWVzdGFtcAotCQlpZiAoRGF0ZVV0aWwubm93ID09IG51bGwpIHsKLQkJCURhdGVGb3JtYXQgZm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXknLSdNTSctJ2RkJy0na2snLSdtbSctJ3NzIik7Ci0JCQlDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7Ci0JCQlEYXRlIHRvZGF5ID0gY2FsZW5kYXIuZ2V0VGltZSgpOwotCQkJRGF0ZVV0aWwubm93ID0gZm9ybWF0LmZvcm1hdCh0b2RheSk7Ci0JCX0KLQkJcmV0dXJuIERhdGVVdGlsLm5vdzsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL0ZpbGVVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL0ZpbGVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NzE0MzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9GaWxlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlsczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVuYW1lRmlsdGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcudXRpbC5OdWxsSW5wdXRTdHJlYW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKgotICovCi1wdWJsaWMgY2xhc3MgRmlsZVV0aWwgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cyI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29tbW9uRU9MID0gIlxyXG4iOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZMaW5lU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZQYXRoU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJwYXRoLnNlcGFyYXRvciIpOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZGaWxlU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJmaWxlLnNlcGFyYXRvciIpOwotCi0Jc3RhdGljIEZpbGUgcHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5ID0gbnVsbDsKLQlzdGF0aWMgcHJpdmF0ZSBTdHJpbmcgbG9nU3ViRGlyZWN0b3J5UGF0aDsKLQotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gbm90VHJpZWRZZXQgPSB0cnVlOwotCXN0YXRpYyBpbnQgdW5pcXVlTnVtID0gMDsKLQotCXB1YmxpYyBzdGF0aWMgY2xhc3MgRGlyRmlsZW5hbWVGaWx0ZXIgaW1wbGVtZW50cyBGaWxlbmFtZUZpbHRlciB7Ci0JCVN0cmluZyBzdGFydE9mQWNjZXB0YWJsZU5hbWVzOwotCi0JCXB1YmxpYyBEaXJGaWxlbmFtZUZpbHRlcihTdHJpbmcgc3RhcnRPZkRpck5hbWUpIHsKLQkJCXN0YXJ0T2ZBY2NlcHRhYmxlTmFtZXMgPSBzdGFydE9mRGlyTmFtZTsKLQkJfQotCi0JCS8qKgotCQkgKiBAc2VlIGphdmEuaW8uRmlsZUZpbHRlciNhY2NlcHQoRmlsZSkKLQkJICovCi0JCXB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIHBhdGhuYW1lLCBTdHJpbmcgZmlsZW5hbWUpIHsKLQkJCS8vIHdlJ2xsIGp1c3QgYXNzdW1lIGlmIGl0IHN0YXJ0cyB3aXRoIHJpZ2h0IGtleSwgaXQgaXMgYSBkaXJlY3RvcnkgLi4uIGZvciBub3cKLQkJCXJldHVybiBmaWxlbmFtZS5zdGFydHNXaXRoKHN0YXJ0T2ZBY2NlcHRhYmxlTmFtZXMpOwotCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgZ2V0UHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5KFN0cmluZyBkaXJlY3RvcnlSb290TmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKHByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSA9PSBudWxsICYmIG5vdFRyaWVkWWV0KSB7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCQlVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KCIvIik7IC8vJE5PTi1OTFMtMSQKLQkJCS8vU3RyaW5nIGluc3RhbGxQYXRoID0gdXJsLmdldFBhdGgoKTsKLQkJCS8vIGFkZCBrbm93biBmaWxlIHNvIFVSTCBtZXRob2QgYmVsb3cgY2FuIGJlIHVzZWQKLQkJCS8vIChkb2Vzbid0IHNlZW0gdG8gd29yayBmb3IgZGlyZWN0b3J5PykKLQkJCVVSTCB0b3RhbFVSTCA9IG5ldyBVUkwodXJsLCAicGx1Z2luLnhtbCIpOwotCQkJVVJMIGZpbmFsdXJsID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHRvdGFsVVJMKTsKLQkJCVN0cmluZyBmaW5hbEZpbGUgPSBmaW5hbHVybC5nZXRGaWxlKCk7Ci0JCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaW5hbEZpbGUpOwotCQkJU3RyaW5nIGZpbmFsUGF0aCA9IGZpbGUuZ2V0UGFyZW50KCk7Ci0JCQlGaWxlIHBsdWdpbkhvbWVEaXIgPSBuZXcgRmlsZShmaW5hbFBhdGgpOwotCQkJRmlsZW5hbWVGaWx0ZXIgZGlyRmlsdGVyID0gbmV3IERpckZpbGVuYW1lRmlsdGVyKGRpcmVjdG9yeVJvb3ROYW1lKTsKLQkJCUZpbGVbXSBhbGxEaXJzID0gcGx1Z2luSG9tZURpci5saXN0RmlsZXMoZGlyRmlsdGVyKTsKLQotCQkJLy8gYXNzdW1lIGZpcnN0IGluIGxpc3QgaXMgbmV3ZXN0LCB0aGVuIHN0YXJ0IGxvb2tpbmcgd2l0aCB0aGUgCi0JCQkvLyBzZWNvbmQgaXRlbSAuLi4ganVzdCB0byBhdm9pZCAibnVsbCIgY2FzZSBjaGVja2luZwotCQkJaWYgKGFsbERpcnMubGVuZ3RoID4gMCkgewotCQkJCUZpbGUgY3VycmVudE5ld2VzdCA9IGFsbERpcnNbMF07Ci0JCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBhbGxEaXJzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCUZpbGUgY3VycmVudCA9IGFsbERpcnNbaV07Ci0JCQkJCS8vIE5PVEU6IHdlIGdvIGJ5IG1vZGlmaWVkIGRhdGUsIG5vdCBieSB0aGUgYWN0dWFsIHRpbWUgc3RhbXAgaW4gbmFtZS4KLQkJCQkJLy8gVGhpcyBzaG91bGQgd29yayBmb3IgYWxsIG5vcm1hbCBjYXNlcywgYnV0IG1heSBub3QgaWYgc29tZW9uZSBkb2VzIHNvbWUKLQkJCQkJLy8gImZ1bm55IiBjb3B5aW5nLCBvciB1cGRhdGluZyBmcm9tIHJlcG9zaXRvcnkuCi0JCQkJCWlmIChjdXJyZW50Lmxhc3RNb2RpZmllZCgpID4gY3VycmVudE5ld2VzdC5sYXN0TW9kaWZpZWQoKSkgewotCQkJCQkJY3VycmVudE5ld2VzdCA9IGN1cnJlbnQ7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJcHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5ID0gY3VycmVudE5ld2VzdDsKLQkJCX0KLQkJCW5vdFRyaWVkWWV0ID0gZmFsc2U7Ci0JCX0KLQkJcmV0dXJuIHByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgbWFrZUZpbGVGb3IoU3RyaW5nIGRpcmVjdG9yeSwgU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgdGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJVVJMIHVybCA9IGJ1bmRsZS5nZXRFbnRyeSgiLyIpOyAgLy8kTk9OLU5MUy0xJAotCQlVUkwgbG9jYWxVUkwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwodXJsKTsKLQkJU3RyaW5nIGluc3RhbGxQYXRoID0gbG9jYWxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgdG90YWxEaXJlY3RvcnkgPSBpbnN0YWxsUGF0aCArIGRpcmVjdG9yeTsKLQkJU3RyaW5nIHRvdGFsUGF0aCA9IHRvdGFsRGlyZWN0b3J5ICsgIi8iICsgZmlsZW5hbWU7Ci0JCVVSTCB0b3RhbFVSTCA9IG5ldyBVUkwodXJsLCB0b3RhbFBhdGgpOwotCQkvL1VSTCBmaW5hbHVybCA9IFBsYXRmb3JtLmFzTG9jYWxVUkwodG90YWxVUkwpOwotCQlTdHJpbmcgZmluYWxGaWxlID0gdG90YWxVUkwuZ2V0RmlsZSgpOwotCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaW5hbEZpbGUpOwotCQlTdHJpbmcgZmluYWxQYXRoID0gZmlsZS5nZXRQYXJlbnQoKTsKLQkJRmlsZSBkaXIgPSBuZXcgRmlsZShmaW5hbFBhdGgpOwotCQlpZiAoIWRpci5leGlzdHMoKSkgewotCQkJLy8gYSBsaXR0bGUgc2FmZXR5IG5ldCwgYmUgc3VyZSB0aGUgcHJldmlvdXMgbmV3ZXN0IGRpcmVjdG9yeQotCQkJLy8gaXMgaW5pdGlhbGl6ZWQsIGp1c3QgaW4gY2FzZSBubyBvbmUgZWxzZSBoYXMgZG9uZSBzbwotCQkJaWYgKHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4ICE9IG51bGwgJiYgdGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXgubGVuZ3RoKCkgPiAwKSB7Ci0JCQkJRmlsZVV0aWwuZ2V0UHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5KHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4KTsKLQkJCX0KLQkJCS8vIG5vdyBpdHMgInNhZmUiIHRvIG1ha2UgdGhlIG5ldyBvbmUKLQkJCWRpci5ta2RpcnMoKTsKLQkJfQotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLQkvKioKLQkgKiBKdXN0IGEgZ2VuZXJhbCB1dGlsaXR5IG1ldGhvZAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RXh0ZW5zaW9uKFN0cmluZyBmaWxlbmFtZSkgewotCQlTdHJpbmcgZXh0ZW5zaW9uID0gbnVsbDsKLQkJaW50IGRvdFBvc3Rpb24gPSBmaWxlbmFtZS5sYXN0SW5kZXhPZignLicpOwotCQlpZiAoZG90UG9zdGlvbiA+IC0xKSB7Ci0JCQlleHRlbnNpb24gPSBmaWxlbmFtZS5zdWJzdHJpbmcoZG90UG9zdGlvbiArIDEpOwotCQl9Ci0JCWVsc2UgewotCQkJZXh0ZW5zaW9uID0gbmV3IFN0cmluZygpOwotCQl9Ci0JCXJldHVybiBleHRlbnNpb247Ci0JfQotCi0JLyoqCi0JICogR2VuZXJhbCBwdXJwb3NlIHV0aWxpdHkgbWV0aG9kIHRvIGVuc3VyZSB0aGUgbG9nCi0JICogZGlyZWN0b3J5IGV4aXN0cywgYW5kIHJldHVybnMgdGhlIG5hbWUuIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldExvZ0RpcmVjdG9yeSgpIHsKLQkJaWYgKGxvZ1N1YkRpcmVjdG9yeVBhdGggPT0gbnVsbCkgewotCQkJU3RyaW5nIG1haW5EaXJlY3RvcnkgPSAiL2xvZ3MiOwotCQkJRmlsZSBkaXIgPSBuZXcgRmlsZShtYWluRGlyZWN0b3J5KTsKLQkJCWVuc3VyZUV4aXN0cyhkaXIpOwotCQkJU3RyaW5nIHN1YkRpcmVjdG9yeSA9IFRpbWVzdGFtcFV0aWwudGltZXN0YW1wKCk7Ci0JCQlsb2dTdWJEaXJlY3RvcnlQYXRoID0gbWFpbkRpcmVjdG9yeSArICIvIiArIHN1YkRpcmVjdG9yeTsKLQkJCUZpbGUgc3ViZGlyID0gbmV3IEZpbGUobG9nU3ViRGlyZWN0b3J5UGF0aCk7Ci0JCQllbnN1cmVFeGlzdHMoc3ViZGlyKTsKLQkJfQotCQlyZXR1cm4gbG9nU3ViRGlyZWN0b3J5UGF0aDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgZW5zdXJlRXhpc3RzKEZpbGUgZGlyKSB7Ci0JCWlmICghZGlyLmV4aXN0cygpKSB7Ci0JCQlkaXIubWtkaXJzKCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQZXJmb3JtYW5jZU91dHB1dExvZ05hbWUoKSB7Ci0JCVN0cmluZyByZXN1bHQgPSBudWxsOwotCQlTdHJpbmcgZGlyZWN0b3J5TmFtZSA9IEZpbGVVdGlsLmdldExvZ0RpcmVjdG9yeSgpOwotCQlTdHJpbmcgZXh0ZW5zaW9uID0gIi5vdXQiOwotCQlTdHJpbmcgYmFzZU5hbWUgPSAic2VkVGVzdHMiOwotCQlsb25nIG5vdyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlTdHJpbmcgbm93U3RyID0gU3RyaW5nLnZhbHVlT2Yobm93KTsKLQkJcmVzdWx0ID0gZGlyZWN0b3J5TmFtZSArIEZpbGVVdGlsLmZGaWxlU2VwYXJhdG9yICsgYmFzZU5hbWUgKyBub3dTdHIgKyBleHRlbnNpb247Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCXB1YmxpYyBzdGF0aWMgSURPTU1vZGVsIGNyZWF0ZUhUTUxNb2RlbCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0KLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQotCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KCJ0ZXN0IiArIHVuaXF1ZU51bSsrICsgIi5odG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCi0JCQkvLyBhbHdheXMgdXNlIHRoZSBzYW1lIGxpbmUgZGVsaW1pdGVyIGZvciB0aGVzZSB0ZXN0cywgcmVnYXJkbGVzcwotCQkJLy8gb2YgcGxhZm9ybSBvciBwcmVmZXJlbmNlIHNldHRpbmdzCi0JCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRMaW5lRGVsaW1pdGVyKGNvbW1vbkVPTCk7Ci0KLQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gIChJRE9NTW9kZWwpIG1vZGVsOwotCi0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9TdHJpbmdDb21wYXJlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9TdHJpbmdDb21wYXJlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzNiYTZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvU3RyaW5nQ29tcGFyZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlsczsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci0KLXB1YmxpYyBjbGFzcyBTdHJpbmdDb21wYXJlVXRpbCB7Ci0KLQlwdWJsaWMgYm9vbGVhbiBlcXVhbHNJZ25vcmVMaW5lU2VwZXJhdG9yKFN0cmluZyBzdHJpbmcxLCBTdHJpbmcgc3RyaW5nMikgewotCi0JCWlmIChzdHJpbmcxID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCWlmIChzdHJpbmcyID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nUmVhZGVyIHMxUmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihzdHJpbmcxKTsKLQkJU3RyaW5nUmVhZGVyIHMyUmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihzdHJpbmcyKTsKLQotCQkvLyBhc3N1bWUgdHJ1ZSB1bmxlc3MgZmluZCBldmlkZW5jZSB0byB0aGUgY29udHJhcnkKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCQlpbnQgczFDaGFyID0gLTE7Ci0JCWludCBzMkNoYXIgPSAtMTsKLQkJZG8gewotCi0JCQlzMUNoYXIgPSBnZXROZXh0Q2hhcihzMVJlYWRlcik7Ci0KLQkJCXMyQ2hhciA9IGdldE5leHRDaGFyKHMyUmVhZGVyKTsKLQotCQkJaWYgKHMxQ2hhciAhPSBzMkNoYXIpIHsKLQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQl3aGlsZSAoczFDaGFyICE9IC0xICYmIHMyQ2hhciAhPSAtMSk7Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBNZXRob2QgZ2V0TmV4dENoYXIuCi0JICogQHBhcmFtIHMxUmVhZGVyCi0JICogQHJldHVybiBjaGFyCi0JICovCi0JcHJpdmF0ZSBpbnQgZ2V0TmV4dENoYXIoU3RyaW5nUmVhZGVyIHJlYWRlcikgewotCQlpbnQgbmV4dENoYXIgPSAtMTsKLQkJdHJ5IHsKLQkJCW5leHRDaGFyID0gcmVhZGVyLnJlYWQoKTsKLQkJCXdoaWxlIChpc0VPTChuZXh0Q2hhcikpIHsKLQkJCQluZXh0Q2hhciA9IHJlYWRlci5yZWFkKCk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG5leHRDaGFyOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0VPTChpbnQgYUNoYXIpIHsKLQkJcmV0dXJuIChhQ2hhciA9PSAnXG4nIHx8IGFDaGFyID09ICdccicpOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvVGVzdFJ1bnRpbWVFeGNlcHRpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvVGVzdFJ1bnRpbWVFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ3ZDZjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1Rlc3RSdW50aW1lRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHM7Ci0KLQotCi0vKioKLSAqIFRoZSBTb3VyY2VFZGl0aW5nUnVudGltZUV4Y2VwdGlvbiBpcyBvZnRlbiB0aHJvd24gYnkgU291cmNlIEVkaXRvciBtZXRob2RzIHdoZW4KLSAqIGEgc2VydmljZSB3ZSB1c2UgdGhyb3dzIGEgY2hlY2tlZCBleGNlcHRpb24sIGJ1dCB3ZSB3YW50IHRvIGNvbnZlcnQgYW5kIHRyZWF0Ci0gKiBhcyBhIHJ1bnRpbWUgZXhjZXB0aW9uLiAoU3VjaCBhcyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiBpcyBhIGNvbW1vbiBleGFtcGxlKS4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RSdW50aW1lRXhjZXB0aW9uIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbiB7Ci0JLyoqCi0JICogRGVmYXVsdCA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCXByaXZhdGUgVGhyb3dhYmxlIG9yaWdpbmFsRXhjZXB0aW9uOwotCi0JcHVibGljIFRlc3RSdW50aW1lRXhjZXB0aW9uKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBUZXN0UnVudGltZUV4Y2VwdGlvbihTdHJpbmcgcykgewotCQlzdXBlcihzKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIGZvcm0gb2YgdGhlIGNvbnN0cnVjdG9yIGlzIHVzZWQgdG8gd3JhcHBlciBhbm90aGVyIGV4Y2VwdGlvbi4KLQkgKi8KLQlwdWJsaWMgVGVzdFJ1bnRpbWVFeGNlcHRpb24oVGhyb3dhYmxlIHQpIHsKLQkJc3VwZXIoKTsKLQkJb3JpZ2luYWxFeGNlcHRpb24gPSB0OwotCX0KLQotCS8qKgotCSAqIFRoaXMgZm9ybSBvZiB0aGUgY29uc3RydWN0b3IgaXMgdXNlZCB0byB3cmFwcGVyIGFub3RoZXIgZXhjZXB0aW9uLCBidXQgc3RpbGwKLQkgKiBwcm92aWRlIGEgbmV3IGRlc2NyaXB0aXZlIG1lc3NhZ2UuCi0JICovCi0JcHVibGljIFRlc3RSdW50aW1lRXhjZXB0aW9uKFRocm93YWJsZSB0LCBTdHJpbmcgcykgewotCQlzdXBlcihzKTsKLQkJb3JpZ2luYWxFeGNlcHRpb24gPSB0OwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IHN1cGVyLmdldE1lc3NhZ2UoKTsKLQkJaWYgKChyZXN1bHQgIT0gbnVsbCkgJiYgKCFyZXN1bHQuZW5kc1dpdGgoIi4iKSkpIC8vJE5PTi1OTFMtMSQKLQkJCXJlc3VsdCA9IHJlc3VsdCArICIuIjsgLy8kTk9OLU5MUy0xJAotCQlpZiAob3JpZ2luYWxFeGNlcHRpb24gIT0gbnVsbCkgewotCQkJU3RyaW5nIGVtYmVkZGVkTWVzc2FnZSA9IG9yaWdpbmFsRXhjZXB0aW9uLmdldE1lc3NhZ2UoKTsKLQkJCS8vIG5vdCBhbGwgZXhjZXB0aW9ucyAoZS5nLiBtYW55IE51bGxQb2ludGVyIGV4Y2VwdGlvbikgaGF2ZSBtZXNzYWdlcwotCQkJU3RyaW5nIG9yaWdpbmFsRXJyb3IgPSAiT3JpZ2luYWwgZXJyb3I6IjsJLy8kTk9OLU5MUy0xJAotCQkJaWYgKGVtYmVkZGVkTWVzc2FnZSAhPSBudWxsKQotCQkJCXJlc3VsdCA9IHJlc3VsdCArICIgICIgKyBvcmlnaW5hbEVycm9yICsgIiAiICsgZW1iZWRkZWRNZXNzYWdlOy8vJE5PTi1OTFMtMiQvLyROT04tTkxTLTEkCi0JCQllbHNlCi0JCQkJcmVzdWx0ID0gcmVzdWx0ICsgIiAgIiArIG9yaWdpbmFsRXJyb3IgKyAiICIgKyBvcmlnaW5hbEV4Y2VwdGlvbi50b1N0cmluZygpOy8vJE5PTi1OTFMtMiQvLyROT04tTkxTLTEkCi0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgVGhyb3dhYmxlIGdldE9yaWdpbmFsRXhjZXB0aW9uKCkgewotCQlyZXR1cm4gb3JpZ2luYWxFeGNlcHRpb247Ci0JfQotCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJLy8gd2UgZG9uJ3QgcHV0IHN1cGVyLnRvU3RyaW5nIG9yIGdldENsYXNzIHRvICJoaWRlIiB0aGF0IGl0IHdhcyBhCi0JCS8vIFNvdXJjZUVkaXRpbmcgZXhjZXB0aW9uIChvdGhlcndpc2UsIGZvY3VzIGdvZXMgb24gdGhhdCwKLQkJLy8gaW5zdGVhZCBvZiBvcmlnaW5hbCBleGNlcHRpb24uCi0JCVN0cmluZyBtZXNzYWdlID0gZ2V0TWVzc2FnZSgpOwotCQkvLyBtZXNzYWdlIHNob3VsZCBuZXZlciBiZSBudWxsIC4uLiBidXQganVzdCBpbiBjYXNlCi0JCXJldHVybiAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiBzdXBlci50b1N0cmluZygpOwotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvVGVzdFdyaXRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9UZXN0V3JpdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5M2Y1NjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9UZXN0V3JpdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotcHVibGljIGNsYXNzIFRlc3RXcml0ZXIgZXh0ZW5kcyBTdHJpbmdXcml0ZXIgewotCS8vIHdlIGRvbid0IHJlYWxseSB3YW50IHRvIHVzZSB0aGUgc3lzdGVtIEVPTCwgc2luY2UKLQkvLyB3ZSB3YW50IGEgY29tbW9uIG9uY2UgYWNyb3NzIHBsYXRmb3JtcywgQ1ZTLCBldGMuCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgY29tbW9uRU9MID0gIlxyXG4iOwotCi0JLy9TeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7IAotCi0JcHVibGljIHZvaWQgd3JpdGVsbihTdHJpbmcgbGluZSkgewotCQl3cml0ZShsaW5lKTsKLQkJd3JpdGUoY29tbW9uRU9MKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9UaW1lc3RhbXBVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1RpbWVzdGFtcFV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM5OGJiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1RpbWVzdGFtcFV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlsczsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuRGF0ZUZvcm1hdDsKLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7Ci1pbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKgotICogVGhpcyBjbGFzcyBwcm92aWRlcyBvbmUgdGltZXN0YW1wIHBlciBWTSBydW4uCi0gKiAoVGVjaG5pY2FsbHksIHBlciBjbGFzcyBsb2FkaW5nLikKLSAqLwotcHVibGljIGNsYXNzIFRpbWVzdGFtcFV0aWwgewotCi0JcHJpdmF0ZSBzdGF0aWMgRGF0ZSB0aW1lc3RhbXAgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIERhdGVGb3JtYXQgc2hvcnRGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eSctJ01NJy0nZGQiKTsKLQkvLwlwcml2YXRlIHN0YXRpYyBEYXRlRm9ybWF0IGxvbmdGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eSctJ01NJy0nZGQnLSdrayctJ21tJy0nc3MiKTsKLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBub3dTaG9ydCA9IG51bGw7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB0aW1lc3RhbXAoKSB7Ci0KLQkJaWYgKFRpbWVzdGFtcFV0aWwubm93U2hvcnQgPT0gbnVsbCkgewotCQkJVGltZXN0YW1wVXRpbC5ub3dTaG9ydCA9IHNob3J0Rm9ybWF0LmZvcm1hdChlbnN1cmVUaW1lc3RhbXAoKSk7Ci0JCX0KLQkJcmV0dXJuIFRpbWVzdGFtcFV0aWwubm93U2hvcnQ7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBEYXRlIGVuc3VyZVRpbWVzdGFtcCgpIHsKLQkJLy8ganVzdCBjYWxjdWxhdGUgJ3RpbWVzdGFtcCcgb25jZSBwZXIgY2xhc3MgbG9hZGluZywgCi0JCS8vIHNvIHRoaXMgJ3RpbWVzdGFtcCcgcmVtYWlucyB0aGUgc2FtZSBkdXJpbmcgCi0JCS8vIGVudGlyZSBydW4uIAotCQlpZiAoVGltZXN0YW1wVXRpbC50aW1lc3RhbXAgPT0gbnVsbCkgewotCQkJQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOwotCQkJVGltZXN0YW1wVXRpbC50aW1lc3RhbXAgPSBjYWxlbmRhci5nZXRUaW1lKCk7Ci0JCX0KLQkJcmV0dXJuIFRpbWVzdGFtcFV0aWwudGltZXN0YW1wOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzcwYWNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLQotY2xhc3MgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIGltcGxlbWVudHMgSVByb2dyZXNzTW9uaXRvciB7Ci0JcHJpdmF0ZSBib29sZWFuIGZpbmlzaGVkID0gZmFsc2U7Ci0KLQlwdWJsaWMgdm9pZCBiZWdpblRhc2soU3RyaW5nIG5hbWUsIGludCB0b3RhbFdvcmspIHsKLQkJLy8gd2UgZG9udCcgY2FyZQotCX0KLQotCXB1YmxpYyB2b2lkIGRvbmUoKSB7Ci0JCWZpbmlzaGVkID0gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0ZpbmlzaGVkKCkgewotCQlyZXR1cm4gZmluaXNoZWQ7Ci0JfQotCi0JcHVibGljIHZvaWQgaW50ZXJuYWxXb3JrZWQoZG91YmxlIHdvcmspIHsKLQkJLy8gd2UgZG9udCcgY2FyZQotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzQ2FuY2VsZWQoKSB7Ci0JCXJldHVybiBmaW5pc2hlZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDYW5jZWxlZChib29sZWFuIHZhbHVlKSB7Ci0JCWlmICh2YWx1ZSA9PSB0cnVlKQotCQkJZmluaXNoZWQgPSB0cnVlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFRhc2tOYW1lKFN0cmluZyBuYW1lKSB7Ci0JCS8vIHdlIGRvbid0IGNhcmUKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzdWJUYXNrKFN0cmluZyBuYW1lKSB7Ci0JCS8vIHdlIGRvbid0IGNhcmUKLQl9Ci0KLQlwdWJsaWMgdm9pZCB3b3JrZWQoaW50IHdvcmspIHsKLQkJLy8gd2UgZG9uJ3QgY2FyZQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWEwYTE5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0Ci0JbmFtZT0idGVzdHN1aXRlIgotCWRlZmF1bHQ9InJ1biIKLQliYXNlZGlyPSIuIj4KLQk8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotCTwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0JPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIgLz4gLS0+Ci0KLQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JPGVjaG8gbWVzc2FnZT0iZWNsaXBzZSBwbGFjZSAke2VjbGlwc2UtaG9tZX0iIC8+Ci0KLQk8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgcGx1Z2luLW5hbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9InBsdWdpbi1uYW1lIgotCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cyIgLz4KLQk8cHJvcGVydHkKLQkJbmFtZT0ibGlicmFyeS1maWxlIgotCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLQk8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotCTwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotCTx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0JCTx0c3RhbXAgLz4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0Ci0JCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0JCQkJaW5jbHVkZXM9Im9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMuKnhtbCIgLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotCTx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCQk8cHJvcGVydHkKLQkJCW5hbWU9IndzdC1mb2xkZXIiCi0JCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dzdF9mb2xkZXIiIC8+Ci0JCTxkZWxldGUKLQkJCWRpcj0iJHt3c3QtZm9sZGVyfSIKLQkJCXF1aWV0PSJ0cnVlIiAvPgotCQk8YW50Ci0JCQl0YXJnZXQ9ImNvcmUtdGVzdCIKLQkJCWFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImRhdGEtZGlyIgotCQkJCXZhbHVlPSIke3dzdC1mb2xkZXJ9IiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCQkJdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iY2xhc3NuYW1lIgotCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLkhUTUxDb3JlVGVzdFN1aXRlIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0icGx1Z2luLXBhdGgiCi0JCQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLQk8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLQkJPCEtLTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPi0tPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLQk8dGFyZ2V0Ci0JCW5hbWU9InJ1biIKLQkJZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLQkJPGFudAotCQkJdGFyZ2V0PSJjb2xsZWN0IgotCQkJYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iaW5jbHVkZXMiCi0JCQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMuKnhtbCIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9Im91dHB1dC1maWxlIgotCQkJCXZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0JCTwvYW50PgotCQk8IS0tCQk8ZW1haWxSZXN1bHRzIHJlc3VsdHNGaWxlPSIke2J1aWxkLXJlc3VsdHMtaG9tZX0vJHtwbHVnaW4tbmFtZX0ueG1sIiBhZGRyZXNzbGlzdD0iZGF2aWRfd2lsbGlhbXNAdXMuaWJtLmNvbSIgLz4gLS0+Ci0JPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUxYzhmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwNDhlMmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi1odG1sZW5jb2Rpbmd0ZXN0cy5qYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNjhiNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZzwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZDhiNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6Mzc6MjEgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjJhYzY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MjQ5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjA1OjI5IEVEVCAyMDA2Ci1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4ZmVjZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMAotQnVuZGxlLUNsYXNzUGF0aDogaHRtbGVuY29kaW5ndGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5IVE1MRW5jb2RpbmdUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuaHRtbAotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLAotIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5qdW5pdCwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVjNTk4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+TWF5IDIsIDIwMDY8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzYjYyM2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotc291cmNlLmh0bWxlbmNvZGluZ3Rlc3RzLmphciA9IHNyYy8KLW91dHB1dC5odG1sZW5jb2Rpbmd0ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBodG1sZW5jb2Rpbmd0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdGZpbGVzLyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmMxZmMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2Uub3JnCi1CdW5kbGUtTmFtZS4wID0gSFRNTCBFbmNvZGluZyBUZXN0cyBQbHVnLWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL0hUTUxFbmNvZGluZ1Rlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL0hUTUxFbmNvZGluZ1Rlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWIzZjQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9IVE1MRW5jb2RpbmdUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuaHRtbC5IVE1MRW5jb2RpbmdUZXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5odG1sLkhUTUxIZWFkVG9rZW5pemVyVGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLmh0bWwuVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySFRNTDsKLQotcHVibGljIGNsYXNzIEhUTUxFbmNvZGluZ1Rlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGNsYXNzZXMgPSBuZXcgQ2xhc3NbXXtIVE1MRW5jb2RpbmdUZXN0cy5jbGFzcywgSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIFRlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckhUTUwuY2xhc3N9OwotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IEhUTUxFbmNvZGluZ1Rlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBIVE1MRW5jb2RpbmdUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJIVE1MIEVuY29kaW5nIFRlc3QgU3VpdGUiKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoY2xhc3Nlc1tpXSwgY2xhc3Nlc1tpXS5nZXROYW1lKCkpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqLwotCXB1YmxpYyBIVE1MRW5jb2RpbmdUZXN0U3VpdGUoQ2xhc3MgdGhlQ2xhc3MpIHsKLQkJc3VwZXIodGhlQ2xhc3MpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEhUTUxFbmNvZGluZ1Rlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcywgU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIodGhlQ2xhc3MsIG5hbWUpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEhUTUxFbmNvZGluZ1Rlc3RTdWl0ZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL0hUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJmOWVmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4gcGx1Z2luOwotCi0JcHVibGljIHN0YXRpYyBMaXN0IGdldEFsbFRlc3RGaWxlcyhTdHJpbmcgdG9wRGlyTmFtZSkgewotCQlMaXN0IHJlc3VsdCA9IG51bGw7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyB0b3BEaXJOYW1lOwotCQlGaWxlIHRvcERpciA9IG5ldyBGaWxlKGxvY2F0aW9uKTsKLQkJaWYgKCF0b3BEaXIuaXNEaXJlY3RvcnkoKSkgewotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbih0b3BEaXJOYW1lICsgIiBpcyBub3QgYSBkaXJlY3RvcnkiKTsKLQkJfQotCQlyZXN1bHQgPSBnZXRGaWxlc0luRGlyKHRvcERpcik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBMaXN0IGdldEZpbGVzSW5EaXIoRmlsZSB0b3BEaXIpIHsKLQkJTGlzdCBmaWxlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJRmlsZVtdIHRvcEZpbGVzID0gdG9wRGlyLmxpc3RGaWxlcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRvcEZpbGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlGaWxlIGZpbGUgPSB0b3BGaWxlc1tpXTsKLQkJCWlmIChmaWxlLmlzRmlsZSgpKSB7Ci0JCQkJZmlsZXMuYWRkKGZpbGUpOwotCQkJfQotCQkJZWxzZSBpZiAoZmlsZS5pc0RpcmVjdG9yeSgpICYmICFmaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgiQ1ZTIikpIHsKLQkJCQlMaXN0IGlubmVyRmlsZXMgPSBnZXRGaWxlc0luRGlyKGZpbGUpOwotCQkJCWZpbGVzLmFkZEFsbChpbm5lckZpbGVzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZXM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBVUkwgZ2V0SW5zdGFsbExvY2F0aW9uKCkgewotCQlVUkwgaW5zdGFsbExvY2F0aW9uID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZyIpLmdldEVudHJ5KCIvIik7Ci0JCVVSTCByZXNvbHZlZExvY2F0aW9uID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc29sdmVkTG9jYXRpb24gPSBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbGxMb2NhdGlvbik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUKLQkJCXRocm93IG5ldyBFcnJvcihlKTsKLQkJfQotCQlyZXR1cm4gcmVzb2x2ZWRMb2NhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLCBvciAna2V5JyBpZiBub3QKLQkgKiBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IEhUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRSZXNvdXJjZUJ1bmRsZSgpOwotCQl0cnkgewotCQkJcmV0dXJuIChidW5kbGUgIT0gbnVsbCA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleSk7Ci0JCX0KLQkJY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4ga2V5OwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBGaWxlIGdldFRlc3RGaWxlKFN0cmluZyBmaWxlcGF0aCkgewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvLyBTdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgZmlsZXBhdGg7Ci0JCUZpbGUgcmVzdWx0ID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgUmVhZGVyIGdldFRlc3RSZWFkZXIoU3RyaW5nIGZpbGVwYXRoKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIGZpbGVwYXRoOwotCQlSZWFkZXIgcmVzdWx0ID0gbmV3IEZpbGVSZWFkZXIobG9jYXRpb24pOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHdvcmtzcGFjZSBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlKCkgewotCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCX0KLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL2h0bWwvSFRNTEVuY29kaW5nVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9odG1sL0hUTUxFbmNvZGluZ1Rlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZWQ4Y2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL2h0bWwvSFRNTEVuY29kaW5nVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLmh0bWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXREZWNvZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ29kaW5nRXJyb3JBY3Rpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkhUTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuSFRNTEVuY29kaW5nVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkVuY29kaW5nTWVtZW50bzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuSVJlc291cmNlQ2hhcnNldERldGVjdG9yOwotCi1wdWJsaWMgY2xhc3MgSFRNTEVuY29kaW5nVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBFbnN1cmVzIHRoYXQgYW4gSW5wdXRTdHJlYW0gaGFzIG1hcmsvcmVzZXQgc3VwcG9ydC4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJbnB1dFN0cmVhbSBnZXRNYXJrU3VwcG9ydGVkU3RyZWFtKElucHV0U3RyZWFtIG9yaWdpbmFsKSB7Ci0JCWlmIChvcmlnaW5hbCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCWlmIChvcmlnaW5hbC5tYXJrU3VwcG9ydGVkKCkpCi0JCQlyZXR1cm4gb3JpZ2luYWw7Ci0JCXJldHVybiBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShvcmlnaW5hbCk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZURpciA9ICJodG1sLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUhvbWUgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gZmlsZUhvbWUgKyBmaWxlRGlyOwotCXByaXZhdGUgaW50IFJFQURfQlVGRkVSX1NJWkUgPSA4MDAwOwotCi0JcHVibGljIEhUTUxFbmNvZGluZ1Rlc3RzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlU3RyZWFtKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkSUFOQUVuY29kaW5nLCBJUmVzb3VyY2VDaGFyc2V0RGV0ZWN0b3IgZGV0ZWN0b3IpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUZpbGUgZmlsZSA9IEhUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luLmdldFRlc3RGaWxlKGZpbGVuYW1lKTsKLQkJaWYgKCFmaWxlLmV4aXN0cygpKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihmaWxlbmFtZSArICIgd2FzIG5vdCBmb3VuZCIpOwotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7Ci0JCS8vIElucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJSW5wdXRTdHJlYW0gaXN0cmVhbSA9IGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oaW5wdXRTdHJlYW0pOwotCQl0cnkgewotCQkJZGV0ZWN0b3Iuc2V0KGlzdHJlYW0pOwotCQkJRW5jb2RpbmdNZW1lbnRvIGVuY29kaW5nTWVtZW50byA9ICgoSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcilkZXRlY3RvcikuZ2V0RW5jb2RpbmdNZW1lbnRvKCk7Ci0JCQlTdHJpbmcgZm91bmRJQU5BRW5jb2RpbmcgPSBudWxsOwotCQkJaWYgKGVuY29kaW5nTWVtZW50byAhPSBudWxsKSB7Ci0JCQkJZm91bmRJQU5BRW5jb2RpbmcgPSBlbmNvZGluZ01lbWVudG8uZ2V0SmF2YUNoYXJzZXROYW1lKCk7Ci0JCQl9Ci0JCQkvLyBJIGNoYW5nZWQgbWFueSAiZXF1YWxzIiB0byAiZXF1YWxzSWdub3JlQ2FzZSIgb24gMTEvNC8yMDAyLAotCQkJLy8gc2luY2UKLQkJCS8vIHNvbWUgaXNzdWVzIHdpdGggU0hJRlRfSklTIHZzLiBTaGlmdF9KSVMgd2VyZSBjYXVzaW5nIGZhaWx1cmVzLgotCQkJLy8gV2UgZG8gd2FudCB0byBiZSB0b2xlcmFudCBvbiBpbnB1dCwgYW5kIGFjY2VwdCBlaXRoZXIsIGJ1dCBJCi0JCQkvLyB0aGluawotCQkJLy8gdGhhdCBTdXBwb3J0ZWRKYXZhRW5jb2RpbmdzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gInJlY29tbWVuZCIKLQkJCS8vIFNoaWZ0X0pJUy4KLQkJCWJvb2xlYW4gZXhwZWN0ZWRJQU5BUmVzdWx0ID0gZmFsc2U7Ci0JCQlpZiAoZXhwZWN0ZWRJQU5BRW5jb2RpbmcgPT0gbnVsbCkgewotCQkJCWV4cGVjdGVkSUFOQVJlc3VsdCA9IChleHBlY3RlZElBTkFFbmNvZGluZyA9PSBmb3VuZElBTkFFbmNvZGluZyk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlleHBlY3RlZElBTkFSZXN1bHQgPSBleHBlY3RlZElBTkFFbmNvZGluZy5lcXVhbHNJZ25vcmVDYXNlKGZvdW5kSUFOQUVuY29kaW5nKTsKLQkJCX0KLQotCQkJYXNzZXJ0VHJ1ZSgiZW5jb2RpbmcgdGVzdCBmaWxlICIgKyBmaWxlbmFtZSArICIgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZElBTkFFbmNvZGluZyArICIgZm91bmQ6ICIgKyBmb3VuZElBTkFFbmNvZGluZywgZXhwZWN0ZWRJQU5BUmVzdWx0KTsKLQkJCS8vIGEgdmVyeSBzaW1wbGUgcmVhZCB0ZXN0IC4uLiB3aWxsIGNhdXNlIEpVbml0IGVycm9yIChub3QgZmFpbCkKLQkJCS8vIGlmCi0JCQkvLyB0aHJvd3MgZXhjZXB0aW9uLgotCQkJaWYgKGV4cGVjdGVkSUFOQUVuY29kaW5nICE9IG51bGwpIHsKLQkJCQllbnN1cmVDYW5SZWFkKGZpbGVuYW1lLCBmb3VuZElBTkFFbmNvZGluZywgaXN0cmVhbSk7Ci0JCQl9Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChpc3RyZWFtICE9IG51bGwpIHsKLQkJCQlpc3RyZWFtLmNsb3NlKCk7Ci0JCQl9Ci0JCQlpZiAoaW5wdXRTdHJlYW0gIT0gbnVsbCkgewotCQkJCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBqdXN0IHJlYWRzIHRvIHN0cmVhbSwgdG8gYmUgc3VyZSBpdCBjYW4gYmUgcmVhZCBwZXIKLQkgKiBlbmNvZGluZywgd2l0aG91dCBleGNlcHRpb24uCi0JICovCi0JcHJpdmF0ZSB2b2lkIGVuc3VyZUNhblJlYWQoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZW5jb2RpbmcsIElucHV0U3RyZWFtIGluU3RyZWFtKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlDaGFyc2V0IGNoYXJzZXQgPSBDaGFyc2V0LmZvck5hbWUoZW5jb2RpbmcpOwotCQlDaGFyc2V0RGVjb2RlciBjaGFyc2V0RGVjb2RlciA9IGNoYXJzZXQubmV3RGVjb2RlcigpOwotCQljaGFyc2V0RGVjb2Rlci5vbk1hbGZvcm1lZElucHV0KENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0JCWNoYXJzZXREZWNvZGVyLm9uVW5tYXBwYWJsZUNoYXJhY3RlcihDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCi0JCUlucHV0U3RyZWFtUmVhZGVyIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpblN0cmVhbSwgY2hhcnNldERlY29kZXIpOwotCQlTdHJpbmdCdWZmZXIgc3RyaW5nQnVmZmVyID0gcmVhZElucHV0U3RyZWFtKHJlYWRlcik7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZmlsZW5hbWUpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKHN0cmluZ0J1ZmZlci50b1N0cmluZygpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgU3RyaW5nQnVmZmVyIHJlYWRJbnB1dFN0cmVhbShSZWFkZXIgcmVhZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBudW1SZWFkID0gMDsKLQkJY2hhciB0QnVmZltdID0gbmV3IGNoYXJbUkVBRF9CVUZGRVJfU0laRV07Ci0JCXdoaWxlICgobnVtUmVhZCA9IHJlYWRlci5yZWFkKHRCdWZmLCAwLCB0QnVmZi5sZW5ndGgpKSAhPSAtMSkgewotCQkJYnVmZmVyLmFwcGVuZCh0QnVmZiwgMCwgbnVtUmVhZCk7Ci0JCX0KLQkJcmV0dXJuIGJ1ZmZlcjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1wdHlGaWxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIkVtcHR5RmlsZS5odG1sIjsKLQkJLy8gSFRNTCBoYXMgbm8gc3BlYyBkZWZhdWx0IGVuY29kaW5nLiBXaWxsIHVzZSBwbGF0Zm9ybSBkZWZhdWx0IGVuY29kaW5nLgotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBTeXN0ZW0uZ2V0UHJvcGVydHkoImZpbGUuZW5jb2RpbmciKSwgbmV3IEhUTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdElsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sIjsKLQkJU3RyaW5nIGlhbmFJbkZpbGUgPSAiVVRGLTgiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBpYW5hSW5GaWxlLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TXVsdGlOb25EZWZhdWx0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk11bHRpTm9uRGVmYXVsdC5odG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIklTTy04ODU5LTYiLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9FbmNvZGluZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb0VuY29kaW5nLmh0bWwiOwotCQkvLyBIVE1MIGhhcyBubyBzcGVjIGRlZmF1bHQgZW5jb2RpbmcuIFdpbGwgdXNlIHBsYXRmb3JtIGRlZmF1bHQgZW5jb2RpbmcuCi0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsIFN5c3RlbS5nZXRQcm9wZXJ0eSgiZmlsZS5lbmNvZGluZyIpLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0bm9xdW90ZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9xdW90ZXMuaHRtbCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtOCIsIG5ldyBIVE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vcm1hbE5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9ybWFsTm9uRGVmYXVsdC5odG1sIjsKLQkJU3RyaW5nIGlhbmFJbkZpbGUgPSAiVVRGLTgiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBpYW5hSW5GaWxlLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvaHRtbC9IVE1MSGVhZFRva2VuaXplclRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL2h0bWwvSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBlYzRiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvaHRtbC9IVE1MSGVhZFRva2VuaXplclRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuaHRtbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkhUTUxIZWFkVG9rZW5pemVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSFRNTEhlYWRUb2tlbml6ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5IZWFkUGFyc2VyVG9rZW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuSFRNTEVuY29kaW5nVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkVuY29kaW5nUGFyc2VyQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0JcHJpdmF0ZSBTdHJpbmcgZkNoYXJzZXQ7Ci0KLQlwcml2YXRlIFN0cmluZyBmQ29udGVudFR5cGVWYWx1ZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlRGlyID0gImh0bWwvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlSG9tZSA9ICJ0ZXN0ZmlsZXMvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlTG9jYXRpb24gPSB0aGlzLmZpbGVIb21lICsgdGhpcy5maWxlRGlyOwotCXByaXZhdGUgU3RyaW5nIGZQYWdlRW5jb2RpbmdWYWx1ZSA9IG51bGw7Ci0JcHJpdmF0ZSBTdHJpbmcgZlhNTERlY0VuY29kaW5nTmFtZTsKLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkTmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgZXhwZWN0ZWROYW1lLCBudWxsKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZE5hbWUsIFN0cmluZyBmaW5hbFRva2VuVHlwZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSFRNTEhlYWRUb2tlbml6ZXIgdG9rZW5pemVyID0gbnVsbDsKLQkJUmVhZGVyIGZpbGVSZWFkZXIgPSBudWxsOwotCQl0cnkgewotCQkJaWYgKHRoaXMuREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAiICsgZmlsZW5hbWUpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJfQotCQkJZmlsZVJlYWRlciA9IEhUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luLmdldFRlc3RSZWFkZXIoZmlsZW5hbWUpOwotCQkJdG9rZW5pemVyID0gbmV3IEhUTUxIZWFkVG9rZW5pemVyKGZpbGVSZWFkZXIpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIG9wZW5pbmcgZmlsZSBcIiIgKyBmaWxlbmFtZSArICJcIiIpOwotCQl9Ci0KLQkJSGVhZFBhcnNlclRva2VuIHJlc3VsdFRva2VuID0gbnVsbDsKLQkJSGVhZFBhcnNlclRva2VuIHRva2VuID0gcGFyc2VIZWFkZXIodG9rZW5pemVyKTsKLQkJU3RyaW5nIHJlc3VsdFZhbHVlID0gZ2V0QXBwcm9wcmlhdGVFbmNvZGluZygpOwotCQlmaWxlUmVhZGVyLmNsb3NlKCk7Ci0JCWlmIChmaW5hbFRva2VuVHlwZSAhPSBudWxsKSB7Ci0JCQlhc3NlcnRUcnVlKCJkaWQgbm90IGVuZCBhcyBleHBlY3RlZC4gZm91bmQ6ICAiICsgdG9rZW4uZ2V0VHlwZSgpLCBmaW5hbFRva2VuVHlwZS5lcXVhbHModG9rZW4uZ2V0VHlwZSgpKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlpZiAoZXhwZWN0ZWROYW1lID09IG51bGwpIHsKLQkJCQlhc3NlcnRUcnVlKCJleHBlY3RlZCBubyBlbmNvZGluZywgYnV0IGZvdW5kOiAiICsgcmVzdWx0VmFsdWUsIHJlc3VsdFRva2VuID09IG51bGwpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLy8gVE9ETzogbmVlZCB0byB3b3JrIG9uIGNhc2UgaXNzdWVzCi0JCQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgIiArIGV4cGVjdGVkTmFtZSArICIgYnV0IGZvdW5kICIgKyByZXN1bHRWYWx1ZSwgZXhwZWN0ZWROYW1lLmVxdWFscyhyZXN1bHRWYWx1ZS50b1VwcGVyQ2FzZSgpKSk7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RNYWxmb3JtZWROb0VuY29kaW5nKCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3RNYWxmb3JtZWROb0VuY29kaW5nWFNMKCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nWFNMLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3ROb0VuY29kaW5nKCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb0VuY29kaW5nLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxOb25EZWZhdWx0KCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb3JtYWxOb25EZWZhdWx0LmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk5vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdC5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0ZGVmZWN0MjIzMzY1KCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJTZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvKioKLQkgKiByZXR1cm5zIGVuY29kaW5nIGFjY29yZGluZyB0byBwcmlvcml0eTogMS4gWE1MIERlY2xhcmF0aW9uIDIuIHBhZ2UKLQkgKiBkaXJlY3RpdmUgcGFnZUVuY29kaW5nIG5hbWUgMy4gcGFnZSBkaXJlY3RpdmUgY29udGVudFR5cGUgY2hhcnNldCBuYW1lCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0QXBwcm9wcmlhdGVFbmNvZGluZygpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0JCWlmICh0aGlzLmZYTUxEZWNFbmNvZGluZ05hbWUgIT0gbnVsbCkgewotCQkJcmVzdWx0ID0gdGhpcy5mWE1MRGVjRW5jb2RpbmdOYW1lOwotCQl9Ci0JCWVsc2UgaWYgKHRoaXMuZlBhZ2VFbmNvZGluZ1ZhbHVlICE9IG51bGwpIHsKLQkJCXJlc3VsdCA9IHRoaXMuZlBhZ2VFbmNvZGluZ1ZhbHVlOwotCQl9Ci0JCWVsc2UgaWYgKHRoaXMuZkNoYXJzZXQgIT0gbnVsbCkgewotCQkJcmVzdWx0ID0gdGhpcy5mQ2hhcnNldDsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0xlZ2FsU3RyaW5nKFN0cmluZyB0b2tlblR5cGUpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkJaWYgKHRva2VuVHlwZSA9PSBudWxsKSB7Ci0JCQlyZXN1bHQgPSBmYWxzZTsKLQkJfQotCQllbHNlIHsKLQkJCXJlc3VsdCA9IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5JbnZhbGlkVGVybWluYXRlZFN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLkludmFsaWRUZXJtaW50YXRlZFVuRGVsaW1pdGVkU3RyaW5nVmFsdWUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBhcnNlQ29udGVudFR5cGVWYWx1ZShTdHJpbmcgY29udGVudFR5cGUpIHsKLQkJUGF0dGVybiBwYXR0ZXJuID0gUGF0dGVybi5jb21waWxlKCI7XFxzKmNoYXJzZXRcXHMqPVxccyoiKTsKLQkJU3RyaW5nW10gcGFydHMgPSBwYXR0ZXJuLnNwbGl0KGNvbnRlbnRUeXBlKTsKLQkJaWYgKHBhcnRzLmxlbmd0aCA+IDApIHsKLQkJCS8vIGlmIG9ubHkgb25lIGl0ZW0sIGl0IGNhbiBzdGlsbCBiZSBjaGFyc2V0IGluc3RlYWQgb2YKLQkJCS8vIGNvbnRlbnRUeXBlCi0JCQlpZiAocGFydHMubGVuZ3RoID09IDEpIHsKLQkJCQlpZiAocGFydHNbMF0ubGVuZ3RoKCkgPiA2KSB7Ci0JCQkJCVN0cmluZyBjaGVja0ZvckNoYXJzZXQgPSBwYXJ0c1swXS5zdWJzdHJpbmcoMCwgNyk7Ci0JCQkJCWlmIChjaGVja0ZvckNoYXJzZXQuZXF1YWxzSWdub3JlQ2FzZSgiY2hhcnNldCIpKSB7Ci0JCQkJCQlpbnQgZXFwb3MgPSBwYXJ0c1swXS5pbmRleE9mKCc9Jyk7Ci0JCQkJCQllcXBvcyA9IGVxcG9zICsgMTsKLQkJCQkJCWlmIChlcXBvcyA8IHBhcnRzWzBdLmxlbmd0aCgpKSB7Ci0JCQkJCQkJdGhpcy5mQ2hhcnNldCA9IHBhcnRzWzBdLnN1YnN0cmluZyhlcXBvcyk7Ci0JCQkJCQkJdGhpcy5mQ2hhcnNldCA9IHRoaXMuZkNoYXJzZXQudHJpbSgpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLy8gZkNvbnRlbnRUeXBlID0gcGFydHNbMF07Ci0JCQl9Ci0KLQkJfQotCQlpZiAocGFydHMubGVuZ3RoID4gMSkgewotCQkJdGhpcy5mQ2hhcnNldCA9IHBhcnRzWzFdOwotCQl9Ci0JfQotCi0JLyoqCi0JICogR2l2ZSdzIHByaW9yaXR5IHRvIGVuY29kaW5nIHZhbHVlLCBpZiBmb3VuZCBlbHNlLCBsb29rcyBmb3IgY29udGVudFR5cGUKLQkgKiB2YWx1ZTsKLQkgKi8KLQlwcml2YXRlIEhlYWRQYXJzZXJUb2tlbiBwYXJzZUhlYWRlcihIVE1MSGVhZFRva2VuaXplciB0b2tlbml6ZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXRoaXMuZlBhZ2VFbmNvZGluZ1ZhbHVlID0gbnVsbDsKLQkJdGhpcy5mQ2hhcnNldCA9IG51bGw7Ci0JCS8qCi0JCSAqIGlmICh0b2tlblR5cGUgPT0gWE1MSGVhZFRva2VuaXplckNvbnN0YW50cy5YTUxEZWxFbmNvZGluZykgeyBpZgotCQkgKiAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgeyBJVGV4dEhlYWRSZWdpb24gdmFsdWVUb2tlbiA9Ci0JCSAqIHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsgU3RyaW5nIHZhbHVlVG9rZW5UeXBlID0KLQkJICogdmFsdWVUb2tlbi5nZXRUeXBlKCk7IGlmIChpc0xlZ2FsKHZhbHVlVG9rZW5UeXBlKSkgeyByZXN1bHRWYWx1ZSA9Ci0JCSAqIHZhbHVlVG9rZW4uZ2V0VGV4dCgpOyBpZiAoREVCVUcpIHsgU3lzdGVtLm91dC5wcmludGxuKCJYTUwgSGVhZAotCQkgKiBUb2tlbml6ZXIgRm91bmQgRW5jb2Rpbmc6ICIgKyByZXN1bHRWYWx1ZSk7IH0gfSB9IH0KLQkJICovCi0JCUhlYWRQYXJzZXJUb2tlbiB0b2tlbiA9IG51bGw7Ci0JCUhlYWRQYXJzZXJUb2tlbiBmaW5hbFRva2VuID0gbnVsbDsKLQkJZG8gewotCQkJdG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQlpZiAodGhpcy5ERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbih0b2tlbik7Ci0JCQl9Ci0JCQlTdHJpbmcgdG9rZW5UeXBlID0gdG9rZW4uZ2V0VHlwZSgpOwotCQkJaWYgKHRva2VuVHlwZSA9PSBIVE1MSGVhZFRva2VuaXplckNvbnN0YW50cy5NZXRhVGFnQ29udGVudFR5cGUpIHsKLQkJCQlpZiAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCQlIZWFkUGFyc2VyVG9rZW4gdmFsdWVUb2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKLQkJCQkJaWYgKHRoaXMuREVCVUcpIHsKLQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbih2YWx1ZVRva2VuKTsKLQkJCQkJfQotCQkJCQlTdHJpbmcgdmFsdWVUb2tlblR5cGUgPSB2YWx1ZVRva2VuLmdldFR5cGUoKTsKLQkJCQkJaWYgKGlzTGVnYWxTdHJpbmcodmFsdWVUb2tlblR5cGUpKSB7Ci0JCQkJCQl0aGlzLmZDb250ZW50VHlwZVZhbHVlID0gdmFsdWVUb2tlbi5nZXRUZXh0KCk7Ci0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQotCQl9Ci0JCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKTsKLQkJaWYgKHRoaXMuZkNvbnRlbnRUeXBlVmFsdWUgIT0gbnVsbCkgewotCQkJcGFyc2VDb250ZW50VHlwZVZhbHVlKHRoaXMuZkNvbnRlbnRUeXBlVmFsdWUpOwotCQl9Ci0JCWZpbmFsVG9rZW4gPSB0b2tlbjsKLQkJcmV0dXJuIGZpbmFsVG9rZW47Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QmVzdENhc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJOb3JtYWxOb25EZWZhdWx0Lmh0bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTgiKTsKLQotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RJbGxGb3JtZWQoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RJbGxGb3JtZWQuanNwIjsKLQkvLyBkb1Rlc3RGaWxlKGZpbGVuYW1lKTsKLQkvLyB9Ci0JLy8gcHVibGljIHZvaWQgdGVzdElsbEZvcm1lZDIoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RJbGxGb3JtZWQyLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3RJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0KCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJFbXB0eUZpbGUuaHRtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbGxGb3JtZWROb3JtYWxOb25EZWZhdWx0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAiSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi04Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdExhcmdlQ2FzZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgIkxhcmdlTm9uRGVmYXVsdC5odG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTEiKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RMYXJnZU5vRW5jb2RpbmcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJMYXJnZU5vRW5jb2RpbmcuaHRtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwsIEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLk1BWF9DSEFSU19SRUFDSEVEKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNdWx0aU5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJNdWx0aU5vbkRlZmF1bHQuaHRtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS02Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vRW5jb2RpbmcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJOb0VuY29kaW5nLmh0bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0bm9xdW90ZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJub3F1b3Rlcy5odG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi04Iik7Ci0KLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvaHRtbC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JIVE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvaHRtbC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JIVE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYjM3YjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL2h0bWwvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySFRNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLmh0bWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkLlRlc3RDb250ZW50VHlwZURldGVjdGlvbjsKLQotcHVibGljIGNsYXNzIFRlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckhUTUwgZXh0ZW5kcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb24gewotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC9FbXB0eUZpbGUuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiLCAidGVzdGZpbGVzL2h0bWwvTGFyZ2VOb0VuY29kaW5nLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC9NdWx0aU5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC9Ob0VuY29kaW5nLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiLCAidGVzdGZpbGVzL2h0bWwvbm9xdW90ZXMuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC9Ob3JtYWxOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MmZhOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QKLQluYW1lPSJ0ZXN0c3VpdGUiCi0JZGVmYXVsdD0icnVuIgotCWJhc2VkaXI9Ii4iPgotCi0JPCEtLSBDb25maWd1cmFibGUgUHJvcGVydGllcyAtLT4KLQotCTwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0JPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KLQk8IS0tIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIiAvPiAtLT4KLQotCTxlY2hvIG1lc3NhZ2U9ImJhc2VkaXIgJHtiYXNlZGlyfSIgLz4KLQk8ZWNobyBtZXNzYWdlPSJlY2xpcHNlIHBsYWNlICR7ZWNsaXBzZS1ob21lfSIgLz4KLQotCTwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLQk8cHJvcGVydHkKLQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZyIgLz4KLQk8cHJvcGVydHkKLQkJbmFtZT0ibGlicmFyeS1maWxlIgotCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLQk8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotCTwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotCTx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldAotCQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9IgotCQkJCWluY2x1ZGVzPSJvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy4qeG1sIiAvPgotCQk8L2RlbGV0ZT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0JPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0JCTxwcm9wZXJ0eQotCQkJbmFtZT0id3N0LWZvbGRlciIKLQkJCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd3N0X2ZvbGRlciIgLz4KLQkJPGRlbGV0ZQotCQkJZGlyPSIke3dzdC1mb2xkZXJ9IgotCQkJcXVpZXQ9InRydWUiIC8+Ci0JCTxhbnQKLQkJCXRhcmdldD0iY29yZS10ZXN0IgotCQkJYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iZGF0YS1kaXIiCi0JCQkJdmFsdWU9IiR7d3N0LWZvbGRlcn0iIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmciIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJjbGFzc25hbWUiCi0JCQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLkhUTUxFbmNvZGluZ1Rlc3RTdWl0ZSIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9InBsdWdpbi1wYXRoIgotCQkJCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLQk8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0JPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotCTx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0JCTwhLS08ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4tLT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLQk8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0JPHRhcmdldAotCQluYW1lPSJydW4iCi0JCWRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0JCTxhbnQKLQkJCXRhcmdldD0iY29sbGVjdCIKLQkJCWFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImluY2x1ZGVzIgotCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy4qeG1sIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0ib3V0cHV0LWZpbGUiCi0JCQkJdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLQkJPC9hbnQ+Ci0JCTwhLS08ZW1haWxSZXN1bHRzIHJlc3VsdHNGaWxlPSIke2J1aWxkLXJlc3VsdHMtaG9tZX0vJHtwbHVnaW4tbmFtZX0ueG1sIiBhZGRyZXNzbGlzdD0iZGF2aWRfd2lsbGlhbXNAdXMuaWJtLmNvbSIgLz4gLS0+Ci0JPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9FbXB0eUZpbGUuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0VtcHR5RmlsZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0VtcHR5RmlsZS5odG1sCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY4YjVjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08SEVBRD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTg+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS02Ij4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPFRJVExFPklCTSBXZWJTcGhlcmUgU2FtcGxlcyBHYWxsZXJ5PC9USVRMRT4KLTwvSEVBRD4KLTxGUkFNRVNFVCByb3dzPSI3NSwqIj4KLQk8RlJBTUUgbmFtZT0idGl0bGUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvVGl0bGUuaHRtbCIgc2Nyb2xsaW5nPSJOTyIgbm9yZXNpemU+Ci0JPEZSQU1FU0VUIGNvbHM9IjE2MCwqIj4KLQkJPEZSQU1FIG5hbWU9Im1lbnUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvTWVudS5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCQk8RlJBTUUgbmFtZT0ibWFpbiIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9TYW1wbGVzSW50cm8uaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQk8L0ZSQU1FU0VUPgotCTxOT0ZSQU1FUz4KLQk8Qk9EWT4KLQk8UD5UbyB2aWV3IHRoaXMgcGFnZSwgeW91IG5lZWQgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgZnJhbWVzLjwvUD4KLQk8L0JPRFk+Ci0JPC9OT0ZSQU1FUz4KLTwvRlJBTUVTRVQ+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vRW5jb2RpbmcuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9FbmNvZGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGNhNjBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9FbmNvZGluZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjY0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDL0RURC8gSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotCi08aHRtbD4KLTxoZWFkPgotPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJNb3ppbGxhLzQuNyBbZW5dIChXaW5OVDsgVSkgW05ldHNjYXBlXSI+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+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlRIRSBFTkQhPC9GT05UPjwvUD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9uRGVmYXVsdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTGFyZ2VOb25EZWZhdWx0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiY2RkMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTGFyZ2VOb25EZWZhdWx0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NjUgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvRFRELyBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci0KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iTW96aWxsYS80LjcgW2VuXSAoV2luTlQ7IFUpIFtOZXRzY2FwZV0iPgotPE1FVEEgY29udGVudD0idGV4dC9jc3MiIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSI+Ci08dGl0bGU+c21va2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDI+IFNtb2tlIFRlc3QgLSBYTUwgRWRpdG9yPC9oMj4KLUxhc3QgdXBkYXRlZDogSnVuZSAyNSwgMjAwMQotPFA+VGhpcyBTbW9rZSBUZXN0IHByaW1hcmlseSBmb2N1c2VzIG9uIHRoZSBSVFAgcG9ydGlvbiBvZiB0aGUgWE1MIAotRWRpdGlvciwgd2hpY2ggaXMgdGhlIFNvdXJjZSBwYWdlIG9mIHRoZSBYTUwgRWRpdG9yLiBJdCBhbHNvIHBlcmZvcm1zIAotc29tZSBpbnRlZ3JhdGlvbiB0ZXN0aW5nLiBGb3IgZXhhbXBsZSwgaXQgdGVzdHMgc3luY2hyb25pemF0aW9uIGJldHdlZW4gCi10aGUgRGVzaWduIGFuZCBTb3VyY2UgcGFnZXMgb2YgdGhlIFhNTCBFZGl0b3IsIGFzIHdlbGwgYXMgd2l0aCB0aGUgCi1PdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXdzLiBJdCBhbHNvIHZlcmlmaWVzIHRoYXQgZmlsZXMgY3JlYXRlZCAKLXRocm91Z2ggdGhlIFhNTCBGaWxlIHdpemFyZCBhbmQgcmVmZXJlbmNlcyB0byB0aGUgWE1MIENhdGFsb2cgYXJlIAotc3VwcG9ydGVkIGFzIGV4cGVjdGVkLjwvUD4KLTxQPjxGT05UIGNvbG9yPSIjZmYwMDAwIj48Qj5OT1RFPC9CPjogWE1MIGZpbGVzIGFyZSBjYXNlLXNlbnNpdGl2ZSBzbyBiZSBzdXJlIHRoYXQgdGhpbmdzIGFwcGVhciAKLWV4YWN0bHkgYXMgbm90ZWQuPC9GT05UPjwvUD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0dXAKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5TZXR1cDwvRk9OVD48L0gyPgotPFA+PEI+U3RhcnRpbmcgQ2xlYW48L0I+PC9QPgotPHVsPgotICAgIDxsaT4gRGVsZXRlIGFueSBleGlzdGluZyB3b3JrYmVuY2g8L2xpPgotICAgIDxsaT4gU3RhcnQgRWNsaXBzZTwvbGk+Ci08L3VsPgotPFA+PEI+T3BlbiBhbiBYTUwgUGVyc3BlY3RpdmU8QlI+Ci08L0I+PC9QPgotPFVMPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPk9wZW4gUGVyc3BlY3RpdmU8L0I+IHRvb2xiYXIgYnV0dG9uIGluIHRoZSB1cHBlciBsZWZ0PC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPk90aGVyLi4uPC9CPjwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj5YTUw8L0I+PC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgdmlld3MgYXBwZWFyIGluIHRoZSBYTUwgcGVyc3BlY3RpdmU6IDxGT05UIGNvbG9yPSIjZmYwMDAwIj5UaGUgbG9jYXRpb24gb2YgdGhlIE91dGxpbmUgYW5kIE5hdmlnYXRvciB2aWV3cyBhcmUgcmV2ZXJzZWQgZnJvbSB0aGUgUmVzb3VyY2UgYW5kIFdlYiBwZXJzcGVjdGl2ZXMuIERvIHdlIHdhbnQgdG8gdHJ5IHRvIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBwZXJzcGVjdGl2ZXM/IEFsc28sIEkgb3BlbmVkIDxCPmRlZmVjdDwvQj4gMTc3NjY0IHRvIGVuYWJsZSBlYXN5IGFjY2VzcyB0byB0aGUgUHJvcGVydGllcyB2aWV3IGZyb20gd2l0aGluIHRoZSBYTUwgcGVyc3BlY3RpdmUuIElmIHRoaXMgdmlldyBpc24ndCBpbmNsdWRlZCBpbiB0aGUgUGVyc3BlY3RpdmUgYmVjYXVzZSBpdHMgdXNlIGlzIGxpbWl0ZWQsIHRoZW4gcmVjb21tZW5kIHdlIGF0IGxlYXN0IHByb3ZpZGUgYSBTaG93IG9yIEhpZGUgUHJvcGVydGllcyBWaWV3IHRvb2xiYXIgYnV0dG9uIChzaW1pbGFyIHRvIHRoZSBidXR0b25zIHRoYXQgUGFnZSBEZXNpZ25lciBwcm92aWRlcykuPC9GT05UPjwvTEk+Ci08L1VMPgotPFA+PEI+UHJvamVjdCBDcmVhdGlvbiBhbmQgRmlsZSBJbXBvcnRzPEJSPgotPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+Q3JlYXRlIGEgUHJvamVjdCwgPEI+WE1MVGVzdDI8L0I+IDwvTEk+Ci0gICAgPExJPkltcG9ydCB0aGUgZm9sbG93aW5nIGZpbGVzIGludG8gdGhpcyBwcm9qZWN0OgotICAgIDxVTD4KLSAgICAgICAgPExJPjxCPlB1cmNoYXNlT3JkZXIueHNkPC9CPjwvTEk+Ci0gICAgICAgIDxMST48Qj5JbnZvaWNlLmR0ZDwvQj48L0xJPgotICAgIDxMST48Qj5Kb2JEZXNjLnhtbDwvQj48L0xJPgotICAgIDxMST48Qj5XaXJlbGVzcy54bWw8L0I+PC9MST4KLSAgICA8TEk+PEI+Z290Y2hhVENCZWFucy5zZXQ8L0I+PC9MST4KLSAgICA8TEk+PEI+QVRTLmR0ZDwvQj48L0xJPgotICAgIDxMST48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+YW55IG90aGVycz88L0ZPTlQ+PC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci08L1VMPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgIENyZWF0ZS9PcGVuL0VkaXQgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPkNyZWF0ZS9PcGVuL0VkaXQgdGVzdCBjYXNlczwvRk9OVD48L0gyPgotPFA+PEI+Q3JlYXRlIGFuIFhNTCBGaWxlIGZyb20gc2NyYXRjaDwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPiB0b29sYmFyIGJ1dHRvbi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIENyZWF0ZSBhIFhNTCBGaWxlIHdpemFyZCBhcHBlYXJzIGFuZCB0aGUgRmluaXNoIGJ1dHRvbiBpcyBkaXNhYmxlZC4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPjxCPkRFRkVDVDo8L0I+IDE3NzY2MCAtIFhNTCBGaWxlIHdpemFyZDogZGlzYWJsZSBGaW5pc2ggYnV0dG9uIG9uIHRoZSBmaXJzdCBwYWdlPC9GT05UPi48L0xJPgotICAgIDxMST5BY2NlcHQgdGhlIGRlZmF1bHQgdG8gPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPjwvTEk+Ci0gICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UKLSAgICA8VUw+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXI8L0xJPgotICAgICAgICA8TEk+U3BlY2lmeSBhIEZpbGUgbmFtZSBvZiA8Qj5mcm9tU2NyYXRjaDwvQj48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPkZpbmlzaDwvQj48L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmc6Ci0gICAgPFVMPgotICAgICAgICA8TEk+ZnJvbVNjcmF0Y2gueG1sIGFwcGVhcnMgaW4gdGhlIE5hdmlnYXRvciB2aWV3LjwvTEk+Ci0gICAgICAgIDxMST5mcm9tU2NyYXRjaC54bWwgaXMgb3BlbiB0byB0aGUgRGVzaWduIHBhZ2Ugb2YgdGhlIFhNTCBFZGl0b3IgYW5kIGhhcyBmb2N1cy48L0xJPgotICAgICAgICA8TEk+dGhlIERlc2lnbiB0YWIgYXBwZWFycyBiZWZvcmUgdGhlIFNvdXJjZSB0YWIgaW4gdGhlIFhNTCBFZGl0b3IuPC9MST4KLSAgICAgICAgPExJPnRoZSBEZXNpZ24gYW5kIFNvdXJjZSBwYWdlIHNob3cgbm8gY29udGVudC48L0xJPgotICAgICAgICA8TEk+dGhlIE91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlld3Mgc2hvdyBub3RoaW5nLjwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5Td2l0Y2ggdG8gdGhlIFNvdXJjZSBwYWdlLiBWZXJpZnkgdGhlIGN1cnNvciBhcHBlYXJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuPC9MST4KLSAgICA8TEk+UmlnaHQgbW91c2UgYnV0dG9uIDIgYW5kIHZlcmlmeSBhIHBvcHVwIG1lbnUgYXBwZWFycy48L0xJPgotICAgIDxMST5IaXQgPEI+Q3RybCtTcGFjZTwvQj4uIFZlcmlmeSB0aGUgY29udGVudCBhc3Npc3QgcHJvcG9zYWwgbGlzdCBhcHBlYXJzLjwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj4mbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7PC9CPjwvTEk+Ci0gICAgPExJPlZlcmlmeSAmbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7IGlzIGluc2VydGVkIGFuZCBhcHBlYXJzIHN5bnRheCBoaWdobGlnaHRlZCBhbmQgYW4gZW50cnkgYXBwZWFycyBmb3IgaXQgaW4gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIHdpdGhpbiB0aGUgWE1MIGRlY2xhcmF0aW9uIGFuZCB2ZXJpZnkgPEI+dmVyc2lvbjwvQj4gYW5kIDxCPmVuY29kaW5nPC9CPiBhcHBlYXIgaW4gdGhlIFByb3BlcnRpZXMgdmlldy4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPlRoaXMgdXNlZCB0byB3b3JrLCBidXQgbm93IGl0J3Mgbm90IHdvcmtpbmcuIE9wZW5lZCA8Qj5kZWZlY3Q8L0I+IDE3NzY2MiAtIFhNTCBkZWNsYXJhdGlvbiBhdHRyaWJ1dGVzIG5vdCBhcHBlYXJpbmcgaW4gUHJvcGVydGllcyB2aWV3LiBJZiB3ZSBkZWNpZGUgdG8gbm90IHRyZWF0IHZlcnNpb24gYW5kIGVuY29kaW5nIGFzIGF0dHJpYnV0ZXMsIHRoZW4gdGhpcyBzdGVwIHNob3VsZCBiZSByZW1vdmVkLjwvRk9OVD48L0xJPgotICAgIDxMST5Db250aW51ZSB0byB0aGUgbmV4dCBzZWN0aW9uLjwvTEk+Ci08L1VMPgotPFA+PEI+SWRlbnRpZnkgYSBsb2NhbCBEVEQgKDwvQj52ZXJpZmllcyBhIERURCBpcyBpbW1lZGlhdGVseSByZWNvZ25pemVkOyBpbiB0aGUgcGFzdCwgeW91IGhhZCB0byBjbG9zZSBhbmQgcmVvcGVuIHRoZSBXb3JrYmVuY2g8Qj4pPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+VHlwZSB0aGUgZm9sbG93aW5nIGFmdGVyIHRoZSBYTUwgZGVjbGFyYXRpb24gaW4gPEI+ZnJvbVNjcmF0Y2gueG1sPC9CPjogPEI+Jmx0OyFET0NUWVBFIEludm9pY2UgU1lTVEVNICZxdW90O0ludm9pY2UuZHRkJnF1b3Q7Jmd0OzwvQj4uIFRoZSB0ZXh0IHNob3VsZCBiZSBzeW50YXggaGlnaGxpZ2h0ZWQgYXMgeW91IHR5cGUgYW5kIHlvdSBzaG91bGQgc2VlIGFuIGVudHJ5IGdldCBhZGRlZCB0byB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5FbnRlcjwvQj4gdG8gY3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIERPQ1RZUEUgZGVjbGFyYXRpb24uPC9MST4KLSAgICA8TEk+SGl0IDxCPkN0cmwrU3BhY2U8L0I+LlZlcmlmeSBvbmx5IDxCPkludm9pY2U8L0I+IGFuZCA8Qj5jb21tZW50PC9CPiBhcHBlYXIgaW4gdGhlIHByb3Bvc2FsIGxpc3QuICg8Qj5OT1RFPC9CPjogPEI+SW52b2ljZTwvQj4gaXMgdGhlIHJvb3QgZWxlbWVudCk8L0xJPgotICAgIDxMST5IaXQgPEI+RW50ZXI8L0I+IHRvIGFjY2VwdCA8Qj5JbnZvaWNlPC9CPiBhcyBhIHNlbGVjdGlvbi4gVmVyaWZ5IHRoZSBJbnZvaWNlIHN0YXJ0IGFuZCBlbmQgdGFncyBhcmUgaW5zZXJ0ZWQgaW50byB0aGUgU291cmNlIGFuZCB0aGUgY3Vyc29yIGFwcGVhcnMgYmV0d2VlbiB0aGVtLiBBbiBlbGVtZW50IGVudHJ5IHNob3VsZCBhcHBlYXIgZm9yIEludm9pY2UgaW4gdGhlIE91dGxpbmUgdmlldy4gKDxCPk5PVEU8L0I+OiBYTUwgaXMgY2FzZS1zZW5zaXRpdmUgc28gYmUgc3VyZSB5b3Ugc2VlIEludm9pY2UgYW5kIG5vdCBpbnZvaWNlIGV2ZXJ5d2hlcmUpLjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5DdHJsK1NwYWNlPC9CPi4gVmVyaWZ5IHRoZSBmb2xsb3dpbmcgYXBwZWFycyBpbiB0aGUgcHJvcG9zYWwgbGlzdCAoaW4gdGhlIG9yZGVyIHNob3duKTogPEZPTlQgY29sb3I9IiNmZjAwMDAiPkl0ZW0gaXMgYXBwZWFyaW5nIGJlZm9yZSBIZWFkZXIuIFRoZSBkZWZhdWx0IGlzIG5vdCB0byBzb3J0IHRoZSBsaXN0IGFscGhhYmV0aWNhbGx5LiBUaGF0IG1lYW5zIHRoZSBsaXN0IHNob3VsZCBiZSBzb3J0ZWQgYmFzZWQgb24gdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBjaGlsZCB0YWdzIGFyZSBkZWZpbmVkIGluIHRoZSBlbGVtZW50IGRlZmluaXRpb24gZm9yIEludm9pY2UgaW4gdGhlIERURC4gSW4gb3RoZXIgd29yZHMsIHVzZXJzIHNob3VsZCBzZWUgY2hpbGQgdGFncyBsaXN0ZWQgYWNjb3JkaW5nIHRvIHRoZWlyIHNlcXVlbmNpbmcgb3JkZXIgaW4gdGhlIERURCwgd2hpY2ggdGhlIERURCBFZGl0b3Igc2hvd3MuIFZpb2xhdGluZyB0aGUgc2VxdWVuY2luZyBvcmRlciBjYXVzZXMgYW4gWE1MIGZpbGUgdG8gYmVjb21lIG5vdCB2YWxpZC4gPEI+REVGRUNUOjwvQj4gMTc3NjY4PC9GT05UPgotICAgIDxVTD4KLSAgICAgICAgPExJPkhlYWRlcjwvTEk+Ci0gICAgICAgIDxMST5JdGVtPC9MST4KLSAgICAgICAgPExJPmNvbW1lbnQ8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+SGl0IDxCPkVudGVyPC9CPiB0byBhY2NlcHQgPEI+SGVhZGVyPC9CPiBhcyBhIHNlbGVjdGlvbi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIFNvdXJjZSBub3cgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nIGFuZCB0aGUgY3Vyc29yIGFwcGVhcnMgYmVmb3JlIDxCPmludm9pY2VOdW1iZXI8L0I+OjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjgzIiBzcmM9ImlkZW50aWZ5RFRELmpwZyIgd2lkdGg9IjQ4NSI+PC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPkhlYWRlcjwvQj4gYXBwZWFycyBuZXN0ZWQgdW5kZXIgPEI+SW52b2ljZTwvQj4gaW4gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICA8TEk+Q2xvc2UgdGhpcyBmaWxlLCBhbmQgcmVzcG9uZCA8Qj5ZZXM8L0I+IHdoZW4gcHJvbXB0ZWQgdG8gc2F2ZSB0aGUgY2hhbmdlcy48L0xJPgotICA8TEk+UmVvcGVuIHRoZSBmaWxlIGFuZCB2ZXJpZnkgdGhlIGNoYW5nZXMgd2VyZSBzYXZlZC48L0xJPgotICA8TEk+Q2xvc2UgdGhlIGZpbGUuIFZlcmlmeSBubyBzYXZlIGNoYW5nZXMgcHJvbXB0IGFwcGVhcnMuPC9MST4KLTwvVUw+Ci08UD48Qj5DcmVhdGUgYW4gWE1MIEZpbGUgZnJvbSBhbiBpbXBvcnRlZCBEVEQ8L0I+PC9QPgotPFVMPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPkZpbGUtJmd0O05ldy0mZ3Q7WE1MIEZpbGU8L0I+LjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgQ3JlYXRlIGEgWE1MIEZpbGUgd2l6YXJkIGFwcGVhcnMuPC9MST4KLSAgICA8TEk+U2VsZWN0IHRvIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZSBmcm9tIGEgRFREIGZpbGU8L0I+PC9MST4KLSAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZQotICAgIDxVTD4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlcjwvTEk+Ci0gICAgICAgIDxMST5TcGVjaWZ5IGEgRmlsZSBuYW1lIG9mIDxCPmZyb21Mb2NhbERURDwvQj48L0xJPgotICAgICAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZTwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPkltcG9ydCBGaWxlPC9CPiBidXR0b24KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Vc2UgdGhlIEJyb3dzZSBidXR0b24gdG8gZmluZCA8Qj50ZXN0Y2FzZS5kdGQ8L0I+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlci4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPldvdWxkIGJlIG5pY2UgaWYgdGhpcyB3ZXJlIGFscmVhZHkgZmlsbGVkIGluLiBPcGVuIGEgZGVmZWN0LjwvRk9OVD48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPkZpbmlzaDwvQj4gdG8gY2xvc2UgdGhlIEltcG9ydCBGaWxlIHdpemFyZDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5FeHBhbmQgPEI+WE1MdGVzdDI8L0I+IGFuZCB0aGVuIHNlbGVjdCA8Qj50ZXN0Y2FzZS5kdGQ8L0I+LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+V2FzIGV4cGVjdGluZyB0byBzZWUgdGhlIGltcG9ydGVkIGZpbGUgc2VsZWN0ZWQgaW4gdGhlIFdvcmtiZW5jaCBmaWxlcyBsaXN0LCBidXQgaXQgd2Fzbid0LiBPcGVuIGEgZGVmZWN0LjwvRk9OVD48L0xJPgotICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlLjwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj50ZXN0Y2FzZTwvQj4gYXMgdGhlIFJvb3QgRWxlbWVudC48L0xJPgotICAgIDxMST5BY2NlcHQgdGhlIGRlZmF1bHQgdG8gPEI+Q3JlYXRlIHJlcXVpcmVkIGNvbnRlbnQgb25seTwvQj4uPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPnRlc3RjYXNlLmR0ZDwvQj4gYXBwZWFycyBhcyB0aGUgU3lzdGVtIElkLjwvTEk+Ci0gICAgPExJPlNlbGVjdCBGaW5pc2guIFZlcmlmeSA8Qj5mcm9tTG9jYWxEVEQueG1sPC9CPiBhcHBlYXJzIGluIHRoZSBYTUwgRWRpdG9yLiBWZXJpZnkgdGhlIFNvdXJjZSBwYWdlIGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZzogPElNRyBib3JkZXI9IjAiIGhlaWdodD0iMjkwIiBzcmM9ImltcG9ydERURC5qcGciIHdpZHRoPSI2NjAiPjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIE91dGxpbmUgdmlldyBhbmQgdGhlIGZvcm1hdHRpbmcgaW5kZW50YXRpb24gcmVmbGVjdCB0aGUgcHJvcGVyIGVsZW1lbnQvdGFnIGhpZXJhcmNoeS4gSGVyZSdzIHdoYXQgdGhlIE91dGxpbmUgdmlldyBzaG91bGQgbG9vayBsaWtlOjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjI5NyIgc3JjPSJvdXRsaW5lMS5qcGciIHdpZHRoPSI2NTUiPjwvTEk+Ci0gIDxMST5WZXJpZnkgc2VsZWN0aW9uIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgCi0gICAgICAgIGFuZCBQcm9wZXJ0aWVzIHZpZXcuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIGNsaWNrIHdpdGhpbiB0aGUgPEI+aGVhZGVyPC9CPiBzdGFydCB0YWcuIAotICAgICAgICAgICAgVmVyaWZ5IDxCPmhlYWRlcjwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyBhbmQgaW4gdGhlIERlc2lnbiAKLSAgICAgICAgICAgIHBhZ2UgYW5kIHRoYXQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGFuZCBwcm9wZXJ0eSB2YWx1ZXMgYXBwZWFyIGluIHRoZSAKLSAgICAgICAgICAgIFByb3BlcnRpZXMgdmlldzoKLSAgICAgICAgPFRBQkxFIGJvcmRlcj0iMSI+Ci0gICAgICAgICAgICA8VEJPRFk+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+PEI+UHJvcGVydHk8L0I+PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+PEI+VmFsdWU8L0I+PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPmNhdGVnb3J5PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+d2VidG9vbDwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5udW1iZXI8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij5pZHZhbHVlMDwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5zdGF0ZTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPiZuYnNwOzwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5zdWJDYXRlZ29yeTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPkFjY2Vzc2FiaWxpdHk8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+c3ViU3ViQ2F0ZWdvcnk8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij4mbmJzcDs8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICA8L1RCT0RZPgotICAgICAgICA8L1RBQkxFPgotICAgICAgICA8L0xJPgotCTxMST5Gcm9tIHRoZSBPdXRsaW5lIHZpZXcsIHNlbGVjdCB0aGUgPEI+dGVzdEJ1Y2tldDwvQj4gdGFnLgotICAgICAgICAgICAgVmVyaWZ5IDxCPnRlc3RCdWNrZXQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgdGhlIGN1cnJlbnQgbWFya2VyCi0gICAgICAgICAgICBpbiB0aGUgbGVmdGhhbmQgbWFyZ2luIG9mIHRoZSBTb3VyY2UgcGFnZSBpbmRpY2F0ZXMgdGhlIHJhbmdlIG9mIHRoZSAKLSAgICAgICAgICAgIDxCPnRlc3RCdWNrZXQ8L0I+IHRhZy4gVGhlIFByb3BlcnRpZXMgdmlldyBzaG91bGQgc2hvdyBhIHByb3BlcnR5IG9mIDxCPnR5cGU8L0I+Ci0gICAgICAgICAgICB3aXRoIGEgdmFsdWUgb2YgPEI+Q29tcG9uZW50VGVzdDwvQj4uCi0gICAgICAgIDwvTEk+Ci0gICAgPC9VTD4gICAKLSAgICA8L0xJPiAKLSAgICA8TEk+VmVyaWZ5IGVkaXQgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgYW5kIAotICAgICAgICBQcm9wZXJ0aWVzIHZpZXcgKGZvY3VzIGhlcmUgaXMgb24gYWRkaW5nIGF0dHJpYnV0ZXMgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMpLgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCB1c2UgY29udGVudCBhc3Npc3QgdG8gaW5zZXJ0IGFuIGF0dHJpYnV0ZSBhbmQgYXR0cmlidXRlIHZhbHVlCi0gICAgICAgICAgICBmb3IgdGhlIDxCPmhlYWRlcjwvQj4gc3RhcnQgdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3IgYWZ0ZXIgdGhlIDxCPmNhdGVnb3J5PC9CPiBhdHRyaWJ1dGUgaW4gdGhlIDxCPmhlYWRlcjwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+VHlwZSA8Qj5zcGFjZTwvQj4gYW5kIHRoZW4gaGl0IHByb21wdCBmb3IgY29udGVudCBhc3Npc3QuPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgb25seSA8Qj5zdGF0ZTwvQj4gYW5kIDxCPnN1YlN1YkNhdGVnb3J5PC9CPiBhcHBlYXIgaW4gdGhlIHByb3Bvc2FsIGxpc3QgKGNvbnRlbnQgYXNzaXN0IGlzIHNtYXJ0IGVub3VnaCBub3QgdG8gbGlzdCBhbnkgYXR0cmlidXRlcyB0aGF0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHN0YXJ0IHRhZyBzaW5jZSBhdHRyaWJ1dGVzIGNhbiBvbmx5IGFwcGVhciBvbmNlLiA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q29vbCE8L0ZPTlQ+KS48L0xJPgotICAgICAgICAgICAgPExJPlNlbGVjdCA8Qj5zdGF0ZTwvQj4uPC9MST4gICAKLSAgICAgICAgICAgIDxMST5WZXJpZnkgPEI+c3RhdGU9IlVuZGVyQ29uc3RydWN0aW9uIjwvQj4gaXMgaW5zZXJ0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIChjb250ZW50IGFzc2lzdCBhdXRvbWF0aWNhbGx5IGluc2VydHMgYW55IGRlZmF1bHQgdmFsdWVzLiA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q29vbCE8L0ZPTlQ+KS4gVmVyaWZ5IHRoZSBEZXNpZ24gcGFnZSBhbmQgUHJvcGVydGllcyB2aWV3IHJlZmxlY3QgdGhpcyBjaGFuZ2UuPC9MST4gICAgICAgICAKLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIHVwZGF0ZSB0aGUgPEI+c3RhdGU8L0I+IGF0dHJpYnV0ZSB2YWx1ZSB0byAiVW5kZXJSZXZpZXciIAotICAgICAgICAgICAgKGEgcHVsbGRvd24gbGlzdCBvZiB2YWx1ZXMgc2hvdWxkIGJlIGF2YWlsYWJsZSkuIFZlcmlmeSB0aGUgY2hhbmdlIGlzIHJlZmxlY3RlZAotICAgICAgICAgICAgaW4gdGhlIFNvdXJjZSBhbmQgRGVzaWduIHBhZ2VzLgotICAgICAgICA8L0xJPgotICAgICAgICA8TEk+RnJvbSB0aGUgRGVzaWduIHBhZ2UsIGFkZCBhbiBhdHRyaWJ1dGUgYW5kIGF0dHJpYnV0ZSB2YWx1ZSB0byB0aGUgPEI+aGVhZGVyPC9CPiB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+QnJpbmcgdXAgdGhlIHBvcHVwIG1lbnUgZm9yIHRoZSA8Qj5oZWFkZXI8L0I+IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPlNlbGVjdCA8Qj5BZGQgQXR0cmlidXRlLT5zdWJTdWJDYXRlZ29yeTwvQj4gZnJvbSB0aGUgcG9wdXAgbWVudSAoaXQncyBzbWFydAotICAgICAgICAgICAgICAgIGVub3VnaCB0byBrbm93IHdoaWNoIGF0dHJpYnV0ZXMgaGF2ZW4ndCBiZWVuIHNwZWNpZmllZCB5ZXQgLi4uIGxpa2UgY29udGVudCAKLSAgICAgICAgICAgICAgICBhc3Npc3QuIENvb2whKS48L0xJPgotICAgICAgICAgICAgPExJPlR5cGUgaW4gYSB2YWx1ZSBvZiA8Qj5LZXlib2FyZCBzdXBwb3J0PC9CPi48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgY2hhbmdlIGlzIHJlZmxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UgYW5kIFByb3BlcnRpZXMgdmlldzwvTEk+Ci0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLTwvVUw+Ci08UD48Qj5PcGVuIGFuIFhNTCBGaWxlIHRoYXQgcmVmZXJlbmNlcyBhIHJlbW90ZSBEVEQ8L0I+PC9QPgotPFVMPgotICAgIDxMST5PcGVuIHRoZSA8Qj5XaXJlbGVzcy54bWw8L0I+IGZpbGUuPC9MST4KLSAgICA8TEk+VmVyaWZ5IGl0IGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZyBpbiB0aGUgU291cmNlIHBhZ2U6PElNRyBib3JkZXI9IjAiIGhlaWdodD0iMjM5IiBzcmM9IndpcmVsZXNzLmpwZyIgd2lkdGg9IjY1NiI+PC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBPdXRsaW5lIHZpZXcgYW5kIHRoZSBmb3JtYXR0aW5nIGluZGVudGF0aW9uIHJlZmxlY3QgdGhlIHByb3BlciAKLSAgICAgICAgZWxlbWVudC90YWcgaGllcmFyY2h5LiBIZXJlJ3Mgd2hhdCB0aGUgT3V0bGluZSB2aWV3IHNob3VsZCBsb29rIGxpa2U6IDxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjE4OSIgc3JjPSJvdXRsaW5lMi5qcGciIHdpZHRoPSI2NTYiPjwvTEk+IAotICAgIDxMST5WZXJpZnkgY29udGVudCBhc3Npc3QgPEZPTlQgY29sb3I9IiNmZjAwMDAiPkRlZmVjdCAxNzYzNzkgKGluIHZlcmlmeSBzdGF0ZSwgYnV0IHN0aWxsIG5vdCB3b3JraW5nKTwvRk9OVD4uPC9MST4KLSAgICAgICAgPFVMPgotICAgICAgICAgICA8TEk+Q3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIDxCPndtbDwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0IG9uIHRoZSBuZXcgbGluZS48L0xJPgotICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgYXBwZWFyIGFzIHByb3Bvc2FscyAoaW4gdGhlIG9yZGVyIHNob3duKTogCi0gICAgICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICAgICAgICAgPExJPmhlYWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST50ZW1wbGF0ZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmNhcmQ8L0xJPgotICAgICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgICAgPC9MST4KLSAgICAgICAgICAgPExJPkNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSA8Qj53bWw8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+VHlwZSBhIHNwYWNlIGJlZm9yZSB0aGUgZW5kaW5nIGRlbGltaXRlciBvbiB0aGUgY2FyZCBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Q8L0xJPgotICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgYXBwZWFyIGFzIHByb3Bvc2FscyAobm90IG5lY2Vzc2FyaWx5IGluIHRoZQotICAgICAgICAgICAgICAgb3JkZXIgc2hvd24pLiAKLSAgICAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgICAgICAgICA8TEk+dGl0bGU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5uZXdjb250ZXh0PC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+b3JkZXJlZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPnhtbDpsYW5nPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+b25lbnRlcmJhY2t3YXJkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+b250aW1lcjwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmlkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+Y2xhc3M8L0xJPgotICAgICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgICAgPC9MST4KLSAgICAgICAgICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3Igd2l0aGluIHRoZSA8Qj5tZXRob2Q8L0I+IGF0dHJpYnV0ZSB2YWx1ZSBpbiB0aGUgPEI+Z288L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdDwvTEk+Ci0gICAgICAgICAgIDxMST5WZXJpZnkgPEI+cG9zdDwvQj4gYW5kIDxCPmdldDwvQj4gYXBwZWFyIGFzIHByb3Bvc2Fscy48L0xJPgotICAgICAgICA8L1VMPgotICAgIDxMST5WZXJpZnkgc2VsZWN0aW9uIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgCi0gICAgICAgIGFuZCBQcm9wZXJ0aWVzIHZpZXcuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIGNsaWNrIHdpdGhpbiB0aGUgPEI+Y2FyZDwvQj4gc3RhcnQgdGFnLiAKLSAgICAgICAgICAgIFZlcmlmeSA8Qj5jYXJkPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IGFuZCBpbiB0aGUgRGVzaWduIAotICAgICAgICAgICAgcGFnZSBhbmQgdGhhdCB0aGUgY29udGVudCBhc3Npc3QgcHJvcG9zYWxzIGxpc3RlZCBhYm92ZSBmb3IgdGhlCi0gICAgICAgICAgICA8Qj5jYXJkPC9CPiB0YWcgYXBwZWFyIGFzIHByb3BlcnRpZXMgaW4gdGhlIFByb3BlcnRpZXMgdmlldy4gTm8gdmFsdWVzIHNob3VsZCBhcHBlYXIgZm9yIHRoZXNlIHByb3BlcnRpZXMuPC9MST4KLQk8TEk+RnJvbSB0aGUgT3V0bGluZSB2aWV3LCBzZWxlY3QgdGhlIDxCPnBvc3RmaWVsZDwvQj4gdGFnLgotICAgICAgICAgICAgVmVyaWZ5IDxCPnBvc3RmaWVsZDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCB0aGUgY3VycmVudCBtYXJrZXIKLSAgICAgICAgICAgIGluIHRoZSBsZWZ0aGFuZCBtYXJnaW4gb2YgdGhlIFNvdXJjZSBwYWdlIGluZGljYXRlcyB0aGUgcmFuZ2Ugb2YgdGhlIAotICAgICAgICAgICAgPEI+cG9zdGZpZWxkPC9CPiB0YWcuIFRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvdWxkIHNob3cgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzLAotICAgICAgICAgICAgbm9uZSBvZiB3aGljaCBzaG91bGQgaGF2ZSBhIHZhbHVlOgotICAgICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgICAgICAgIDxMST5uYW1lPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+dmFsdWU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5pZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmNsYXNzPC9MST4KLSAgICAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgICAgIDwvTEk+Ci0gICAgPC9VTD4gICAKLSAgICA8L0xJPgotICAgIDxMST5WZXJpZnkgZWRpdCBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIGFuZCAKLSAgICAgICAgUHJvcGVydGllcyB2aWV3IChmb2N1cyBoZXJlIGlzIG9uIGFkZGluZyBlbGVtZW50cy90YWdzKS4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgY29weSBhbmQgcGFzdGUgdGhlIDxCPmNhcmQ8L0I+IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIGluIHRoZSA8Qj5jYXJkPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5Ob3RpY2UgdGhlIHJhbmdlIG9mIHRoZSA8Qj5jYXJkPC9CPiB0YWcgaW4gdGhlIGxlZnRoYW5kIG1hcmdpbiBhcmVhLjwvTEk+Ci0gICAgICAgICAgICA8TEk+Q29weSB0aGlzIHJhbmdlIG9mIGxpbmVzIHVzaW5nIHRoZSA8Qj5FZGl0LT5Db3B5PC9CPiBwdWxsZG93biBtZW51IHNlbGVjdGlvbi48L0xJPgotICAgICAgICAgICAgPExJPlBhc3RlIGFmdGVyIHRoZSA8Qj5jYXJkPC9CPiBlbmQgdGFnIHVzaW5nIEN0cmwrVi48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgYXBwcm9wcmlhdGUgbGluZXMgd2VyZSBwYXN0ZWQgbiB0aGUgU291cmNlIHBhZ2UuCi0gICAgICAgICAgICAgICAgVmVyaWZ5IHRoZSBEZXNpZ24gcGFnZSwgT3V0bGluZSB2aWV3LCBhbmQgdGhlIFByb3BlcnRpZXMgCi0gICAgICAgICAgICAgICAgdmlldyByZWZsZWN0IHRoaXMgY2hhbmdlLjwvTEk+ICAgICAgICAgCi0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgICAgICA8TEk+RnJvbSB0aGUgRGVzaWduIHBhZ2UsIGFkZCBhbm90aGVyIDxCPmNhcmQ8L0I+IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5CcmluZyB1cCB0aGUgcG9wdXAgbWVudSBmb3IgdGhlIDxCPndtbDwvQj4gdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+U2VsZWN0IDxCPkFkZCBDaGlsZC0+Y2FyZDwvQj4gZnJvbSB0aGUgcG9wdXAgbWVudS48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgYW5kIHRoZSBQcm9wZXJ0aWVzCi0gICAgICAgICAgICAgICAgdmlldyByZWZsZWN0IHRoaXMgY2hhbmdlLiBOT1RFOiBpdCBzaG91bGQgaGF2ZSBnZW5lcmF0ZWQgb3V0Ci0gICAgICAgICAgICAgICAgdGhlIHNhbWUgdGhpbmcgYXMgdGhlIG9yaWdpbmFsIGNhcmQgdGFnLCB3aXRoIHRoZSBleGNlcHRpb24KLSAgICAgICAgICAgICAgICB0aGF0IGEgPEI+bWV0aG9kPC9CPiBhdHRyaWJ1dGUgc2hvdWxkIG5vdCBleGlzdCBpbiB0aGUgPEI+Z288L0I+IHN0YXJ0IHRhZy4gPC9MST4KLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPiAKLTwvVUw+Ci08UD48Qj5DcmVhdGUgYW5kIFZhbGlkYXRlIGFuIFhNTCBGaWxlIGZyb20gYSBzY2hlbWE8L0I+PEJSPgotCi08UD4odGhlc2Ugc3RlcHMgYXJlIHRha2VuIGZyb20gdGhlICdEZXNpZ24nIHNtb2tlIHRlc3QsIGV4Y2VwdCB0aGUgU291cmNlIFBhZ2UgaXMgdGhlIGZvY3VzKTwvUD4KLTx1bD4KLTxsaT4KLVJpZ2h0IG1vdXNlIGJ1dHRvbiAyIG9uIHRoZSBQdXJjaGFzZU9yZGVyLnhzZCBhbmQgc2VsZWN0IDxiPkNyZWF0ZSBYTUwKLUZpbGU8L2I+LjwvbGk+Ci0KLTxsaT4KLUFjY2VwdCB0aGUgZGVmYXVsdCBmaWxlIG5hbWVzLjwvbGk+Ci0KLTxsaT4KLUluIHRoZSBTZWxlY3QgUm9vdCBFbGVtZW50IHBhZ2UsIGNob29zZSA8Yj5wdXJjaGFzZU9yZGVyPC9iPiBhcyByb290IGVsZW1lbnQuPC9saT4KLQotPGxpPgotQ2hvb3NlIDxiPkNyZWF0ZSByZXF1aXJlZCBhbmQgb3B0aW9uYWwgY29udGVudDwvYj4gdG8gY3JlYXRlIGEgbWluaW1hbAotZG9jdW1lbnQuPC9saT4KLQotPGxpPgotRW50ZXIgPGI+cG88L2I+IGFzIHRoZSBuYW1lc3BhY2UgcHJlZml4LjwvbGk+Ci0KLTxsaT5PbiBGaW5pc2gsIGEgUHVyY2hhc2VPcmRlci54bWwgaXMgY3JlYXRlZCBhbmQgdGhlIFhNTCBFZGl0b3IgaXMgb3BlbmVkLiAoU2VsZWN0IFNvdXJjZSBQYWdlIGlmIG5vdCBhbHJlYWR5IHRoZXJlLik8L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUuIFRoZSBQdXJjaGFzZU9yZGVyLnhtbCBzaG91bGQgYmUgaW52YWxpZC48L2xpPgotCi08bGk+Ci1Eb3VibGUgY2xpY2sgb24gdGhlIGVycm9yIG1lc3NhZ2UuIEl0IHNob3VsZCBiZSBwb3NpdGlvbmVkIHRvIHRoZSBsaW5lCi1pbiBlcnJvciwgaS5lLiB0aGUgPGI+cGFydE51bTwvYj4gYXR0cmlidXRlLiBJdCBpcyBpbnZhbGlkIGJlY2F1c2UgdGhlCi12YWx1ZSBpcyBub3Qgc2V0IHRvIG1hdGNoIHRoZSBYTUwgc2NoZW1hIHBhdHRlcm4gZmFjZXQgImQzLVtBLVpdezJ9IiAoMwotZGlnaXRzIGZvbGxvd2VkIGJ5IDIgY2hhcmFjdGVycykuPC9saT4KLQotPGxpPkluIHRoZSBTb3VyY2UgVmlldywgbG9jYXRlIHRoZSA8Yj5wYXJ0TnVtPC9iPiBhdHRyaWJ1dGUgdW5kZXIgZWxlbWVudCBpdGVtLgotRW50ZXIgdGhlIHZhbHVlIDMzMy1BQi48L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUuIFRoZSBQdXJjaGFzZU9yZGVyLnhtbCBkb2N1bWVudCBzaG91bGQgbm93IGJlIHZhbGlkLjwvbGk+Ci08L1VMPgotPFVMPgotICA8TEk+Ci0gIDxIUj48L0xJPgotICA8bGk+UGxhY2UgdGhlIGN1cnNvciBhZnRlciB0aGUgJmx0O2l0ZW1zJmd0OyB0YWcgYW5kIGJlc3VyZSAiaXRlbSIgaXMgCi0gIGxpc3RlZCBpbiB0aGUgY29udGVudCBhc3Npc3QgbGlzdC4gPC9saT4KLTxsaT5SZW5hbWUgdGhlIHB1cmNoYXNlT3JkZXIueHNkIHRvLCBzYXksIHB1cmNoYXNlT3JkZXJIT0xELnhzZDwvbGk+Ci08bGk+VmVyaWZ5IHRoYXQgY29udGVudCBhc3Npc3Qgc3RpbGwgZ2l2ZXMgeW91ICJpdGVtIiBhcyBhYm92ZS48L2xpPgotPGxpPk5vdyBzZWxlY3QgdGhlICJSZWxvYWQgRGVwZW5kYW5jaWVzIiBidXR0b24uPC9saT4KLTxsaT5WZXJpZnkgdGhhdCBub3cgY29udGVudCBhc3Npc3Qgbm8gbG9uZ2VyIGxpc3RzIGFueSBpdGVtcyBvdGhlciAKLXRoYXQgdGhlIG1hY3JvICJjb21tZW50Ii48L2xpPgotPGxpPlJlcGVhdCBtYWtpbmcgcHVyY2hhc2VPcmRlci54c2Qgd29ya2FibGUgYWdhaW4uPC9saT4KLTwvdWw+Ci08UD48L1A+PFA+PC9QPjxQPjwvUD48UD48L1A+PFA+PC9QPjwvUD4KLTxQPjxCPk9wZW4gYW4gWE1MIEZpbGUgZm9yIGEgc2hpcHBlZCBEVEQgY2F0YWxvZyBlbnRyeTwvQj48QlI+Ci08QlI+Ci1bcHV0IGluIG9wdGlvbmFsIHNlY3Rpb24gLi4gdGhpcyBpc24ndCBhIGN1c3RvbWVyIHNjZW5lcmlvXTxCUj4KLVRvIHZlcmlmeSB0aGF0IHNoaXBwZWQgRFREcyBhcmUgd29ya2luZzo8QlI+Ci08VUw+Ci08TEk+Ci1Vc2UgYSB3ZWIgcHJvamVjdCB3aXRoIGEgc3RhbmRhcmQgd2ViLnhtbCBmaWxlIGluIGl0LiBCZSBzdXJlIAotdGhlcmUgaXMgbm8gd2ViLWFwcF8yXzIuZHRkIGZpbGUgaW4gdGhlIGRpcmVjdG9yeS4gSW4gdGhlIHdlYi54bWwgZmlsZSAKLWl0c2VsZiwgbWFuZ2xlIHRoZSB3ZWItYXBwXzJfMi5kdGQgZmlsZW5hbWUgaW4gdGhlIHN5c3RlbSBpZCBhIGxpdHRsZSwgc3VjaCBhcyAKLWNoYW5nZSBpdCB0byB4ZWItYXBwXzJfMi5kdGQgdG8gYmUgc3VyZSBpdCBjYW4ndCBiZSBmb3VuZCB2aWEgdGhlCi1ub3JtYWwgaHR0cCBtZXRob2QgKFRoaXMgaXNuJ3QgcmVhbGx5IG5lY2Vzc2FyeSBmb3IgdGhlIGZ1bnRpb24gdG8gd29yaywKLWl0cyBqdXN0IHRvIGJlIHN1cmUgb25seSB0aGUgY2F0YWxvZyBmdW5jdGlvbiBpcyBpbiBlZmZlY3QpLgotPC9MST4KLTxMST4KLUdvIHRvIHRoZSBwcmVmZXJlbmNlcyBwYWdlLCBhbmQgb3BlbiB0aGUgWE1MIENhdGFsb2cuIFZlcmlmeSB0aGVyZSAKLWlzIGFuIGVudHJ5IGZvciAtLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgV2ViIEFwcGxpY2F0aW9uIDIuMi8vRU4uCi08L0xJPgotPExJPgotT25jZSBhbGwgdGhlIHByZXAgd29yayBpcyBkb25lIChmaWxlcyBkZWxldGVkLCB0ZXh0IG1vZGlmaWVkKSwgeW91IHNob3VsZCAKLWV4aXQgYW5kIHJlc3RhcnQgRWNsaXBzZSB0byBiZSBzdXJlIHlvdSBoYXZlIGEgZnJlc2ggc3RhcnQuCi08L0xJPgotPExJPgotT3BlbiB0aGUgd2ViLnhtbCBmaWxlIGFuZCBiZSBzdXJlIHRoYXQgY29udGVudCBhc3Npc3Qgd29ya3MgZm9yIHRoYXQgZmlsZS4KLUZvciBleGFtcGxlLCByaWdodCBhZnRlciB0aGUgZW5kIG9mIHRoZSAmbHQ7L2Rpc3BsYXktbmFtZSZndDsgdGFnLCBjdHJsLXNwYWNlIAotc2hvdWxkIHByb3ZpZGUgYSBsb25nIGxpc3Qgb2YgZWxlbWVudHMsIHN0YXJ0aW5nIHdpdGggc2VydmxldCwgc2VydmxldC1tYXBwaW5nLCBldGMuCi1UaGlzIGluZGljYXRlcyB0aGUgc2hpcHBlZCBEVEQgZnVuY3Rpb24gaXMgd29ya2luZyBhbmQgY29uZmlndXJlZCAKLWNvcnJlY3RseSAoYXQgbGVhc3QgZm9yIHRoZSB3ZWIueG1sIGZpbGUpLgotPC9MST4KLTwvVUw+Ci08L1A+Ci08UD48Qj5DcmVhdGUgYW4gWE1MIEZpbGUgZnJvbSBhIG5ldyBEVEQgY2F0YWxvZyBlbnRyeTwvQj48QlI+PElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotCi08Yj5UaGUgZm9sbG93aW5nIGNvbWVzIGRpcmVjdGx5IGZyb20gdGhlICdEZXNpZ24nIFNtb2tlIFRlc3Q6IFhNTCBDYXRhbG9nIGZvciBYTUwgU2NoZW1hPC9iPgotPHVsPgotPGxpPgotUnVuIFZhbGlkYXRlIG9uIFB1cmNoYXNlT3JkZXIueG1sIHRvIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZDwvbGk+Ci0KLTxsaT4KLUNyZWF0ZSBhIG5ldyBwcm9qZWN0LCBYTUxUZXN0MjwvbGk+Ci0KLTxsaT4KLU1vdmUgdGhlIFB1cmNoYXNlT3JkZXIueHNkIGludG8gWE1MVGVzdDIuPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlIG9uIFB1cmNoYXNlT3JkZXIueG1sLiBZb3Ugd2lsbCBub3RpY2UgdGhhdCBpdCBpcyBubyBsb25nZXIKLXZhbGlkLiBUaGUgZXJyb3IgbWVzc2FnZSBzaG91bGQgZ2l2ZSB5b3UgYSBoaW50IHRoYXQgdGhlIGZpbGUgUHVyY2hhc2VPcmRlci54c2QKLWNhbiBubyBsb25nZXIgYmUgZm91bmQuPC9saT4KLQotPGxpPgotT3BlbiB0aGUgV2luZG93LT5QcmVmZXJlbmNlcyBhbmQgc2VsZWN0IHRoZSBYTUwgQ2F0YWxvZy48L2xpPgotCi08bGk+Ci1FbnRlciB0aGUgcGFpciA8Yj5JZCA9IFB1cmNoYXNlT3JkZXIueHNkIFVyaSA9IGY6XGVjbGlwc2VcWE1MVGVzdDJcUHVyY2hhc2VPcmRlci54c2Q8L2I+PC9saT4KLQotPGJyPk9yIGFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIGEgcmVsYXRpdmUgcGF0aCB0byB0aGUgaW5zdGFsbCBkaXJlY3RvcnkKLW9mIHRoZSB3b3JrYmVuY2ggYXMgZm9sbG93czoKLTxicj48Yj5JZCA9IFB1cmNoYXNlT3JkZXIueHNkIFVyaSA9IC5cWE1MVGVzdDJcUHVyY2hhc2VPcmRlci54c2Q8L2I+Ci08bGk+Ci1DbGljayBvbiB0aGUgUmVsb2FkIGJ1dHRvbiB0byByZWxvYWQgdGhlIGNhdGFsb2cgc2V0dGluZ3MuPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlLiBUaGUgUHVyY2hhc2VPcmRlci54bWwgZG9jdW1lbnQgc2hvdWxkIG5vdyBiZSB2YWxpZC48L2xpPgotPC91bD4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICBTYXZlL1ZhbGlkYXRlIHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5TYXZlL1ZhbGlkYXRlIHRlc3QgY2FzZXM8L0ZPTlQ+PC9IMj4KLTxQPjxCPlNhdmluZyBhbiBYTUwgRmlsZTwvQj48QlI+Ci0oTk9URTogdGhlIDxCPklkZW50aWZ5IGEgbG9jYWwgRFREPC9CPiB0ZXN0IGNhc2UgdGVzdHMgdGhlIHNhdmUgcHJvbXB0IG9uIGEgZmlsZSBjbG9zZS4pPC9QPgotPFVMPgotICA8TEk+SWYgYW55IGZpbGVzIGFyZSBvcGVuLCBzZWxlY3QgPEI+RmlsZS0mZ3Q7Q2xvc2UgQWxsPC9CPiAob3IgPEI+Q3RybCtTaGlmdCtGNDwvQj4pIHRvIGNsb3NlIHRoZW0uPC9MST4KLSAgPExJPk9wZW4gYW55IHhtbCBmaWxlIGluIHRoZSA8Qj5YTUxUZXN0MjwvQj4gcHJvamVjdC48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgKG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb24pOgotICA8VUw+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmU8L0I+IGlzIGRpc2FibGVkLjwvTEk+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmUgQWxsPC9CPiBpcyBkaXNhYmxlZC48L0xJPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlIEFzPC9CPiBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPnRoZSA8Qj5TYXZlPC9CPiB0b29sYmFyIGJ1dHRvbiAoYSBkaXNrZXR0ZSkgaXMgZGlzYWJsZWQuPC9MST4KLSAgICA8TEk+dGhlIDxCPlNhdmUgQXM8L0I+IHRvb2xiYXIgYnV0dG9uIGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+U2F2ZTwvQj4gaXMgZGlzYWJsZWQgb24gdGhlIFNvdXJjZSBwb3B1cCBtZW51LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+V291bGQgYmUgbmljZSBpZiB0aGUgRGVzaWduIHBvcHVwIG1lbnUgYWxzbyBoYWQgYSBTYXZlIHNlbGVjdGlvbi4gT3BlbiBhIHN1Z2dlc3Rpb24gZGVmZWN0LjwvRk9OVD48L0xJPgotICAgIDxMST5ubyA8Qj4qPC9CPiBhcHBlYXJzIGluIHRoZSBmaWxlIHRhYi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIGluIHRoZSBTb3VyY2UgcGFnZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgKGNoYW5nZXMtbWFkZSBjb25kaXRpb24pOgotICA8VUw+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmU8L0I+IGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZSBBbGw8L0I+IGlzIGVuYWJsZWQ8L0xJPgotICAgIDxMST50aGUgPEI+U2F2ZTwvQj4gdG9vbGJhciBidXR0b24gKGEgZGlza2V0dGUpIGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+U2F2ZTwvQj4gaXMgZW5hYmxlZCBvbiB0aGUgU291cmNlIHBvcHVwIG1lbnUuPC9MST4KLSAgICA8TEk+YSA8Qj4qPC9CPiBhcHBlYXJzIGluIHRoZSBmaWxlIHRhYi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5IaXQgPEI+Q3RybCtTPC9CPi4gPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5GaWxlLSZndDtTYXZlIEFsbDxCPjwvQj4uPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgaW4gdGhlIFByb3BlcnRpZXMgdmlldy48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+U2VsZWN0IDxCPlNhdmU8L0I+IGZyb20gdGhlIFNvdXJjZSBwb3B1cCBtZW51LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5DbG9zZSBhbmQgdGhlbiByZW9wZW4gdGhlIGZpbGUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZSBpbiB0aGUgcHJldmlvdXMgc3RlcHMgYXBwZWFyIGluIHRoZSBEZXNpZ24gYW5kIFNvdXJjZSBwYWdlcy48L0xJPgotPC9VTD4KLTxQPjxCPlNhdmluZyBhbiBYTUwgRmlsZSBhY3Jvc3MgbXVsdGlwbGUgcGVyc3BlY3RpdmVzIChvcHRpb25hbCk8L0I+PC9QPgotPFVMPgotICA8TEk+T3BlbiBhbnkgeG1sIGZpbGUgaW4gdGhlIDxCPlhNTFRlc3QyPC9CPiBwcm9qZWN0LjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIHRvIHRoZSBmaWxlLjwvTEk+Ci0gIDxMST5PcGVuIGFub3RoZXIgWE1MIFBlcnNwZWN0aXZlIGJ5OgotICA8VUw+Ci0gICAgPExJPjxCPnNlbGVjdGluZyBQZXJzcGVjdGl2ZS0mZ3Q7T3Blbi0mZ3Q7T3RoZXIuLi48L0I+PC9MST4KLSAgICA8TEk+d2hpbGUgaG9sZGluZyBkb3duIHRoZSA8Qj5TaGlmdDwvQj4ga2V5LCBzZWxlY3QgPEI+WE1MPC9CPi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5WZXJpZnkgYW5vdGhlciBYTUwgUGVyc3BlY3RpdmUgYnV0dG9uIGFwcGVhcnMgaW4gdGhlIGxlZnRoYW5kIHNpZGUgb2YgdGhlIFdvcmtiZW5jaCB0byByZXByZXNlbnQgdGhpcyBzZWNvbmQgcGVyc3BlY3RpdmUuPC9MST4KLSAgPExJPk9wZW4gdGhlIHNhbWUgeG1sIGZpbGUgYXMgaW4gdGhlIGZpcnN0IHN0ZXAgYWJvdmUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkgaW4gYm90aCBYTUwgUGVyc3BlY3RpdmVzIGFuZCB2ZXJpZnkgdGhhdCB0aGUgY2hhbmdlcyBtYWRlIHRvIHRoZSBmaWxlIGluIHRoZSBmaXJzdCBwZXJzcGVjdGl2ZSBhcHBlYXIgaW4gdGhlIHNhbWUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+VGhlICogbmV2ZXIgYXBwZWFycyBpbiB0aGUgZmlsZSB0YWIgb2YgdGhlIHNlY29uZCBwZXJzcGVjdGl2ZSBldmVuIHdoZW4gbWFrZSBjaGFuZ2VzIHRvIHRoZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUuIFRhbGsgdG8gRGF2aWQuPC9GT05UPjwvTEk+Ci0gIDxMST5NYWtlIHNvbWUgY2hhbmdlcyB0byB0aGUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlc2UgY2hhbmdlcyBhcHBlYXIgaW4gdGhlIHNhbWUgZmlsZSBpbiB0aGUgZmlyc3QgcGVyc3BlY3RpdmUuPC9MST4KLSAgPExJPkNsb3NlIHRoZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUgYW5kIHJlc3BvbmQgPEI+WWVzPC9CPiB0byB0aGUgc2F2ZSBjaGFuZ2VzIHByb21wdC48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9uIGFwcGxpZXMgaW4gdGhlIGZpcnN0IHBlcnNwZWN0aXZlLjwvTEk+Ci08L1VMPgotPFA+PEI+VmFsaWRhdGluZyBhIG5vbiB3ZWxsIGZvcm1lZCBYTUwgRmlsZSAobm8gRFREL1NjaGVtYSk8L0I+PEJSPgotKE5PVEU6IGl0J3MgaW1wb3J0YW50IHRoYXQgdGhlIGZvbGxvd2luZyBiZSB0eXBlZCBpbi4gVGhpcyB0ZXN0IGNhc2UgdHJpZXMgdG8gY292ZXIgc29tZSBvZiB0aGUgbW9yZSBjb21tb24gZXJyb3JzIHRoYXQgcmVuZGVyIGFuIFhNTCBmaWxlIGFzIG5vdCBiZWluZyB3ZWxsLWZvcm1lZC4gSXQgaXMgbm90IGludGVuZGVkIHRvIHZlcmlmeSB0aGF0IGFsbCBwb3NzaWJsZSBlcnJvcnMgYXJlIGJlaW5nIGRldGVjdGVkIGFuZCBncmFjZWZ1bGx5IGhhbmRsZWQuICk8L1A+Ci08VUw+Ci0gIDxMST5TZWxlY3QgdGhlIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj4gdG9vbGJhciBidXR0b24uPC9MST48TEk+QWNjZXB0IHRoZSBkZWZhdWx0IHRvIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj48L0xJPgotICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZQotICAgIDxVTD4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlcjwvTEk+Ci0gICAgICAgIDxMST5TcGVjaWZ5IGEgRmlsZSBuYW1lIG9mIDxCPk5vbldlbGxGb3JtZWQ8L0I+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5GaW5pc2g8L0I+PC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdC48L0xJPgotICA8TEk+U2VsZWN0IDxCPiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsuPC9CPjwvTEk+Ci0gIDxMST5DcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgWE1MIGRlY2xhcmF0aW9uLjwvTEk+Ci0gIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0LjwvTEk+Ci0gIDxMST5TZWxlY3QgY29tbWVudC48L0xJPgotICA8TEk+RW1iZWQgbW9yZSB0aGFuIDIgY29uc2VjdXRpdmUgZGFzaGVzIGluIHRoZSBjb21tZW50LiAKLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiBtb3JlIHRoYW4gMiBjb25zZWN1dGl2ZSBkYXNoZXMgY2FuIG5vdCBiZSBlbWJlZGRlZCB3aXRoaW4gYSBjb21tZW50KTwvRk9OVD48L0xJPgotICA8TEk+VHlwZSBpbiB0aGUgcmVtYWluaW5nIGxpbmVzIGFzIHNob3duIGJlbG93OiAKLSAgICAgICAgPEZPTlQgY29sb3I9IiNmZjAwMDAiPihJIGNhbid0IHNob3cgdGhlIGxpbmVzIHVudGlsIGRlZmVjdCAxNzc3NTUgaXMgZml4ZWQgLi4uIHVudGlsIHRoZW4sIGhlcmUncyB0aGUgdHlwZSBvZiB0aGluZ3MgdGhhdCBjYXVzZSAKLSAgICAgICAgYSBkb2N1bWVudCB0byBub3QgYmUgd2VsbC1mb3JtZWQpOjwvRk9OVD4KLSAgPFVMPgotICAgIDxMST5jcmVhdGUgYSBzdGFydCBhbmQgZW5kIHRhZyB0aGF0IGRvbid0IG1hdGNoIGluIHRoZWlyIGNhc2Ugc2Vuc2l0aXZpdHkgCi0gICAgICAgIChlLmcuLCAmbHQ7dGFnJmd0OyBhbmQgJmx0Oy9UYWcmZ3Q7KS4gPC9MST4KLSAgICA8TEk+Y3JlYXRlIGEgc3RhcnQgYW5kIGVuZCB0YWcgd2hlcmUgdGhlIHN0YXJ0IHRhZyBjb250YWlucyBhbiBhdHRyaWJ1dGUgdmFsdWUgdGhhdCBpcyBub3QgCi0gICAgICAgIGVuY2xvc2VkIGluIHF1b3Rlcy4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiB0aGlzIGlzIHBlcm1pdHRlZCBpbiBIVE1MLCBidXQgbm90IFhNTCk8L0ZPTlQ+PC9MST4KLSAgICA8TEk+Y3JlYXRlIHRhZ3MgdGhhdCBhcmUgbm90IHByb3Blcmx5IG5lc3RlZC4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiBhIGNoaWxkIHRhZyBtdXN0IGJlIGNvbXBsZXRlZCBiZWZvcmUgaXRzIHBhcmVudCB0YWcpPC9GT05UPjwvTEk+Ci0gICAgPExJPmNyZWF0ZSBhIHN0YXJ0IHRhZyB3aXRob3V0IGEgY29ycmVzb25kaW5nIGVuZCB0YWcuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogYWxsIHN0YXJ0IHRhZ3MgbXVzdCBoYXZlIGEgY29ycmVzcG9uZGluZyBlbmQgdGFnIHVubGVzcyB0aGUgCi0gICAgICAgIHRhZyBpcyBhbiBlbXB0eSB0YWcsIGluIHdoaWNoIGNhc2UgdGhlIHNob3J0aGFuZCB2ZXJzaW9uIGNhbiBiZSB1c2VkICgmbHQ7c2hvcnRUYWcvJmd0OykpLjwvRk9OVD48L0xJPgotICAgIDxMST5kbyBub3QgcHJvdmlkZSBhbiBhdHRyaWJ1dGUgdmFsdWUgKD0mcXVvdDt2YWx1ZSZxdW90OykuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogdGhpcyBpcyBwZXJtaXR0ZWQgaW4gSFRNTCBmb3IgdGhvc2UgYXR0cmlidXRlcyB0aGF0IGhhdmUgCi0gICAgICAgIG9ubHkgb25lIHZhbHVlLCBidXQgaXQncyBub3QgdmFsaWQgaW4gWE1MKTwvRk9OVD48L0xJPgotICAgICA8TEk+ZGVmaW5lIGFuIGF0dHJpYnV0ZSBtb3JlIHRoYW4gb25jZSBpbiBhIHN0YXJ0IHRhZy48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5TYXZlIHRoZSBmaWxlLjwvTEk+Ci0gIDxMST5WZXJpZnkgZXJyb3JzIGFyZSBsaXN0ZWQgaW4gdGhlIFRhc2tzIHZpZXcgZm9yIHRoZSBhYm92ZSB2aW9sYXRpb25zIGFuZCB0aGF0IGVycm9yIG1hcmtlcnMgYXBwZWFyIG9uIHRoZSBhcHByb3ByaWF0ZSAKLSAgICAgICAgIGxpbmVzIGluIHRoZSBTb3VyY2UgcGFnZS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPkknbSBub3Qgc3VyZSBob3cgdGhlIERlc2lnbiBwYWdlIGhhbmRsZXMgYW55IG9mIHRoZXNlIHZpb2xhdGlvbnMgCi0gICAgICAgICBhbmQgd2hhdCB3aWxsIGFwcGVhciBpbiB0aGUgT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3LiBUYWxrIHRvIENyYWlnIGFuZCBEYXZpZC48L0ZPTlQ+PC9MST4KLSAgPExJPlJlb3BlbiB0aGUgZmlsZSBhbmQgdmVyaWZ5IGV2ZXJ5dGhpbmcgd2FzIHNhdmVkLjwvTEk+Ci08L1VMPgotCi0KLTxQPjxCPlZhbGlkYXRlIGFuIFhNTCBGaWxlIGJhc2VkIG9uIGEgRFREPC9CPjwvUD4KLTxVTD4KLTxMST5PcGVuIDxCPmZyb21TY3JhdGNoLnhtbDwvQj4uPC9MST4KLTxMST5EZWxldGUgYSBjaGFyYWN0ZXIgZnJvbSBvbmUgb2YgdGhlIHN0YXJ0IHRhZ3MgKG1pc3R5cGluZyBhIHRhZyBpcyBub3QgdW5jb21tb24pLjwvTEk+Ci08TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdCB3aXRoaW4gdGhlIGJhZCB0YWcuIFZlcmlmeSBhIG1lc3NhZ2UgYXBwZWFycyBpbiB0aGUgc3RhdHVzIGFyZWEKLW9mIHRoZSBXb3JrYmVuY2ggaW5kaWNhdGluZyB0aGF0IHRoZSBiYWQgdGFnIGlzIGFuIHVua25vd24gdGFnLjwvTEk+Ci08TEk+U2VsZWN0IHRoZSA8Qj5WYWxpZGF0ZTwvQj4gdG9vbGJhciBidXR0b24uPC9MST4KLTxMST5WZXJpZnkgYW4gZXJyb3IgYXBwZWFycyBpbiB0aGUgVGFza3MgdmlldyBhbmQgYW4gZXJyb3IgbWFya2VyIGFwcGVhcnMgaW4gdGhlIFNvdXJjZSBwYWdlCi10byBmbGFnIHRoZSBpbnZhbGlkIHRhZy48L0xJPgotPExJPlNlbGVjdCA8Qj5FZGl0LT5VbmRvPC9CPiBmcm9tIHRoZSBTb3VyY2UgcGFnZS48L0xJPgotPExJPlZlcmlmeSB0aGUgYmFkIHRhZyBlcnJvciBubyBsb25nZXIgYXBwZWFycyBpbiB0aGUgVGFza3Mgdmlldy48L0xJPgotPExJPlJlbW92ZSB0aGUgPEI+SGVhZGVyPC9CPiBlbmQgdGFnIGZyb20gdGhlIFNvdXJjZSBwYWdlLjwvTEk+Ci08TEk+U2F2ZSB0aGUgZmlsZS48L0xJPgotPExJPlZlcmlmeSBhbiBlcnJvciBhcHBlYXJzIGluIHRoZSBUYXNrcyB2aWV3IGluZGljYXRpbmcgdGhhdCB0aGUgPEI+SGVhZGVyPC9CPiBlbmQgdGFnIGlzIG1pc3Npbmc8L0xJPgotPExJPkNsb3NlIHRoZSBmaWxlLCByZXNwb25kaW5nIDxCPlllczwvQj4gdG8gdGhlIHNhdmUgY2hhbmdlcyBwcm9tcHQuPC9MST4KLTxMST5Eb3VibGUtY2xpY2sgb24gdGhlIGVycm9yIGluIHRoZSBUYXNrcyB2aWV3LCBhbmQgdmVyaWZ5IDxCPmZyb21TY3JhdGNoLnhtbDwvQj4gb3BlbnMgdG8gdGhlCi1hcHByb3ByaWF0ZSBsaW5lIGluIHRoZSBTb3VyY2UgcGFnZSBvZiB0aGUgWE1MIEVkaXRvci48L0xJPgotPExJPkhlcmUncyBzb21lIG90aGVyIHZpb2xhdGlvbnMgdGhhdCBjYW4gYmUgYXR0ZW1wdGVkOgotPFVMPgotPExJPlNwZWNpZnkgYSBiYWQgYXR0cmlidXRlLjwvTEk+Ci08TEk+U3BlY2lmeSBhIGJhZCBhdHRyaWJ1dGUgdmFsdWUuPC9MST4KLTxMST5TcGVjaWZ5IGNoaWxkIHRhZ3Mgb3V0IG9mIHNlcXVlbmNpbmcgb3JkZXI8L0xJPgotPExJPlZpb2xhdGUgdGhlIG9jY3VycmVuY2UgaW5kaWNhdG9yIGZvciBhIHRhZyAoZS5nLiwgaWYgdGhlIERURCBzaG93cyA/LCB0aGVuIG9ubHkKLTAgb3IgMSBvY2N1cnJlbmNlcyBvZiB0aGUgdGFnIGlzIHBlcm1pdHRlZCkuCi08L1VMPjwvTEk+Ci08TEk+U2F2ZSB0aGUgZmlsZS48L0xJPgotPExJPlZlcmlmeSBlcnJvcnMgYXJlIGxpc3RlZCBpbiB0aGUgVGFza3MgdmlldyBmb3IgdGhlIGFib3ZlIHZpb2xhdGlvbnMgYW5kIHRoYXQgZXJyb3IgbWFya2VycyBhcHBlYXIgb24gdGhlIGFwcHJvcHJpYXRlIAotbGluZXMgaW4gdGhlIFNvdXJjZSBwYWdlLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SSdtIG5vdCBzdXJlIGhvdyB0aGUgRGVzaWduIHBhZ2UgaGFuZGxlcyBhbnkgb2YgdGhlc2UgdmlvbGF0aW9ucyAKLWFuZCB3aGF0IHdpbGwgYXBwZWFyIGluIHRoZSBPdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXcuIFRhbGsgdG8gQ3JhaWcgYW5kIERhdmlkLjwvRk9OVD48L0xJPgotPExJPlJlb3BlbiB0aGUgZmlsZSBhbmQgdmVyaWZ5IGV2ZXJ5dGhpbmcgd2FzIHNhdmVkLjwvTEk+Ci08L1VMPgotCi08IS0tICByZW1vdmVkIHNpbmNlIGRvbmUgZWxzZXdoZXJlIGFzIHBhcnQgb2Ygb3RoZXIgc2NlbmVyaW9zCi08UD48Qj5WYWxpZGF0ZSBhbiBYTUwgRmlsZSBiYXNlZCBvbiBhIFNjaGVtYTwvQj48QlI+Ci0tLT4KLTxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlIFNwZWNpZmljIHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxCPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5Tb3VyY2UgU3BlY2lmaWMgdGVzdCBjYXNlcyAob3B0aW9uYWwpPC9GT05UPjwvQj48L0gyPgotPFA+PEI+VXNpbmcgdGhlIEF1dG8gQ29tcGxldGlvbiBDb250ZW50IEFzc2lzdCBQcmVmZXJlbmNlPC9CPjxCUj4KLTxVTD4KLTxMST5PcGVuIGEgYW55IFhNTCBmaWxlIHRoYXQgaGFzIGVub3VnaCB0YWdzIHRvIHByb3ZpZGUgc3ludGF4IGhpZ2h0bGlnaHRpbmcuPC9MST4KLTxMST5XaGlsZSB0aGF0IGZpbGUgaXMgbGVmdCBvcGVuLCBnbyB0byB0aGUgUHJlZmVyZW5jZXMgcGFnZSwgc2VsZWN0Ci1YTUwgRWRpdG9yLCB0aGVuIFNvdXJjZSBTdHlsZXMuIDwvTEk+Ci08TEk+T24gdGhhdCBwYWdlLCB1c2UgdGhlIG1vdXNlIHRvICJzZWxlY3QiIGEgdGFnIG5hbWUuIFRoZSB0YWcgbmFtZSBpcyBub3QgbGl0ZXJhbGx5Ci1zZWxlY3RlZCwgYnV0IHdoZW4geW91IGNsaWNrIG9uIGFuIGVsZW1lbnQgaW4gdGhlIGV4YW1wbGUgdGV4dCwgdGhlIGxpc3QKLWFib3ZlIGl0IHdpbGwgZGlzcGxheSB0aGUgdHlwZSBvZiBlbGVtZW50IGl0IGlzLCBhbmQgd2hhdCBpdHMgY3VycmVudCBjb2xvcnMgYXJlLjwvTEk+Ci08TEk+Rm9yICJ0YWcgbmFtZSIsIHNlbGVjdCB0aGUgYm9sZCBjaGVjayBib3guIFRoZW4gcHJlc3MgQXBwbHksIGFuZCB5b3Ugc2hvdWxkCi1zZWUgdGhlIGNoYW5nZSB0YWtlIGVmZmVjdCBpbiB5b3VyIGFjdGl2ZSBlZGl0b3IuPC9MST4KLTxMST5TZWxlY3QgIkRlZmF1bHRzIiBhbmQgbWFrZSBzdXJlIHRoZSB0YWcgbmFtZXMgYXJlIHNldCBiYWNrIHRvIG5vdCBib2xkLjwvTEk+Ci08L1VMPgotPElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotPFA+PEI+RG91YmxlLUNsaWNraW5nIFdpdGhpbiB0aGUgU291cmNlPC9CPiA8QlI+Ci0oTk9URTogaWYgeW91IGNvbnRpbnVlIHRvIGRvdWJsZS1jbGljayBhdCBhIGdpdmVuIGN1cnNvciBwb3NpdGlvbiwgdGhlIHNlbGVjdGlvbiBhcmVhIHdpbGwgY29udGludWUgdG8gZXhwYW5kLiBXaGVuIHRoZSBtYXhpbXVtIHJlZ2lvbiBhcmVhIGhhcyBiZWVuIHJlYWNoZWQsIHRoZSBuZXh0IGRvdWJsZS1jbGljayB3aWxsIGNhdXNlIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uIFNvLCB0aGUgc2VsZWN0aW9ucyB3aWxsIHdyYXAvY3ljbGUuIDxGT05UIGNvbG9yPSIjMDAwMGZmIj5Db29sITwvRk9OVD4pLjwvUD4KLTxVTD4KLSAgPExJPk9wZW4gPEI+Sm9iRGVzYy54bWw8L0I+LjwvTEk+Ci0gIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIHRhZyBjb250ZW50OgotICA8VUw+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+TWlkZGxld2FyZTwvQj4gb24gbGluZSA3LjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5NaWRkbGV3YXJlPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIGFuZCBEZXNpZ24gcGFnZXMgYW5kIDxCPkJ1c1R5cGU8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ob3Qgc3VyZSB3aGF0IHRoZSBQcm9wZXJ0aWVzIHZpZXcgaXMgc3VwcG9zZWQgdG8gc2hvdy4gSXQgZ29lcyBibGFuay4gU2VlIGRlZmVjdCAxNzc3NTMuIEFsc28sIDxCPk1pZGRsZXdhcmU8L0I+IHdhc24ndCBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYXMgaGFkIGV4cGVjdGVkLiBUaGUgRGVzaWduIHBhZ2Ugb25seSBzZWVtcyB0byBzdGF5IGluIHN5bmMgYXQgdGhlIGVsZW1lbnQvdGFnIGxldmVsIGxpa2UgdGhlIE91dGxpbmUgdmlldy4gVGFsayB0byBDcmFpZyBhYm91dCB0aGlzLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYWdhaW4gYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5BcHBsaWNhdGlvbiBhbmQgTWlkZGxld2FyZSBTb2Z0d2FyZTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBhbmQgRGVzaWduIHBhZ2VzIGFuZCA8Qj5CdXNUeXBlPC9CPiByZW1haW5zIHRvIGJlIHRoZSBvbmx5IHRoaW5nIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiBhIHRhZyBuYW1lOgotICA8VUw+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+SG93VG9BcHBseTwvQj4gb24gbGluZSA2MS48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+SG93VG9BcHBseTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlLCBEZXNpZ24gcGFnZSwgYW5kIE91dGxpbmUgdmlldy4gCi0gICAgICAgIDxCPmNsYXNzPC9CPiwgPEI+ZGlzdHJpYnV0ZTwvQj4sIDxCPmlkPC9CPiwgYW5kIDxCPm5hbWU8L0I+IHNob3VsZCBhcHBlYXIgaW4gdGhlIAotICAgICAgICBQcm9wZXJ0aWVzIHZpZXcuIE9ubHkgPEI+ZGlzdHJpYnV0ZTwvQj4gc2hvdWxkIHNob3cgYSB2YWx1ZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYWdhaW4gYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgd2hvbGUgPEI+SG93VG9BcHBseTwvQj4gc3RhcnQgdGFnIChpbmNsdWRpbmcgaXRzIGRlbGltaXRlcnMpIGlzIHNlbGVjdGVkIAotICAgICAgICBpbiB0aGUgU291cmNlIHBhZ2UuIDxCPkhvd1RvQXBwbHk8L0I+IHNob3VsZCByZW1haW4gc2VsZWN0ZWQgaW4KLSAgICAgICAgdGhlIERlc2lnbiBwYWdlIGFuZCBPdXRsaW5lIHZpZXcuIDxCPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ib3dUb0FwcGx5PC9GT05UPjwvQj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+IGFuZCBhbGwgZGVzY2VuZGVudHMgYmVjb21lIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgKGRlZmVjdCAxNzc3NTIpLiBBbHNvLCB0aGUgUHJvcGVydGllcyB2aWV3IHNob3dzIG5vIHByb3BlcnRpZXMgKGRlZmVjdCAxNzc3NTMpLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIGFuIGF0dHJpYnV0ZSBuYW1lOgotICA8VUw+Ci0gICAgPExJPlR5cGUgPEI+Q3RybCtFbmQ8L0I+IHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPmRpc3RyaWJ1dGU8L0I+IG9uIGxpbmUgNjEuIFZlcmlmeSA8Qj5kaXN0cmlidXRlPC9CPiBpcyBzZWxlY3RlZCAKLSAgICAgICAgaW4gdGhlIFNvdXJjZSBwYWdlIGFuZCA8Qj5Ib3dUb0FwcGx5PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIE91dGxpbmUgCi0gICAgICAgIHZpZXcuIDxCPmNsYXNzPC9CPiwgPEI+ZGlzdHJpYnV0ZTwvQj4sIDxCPmlkPC9CPiwgYW5kIDxCPm5hbWU8L0I+IHNob3VsZCBhcHBlYXIgaW4gCi0gICAgICAgIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIE9ubHkgPEI+ZGlzdHJpYnV0ZTwvQj4gc2hvdWxkIHNob3cgYSB2YWx1ZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgPEI+ZGlzdHJpYnV0ZT0iaW50ZXJuYWwiPC9CPiBpcwotICAgICAgICBzZWxlY3RlZCBpbiB0aGUgU291cmNlLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjwvTEk+ICAgICAgICAgICAgICAgICAKLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IHRoZSB3aG9sZSA8Qj5Ib3dUb0FwcGx5PC9CPiBzdGFydCB0YWcgaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIChpbmNsdWRpbmcgaXRzIGRlbGltaXRlcnMpLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjxCPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ib3dUb0FwcGx5PC9GT05UPjwvQj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+IGFuZCBhbGwgZGVzY2VuZGVudHMgYmVjb21lIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgKGRlZmVjdCAxNzc3NTIpLiBBbHNvLCB0aGUgUHJvcGVydGllcyB2aWV3IHNob3dzIG5vIHByb3BlcnRpZXMgKGRlZmVjdCAxNzc3NTMpLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci0gPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gYW4gYXR0cmlidXRlIHZhbHVlOgotICA8VUw+Ci0gICAgPExJPlR5cGUgPEI+Q3RybCtIb21lPC9CPiB0byBwb3NpdGlvbiB0aGUgY3Vyc29yIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuPC9MST4KLSAgICA8TEk+U2Nyb2xsIGRvd24gc3VjaCB0aGF0IGxpbmUgNjEgaXMgdmlzaWJsZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPmludGVybmFsPC9CPiBvbiBsaW5lIDYxLiBWZXJpZnkgPEI+aW50ZXJuYWw8L0I+IGlzIHNlbGVjdGVkIAotICAgICAgICBpbiB0aGUgU291cmNlIHBhZ2UgYW5kIDxCPkhvd1RvQXBwbHk8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgT3V0bGluZSAKLSAgICAgICAgdmlldy4gPEI+Y2xhc3M8L0I+LCA8Qj5kaXN0cmlidXRlPC9CPiwgPEI+aWQ8L0I+LCBhbmQgPEI+bmFtZTwvQj4gc2hvdWxkIGFwcGVhciBpbiAKLSAgICAgICAgdGhlIFByb3BlcnRpZXMgdmlldy4gT25seSA8Qj5kaXN0cmlidXRlPC9CPiBzaG91bGQgc2hvdyBhIHZhbHVlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSA8Qj4iaW50ZXJuYWwiPC9CPiBpcwotICAgICAgICBzZWxlY3RlZCBpbiB0aGUgU291cmNlLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSA8Qj5kaXN0cmlidXRlPSJpbnRlcm5hbCI8L0I+IGlzCi0gICAgICAgIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPC9MST4gICAgICAgICAgICAgICAgIAotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgdGhlIHdob2xlIDxCPkhvd1RvQXBwbHk8L0I+IHN0YXJ0IHRhZyBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UgKGluY2x1ZGluZyBpdHMgZGVsaW1pdGVycykuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuIDxCPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ib3dUb0FwcGx5PC9GT05UPjwvQj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+IGFuZCBhbGwgZGVzY2VuZGVudHMgYmVjb21lIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgKGRlZmVjdCAxNzc3NTIpLiBBbHNvLCB0aGUgUHJvcGVydGllcyB2aWV3IHNob3dzIG5vIHByb3BlcnRpZXMgKGRlZmVjdCAxNzc3NTMpLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci08L1VMPgotCi08UD48Qj5Gb3JtYXR0aW5nIGEgRmlsZSBDcmVhdGVkIGJ5IERpZmZlcmVudCBFZGl0b3JzPC9CPjxCUj4KLTx1bD4KLTxsaT4KLUltcG9ydCB0aGUgPGI+Sm9iUG9zdGluZy5kdGQ8L2I+IGFuZCA8Yj5Kb2JEZXNjLnhtbDwvYj48L2xpPgotCi08bGk+Ci1PcGVuIHRoZSBKb2JEZXNjLnhtbC4gQ2hlY2sgdGhlIHNvdXJjZSBmb3IgaW5kZW50YXRpb24gdG8gc2VlIGlmIGl0IHByZXNlcnZlcwotdGhlIHdoaXRlIHNwYWNlIGZyb20gdGhlIG9yaWdpbmFsIGRvY3VtZW50LjwvbGk+Ci0KLTxsaT4KLVRoZSBvcmlnbmFsIGRvY3VtZW50IHVzZXMgc3BhY2VzIGFuZCB0YWJzLCBzbyB0aGUgZm9ybWF0dGluZyB3aWxsIGFwcGVhciBhIGxpdHRsZSB3cm9uZy4KLUJ5IHVzaW5nIHRoZSByaWdodC9sZWZ0IGFycm93cywgdmVyaWZ5IHRoYXQgc29tZSBzcGFjZSBpcyBzcGFjZXMgYW5kIHNvbWUgc3BhY2UKLWlzIHRhYiBjaGFyYWN0ZXJzLjwvbGk+Ci08TEk+VXNlICdmb3JtYXQgZG9jdW1lbnQnIHRvIGJlIHN1cmUgaXQgZm9ybWF0cy4gPC9MST4KLTxMST5UaGUgZGVmYXVsdCBpcyB0byBmb3JtYXQgd2l0aCBzcGFjZXMgLi4uIHZlcmlmeSBvbmx5IHNwYWNlcyByZW1haW4gaW4gZmlsZSwgbm90IHRhYiBjaGFyYWN0ZXMuIAotKEp1c3QgYSBsaXR0bGUgbW92ZW1lbnQgd2l0aCB0aGUgYXJyb3cga2V5cyBzaG91bGQgc3VmZmljZS48L0xJPgotPExJPkdvIHRvIHRoZSBwcmVmZXJlbmNlIHBhZ2UgdG8gY2hhbmdlIHRoZSBmb3JtYXQgc2V0dGluZ3MgZm9yIHRoZSBYTUwgRWRpdG9yCi10byB1c2UgdGhlIHRhYiBjaGFyYWN0ZXIgaW5zdGVhZCBvZiA0IHNwYWNlcy4gV2hpbGUgdGhlcmUsIHZlcmlmeSB0aGF0IHRoZSBkaWFsb2cKLXdpbGwgbm90IGFsbG93IG90aGVyIHZhbHVlcyB0byBiZSBpbnRlcmVkIGV4Y2VwdCAid2hpdGVzcGFjZSIgLi4uJ1x0J3MgYW5kIGJsYW5rcy4KLTwvTEk+Ci08TEk+Rm9ybWF0IHRoZSBkb2N1bWVudCBhZ2FpbiBhbmQgYmUgc3VyZSB0aGlzIHRpbWUgdGFiIGNoYXJhY3RlcnMgd2VyZSB1c2VkLjwvTEk+Ci08L3VsPgotPElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXIgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPk90aGVyIHRlc3QgY2FzZXM8L0ZPTlQ+PC9CPjwvSDI+Ci08UD48Qj5Bc3NvY2lhdGUgdGhlIFhNTCBFZGl0b3IgdG8gYSBuZXcgZmlsZSB0eXBlPC9CPjwvUD4KLTxVTD4KLSAgPExJPldpbmRvdy0mZ3Q7UHJlZmVyZW5jZXM8Qj48L0I+LjwvTEk+Ci0gIDxMST5FeHBhbmQgPEI+V29ya2JlbmNoPC9CPi48L0xJPgotICA8TEk+U2VsZWN0IDxCPkZpbGUgRWRpdG9yczwvQj4uPC9MST4KLSAgPExJPlNlbGVjdCB0aGUgPEI+QWRkPC9CPiBidXR0b24gdG8gYWRkIGEgbmV3IGZpbGUgdHlwZS48L0xJPgotICA8TEk+U3BlY2lmeSBhIGZpbGUgdHlwZSBvZiA8Qj4qLnNldDwvQj4gYW5kIHRoZW4gY2xvc2UgdGhlIEFkZCBkaWFsb2cuPC9MST4KLSAgPExJPlZlcmlmeSA8Qj4qLnNldDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIGxpc3Qgb2YgZmlsZSB0eXBlcy48L0xJPgotICA8TEk+U2VsZWN0IHRoZSA8Qj5BZGQ8L0I+IGJ1dHRvbiB0byBhc3NvY2lhdGUgdGhlIFhNTCBFZGl0b3IgdG8gdGhlIG5ldyBmaWxlIHR5cGUuPC9MST4KLSAgPExJPlNlbGVjdCA8Qj5YTUwgRWRpdG9yPC9CPiBmcm9tIHRoZSBsaXN0IG9mIGVkaXRvcnMuIFZlcmlmeSBpdCBhcHBlYXJzIHdpdGggaXRzIG93biBzcGVjaWFsIGljb24uIENsb3NlIHRoZSBkaWFsb2cuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5OT1RFOiB3YWl0aW5nIHRvIGhlYXIgYmFjayBmcm9tIE9USSBvbiBob3cgY2FuIHByZXZlbnQgMiBYTUwgRWRpdG9yIGVudHJpZXMgZnJvbSBhcHBlYXJpbmcgaW4gdGhlIGxpc3QuPC9GT05UPjwvTEk+Ci0gIDxMST5WZXJpZnkgPEI+WE1MIEVkaXRvcjwvQj4gYXBwZWFycyBhcyB0aGUgZGVmYXVsdCBlZGl0b3Igbm93IGZvciB0aGUgPEI+Ki5zZXQ8L0I+IGZpbGUgdHlwZS48L0xJPgotICA8TEk+T3BlbiA8Qj5nb3RjaGFUQ0JlYW5zLnNldDwvQj4gZnJvbSB0aGUgTmF2aWdhdG9yIHZpZXcuIFZlcmlmeSBpdCBvcGVucyB0byB0aGUgWE1MIEVkaXRvci48L0xJPgotPC9VTD4KLTxQPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5USEUgRU5EITwvRk9OVD48L1A+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9NdWx0aU5vbkRlZmF1bHQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL011bHRpTm9uRGVmYXVsdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzcyMTEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL011bHRpTm9uRGVmYXVsdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPEhFQUQ+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTYiPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9FbmNvZGluZy5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9FbmNvZGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzBlNGZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vRW5jb2RpbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9ybWFsTm9uRGVmYXVsdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9ybWFsTm9uRGVmYXVsdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTMwYzlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vcm1hbE5vbkRlZmF1bHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvbm9xdW90ZXMuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL25vcXVvdGVzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NGNkZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvbm9xdW90ZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9dGV4dC9odG1sOyBjaGFyc2V0PVVURi04PgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktNiI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MWM4ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzFlYTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbgotYmluLnByb2plY3QKLWJ1aWxkLnhtbAotaHRtbHVpdGVzdHMuamFyCi10ZW1wLmZvbGRlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlmNDAxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkOGI1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU3VuIEFwciAxNiAxNDozNzoyMSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFjNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5lbmFibGUucHJvamVjdC5yZWZhY3RvcmluZy5oaXN0b3J5PWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyNDk1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6MDU6MjkgRURUIDIwMDYKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FlMDRmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0czsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAKLUJ1bmRsZS1DbGFzc1BhdGg6IGh0bWx1aXRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMuSFRNTFVJVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLAotIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLnZpZXdlcgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWksCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLAotIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gudGV4dGVkaXRvciwKLSBvcmcuanVuaXQsCi0gb3JnLmVjbGlwc2UudWkudmlld3MsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIGNvbS5pYm0uaWN1Ci1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlYzU5ODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPk1heSAyLCAyMDA2PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjNmNTgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBodG1sdWl0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgaWNvbnMvCi1qYXJzLmNvbXBpbGUub3JkZXIgPSBodG1sdWl0ZXN0cy5qYXIKLXNvdXJjZS5odG1sdWl0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuaHRtbHVpdGVzdHMuamFyID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZWJkYjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNjE4MjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZS5vcmcKLUJ1bmRsZS1OYW1lLjAgPSBTdHJ1Y3R1cmVkIFNvdXJjZSBFZGl0b3IgZm9yIEhUTUwgVGVzdHMKLXZpZXcubmFtZS4wID0gRW1iZWRkZWQgSFRNTCBTdHJ1Y3R1cmVkIFRleHQgVmlld2VyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmOWRjYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08cGx1Z2luPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPgotCQk8dmlldwotCQkJbmFtZT0iJXZpZXcubmFtZS4wIgotCQkJaWNvbj0iJG5sJC9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmIgotCQkJY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMudmlld2VyLlZpZXdlclRlc3RIVE1MIgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLnZpZXdlci5WaWV3ZXJUZXN0SFRNTCI+Ci0JCTwvdmlldz4KLQk8L2V4dGVuc2lvbj4KLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvSFRNTFVJUHJlZmVyZW5jZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvSFRNTFVJUHJlZmVyZW5jZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNjYyYWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL0hUTUxVSVByZWZlcmVuY2VzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLmludGVybmFsLkhUTUxVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5IVE1MVUlQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOwotCi0vKioKLSAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCBpcyB0byB2ZXJpZnkgdGhlIHZhbGlkaXR5IG9mIHRoZSBIVE1MIFNvdXJjZQotICogZWRpdG9yIHByZWZlcmVuY2VzLiBUZXN0cyBpbmNsdWRlIHNldHRpbmcvZ2V0dGluZyBwcmVmZXJlbmNlcy4KLSAqIAotICogTk9URTogVGhpcyB0ZXN0IHNob3VsZCBiZSBwcmVmb3JtZWQgb24gYSBjbGVhbiB3b3Jrc3BhY2UuIElmIHBlcmZvcm1lZCBvbgotICogYW4gZXhpc3Rpbmcgd29ya3NwYWNlLCB0aGlzIHRlc3Qgd2lsbCBtYW5pcHVsYXRlIHByZWZlcmVuY2VzIGluIHRoZQotICogd29ya3NwYWNlLCB0aG91Z2ggYXR0ZW1wdHMgd2lsbCBiZSBtYWRlIHRvIHJlc3RvcmUgb3JpZ2luYWwgdmFsdWVzIGFmdGVyCi0gKiB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgSFRNTFVJUHJlZmVyZW5jZXNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRlc3RzIGV4aXN0YW5jZSBvZiBwcmVmZXJlbmNlIHZhbHVlcyB3aGVuIGdldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMKLQkgKiB0aHJvdWdoIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1bmRsZUdldFByZWZlcmVuY2VzKCkgewotCQlmaW5hbCBTdHJpbmcgYnVuZGxlTmFtZSA9ICJvcmcuZWNsaXBzZS53c3QuaHRtbC51aSI7Ci0KLQkJLy8gbmVlZCB0byBzdGFydCB1cCBidW5kbGUgZm9yIGRlZmF1bHQgdmFsdWVzIHRvIGJlIGxvYWRlZAotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGJ1bmRsZU5hbWUpOwotCQl0cnkgewotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKQotCQkJCWJ1bmRsZS5zdGFydCgpOwotCQkJZWxzZQotCQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIGNvdWxkIG5vdCBmaW5kIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUpOwotCQl9IGNhdGNoIChCdW5kbGVFeGNlcHRpb24gZSkgewotCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2Ugb2YgZXhjZXB0aW9uIHN0YXJ0aW5nIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUgKyAiIGV4Y2VwdGlvbjogIiArIGUpOwotCQl9Ci0KLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBIVE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFKTsKLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBIVE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFX0NPREUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBidW5kbGVHZXRQcmVmZXJlbmNlKFN0cmluZyBidW5kbGVOYW1lLCBTdHJpbmcgcHJlZktleSkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7IC8vIHJhbmRvbQotCQkJCQkJCQkJCQkJCQkJCQkJCS8vIHN0cmluZwotCi0JCVN0cmluZyB2YWx1ZSA9IFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpLmdldFN0cmluZyhidW5kbGVOYW1lLCBwcmVmS2V5LCBkZWZhdWx0VmFsdWUsIG51bGwpOwotCQlhc3NlcnROb3RTYW1lKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlLiBLZXk6ICIgKyBwcmVmS2V5LCBkZWZhdWx0VmFsdWUsIHZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBkZWZhdWx0IHZhbHVlcyBvZiBwcmVmZXJlbmNlcy4KLQkgKiAKLQkgKiBOT1RFOiBFeHBlY3RlZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFyZC1jb2RlZCwgc28gaWYgZGVmYXVsdCB2YWx1ZXMgZG8KLQkgKiBnZXQgY2hhbmdlZCwgYXNzZXJ0aW9ucyBuZWVkIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZXMoKSB7Ci0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBIVE1MVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCi0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKHN0b3JlLCBIVE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFLCBCb29sZWFuLnRvU3RyaW5nKHRydWUpKTsKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uoc3RvcmUsIEhUTUxVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0VfQ09ERSwgIjwiKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2UoSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXksIFN0cmluZyBleHBlY3RlZCkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gc3RvcmUuZ2V0RGVmYXVsdFN0cmluZyhwcmVmS2V5KTsKLQkJYXNzZXJ0RXF1YWxzKCJHZXQgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5LCBleHBlY3RlZCwgZGVmYXVsdFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzIGJ5IHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZSB0byBiZSBhCi0JICogY2VydGFpbiB2YWx1ZSwgdGhlbiBnZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHZhbHVlIHRvIHZlcmlmeSBpdCB3YXMgc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5TZXRQcmVmZXJlbmNlcygpIHsKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IEhUTUxVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0KLQkJcGx1Z2luU2V0UHJlZmVyZW5jZUJvb2xlYW4oc3RvcmUsIEhUTUxVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0UpOwotCQlwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKHN0b3JlLCBIVE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFX0NPREUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihJUHJlZmVyZW5jZVN0b3JlIHN0b3JlLCBTdHJpbmcgcHJlZktleSkgewotCQlib29sZWFuIG9yaWdpbmFsVmFsdWUgPSBzdG9yZS5nZXRCb29sZWFuKHByZWZLZXkpOwotCQlib29sZWFuIGV4cGVjdGVkVmFsdWUgPSAhb3JpZ2luYWxWYWx1ZTsKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCWJvb2xlYW4gZm91bmRWYWx1ZSA9IHN0b3JlLmdldEJvb2xlYW4ocHJlZktleSk7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXkgKyAiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgb3JpZ2luYWxWYWx1ZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpblNldFByZWZlcmVuY2VTdHJpbmcoSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJU3RyaW5nIG9yaWdpbmFsVmFsdWUgPSBzdG9yZS5nZXRTdHJpbmcocHJlZktleSk7Ci0JCVN0cmluZyBleHBlY3RlZFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7IC8vIHJhbmRvbQotCQkJCQkJCQkJCQkJCQkJCQkJCS8vIHN0cmluZwotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJU3RyaW5nIGZvdW5kVmFsdWUgPSBzdG9yZS5nZXRTdHJpbmcocHJlZktleSk7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXkgKyAiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgb3JpZ2luYWxWYWx1ZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL0hUTUxVSVRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL0hUTUxVSVRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzUzNjkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9IVE1MVUlUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy52aWV3ZXIuVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotCi0KLXB1YmxpYyBjbGFzcyBIVE1MVUlUZXN0U3VpdGUgZXh0ZW5kcyBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgSFRNTFVJVGVzdFN1aXRlKCk7Ci0JfQotCi0JcHVibGljIEhUTUxVSVRlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIkhUTUwgVUkgVGVzdFN1aXRlIik7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShWZXJpZnlFZGl0b3JQbHVnaW4uY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEhUTUxVSVByZWZlcmVuY2VzVGVzdC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkhUTUwuY2xhc3MpKTsKLQkJLy8JCWFkZFRlc3QobmV3IFNTRU1vZGVsVGVzdFN1aXRlKCkpOwotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9IVE1MVUlUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL0hUTUxVSVRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlY2FlYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL0hUTUxVSVRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgSFRNTFVJVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBIVE1MVUlUZXN0c1BsdWdpbiBwbHVnaW47Ci0JLy9SZXNvdXJjZSBidW5kbGUuCi0JcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZUJ1bmRsZTsKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgSFRNTFVJVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JCXRyeSB7Ci0JCQlyZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMuU1NFRm9ySFRNTFRlc3RzUGx1Z2luUmVzb3VyY2VzIik7Ci0JCX0KLQkJY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiB4KSB7Ci0JCQlyZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBIVE1MVUlUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gSFRNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsKSA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9Mb2dnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9Mb2dnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVjNTNhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0czsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBTbWFsbCBjb252ZW5pZW5jZSBjbGFzcyB0byBsb2cgbWVzc2FnZXMgdG8gcGx1Z2luJ3MgbG9nIGZpbGUgYW5kIGFsc28sIGlmIGRlc2lyZWQsCi0gKiB0aGUgY29uc29sZS4gVGhpcyBjbGFzcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGNsYXNzZXMgaW4gdGhpcyBwbHVnaW4uIE90aGVyCi0gKiBwbHVnaW5zIHNob3VsZCBtYWtlIHRoZWlyIG93biBjb3B5LCB3aXRoIGFwcHJvcHJpYXRlIElELgotICovCi1wdWJsaWMgY2xhc3MgTG9nZ2VyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNFRklMVEVSX0xPQ0FUSU9OID0gIi9kZWJ1Zy90cmFjZWZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gSVN0YXR1cy5PSzsgLy8gMAotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk8gPSBJU3RhdHVzLklORk87IC8vIDEKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gSVN0YXR1cy5XQVJOSU5HOyAvLyAyCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSBJU3RhdHVzLkVSUk9SOyAvLyA0Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19ERUJVRyA9IDIwMCArIE9LOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fREVCVUcgPSAyMDAgKyBJTkZPOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkdfREVCVUcgPSAyMDAgKyBXQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RFQlVHID0gMjAwICsgRVJST1I7Ci0KLQkvKioKLQkgKiBBZGRzIG1lc3NhZ2UgdG8gbG9nLgotCSAqIEBwYXJhbSBsZXZlbCBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoT0ssIElORk8sIFdBUk5JTkcsIEVSUk9SLCBPS19ERUJVRywgSU5GT19ERUJVRywgV0FSTklOR19ERUJVRywgRVJST1JfREVCVUcpCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBhZGQgdG8gdGhlIGxvZwotCSAqIEBwYXJhbSBleGNlcHRpb24gZXhjZXB0aW9uIHRocm93bgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGxldmVsID09IE9LX0RFQlVHIHx8IGxldmVsID09IElORk9fREVCVUcgfHwgbGV2ZWwgPT0gV0FSTklOR19ERUJVRyB8fCBsZXZlbCA9PSBFUlJPUl9ERUJVRykgewotCQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJCXJldHVybjsKLQkJfQotCi0JCWludCBzZXZlcml0eSA9IElTdGF0dXMuT0s7Ci0JCXN3aXRjaCAobGV2ZWwpIHsKLQkJCWNhc2UgSU5GT19ERUJVRyA6Ci0JCQljYXNlIElORk8gOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5JTkZPOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXQVJOSU5HX0RFQlVHIDoKLQkJCWNhc2UgV0FSTklORyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLldBUk5JTkc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEVSUk9SX0RFQlVHIDoKLQkJCWNhc2UgRVJST1IgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5FUlJPUjsKLQkJfQotCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKHNldmVyaXR5LCBQTFVHSU5fSUQsIHNldmVyaXR5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQl9Ci0KLQkvKioKLQkgKiBQcmludHMgbWVzc2FnZSB0byBsb2cgaWYgY2F0ZWdvcnkgbWF0Y2hlcyAvZGVidWcvdHJhY2VmaWx0ZXIgb3B0aW9uLgotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gcHJpbnQKLQkgKiBAcGFyYW0gY2F0ZWdvcnkgY2F0ZWdvcnkgb2YgdGhlIG1lc3NhZ2UsIHRvIGJlIGNvbXBhcmVkIHdpdGggL2RlYnVnL3RyYWNlZmlsdGVyCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF90cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChpc1RyYWNpbmcoY2F0ZWdvcnkpKSB7Ci0JCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBQTFVHSU5fSUQsIElTdGF0dXMuT0ssIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybSBpcyBkZWJ1Z2dpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEZWJ1Z2dpbmcoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybS5pbkRlYnVnTW9kZSgpOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgaWYgY3VycmVudGx5IHRyYWNpbmcgYSBjYXRlZ29yeQotCSAqIEBwYXJhbSBjYXRlZ29yeQotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0cmFjaW5nIGNhdGVnb3J5LCBmYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcmFjaW5nKFN0cmluZyBjYXRlZ29yeSkgewotCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIHRyYWNlRmlsdGVyID0gUGxhdGZvcm0uZ2V0RGVidWdPcHRpb24oUExVR0lOX0lEICsgVFJBQ0VGSUxURVJfTE9DQVRJT04pOwotCQlpZiAodHJhY2VGaWx0ZXIgIT0gbnVsbCkgewotCQkJU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhY2VGaWx0ZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJU3RyaW5nIGNhdCA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7Ci0JCQkJaWYgKGNhdGVnb3J5LmVxdWFscyhjYXQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uSFRNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uSFRNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzM3OGQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkhUTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKiAKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS52aWV3cy5jb250ZW50b3V0bGluZS5IVE1MQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnZpZXdzLnByb3BlcnRpZXMuWE1MUHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb247Ci0KLS8qKgotICogVGVzdHMgcmV0cmlldmluZyBlZGl0b3IgY29udHJpYnV0aW9ucyBmb3IgaHRtbCBjb250ZW50IHR5cGUKLSAqLwotcHVibGljIGNsYXNzIFRlc3RFZGl0b3JDb25maWd1cmF0aW9uSFRNTCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U291cmNlVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLlNPVVJDRVZJRVdFUkNPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIHNvdXJjZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwsIG8uZ2V0Q2xhc3MoKSwgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRPdXRsaW5lVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLkNPTlRFTlRPVVRMSU5FQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gY29udGVudCBvdXRsaW5lIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MLCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCwgby5nZXRDbGFzcygpLCBIVE1MQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5QUk9QRVJUWVNIRUVUQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gcHJvcGVydHkgc2hlZXQgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBwcm9wZXJ0eSBzaGVldCBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MLCBvLmdldENsYXNzKCksIFhNTFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvVmVyaWZ5RWRpdG9yUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvVmVyaWZ5RWRpdG9yUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYTBiYmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL1ZlcmlmeUVkaXRvclBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKLSAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMKLSAqIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZAotICogaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkuaW50ZXJuYWwuSFRNTFVJUGx1Z2luOwotCi0KLXB1YmxpYyBjbGFzcyBWZXJpZnlFZGl0b3JQbHVnaW4gZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luRXhpc3RzKCkgewotCQkvLyBUT0RPOiBzZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTgxNTI3Ci0JCWFzc2VydFRydWUodHJ1ZSk7Ci0JCVBsdWdpbiBwbHVnaW4gPSBudWxsOwotCQl0cnkgewotCQkJcGx1Z2luID0gSFRNTFVJUGx1Z2luLmdldEluc3RhbmNlKCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlwbHVnaW4gPSBudWxsOwotCQl9Ci0JCWFzc2VydE5vdE51bGwoImVkaXRvciBwbHVnaW4gY291bGQgbm90IGJlIGluc3RhbnRpYXRlZCIsIHBsdWdpbik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxOTcyMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLnZpZXdlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUF1dG9FZGl0U3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0RG91YmxlQ2xpY2tTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0SG92ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0YW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuZm9ybWF0dGVyLklDb250ZW50Rm9ybWF0dGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuaHlwZXJsaW5rLklIeXBlcmxpbmtEZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmluZm9ybWF0aW9uLklJbmZvcm1hdGlvblByZXNlbnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJlY29uY2lsZXIuSVJlY29uY2lsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUFubm90YXRpb25Ib3ZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXh0LklIVE1MUGFydGl0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLkxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXI7Ci0KLS8qKgotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uSFRNTCBleHRlbmRzIFRlc3RDYXNlIHsKLSAgICAKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwgZkNvbmZpZyA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGZEaXNwbGF5RXhpc3RzID0gdHJ1ZTsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyIGZWaWV3ZXIgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0JCi0gICAgcHVibGljIFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uSFRNTCgpIHsKLSAgICAgICAgc3VwZXIoIlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uSFRNTCIpOwotICAgIH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLSAgICAJc3VwZXIuc2V0VXAoKTsKLQkJaWYoIXRoaXMuaXNTZXR1cCl7Ci0JCQlzZXRVcFZpZXdlckNvbmZpZ3VyYXRpb24oKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLSAgICB9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQotCQlpZihEaXNwbGF5LmdldEN1cnJlbnQoKSAhPSBudWxsKSB7Ci0JCQkKLQkJCVNoZWxsIHNoZWxsID0gbnVsbDsKLQkJCUNvbXBvc2l0ZSBwYXJlbnQgPSBudWxsOwotCQkJCi0JCQlpZihQbGF0Zm9ybVVJLmlzV29ya2JlbmNoUnVubmluZygpKSB7Ci0JCQkJc2hlbGwgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0JCQl9Ci0JCQllbHNlIHsJCi0JCQkJc2hlbGwgPSBuZXcgU2hlbGwoRGlzcGxheS5nZXRDdXJyZW50KCkpOwotCQkJfQotCQkJcGFyZW50ID0gbmV3IENvbXBvc2l0ZShzaGVsbCwgU1dULk5PTkUpOwotCQkJCi0JCQkvLyBkdW1teSB2aWV3ZXIKLQkJCWZWaWV3ZXIgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXIocGFyZW50LCBudWxsLCBudWxsLCBmYWxzZSwgU1dULk5PTkUpOwotCQkJZkNvbmZpZyA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlmRGlzcGxheUV4aXN0cyA9IGZhbHNlOwotCQkJTG9nZ2VyLmxvZyhMb2dnZXIuSU5GTywgIlJlbWVtYmVyLCB2aWV3ZXIgY29uZmlndXJhdGlvbiB0ZXN0cyBhcmUgbm90IHJ1biBiZWNhdXNlIHdvcmtiZW5jaCBpcyBub3Qgb3BlbiAobm9ybWFsIG9uIGJ1aWxkIG1hY2hpbmUpIik7Ci0JCX0KLQl9Ci0gICAgCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRBbm5vdGF0aW9uSG92ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlBbm5vdGF0aW9uSG92ZXIgaG92ZXIgPSBmQ29uZmlnLmdldEFubm90YXRpb25Ib3ZlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiQW5ub3RhdGlvbkhvdmVyIGlzIG51bGwiLCBob3Zlcik7Ci0gICAgfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRBdXRvRWRpdFN0cmF0ZWdpZXMoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlBdXRvRWRpdFN0cmF0ZWd5W10gc3RyYXRlZ2llcyA9IGZDb25maWcuZ2V0QXV0b0VkaXRTdHJhdGVnaWVzKGZWaWV3ZXIsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQpOwotCQlhc3NlcnROb3ROdWxsKHN0cmF0ZWdpZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gYXV0byBlZGl0IHN0cmF0ZWdpZXMiLCBzdHJhdGVnaWVzLmxlbmd0aD4wKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoY29uZmlndXJlZENvbnRlbnRUeXBlcyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGNvbnRlbnQgdHlwZXMiLCBjb25maWd1cmVkQ29udGVudFR5cGVzLmxlbmd0aCA+IDEpOwotCX0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRBc3Npc3RhbnQoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlDb250ZW50QXNzaXN0YW50IGNhID0gZkNvbmZpZy5nZXRDb250ZW50QXNzaXN0YW50KGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBpcyBubyBjb250ZW50IGFzc2lzdGFudCIsIGNhKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRGb3JtYXR0ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlDb250ZW50Rm9ybWF0dGVyIGNmID0gZkNvbmZpZy5nZXRDb250ZW50Rm9ybWF0dGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBpcyBubyBjb250ZW50IGZvcm1hdHRlciIsIGNmKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldERvdWJsZUNsaWNrU3RyYXRlZ3koKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0RG91YmxlQ2xpY2tTdHJhdGVneSBzdHJhdGVneSA9IGZDb25maWcuZ2V0RG91YmxlQ2xpY2tTdHJhdGVneShmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYoc3RyYXRlZ3kgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBkb3VibGUgY2xpY2sgc3RyYXRlZ2llcyIsIGZhbHNlKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldEh5cGVybGlua0RldGVjdG9ycygpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUh5cGVybGlua0RldGVjdG9yW10gZGV0ZWN0b3JzID0gZkNvbmZpZy5nZXRIeXBlcmxpbmtEZXRlY3RvcnMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGFyZSBubyBoeXBlcmxpbmsgZGV0ZWN0b3JzIiwgZGV0ZWN0b3JzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGh5cGVybGluayBkZXRlY3RvcnMiLCBkZXRlY3RvcnMubGVuZ3RoID4gMSk7Ci0JfQotCQotICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRJbmRlbnRQcmVmaXhlcygpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlTdHJpbmcgcHJlZml4ZXNbXSA9IGZDb25maWcuZ2V0SW5kZW50UHJlZml4ZXMoZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmKHByZWZpeGVzICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgaW5kZW50IHByZWZpeGVzIiwgZmFsc2UpOwotCX0KLSAgICAKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0gICAgcHVibGljIHZvaWQgdGVzdEdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IgaW5mb0NyZWF0b3IgPSBmQ29uZmlnLmdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IgaXMgbnVsbCIsIGluZm9DcmVhdG9yKTsKLSAgICB9Ci0JCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbmZvcm1hdGlvblByZXNlbnRlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUluZm9ybWF0aW9uUHJlc2VudGVyIHByZXNlbnRlciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25QcmVzZW50ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkluZm9ybWF0aW9uUHJlc2VudGVyIGlzIG51bGwiLCBwcmVzZW50ZXIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TGluZVN0eWxlUHJvdmlkZXJzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUxpbmVTdHlsZVByb3ZpZGVyIHByb3ZpZGVyc1tdID0gZkNvbmZpZy5nZXRMaW5lU3R5bGVQcm92aWRlcnMoZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmKHByb3ZpZGVycyAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGxpbmUgc3R5bGUgcHJvdmlkZXJzIiwgZmFsc2UpOwotCX0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldFJlY29uY2lsZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlSZWNvbmNpbGVyIHIgPSBmQ29uZmlnLmdldFJlY29uY2lsZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIlJlY29uY2lsZXIgaXMgbnVsbCIsIHIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VGV4dEhvdmVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gaG92ZXJQYXJ0aXRpb25zID0gbmV3IFN0cmluZ1tde0lIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElIVE1MUGFydGl0aW9ucy5TQ1JJUFR9OwotCQlmb3IgKGludCBpID0gMDsgaSA8IGhvdmVyUGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJSVRleHRIb3ZlciBob3ZlciA9IGZDb25maWcuZ2V0VGV4dEhvdmVyKGZWaWV3ZXIsIGhvdmVyUGFydGl0aW9uc1tpXSwgU1dULk5PTkUpOwotCQkJYXNzZXJ0Tm90TnVsbCgiaG92ZXIgd2FzIG51bGwgZm9yIHBhcnRpdGlvbjogIiArIGhvdmVyUGFydGl0aW9uc1tpXSwgaG92ZXIpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL3ZpZXdlci9WaWV3ZXJUZXN0SFRNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL3ZpZXdlci9WaWV3ZXJUZXN0SFRNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTIwMWNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdEhUTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLnZpZXdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSkZhY2VSZXNvdXJjZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQnVzeUluZGljYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklNZW1lbnRvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3U2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JIVE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLkluZGV4ZWRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotCi1wdWJsaWMgY2xhc3MgVmlld2VyVGVzdEhUTUwgZXh0ZW5kcyBWaWV3UGFydCB7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU1NFX0VESVRPUl9GT05UID0gIm9yZy5lY2xpcHNlLndzdC5zc2UudWkudGV4dGZvbnQiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfVklFV0VSX0NPTlRFTlRTID0gIjwhRE9DVFlQRSBIVE1MIFBVQkxJQyBcIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOXCI+XG48SFRNTD5cbgk8SEVBRD5cbgkJPE1FVEEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMVwiPlxuCQk8VElUTEU+cGxhY2UgdGl0bGUgaGVyZTwvVElUTEU+XG4JPC9IRUFEPlxuCTxCT0RZPlxuCQlwbGFjZSBjb250ZW50IGhlcmUJXG48c2NyaXB0PlxuXCJ0ZXh0XCI7XG48L1NDUklQVD5cbjwvQk9EWT5cbjwvSFRNTD4iOwotCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlciBmU291cmNlVmlld2VyID0gbnVsbDsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbiBmQ29uZmlnID0gbnVsbDsKLQlwcml2YXRlIElDb250ZW50T3V0bGluZVBhZ2UgZkNvbnRlbnRPdXRsaW5lUGFnZSA9IG51bGw7Ci0JcHJpdmF0ZSBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID0gbnVsbDsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZpZXdlcidzIGhpZ2hsaWdodGluZyB0ZXh0IHJhbmdlIHRvIHRoZSB0ZXh0IHJhbmdlIGluZGljYXRlZAotCSAqIGJ5IHRoZSBzZWxlY3RlZCBOb2Rlcy4KLQkgKi8KLQlwcm90ZWN0ZWQgY2xhc3MgTm9kZVJhbmdlU2VsZWN0aW9uTGlzdGVuZXIgaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKLQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKLQkJCWlmICghZXZlbnQuZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpICYmIGV2ZW50LmdldFNlbGVjdGlvbigpIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGV2ZW50LmdldFNlbGVjdGlvbigpOwotCQkJCUluZGV4ZWRSZWdpb24gc3RhcnROb2RlID0gKEluZGV4ZWRSZWdpb24pIHNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJCQlJbmRleGVkUmVnaW9uIGVuZE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgc2VsZWN0aW9uLnRvQXJyYXkoKVtzZWxlY3Rpb24uc2l6ZSgpIC0gMV07Ci0KLQkJCQlpZiAoc3RhcnROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJc3RhcnROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgc3RhcnROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQkJCQlpZiAoZW5kTm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0JCQkJCWVuZE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBlbmROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQotCQkJCWludCBzdGFydCA9IHN0YXJ0Tm9kZS5nZXRTdGFydE9mZnNldCgpOwotCQkJCWludCBlbmQgPSBlbmROb2RlLmdldEVuZE9mZnNldCgpOwotCi0JCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLQkJCQlmU291cmNlVmlld2VyLnNldFNlbGVjdGVkUmFuZ2Uoc3RhcnQsIDApOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCX0KLQkJfQotCX0KLQotCXByb3RlY3RlZCBjbGFzcyBOdW1iZXJJbnB1dERpYWxvZyBleHRlbmRzIERpYWxvZyB7Ci0JCXB1YmxpYyBOdW1iZXJJbnB1dERpYWxvZyhTaGVsbCBzaGVsbCkgewotCQkJc3VwZXIoc2hlbGwpOwotCQl9Ci0KLQkJcHVibGljIFRleHQgc3RhcnQ7Ci0JCWludCBzdGFydFZhbHVlOwotCQlwdWJsaWMgVGV4dCBsZW5ndGg7Ci0JCWludCBsZW5ndGhWYWx1ZTsKLQotCQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0JCQlDb21wb3NpdGUgY29udGFpbmVyID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsIFNXVC5OVUxMKTsKLQkJCWNvbnRhaW5lci5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQkJCWNvbnRhaW5lci5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMiwgdHJ1ZSkpOwotCQkJc2V0U2hlbGxTdHlsZShnZXRTaGVsbCgpLmdldFN0eWxlKCkgfCBTV1QuUkVTSVpFKTsKLQotCQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoY29udGFpbmVyLCBTV1QuTlVMTCk7Ci0JCQlsYWJlbC5zZXRUZXh0KCJTdGFydCIpOwotCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCWxhYmVsID0gbmV3IExhYmVsKGNvbnRhaW5lciwgU1dULk5VTEwpOwotCQkJbGFiZWwuc2V0VGV4dCgiTGVuZ3RoIik7Ci0JCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQotCQkJc3RhcnQgPSBuZXcgVGV4dChjb250YWluZXIsIFNXVC5CT1JERVIpOwotCQkJc3RhcnRWYWx1ZSA9IGZTb3VyY2VWaWV3ZXIuZ2V0VmlzaWJsZVJlZ2lvbigpLmdldE9mZnNldCgpOwotCQkJc3RhcnQuc2V0VGV4dCgiIiArIHN0YXJ0VmFsdWUpOwotCQkJc3RhcnQuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCWxlbmd0aCA9IG5ldyBUZXh0KGNvbnRhaW5lciwgU1dULkJPUkRFUik7Ci0JCQlsZW5ndGhWYWx1ZSA9IGZTb3VyY2VWaWV3ZXIuZ2V0VmlzaWJsZVJlZ2lvbigpLmdldExlbmd0aCgpOwotCQkJbGVuZ3RoLnNldFRleHQoIiIgKyBsZW5ndGhWYWx1ZSk7Ci0JCQlsZW5ndGguc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCS8vCQkJc3RhcnQuYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgewotCQkJLy8JCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7Ci0JCQkvLwkJCQkJaWYgKGUud2lkZ2V0ID09IHN0YXJ0KSB7Ci0JCQkvLwkJCQkJCXRyeSB7Ci0JCQkvLwkJCQkJCQlzdGFydFZhbHVlID0gSW50ZWdlci5kZWNvZGUoc3RhcnQuZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJLy8JCQkJCQl9Ci0JCQkvLwkJCQkJCWNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCS8vCQkJCQkJCXN0YXJ0VmFsdWUgPSAwOwotCQkJLy8JCQkJCQl9Ci0JCQkvLwkJCQkJfQotCQkJLy8JCQkJfQotCQkJLy8JCQl9KTsKLQkJCS8vCQkJbGVuZ3RoLmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCS8vCQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJLy8JCQkJCWlmIChlLndpZGdldCA9PSBsZW5ndGgpIHsKLQkJCS8vCQkJCQkJdHJ5IHsKLQkJCS8vCQkJCQkJCWxlbmd0aFZhbHVlID0gSW50ZWdlci5kZWNvZGUobGVuZ3RoLmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCS8vCQkJCQkJfQotCQkJLy8JCQkJCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkvLwkJCQkJCQlsZW5ndGhWYWx1ZSA9IDA7Ci0JCQkvLwkJCQkJCX0KLQkJCS8vCQkJCQl9Ci0JCQkvLwkJCQl9Ci0JCQkvLwkJCX0pOwotCi0JCQlyZXR1cm4gY29tcG9zaXRlOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZyNva1ByZXNzZWQoKQotCQkgKi8KLQkJcHJvdGVjdGVkIHZvaWQgb2tQcmVzc2VkKCkgewotCQkJdHJ5IHsKLQkJCQlzdGFydFZhbHVlID0gSW50ZWdlci5kZWNvZGUoc3RhcnQuZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJfQotCQkJY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJCXN0YXJ0VmFsdWUgPSAwOwotCQkJfQotCQkJdHJ5IHsKLQkJCQlsZW5ndGhWYWx1ZSA9IEludGVnZXIuZGVjb2RlKGxlbmd0aC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkJbGVuZ3RoVmFsdWUgPSAwOwotCQkJfQotCQkJc3VwZXIub2tQcmVzc2VkKCk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBhZGRBY3Rpb25zKElDb250cmlidXRpb25NYW5hZ2VyIG1ncikgewotCQlpZiAobWdyICE9IG51bGwpIHsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiTmV3IEhUTUwiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCUJ1c3lJbmRpY2F0b3Iuc2hvd1doaWxlKGdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKSwgbmV3IFJ1bm5hYmxlKCkgewotCQkJCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQkJCXNldHVwVmlld2VyRm9yTmV3KCk7Ci0JCQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQkJCX0KLQkJCQkJfSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIkNoYW5nZSBWaXNpYmlsaXR5IjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlOdW1iZXJJbnB1dERpYWxvZyBkbGcgPSBuZXcgTnVtYmVySW5wdXREaWFsb2coZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuZ2V0U2hlbGwoKSk7Ci0JCQkJCWludCBwcm9jZWVkID0gZGxnLm9wZW4oKTsKLQkJCQkJaWYgKHByb2NlZWQgPT0gV2luZG93LkNBTkNFTCkKLQkJCQkJCXJldHVybjsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKGRsZy5zdGFydFZhbHVlLCBkbGcubGVuZ3RoVmFsdWUpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTaG93IEFsbCI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJCS8vIG5vIGxvbmdlciBhYmxlIHRvIHNldCBpbnB1dCB0byBOVUxMCi0JCQkvLwkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCS8vCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCS8vCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCS8vCQkJCX0KLQkJCS8vCi0JCQkvLwkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJLy8JCQkJCXJldHVybiAiU2V0IElucHV0IHRvIE5VTEwiOwotCQkJLy8JCQkJfQotCQkJLy8JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJLy8JCQkJCXN1cGVyLnJ1bigpOwotCQkJLy8JCQkJCXZpZXdlci5zZXRJbnB1dChudWxsKTsKLQkJCS8vCQkJCX0KLQkJCS8vCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgZnJvbSBBY3RpdmUgRWRpdG9yIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJCWlmICh0ZXh0RWRpdG9yICE9IG51bGwpIHsKLQkJCQkJCXNldHVwVmlld2VyRm9yRWRpdG9yKHRleHRFZGl0b3IpOwotCQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGFuZCBGb2xsb3cgU2VsZWN0aW9uIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBhbmQgRm9sbG93IFNlbGVjdGlvbiBBcyBSZWFkT25seSI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUoZmFsc2UpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTdG9wIEZvbGxvd2luZyBTZWxlY3Rpb24iOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlKQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWdyID0gZ2V0Vmlld1NpdGUoKS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKTsKLQkJYWRkQWN0aW9ucyhtZ3IpOwotCi0JCS8vIGNyZWF0ZSBzb3VyY2Ugdmlld2VyICYgaXRzIGNvbnRlbnQgdHlwZS1zcGVjaWZpYyB2aWV3ZXIKLQkJLy8gY29uZmlndXJhdGlvbgotCQlmU291cmNlVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJZkNvbmZpZyA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MKCk7Ci0KLQkJLy8gc2V0IHVwIHRoZSB2aWV3ZXIgd2l0aCBhIGRvY3VtZW50ICYgdmlld2VyIGNvbmZpZwotCQlzZXR1cFZpZXdlckZvck5ldygpOwotCi0JCXNldHVwVmlld2VyUHJlZmVyZW5jZXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2Rpc3Bvc2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsKLQkJZlNvdXJjZVZpZXdlci51bmNvbmZpZ3VyZSgpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgewotCQlpZiAoZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkgIT0gbnVsbCAmJiAhZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKQotCQkJZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuc2V0Rm9jdXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklWaWV3UGFydCNpbml0KElWaWV3U2l0ZSwgSU1lbWVudG8pCi0JICovCi0JcHVibGljIHZvaWQgaW5pdChJVmlld1NpdGUgc2l0ZSwgSU1lbWVudG8gbWVtZW50bykgdGhyb3dzIFBhcnRJbml0RXhjZXB0aW9uIHsKLQkJc3VwZXIuaW5pdChzaXRlLCBtZW1lbnRvKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdXAgc291cmNlIHZpZXdlciB3aXRoIGFueSBhZGRpdGlvbmFsIHByZWZlcmVuY2VzIGl0IHNob3VsZCBoYXZlIEV4OgotCSAqIGZvbnQsIHRhYiB3aWR0aAotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cFZpZXdlclByZWZlcmVuY2VzKCkgewotCQlmU291cmNlVmlld2VyLmdldFRleHRXaWRnZXQoKS5zZXRGb250KEpGYWNlUmVzb3VyY2VzLmdldEZvbnQoU1NFX0VESVRPUl9GT05UKSk7Ci0JfQotCi0JLyoqCi0JICogU2V0IHVwIHNvdXJjZSB2aWV3ZXIgd2l0aCBhIG5ldyBkb2N1bWVudCAmIGNvbmZpZ3VyZSBpdAotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cFZpZXdlckZvck5ldygpIHsKLQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOyAvLyBpZiB3YXMgZm9sbG93aW5nIHNlbGVjdGlvbiwgc3RvcAotCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSURvY3VtZW50IGRvYyA9IG1vZGVsTWFuYWdlci5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MKTsKLQkJZG9jLnNldChERUZBVUxUX1ZJRVdFUl9DT05URU5UUyk7Ci0KLQkJZlNvdXJjZVZpZXdlci5zZXREb2N1bWVudChkb2MpOwotCQkvLyBuZWVkIHRvIHJlY29uZmlndXJlIGFmdGVyIHNldCBkb2N1bWVudCBqdXN0IHNvIGhpZ2hsaWdodGVyIHdvcmtzCi0JCWZTb3VyY2VWaWV3ZXIuY29uZmlndXJlKGZDb25maWcpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGN1cnJlbnQgYWN0aXZlIHRleHQgZWRpdG9yIGlmIHBvc3NpYmxlCi0JICogCi0JICogQHJldHVybiBJVGV4dEVkaXRvcgotCSAqLwotCXByaXZhdGUgSVRleHRFZGl0b3IgZ2V0QWN0aXZlRWRpdG9yKCkgewotCQlJVGV4dEVkaXRvciBlZGl0b3IgPSBudWxsOwotCQlJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJaWYgKGVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVGV4dEVkaXRvcikKLQkJCWVkaXRvciA9IChJVGV4dEVkaXRvcikgZWRpdG9yUGFydDsKLQkJaWYgKGVkaXRvciA9PSBudWxsICYmIGVkaXRvclBhcnQgIT0gbnVsbCkKLQkJCWVkaXRvciA9IChJVGV4dEVkaXRvcikgZWRpdG9yUGFydC5nZXRBZGFwdGVyKElUZXh0RWRpdG9yLmNsYXNzKTsKLQkJcmV0dXJuIGVkaXRvcjsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHVwIHRoZSB2aWV3ZXIgd2l0aCB0aGUgc2FtZSBkb2N1bWVudC9pbnB1dCBhcyB0aGUgZ2l2ZW4gZWRpdG9yCi0JICogCi0JICogQHBhcmFtIElUZXh0RWRpdG9yCi0JICogICAgICAgICAgICBlZGl0b3IgLSB0aGUgZWRpdG9yIHRvIHVzZSAqY2Fubm90IHRvIGJlIG51bGwqCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwVmlld2VyRm9yRWRpdG9yKElUZXh0RWRpdG9yIGVkaXRvcikgewotCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7IC8vIGlmIHdhcyBmb2xsb3dpbmcgc2VsZWN0aW9uLCBzdG9wCi0JCUlEb2N1bWVudCBkb2MgPSBlZGl0b3IuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldERvY3VtZW50KGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpKTsKLQkJZlNvdXJjZVZpZXdlci5zZXREb2N1bWVudChkb2MpOwotCi0JCS8vIG5lZWQgdG8gcmVjb25maWd1cmUgYWZ0ZXIgc2V0IGRvY3VtZW50IGp1c3Qgc28gaGlnaGxpZ2h0ZXIgd29ya3MKLQkJZlNvdXJjZVZpZXdlci5jb25maWd1cmUobmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwoKSk7Ci0JfQotCi0JLyoqCi0JICogSG9va3MgdXAgdGhlIHZpZXdlciB0byBmb2xsb3cgdGhlIHNlbGVjdGlvbiBtYWRlIGluIHRoZSBhY3RpdmUgZWRpdG9yCi0JICovCi0JcHJpdmF0ZSB2b2lkIGZvbGxvd1NlbGVjdGlvbigpIHsKLQkJSVRleHRFZGl0b3IgZWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCWlmIChlZGl0b3IgIT0gbnVsbCkgewotCQkJc2V0dXBWaWV3ZXJGb3JFZGl0b3IoZWRpdG9yKTsKLQkJCWlmIChmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9PSBudWxsKQotCQkJCWZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID0gbmV3IE5vZGVSYW5nZVNlbGVjdGlvbkxpc3RlbmVyKCk7Ci0KLQkJCWZDb250ZW50T3V0bGluZVBhZ2UgPSAoKElDb250ZW50T3V0bGluZVBhZ2UpIGVkaXRvci5nZXRBZGFwdGVyKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKTsKLQkJCWlmIChmQ29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKLQkJCQlmQ29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lcik7Ci0KLQkJCQlpZiAoIWZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpICYmIGZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCi0JCQkJCU9iamVjdFtdIG5vZGVzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZkNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSkudG9BcnJheSgpOwotCQkJCQlJbmRleGVkUmVnaW9uIHN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSBub2Rlc1swXTsKLQkJCQkJSW5kZXhlZFJlZ2lvbiBlbmROb2RlID0gKEluZGV4ZWRSZWdpb24pIG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdOwotCi0JCQkJCWlmIChzdGFydE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQkJc3RhcnROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgc3RhcnROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQkJCQkJaWYgKGVuZE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQkJZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIGVuZE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCi0JCQkJCWludCBzdGFydCA9IHN0YXJ0Tm9kZS5nZXRTdGFydE9mZnNldCgpOwotCQkJCQlpbnQgZW5kID0gZW5kTm9kZS5nZXRFbmRPZmZzZXQoKTsKLQotCQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRTZWxlY3RlZFJhbmdlKHN0YXJ0LCAwKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDZWFzZSBmb2xsb3dpbmcgdGhlIHNlbGVjdGlvbiBtYWRlIGluIHRoZSBlZGl0b3IKLQkgKi8KLQlwcml2YXRlIHZvaWQgc3RvcEZvbGxvd1NlbGVjdGlvbigpIHsKLQkJaWYgKGZDb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgewotCQkJZkNvbnRlbnRPdXRsaW5lUGFnZS5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIpOwotCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCWZDb250ZW50T3V0bGluZVBhZ2UgPSBudWxsOwotCQl9Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFlMWYzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdAotCW5hbWU9InRlc3RzdWl0ZSIKLQlkZWZhdWx0PSJydW4iCi0JYmFzZWRpcj0iLiI+Ci0JPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLQk8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotCTwhLS0gPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iIC8+IC0tPgotCi0JPGVjaG8gbWVzc2FnZT0iYmFzZWRpciAke2Jhc2VkaXJ9IiAvPgotCTxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UgcGxhY2UgJHtlY2xpcHNlLWhvbWV9IiAvPgotCi0JPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIHBsdWdpbi1uYW1lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzIiAvPgotCTxwcm9wZXJ0eQotCQluYW1lPSJsaWJyYXJ5LWZpbGUiCi0JCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLQkJPHRzdGFtcCAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQKLQkJCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLQkJCQlpbmNsdWRlcz0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMuKnhtbCIgLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotCTx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCQk8cHJvcGVydHkKLQkJCW5hbWU9IndzdC1mb2xkZXIiCi0JCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dzdF9mb2xkZXIiIC8+Ci0JCTxkZWxldGUKLQkJCWRpcj0iJHt3c3QtZm9sZGVyfSIKLQkJCXF1aWV0PSJ0cnVlIiAvPgotCQk8YW50Ci0JCQl0YXJnZXQ9InVpLXRlc3QiCi0JCQlhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0JCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJkYXRhLWRpciIKLQkJCQl2YWx1ZT0iJHt3c3QtZm9sZGVyfSIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9InBsdWdpbi1uYW1lIgotCQkJCXZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImNsYXNzbmFtZSIKLQkJCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMuSFRNTFVJVGVzdFN1aXRlIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0icGx1Z2luLXBhdGgiCi0JCQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLQk8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLQkJPCEtLTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPi0tPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLQk8dGFyZ2V0Ci0JCW5hbWU9InJ1biIKLQkJZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLQkJPGFudAotCQkJdGFyZ2V0PSJjb2xsZWN0IgotCQkJYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iaW5jbHVkZXMiCi0JCQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLip4bWwiIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJvdXRwdXQtZmlsZSIKLQkJCQl2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotCQk8L2FudD4KLQkJPCEtLQkJPGVtYWlsUmVzdWx0cyByZXN1bHRzRmlsZT0iJHtidWlsZC1yZXN1bHRzLWhvbWV9LyR7cGx1Z2luLW5hbWV9LnhtbCIgYWRkcmVzc2xpc3Q9ImRhdmlkX3dpbGxpYW1zQHVzLmlibS5jb20iIC8+IC0tPgotCTwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IwMTA1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjLyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGQzNzBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXNzZW1vZGVsdGVzdHMuamFyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwNzNmZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+PC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGQ4YjVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU3VuIEFwciAxNiAxNDozNzoyMSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyYWM2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTM2OGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5lbmFibGUucHJvamVjdC5yZWZhY3RvcmluZy5oaXN0b3J5PWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzI0OTU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6MDU6MjkgRURUIDIwMDYKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWJlZmFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMAotQnVuZGxlLUNsYXNzUGF0aDogc3NlbW9kZWx0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5TU0VNb2RlbFRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmFkYXB0ZG9tLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5kb2N1bWVudCwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5leGFtcGxlcywKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMubGlmZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMudGhyZWFkaW5nCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmp1bml0LAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gY29tLmlibS5pY3UKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWM1OTg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+TWF5IDIsIDIwMDY8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdjZDQ4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBzc2Vtb2RlbHRlc3RzLmphcixcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotc291cmNlLnNzZW1vZGVsdGVzdHMuamFyID0gc3JjLwotb3V0cHV0LnNzZW1vZGVsdGVzdHMuamFyID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTgyN2RjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZS5vcmcKLUJ1bmRsZS1OYW1lLjAgPSBUZXN0cyBQbHVnLWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTljY2RjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL0V4aXN0ZW5jZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzOwotCi0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuU1NFQ29yZVBsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgRXhpc3RlbmNlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5FeGlzdHMoKXsKLQkJYXNzZXJ0Tm90TnVsbChTU0VDb3JlUGx1Z2luLmdldERlZmF1bHQoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9Mb2dnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZmMzIxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9Mb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0czsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBTbWFsbCBjb252ZW5pZW5jZSBjbGFzcyB0byBsb2cgbWVzc2FnZXMgdG8gcGx1Z2luJ3MgbG9nIGZpbGUgYW5kIGFsc28sIGlmIGRlc2lyZWQsCi0gKiB0aGUgY29uc29sZS4gVGhpcyBjbGFzcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGNsYXNzZXMgaW4gdGhpcyBwbHVnaW4uIE90aGVyCi0gKiBwbHVnaW5zIHNob3VsZCBtYWtlIHRoZWlyIG93biBjb3B5LCB3aXRoIGFwcHJvcHJpYXRlIElELgotICovCi1wdWJsaWMgY2xhc3MgTG9nZ2VyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cyI7IC8vJE5PTi1OTFMtMSQKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJBQ0VGSUxURVJfTE9DQVRJT04gPSAiL2RlYnVnL3RyYWNlZmlsdGVyIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0sgPSBJU3RhdHVzLk9LOyAvLyAwCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GTyA9IElTdGF0dXMuSU5GTzsgLy8gMQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkcgPSBJU3RhdHVzLldBUk5JTkc7IC8vIDIKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUiA9IElTdGF0dXMuRVJST1I7IC8vIDQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LX0RFQlVHID0gMjAwICsgT0s7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GT19ERUJVRyA9IDIwMCArIElORk87Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklOR19ERUJVRyA9IDIwMCArIFdBUk5JTkc7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfREVCVUcgPSAyMDAgKyBFUlJPUjsKLQotCS8qKgotCSAqIEFkZHMgbWVzc2FnZSB0byBsb2cuCi0JICogQHBhcmFtIGxldmVsIHNldmVyaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlIChPSywgSU5GTywgV0FSTklORywgRVJST1IsIE9LX0RFQlVHLCBJTkZPX0RFQlVHLCBXQVJOSU5HX0RFQlVHLCBFUlJPUl9ERUJVRykKLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIGFkZCB0byB0aGUgbG9nCi0JICogQHBhcmFtIGV4Y2VwdGlvbiBleGNlcHRpb24gdGhyb3duCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF9sb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAobGV2ZWwgPT0gT0tfREVCVUcgfHwgbGV2ZWwgPT0gSU5GT19ERUJVRyB8fCBsZXZlbCA9PSBXQVJOSU5HX0RFQlVHIHx8IGxldmVsID09IEVSUk9SX0RFQlVHKSB7Ci0JCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQkJcmV0dXJuOwotCQl9Ci0KLQkJaW50IHNldmVyaXR5ID0gSVN0YXR1cy5PSzsKLQkJc3dpdGNoIChsZXZlbCkgewotCQkJY2FzZSBJTkZPX0RFQlVHIDoKLQkJCWNhc2UgSU5GTyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLklORk87Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFdBUk5JTkdfREVCVUcgOgotCQkJY2FzZSBXQVJOSU5HIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuV0FSTklORzsKLQkJCQlicmVhazsKLQkJCWNhc2UgRVJST1JfREVCVUcgOgotCQkJY2FzZSBFUlJPUiA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLkVSUk9SOwotCQl9Ci0JCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoc2V2ZXJpdHksIFBMVUdJTl9JRCwgc2V2ZXJpdHksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCX0KLQotCS8qKgotCSAqIFByaW50cyBtZXNzYWdlIHRvIGxvZyBpZiBjYXRlZ29yeSBtYXRjaGVzIC9kZWJ1Zy90cmFjZWZpbHRlciBvcHRpb24uCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBwcmludAotCSAqIEBwYXJhbSBjYXRlZ29yeSBjYXRlZ29yeSBvZiB0aGUgbWVzc2FnZSwgdG8gYmUgY29tcGFyZWQgd2l0aCAvZGVidWcvdHJhY2VmaWx0ZXIKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX3RyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGlzVHJhY2luZyhjYXRlZ29yeSkpIHsKLQkJCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFBMVUdJTl9JRCwgSVN0YXR1cy5PSywgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBsYXRmb3JtIGlzIGRlYnVnZ2luZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0RlYnVnZ2luZygpIHsKLQkJcmV0dXJuIFBsYXRmb3JtLmluRGVidWdNb2RlKCk7Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lcyBpZiBjdXJyZW50bHkgdHJhY2luZyBhIGNhdGVnb3J5Ci0JICogQHBhcmFtIGNhdGVnb3J5Ci0JICogQHJldHVybiB0cnVlIGlmIHRyYWNpbmcgY2F0ZWdvcnksIGZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1RyYWNpbmcoU3RyaW5nIGNhdGVnb3J5KSB7Ci0JCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmcgdHJhY2VGaWx0ZXIgPSBQbGF0Zm9ybS5nZXREZWJ1Z09wdGlvbihQTFVHSU5fSUQgKyBUUkFDRUZJTFRFUl9MT0NBVElPTik7Ci0JCWlmICh0cmFjZUZpbHRlciAhPSBudWxsKSB7Ci0JCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcih0cmFjZUZpbHRlciwgIiwiKTsgLy8kTk9OLU5MUy0xJAotCQkJd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQlTdHJpbmcgY2F0ID0gdG9rZW5pemVyLm5leHRUb2tlbigpLnRyaW0oKTsKLQkJCQlpZiAoY2F0ZWdvcnkuZXF1YWxzKGNhdCkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSkgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIG51bGwpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9TU0VNb2RlbFRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvU1NFTW9kZWxUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQzY2I0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9TU0VNb2RlbFRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50cy5UZXN0QWJvdXRUb0JlQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHMuVGVzdE5ld0RvY3VtZW50Q29udGVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHMuVGVzdE5ld0RvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50cy5UZXN0Tm9DaGFuZ2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzLlRlc3RSZWdpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50cy5UZXN0UmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50cy5UZXN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci0KLQotcHVibGljIGNsYXNzIFNTRU1vZGVsVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQotCS8qKgotCSAqIHRvIGdldCBwaWNrZWQgdXAgYnkgQlZUCi0JICogCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBTU0VNb2RlbFRlc3RTdWl0ZSgpOwotCX0KLQotCS8vIG5vdCByZWFkeSBmb3IgdGhyZWFkZWQgdGVzdHMsIHlldC4KLQkvLyBwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGNsYXNzZXMgPSBuZXcKLQkvLyBDbGFzc1tde1Rlc3RPZlRocmVhZExvY2FsSW1wcm92ZW1lbnQuY2xhc3MsCi0JLy8gVGVzdE9mVGhyZWFkTG9jYWxXaXRoQ2hhbmdlcy5jbGFzcywgVGVzdENyZWF0aW9uLmNsYXNzfTsKLQotCS8vIHByaXZhdGUgc3RhdGljIENsYXNzW10gY2xhc3NlcyA9IG5ldyBDbGFzc1tde1Rlc3RDcmVhdGlvbi5jbGFzcywKLQkvLyBUZXN0RG9jdW1lbnRSZWFkZXIuY2xhc3N9OwotCS8vIHByaXZhdGUgc3RhdGljIENsYXNzW10gY2xhc3NlcyA9IG5ldyBDbGFzc1tde1Rlc3RDcmVhdGlvbi5jbGFzcywKLQkvLyBUZXN0RG9jdW1lbnRSZWFkZXIuY2xhc3MsIFRlc3RDaGFyU2VxdWVuY2VSZWFkZXIuY2xhc3MsCi0JLy8gVGVzdFJlZ2lvbk1hdGNoZXMuY2xhc3N9OwotCi0JcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBjbGFzc2VzID0gbmV3IENsYXNzW117RXhpc3RlbmNlVGVzdC5jbGFzcywgVGVzdE5ld0RvY3VtZW50Q29udGVudEV2ZW50LmNsYXNzLCBUZXN0QWJvdXRUb0JlQ2hhbmdlZEV2ZW50LmNsYXNzLCBUZXN0TmV3RG9jdW1lbnRFdmVudC5jbGFzcywgVGVzdE5vQ2hhbmdlRXZlbnQuY2xhc3MsIFRlc3RSZWdpb25DaGFuZ2VkRXZlbnQuY2xhc3MsVGVzdFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmNsYXNzLFRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudC5jbGFzc307Ci0KLQlwdWJsaWMgU1NFTW9kZWxUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJTU0UgTW9kZWwgQmFzaWMgVGVzdCBTdWl0ZSIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKyspIHsKLQkJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShjbGFzc2VzW2ldLCBjbGFzc2VzW2ldLmdldE5hbWUoKSkpOwotCQl9Ci0JfQotCi0JcHVibGljIFNTRU1vZGVsVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzLCBTdHJpbmcgbmFtZSkgewotCQlzdXBlcih0aGVDbGFzcywgbmFtZSk7Ci0JfQotCi0JcHVibGljIFNTRU1vZGVsVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzKSB7Ci0JCXN1cGVyKHRoZUNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgU1NFTW9kZWxUZXN0U3VpdGUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1NTRU1vZGVsVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1NTRU1vZGVsVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJkNjcwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9TU0VNb2RlbFRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFNTRU1vZGVsVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBTU0VNb2RlbFRlc3RzUGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBTU0VNb2RlbFRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5UZXN0c1BsdWdpblJlc291cmNlcyIpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU1NFTW9kZWxUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHdvcmtzcGFjZSBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlKCkgewotCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gU1NFTW9kZWxUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXkpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvVGVzdEFic3RyYWN0QWRhcHRlckZhY3RvcnkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1Rlc3RBYnN0cmFjdEFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlOTQyZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvVGVzdEFic3RyYWN0QWRhcHRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLkFic3RyYWN0QWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLQotLyoqCi0gKiAKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0QWJzdHJhY3RBZGFwdGVyRmFjdG9yeSBleHRlbmRzIFRlc3RDYXNlIHsKLQkKLQlwcml2YXRlIEFic3RyYWN0QWRhcHRlckZhY3RvcnkgZkZhY3RvcnkgPSBudWxsOwotCQotCWNsYXNzIE15Q2xhc3MgaW1wbGVtZW50cyBJTm9kZUFkYXB0ZXIgewotCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQlyZXR1cm4gdHlwZSBpbnN0YW5jZW9mIE15Q2xhc3M7Ci0JCX0KLQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLGludCBldmVudFR5cGUsT2JqZWN0IGNoYW5nZWRGZWF0dXJlLE9iamVjdCBvbGRWYWx1ZSxPYmplY3QgbmV3VmFsdWUsaW50IHBvcykgewotCQkJLy8gbm9vcAotCQl9Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCXNldFVwQWRhcHRlckZhY3RvcnkoKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldFVwQWRhcHRlckZhY3RvcnkoKSB7Ci0JCWZGYWN0b3J5ID0gbmV3IEFic3RyYWN0QWRhcHRlckZhY3RvcnkoVGVzdEFic3RyYWN0QWRhcHRlckZhY3RvcnkuTXlDbGFzcy5jbGFzcywgZmFsc2UpIHsKLQkJCXByb3RlY3RlZCBJTm9kZUFkYXB0ZXIgY3JlYXRlQWRhcHRlcihJTm9kZU5vdGlmaWVyIHRhcmdldCkgewotCQkJCXJldHVybiBuZXcgTXlDbGFzcygpOwotCQkJfQotCQl9OwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QWRhcHQoKSB7Ci0JCWZGYWN0b3J5LmFkYXB0KG51bGwpOwotCX0KLQkKLS8vCXB1YmxpYyB2b2lkIHRlc3RBZGFwdE5ldygpIHsKLS8vCQlmRmFjdG9yeS5hZGFwdE5ldyhudWxsKTsKLS8vCX0KLQkKLS8vCXB1YmxpYyB2b2lkIHRlc3RDb3B5KCkgewotLy8JCUFkYXB0ZXJGYWN0b3J5IGYgPSBmRmFjdG9yeS5jb3B5KCk7Ci0vLwkJYXNzZXJ0Tm90TnVsbChmKTsKLS8vCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlKCkgewotCQkvLyBUT0RPOiBjcmVhdGUgdW5pdCB0ZXN0Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRmFjdG9yeVRlc3RPbmx5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRmFjdG9yeVRlc3RPbmx5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4YzM5OTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZhY3RvcnlUZXN0T25seS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmFkYXB0ZG9tOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVBZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIGV4aXN0cyBvbmx5IHRvIHNhdGlzZnkgc29tZSBvZiB0aGUgdW5pdCB0ZXN0cy4KLSAqIAotICogVG8gdGVzdCwgdXNlIGZvbGxvd2luZyBsaW5lIGluIGNsaWVudCwgc3VjaCBhcyB3aGVuIGl0IGludGl0aWFsaXplZC4KLSAqIEZhY3RvcnlSZWdpc3RyeS5nZXRGYWN0b3J5UmVnaXN0cnkoKS5hZGRGYWN0b3J5KG5ldwotICogQWRhcHRlckZhY3RvcnlUZXN0T25seSgpKTsKLSAqIAotICogQ3JlYXRpb24gZGF0ZTogKDExLzE0LzAwIDc6MDg6MTggUE0pCi0gKiAKLSAqIEBhdXRob3I6IERhdmlkIFdpbGxpYW1zCi0gKi8KLXB1YmxpYyBjbGFzcyBBZGFwdGVyRmFjdG9yeVRlc3RPbmx5IGltcGxlbWVudHMgSU5vZGVBZGFwdGVyRmFjdG9yeSB7Ci0JLy8gVGhpcyBmYWN0b3J5IGRlYWxzIHdpdGggdGhyZWUgYWRhcHRlcnMKLQlqYXZhLnV0aWwuTGlzdCBhZGFwdGVycyA9IG5ldyBqYXZhLnV0aWwuQXJyYXlMaXN0KCk7Ci0KLQkvKioKLQkgKiBDQUFkYXB0ZXJGYWN0b3J5IGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBBZGFwdGVyRmFjdG9yeVRlc3RPbmx5KCkgewotCQlzdXBlcigpOwotCQlhZGFwdGVycy5hZGQobmV3IEFkYXB0ZXJGb3JEb2N1bWVudFRlc3RPbmx5KCkpOwotCQlhZGFwdGVycy5hZGQobmV3IEFkYXB0ZXJGb3JFbGVtZW50VGVzdE9ubHkoKSk7Ci0JCWFkYXB0ZXJzLmFkZChuZXcgQWRhcHRlckZvckF0dHJUZXN0T25seSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXRob2QgdGhhdCByZXR1cm5zIHRoZSBhZGFwdGVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGhpcyBmYWN0b3J5IGFuZAotCSAqIHRoZSBnaXZlbiBvYmplY3QsIGFuZCAic2V0cyB1cCIgdGhlIGFkYXB0YWJsZSBvYmplY3QgdG8gdXNlIHRoZQotCSAqIGFkYXB0ZXIuCi0JICogCi0JICogVGhlIGFkYXB0ZXIgbWF5IGJlIGEgc2luZ2xldG9uIG9yIG5vdCAuLi4gZGVwZW5kaW5nIG9uIHRoZSBuZWVkcyBvZiB0aGUKLQkgKiBJTm9kZUFkYXB0ZXIgLi4uIGJ1dCBpbiBnZW5lcmFsIGl0IGlzIHJlY29tbWVuZGVkIGZvciBhbiBhZGFwdGVyIHRvIGJlCi0JICogc3RhdGVsZXNzLCBzbyB0aGUgZWZmaWNpZW5jaWVzIG9mIGEgc2luZ2xldG9uIGNhbiBiZSBnYWluZWQuCi0JICogCi0JICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHNob3VsZCBjYWxsIGFkZEFkYXB0ZXIgb24gdGhlIGFkYXB0ZWQKLQkgKiBvYmplY3Qgd2l0aCB0aGUgY29ycmVjdCBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlci4KLQkgKi8KLQlwdWJsaWMgSU5vZGVBZGFwdGVyIGFkYXB0KElOb2RlTm90aWZpZXIgdGFyZ2V0KSB7Ci0JCS8vIG9iamVjdC5hZGRBZGFwdGVyKGFkYXB0ZXJJbnN0YW5jZSk7Ci0JCS8vIHJldHVybiBhZGFwdGVySW5zdGFuY2U7Ci0JCUlOb2RlQWRhcHRlciByZXN1bHQgPSBudWxsOwotCi0JCUl0ZXJhdG9yIGFkYXB0ZXJzTGlzdCA9IGFkYXB0ZXJzLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChhZGFwdGVyc0xpc3QuaGFzTmV4dCgpKSB7Ci0JCQlJTm9kZUFkYXB0ZXIgYWRhcHRlciA9IChJTm9kZUFkYXB0ZXIpIGFkYXB0ZXJzTGlzdC5uZXh0KCk7Ci0JCQlpZiAoYWRhcHRlci5pc0FkYXB0ZXJGb3JUeXBlKHRhcmdldCkpIHsKLQkJCQlJTm9kZUFkYXB0ZXIgZXhpc3RpbmdBZGFwdGVyID0gdGFyZ2V0LmdldEV4aXN0aW5nQWRhcHRlcihhZGFwdGVyKTsKLQkJCQlpZiAoZXhpc3RpbmdBZGFwdGVyID09IG51bGwpIHsKLQkJCQkJdGFyZ2V0LmFkZEFkYXB0ZXIoYWRhcHRlcik7Ci0JCQkJCXJlc3VsdCA9IGFkYXB0ZXI7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQotCX0KLQotCS8qKgotCSAqIGlzRmFjdG9yeUZvclR5cGUgbWV0aG9kIGNvbW1lbnQuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0IHR5cGUpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQotCQkvLyBmb3Igbm93LCBvbmUgYWRhcHRlciBmb3IgZG9jdW1lbnRzLCBlbGVtZW50cywgYW5kIGF0dHIuCi0JCS8vCi0JCWlmICh0eXBlIGluc3RhbmNlb2YgRG9jdW1lbnQpIHsKLQkJCXJlc3VsdCA9IHRydWU7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlpZiAodHlwZSBpbnN0YW5jZW9mIEVsZW1lbnQpIHsKLQkJCQlyZXN1bHQgPSB0cnVlOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJaWYgKHR5cGUgaW5zdGFuY2VvZiBBdHRyKSB7Ci0JCQkJCXJlc3VsdCA9IHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotCQkvLyBUT0RPOiBjcmVhdGUgdW5pdCB0ZXN0Ci0KLQl9Ci0KLQlwdWJsaWMgSU5vZGVBZGFwdGVyRmFjdG9yeSBjb3B5KCkgewotCQlyZXR1cm4gbmV3IEFkYXB0ZXJGYWN0b3J5VGVzdE9ubHkoKTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRm9yQXR0clRlc3RPbmx5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRm9yQXR0clRlc3RPbmx5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NmI4NGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckF0dHJUZXN0T25seS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuYWRhcHRkb207Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci0KLQotLyoqCi0gKiBJbnNlcnQgdGhlIHR5cGUncyBkZXNjcmlwdGlvbiBoZXJlLiBDcmVhdGlvbiBkYXRlOiAoMS85LzAxIDM6Mzc6MDEgUE0pCi0gKiAKLSAqIEBhdXRob3I6IERhdmlkIFdpbGxpYW1zCi0gKi8KLXB1YmxpYyBjbGFzcyBBZGFwdGVyRm9yQXR0clRlc3RPbmx5IGltcGxlbWVudHMgSU5vZGVBZGFwdGVyIHsKLQkvKioKLQkgKiBDQUFkYXB0ZXJUZXN0T25seSBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqLwotCXB1YmxpYyBBZGFwdGVyRm9yQXR0clRlc3RPbmx5KCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIEFsbG93aW5nIHRoZSBJTm9kZUFkYXB0ZXIgdG8gY29tcGFyZSBpdHNlbGYgYWdhaW5zdCB0aGUgdHlwZSBhbGxvd3MgaXQKLQkgKiB0byByZXR1cm4gdHJ1ZSBpbiBtb3JlIHRoYW4gb25lIGNhc2UuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkgewotCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCQlpZiAodHlwZSBpbnN0YW5jZW9mIEF0dHIpIHsKLQkJCXJlc3VsdCA9IHRydWU7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKi8KLQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJTm9kZUFkYXB0ZXIgQWRhcHRlckZvckF0dHJUZXN0T25seSAiICsgdGhpcy5oYXNoQ29kZSgpICsgIiBoYXMgYmVlbiBub3RpZmllZCBvZiAiICsgSU5vZGVOb3RpZmllci5FVkVOVF9UWVBFX1NUUklOR1NbZXZlbnRUeXBlXSArICIgKHdoZW4gIiArIG5vdGlmaWVyICsgIiBub3RpZmllZCBpdCkiKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckRvY3VtZW50VGVzdE9ubHkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2FkYXB0ZG9tL0FkYXB0ZXJGb3JEb2N1bWVudFRlc3RPbmx5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ODc1YzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckRvY3VtZW50VGVzdE9ubHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmFkYXB0ZG9tOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotCi0vKioKLSAqIEluc2VydCB0aGUgdHlwZSdzIGRlc2NyaXB0aW9uIGhlcmUuIENyZWF0aW9uIGRhdGU6ICgxLzkvMDEgMzozNzowMSBQTSkKLSAqIAotICogQGF1dGhvcjogRGF2aWQgV2lsbGlhbXMKLSAqLwotcHVibGljIGNsYXNzIEFkYXB0ZXJGb3JEb2N1bWVudFRlc3RPbmx5IGltcGxlbWVudHMgSU5vZGVBZGFwdGVyIHsKLQkvKioKLQkgKiBDQUFkYXB0ZXJUZXN0T25seSBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqLwotCXB1YmxpYyBBZGFwdGVyRm9yRG9jdW1lbnRUZXN0T25seSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBBbGxvd2luZyB0aGUgSU5vZGVBZGFwdGVyIHRvIGNvbXBhcmUgaXRzZWxmIGFnYWluc3QgdGhlIHR5cGUgYWxsb3dzIGl0Ci0JICogdG8gcmV0dXJuIHRydWUgaW4gbW9yZSB0aGFuIG9uZSBjYXNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkJaWYgKHR5cGUgaW5zdGFuY2VvZiBEb2N1bWVudCkgewotCQkJcmVzdWx0ID0gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoSU5vZGVOb3RpZmllciBub3RpZmllciwgaW50IGV2ZW50VHlwZSwgT2JqZWN0IGNoYW5nZWRGZWF0dXJlLCBPYmplY3Qgb2xkVmFsdWUsIE9iamVjdCBuZXdWYWx1ZSwgaW50IHBvcykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIklOb2RlQWRhcHRlciBBZGFwdGVyRm9yRG9jdW1lbnRUZXN0T25seSAiICsgdGhpcy5oYXNoQ29kZSgpICsgIiBoYXMgYmVlbiBub3RpZmllZCBvZiAiICsgSU5vZGVOb3RpZmllci5FVkVOVF9UWVBFX1NUUklOR1NbZXZlbnRUeXBlXSArICIgKHdoZW4gIiArIG5vdGlmaWVyICsgIiBub3RpZmllZCBpdCkiKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckVsZW1lbnRUZXN0T25seS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckVsZW1lbnRUZXN0T25seS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzgxNTY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2FkYXB0ZG9tL0FkYXB0ZXJGb3JFbGVtZW50VGVzdE9ubHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmFkYXB0ZG9tOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogSW5zZXJ0IHRoZSB0eXBlJ3MgZGVzY3JpcHRpb24gaGVyZS4gQ3JlYXRpb24gZGF0ZTogKDEvOS8wMSAzOjM3OjAxIFBNKQotICogCi0gKiBAYXV0aG9yOiBEYXZpZCBXaWxsaWFtcwotICovCi1wdWJsaWMgY2xhc3MgQWRhcHRlckZvckVsZW1lbnRUZXN0T25seSBpbXBsZW1lbnRzIElOb2RlQWRhcHRlciB7Ci0JLyoqCi0JICogQ0FBZGFwdGVyVGVzdE9ubHkgY29uc3RydWN0b3IgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgQWRhcHRlckZvckVsZW1lbnRUZXN0T25seSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBBbGxvd2luZyB0aGUgSU5vZGVBZGFwdGVyIHRvIGNvbXBhcmUgaXRzZWxmIGFnYWluc3QgdGhlIHR5cGUgYWxsb3dzIGl0Ci0JICogdG8gcmV0dXJuIHRydWUgaW4gbW9yZSB0aGFuIG9uZSBjYXNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkJaWYgKHR5cGUgaW5zdGFuY2VvZiBFbGVtZW50KSB7Ci0JCQlyZXN1bHQgPSB0cnVlOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICovCi0JcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSU5vZGVBZGFwdGVyIEFkYXB0ZXJGb3JFbGVtZW50VGVzdE9ubHkgIiArIHRoaXMuaGFzaENvZGUoKSArICIgaGFzIGJlZW4gbm90aWZpZWQgb2YgIiArIElOb2RlTm90aWZpZXIuRVZFTlRfVFlQRV9TVFJJTkdTW2V2ZW50VHlwZV0gKyAiICh3aGVuICIgKyBub3RpZmllciArICIgbm90aWZpZWQgaXQpIik7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RDaGFyU2VxdWVuY2VSZWFkZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RDaGFyU2VxdWVuY2VSZWFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE1ODVjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0Q2hhclNlcXVlbmNlUmVhZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZG9jdW1lbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQ2hhclNlcXVlbmNlUmVhZGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0KLQotcHVibGljIGNsYXNzIFRlc3RDaGFyU2VxdWVuY2VSZWFkZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQotCXB1YmxpYyBUZXN0Q2hhclNlcXVlbmNlUmVhZGVyKCkgewotCQlzdXBlcigpOwotCX0KLQotCi0JcHVibGljIFRlc3RDaGFyU2VxdWVuY2VSZWFkZXIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JU3RyaW5nIGZTdGFuZGFyZFN0cmluZyA9ICJ0ZXN0MTIzIjsKLQotCXB1YmxpYyB2b2lkIHRlc3RTdGFuZGFyZEJlZ2lubmluZygpIHsKLQkJQ2hhclNlcXVlbmNlUmVhZGVyIHJlYWRlciA9IG5ldyBDaGFyU2VxdWVuY2VSZWFkZXIoZlN0YW5kYXJkU3RyaW5nLCAwLCAzKTsKLQkJY2hhciBjaGFyMSA9IChjaGFyKSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGNoYXIxID09ICd0Jyk7Ci0JCWNoYXIgY2hhcjIgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMiA9PSAnZScpOwotCQljaGFyIGNoYXIzID0gKGNoYXIpIHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoY2hhcjMgPT0gJ3MnKTsKLQkJaW50IGVvZiA9IHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoZW9mID09IC0xKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3RhbmRhcmRNaWRkbGUoKSB7Ci0JCUNoYXJTZXF1ZW5jZVJlYWRlciByZWFkZXIgPSBuZXcgQ2hhclNlcXVlbmNlUmVhZGVyKGZTdGFuZGFyZFN0cmluZywgMiwgMyk7Ci0JCWNoYXIgY2hhcjEgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMSA9PSAncycpOwotCQljaGFyIGNoYXIyID0gKGNoYXIpIHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoY2hhcjIgPT0gJ3QnKTsKLQkJY2hhciBjaGFyMyA9IChjaGFyKSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGNoYXIzID09ICcxJyk7Ci0JCWludCBlb2YgPSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGVvZiA9PSAtMSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFN0YW5kYXJkRW5kKCkgewotCQlDaGFyU2VxdWVuY2VSZWFkZXIgcmVhZGVyID0gbmV3IENoYXJTZXF1ZW5jZVJlYWRlcihmU3RhbmRhcmRTdHJpbmcsIDQsIDMpOwotCQljaGFyIGNoYXIxID0gKGNoYXIpIHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoY2hhcjEgPT0gJzEnKTsKLQkJY2hhciBjaGFyMiA9IChjaGFyKSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGNoYXIyID09ICcyJyk7Ci0JCWNoYXIgY2hhcjMgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMyA9PSAnMycpOwotCQlpbnQgZW9mID0gcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShlb2YgPT0gLTEpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTdGFuZGFyZE91dE9mUmFuZ2UoKSB7Ci0JCUNoYXJTZXF1ZW5jZVJlYWRlciByZWFkZXIgPSBuZXcgQ2hhclNlcXVlbmNlUmVhZGVyKGZTdGFuZGFyZFN0cmluZywgNTAsIDMpOwotCQlpbnQgZW9mID0gcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShlb2YgPT0gLTEpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTdGFuZGFyZFBhcnRpYWxseU91dE9mUmFuZ2UoKSB7Ci0JCUNoYXJTZXF1ZW5jZVJlYWRlciByZWFkZXIgPSBuZXcgQ2hhclNlcXVlbmNlUmVhZGVyKGZTdGFuZGFyZFN0cmluZywgNSwgMyk7Ci0JCWNoYXIgY2hhcjEgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMSA9PSAnMicpOwotCQljaGFyIGNoYXIyID0gKGNoYXIpIHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoY2hhcjIgPT0gJzMnKTsKLQkJaW50IGVvZiA9IHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoZW9mID09IC0xKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVmZmVyQmVnaW5pbmcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlDaGFyU2VxdWVuY2VSZWFkZXIgcmVhZGVyID0gbmV3IENoYXJTZXF1ZW5jZVJlYWRlcihmU3RhbmRhcmRTdHJpbmcsIDAsIDMpOwotCQlTdHJpbmcgdGFyZ2V0U3RyaW5nID0gInRlcyI7Ci0JCQotCQkvLyBpbnRlbnRpb25hbGx5IHNtYWxsIHNpemVkIGJ1ZmZlcgotCQljaGFyW10gY2hhcmJ1ZmZlciA9IG5ldyBjaGFyWzJdOwotCQlTdHJpbmdCdWZmZXIgc3RyaW5nQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgblJlYWQgPSAwOwotCQl3aGlsZSAoblJlYWQgIT0gLTEpIHsKLQkJCW5SZWFkID0gcmVhZGVyLnJlYWQoY2hhcmJ1ZmZlcik7Ci0JCQlpZiAoblJlYWQgPiAwKSB7Ci0JCQkJc3RyaW5nQnVmZmVyLmFwcGVuZChjaGFyYnVmZmVyLCAwLCBuUmVhZCk7Ci0JCQl9Ci0JCX0KLQkJU3RyaW5nIHRlc3RTdHJpbmcgPSBzdHJpbmdCdWZmZXIudG9TdHJpbmcoKTsKLQkJCi0JCWFzc2VydEVxdWFscyh0YXJnZXRTdHJpbmcsIHRlc3RTdHJpbmcpOwotCQkKLQl9Ci0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlckVuZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUNoYXJTZXF1ZW5jZVJlYWRlciByZWFkZXIgPSBuZXcgQ2hhclNlcXVlbmNlUmVhZGVyKGZTdGFuZGFyZFN0cmluZywgNCwgMyk7Ci0JCVN0cmluZyB0YXJnZXRTdHJpbmcgPSAiMTIzIjsKLQkJCi0JCS8vIGludGVudGlvbmFsbHkgc21hbGwgc2l6ZWQgYnVmZmVyCi0JCWNoYXJbXSBjaGFyYnVmZmVyID0gbmV3IGNoYXJbMl07Ci0JCVN0cmluZ0J1ZmZlciBzdHJpbmdCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBuUmVhZCA9IDA7Ci0JCXdoaWxlIChuUmVhZCAhPSAtMSkgewotCQkJblJlYWQgPSByZWFkZXIucmVhZChjaGFyYnVmZmVyKTsKLQkJCWlmIChuUmVhZCA+IDApIHsKLQkJCQlzdHJpbmdCdWZmZXIuYXBwZW5kKGNoYXJidWZmZXIsIDAsIG5SZWFkKTsKLQkJCX0KLQkJfQotCQlTdHJpbmcgdGVzdFN0cmluZyA9IHN0cmluZ0J1ZmZlci50b1N0cmluZygpOwotCQkKLQkJYXNzZXJ0RXF1YWxzKHRhcmdldFN0cmluZywgdGVzdFN0cmluZyk7Ci0JCQotCX0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlckVuZEVubGFyZ2VkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQ2hhclNlcXVlbmNlUmVhZGVyIHJlYWRlciA9IG5ldyBDaGFyU2VxdWVuY2VSZWFkZXIoZlN0YW5kYXJkU3RyaW5nLCA0LCAzKTsKLQkJU3RyaW5nIHRhcmdldFN0cmluZyA9ICIxMjMiOwotCQkKLQkJLy8gaW50ZW50aW9uYWxseSBzbWFsbCBzaXplZCBidWZmZXIKLQkJY2hhcltdIGNoYXJidWZmZXIgPSBuZXcgY2hhclsyMDBdOwotCQlTdHJpbmdCdWZmZXIgc3RyaW5nQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgblJlYWQgPSAwOwotCQl3aGlsZSAoblJlYWQgIT0gLTEpIHsKLQkJCW5SZWFkID0gcmVhZGVyLnJlYWQoY2hhcmJ1ZmZlcik7Ci0JCQlpZiAoblJlYWQgPiAwKSB7Ci0JCQkJc3RyaW5nQnVmZmVyLmFwcGVuZChjaGFyYnVmZmVyLCAwLCBuUmVhZCk7Ci0JCQl9Ci0JCX0KLQkJU3RyaW5nIHRlc3RTdHJpbmcgPSBzdHJpbmdCdWZmZXIudG9TdHJpbmcoKTsKLQkJCi0JCWFzc2VydEVxdWFscyh0YXJnZXRTdHJpbmcsIHRlc3RTdHJpbmcpOwotCQkKLQl9Ci0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlckJlZ2luaW5nRW5sYXJnZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlDaGFyU2VxdWVuY2VSZWFkZXIgcmVhZGVyID0gbmV3IENoYXJTZXF1ZW5jZVJlYWRlcihmU3RhbmRhcmRTdHJpbmcsIDAsIDMpOwotCQlTdHJpbmcgdGFyZ2V0U3RyaW5nID0gInRlcyI7Ci0JCQotCQkvLyBpbnRlbnRpb25hbGx5IHNtYWxsIHNpemVkIGJ1ZmZlcgotCQljaGFyW10gY2hhcmJ1ZmZlciA9IG5ldyBjaGFyWzIwMF07Ci0JCVN0cmluZ0J1ZmZlciBzdHJpbmdCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBuUmVhZCA9IDA7Ci0JCXdoaWxlIChuUmVhZCAhPSAtMSkgewotCQkJblJlYWQgPSByZWFkZXIucmVhZChjaGFyYnVmZmVyKTsKLQkJCWlmIChuUmVhZCA+IDApIHsKLQkJCQlzdHJpbmdCdWZmZXIuYXBwZW5kKGNoYXJidWZmZXIsIDAsIG5SZWFkKTsKLQkJCX0KLQkJfQotCQlTdHJpbmcgdGVzdFN0cmluZyA9IHN0cmluZ0J1ZmZlci50b1N0cmluZygpOwotCQkKLQkJYXNzZXJ0RXF1YWxzKHRhcmdldFN0cmluZywgdGVzdFN0cmluZyk7Ci0JCQotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVmZmVyQmVnaW5pbmdSZWR1Y2VkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQ2hhclNlcXVlbmNlUmVhZGVyIHJlYWRlciA9IG5ldyBDaGFyU2VxdWVuY2VSZWFkZXIoZlN0YW5kYXJkU3RyaW5nLCAwLCAzKTsKLQkJU3RyaW5nIHRhcmdldFN0cmluZyA9ICJ0ZSI7Ci0JCQotCQkvLyBpbnRlbnRpb25hbGx5IHNtYWxsIHNpemVkIGJ1ZmZlcgotCQljaGFyW10gY2hhcmJ1ZmZlciA9IG5ldyBjaGFyWzJdOwotCQlTdHJpbmdCdWZmZXIgc3RyaW5nQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgblJlYWQgPSAwOwotCQkvL3doaWxlIChuUmVhZCAhPSAtMSkgewotCQkJblJlYWQgPSByZWFkZXIucmVhZChjaGFyYnVmZmVyLCAwLCAyKTsKLQkJCWlmIChuUmVhZCA+IDApIHsKLQkJCQlzdHJpbmdCdWZmZXIuYXBwZW5kKGNoYXJidWZmZXIsIDAsIG5SZWFkKTsKLQkJCX0KLQkJLy99Ci0JCVN0cmluZyB0ZXN0U3RyaW5nID0gc3RyaW5nQnVmZmVyLnRvU3RyaW5nKCk7Ci0JCQotCQlhc3NlcnRFcXVhbHModGFyZ2V0U3RyaW5nLCB0ZXN0U3RyaW5nKTsKLQkJLy8vIG5vdyBjb250aW51ZSByZWFkaW5nIHNhbWUgcmVhZGVyCi0JCXRhcmdldFN0cmluZyA9ICJzIjsKLQkJc3RyaW5nQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQluUmVhZCA9IDA7Ci0JCS8vd2hpbGUgKG5SZWFkICE9IC0xKSB7Ci0JCQluUmVhZCA9IHJlYWRlci5yZWFkKGNoYXJidWZmZXIsIDAsIDIpOwotCQkJaWYgKG5SZWFkID4gMCkgewotCQkJCXN0cmluZ0J1ZmZlci5hcHBlbmQoY2hhcmJ1ZmZlciwgMCwgblJlYWQpOwotCQkJfQotCQkvL30KLQkJdGVzdFN0cmluZyA9IHN0cmluZ0J1ZmZlci50b1N0cmluZygpOwotCQlhc3NlcnRFcXVhbHModGFyZ2V0U3RyaW5nLCB0ZXN0U3RyaW5nKTsKLQkJCi0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFJlZ2lvbk1hdGNoZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RSZWdpb25NYXRjaGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5M2QxYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFJlZ2lvbk1hdGNoZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0KLQotcHVibGljIGNsYXNzIFRlc3RSZWdpb25NYXRjaGVzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogIAotCSAqLwotCXB1YmxpYyBUZXN0UmVnaW9uTWF0Y2hlcygpIHsKLQkJc3VwZXIoKTsKLQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFRlc3RSZWdpb25NYXRjaGVzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXMxKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUuc2V0KCJ0ZXN0aW5nMTIzIik7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgMSwgInQiKTsKLQkJYXNzZXJ0RXF1YWxzKHRydWUsIHJlc3VsdCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXMyKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUuc2V0KCJ0ZXN0aW5nMTIzIik7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgMiwgInQiKTsKLQkJYXNzZXJ0RXF1YWxzKGZhbHNlLCByZXN1bHQpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVnaW9uTWF0Y2hlczMoKSB7Ci0JCVN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgPSBuZXcgU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlKCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQoInRlc3RpbmcxMjMiKTsKLQkJYm9vbGVhbiByZXN1bHQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUucmVnaW9uTWF0Y2hlcyg3LCAzLCAiMTIzIik7Ci0JCWFzc2VydEVxdWFscyh0cnVlLCByZXN1bHQpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVnaW9uTWF0Y2hlczQoKSB7Ci0JCVN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgPSBuZXcgU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlKCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQoInRlc3RpbmcxMjMiKTsKLQkJYm9vbGVhbiByZXN1bHQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUucmVnaW9uTWF0Y2hlcyg4LCAzLCAiMjM0Iik7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSgpOwotCQlTdHJpbmcgdGVzdCA9ICJ0ZXN0aW5nMTIzIjsKLQkJU3RyaW5nIGNvbXBhcmUgPSAiVGVTdGluZzEyMyI7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQodGVzdCk7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgdGVzdC5sZW5ndGgoKSwgY29tcGFyZSk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQkJcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKDAsIHRlc3QubGVuZ3RoKCksIGNvbXBhcmUpOwotCQlhc3NlcnRFcXVhbHModHJ1ZSwgcmVzdWx0KTsKLQl9Ci0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlMigpIHsKLQkJU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlIHN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSA9IG5ldyBTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUoKTsKLQkJU3RyaW5nIHRlc3QgPSAidGVzdFx1MDEzMG5nMTIzIjsKLQkJU3RyaW5nIGNvbXBhcmUgPSAiVGVTdEluZzEyMyI7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQodGVzdCk7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgdGVzdC5sZW5ndGgoKSwgY29tcGFyZSk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQkJcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKDAsIHRlc3QubGVuZ3RoKCksIGNvbXBhcmUpOwotCQlhc3NlcnRFcXVhbHModHJ1ZSwgcmVzdWx0KTsKLQl9Ci0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlMygpIHsKLQkJU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlIHN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSA9IG5ldyBTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUoKTsKLQkJU3RyaW5nIHRlc3QgPSAidGVzdGluZzEyMyI7Ci0JCVN0cmluZyBjb21wYXJlID0gIlRlU3RcdTAxMzFuZzEyMyI7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQodGVzdCk7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgdGVzdC5sZW5ndGgoKSwgY29tcGFyZSk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQkJcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKDAsIHRlc3QubGVuZ3RoKCksIGNvbXBhcmUpOwotCQlhc3NlcnRFcXVhbHModHJ1ZSwgcmVzdWx0KTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL051bGxQYXJzZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9OdWxsUGFyc2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YWIyMGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL051bGxQYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzOwotCi1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLnBhcnNlci5SZWdpb25QYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLQotcHVibGljIGNsYXNzIE51bGxQYXJzZXIgaW1wbGVtZW50cyBSZWdpb25QYXJzZXIgewotCi0JcHVibGljIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZ2V0RG9jdW1lbnRSZWdpb25zKCkgewotCi0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBMaXN0IGdldFJlZ2lvbnMoKSB7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIFJlZ2lvblBhcnNlciBuZXdJbnN0YW5jZSgpIHsKLQotCQlyZXR1cm4gdGhpczsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZXNldChSZWFkZXIgcmVhZGVyKSB7Ci0JCS8vIGRvIG5vdGhpbmcKLQotCX0KLQotCXB1YmxpYyB2b2lkIHJlc2V0KFJlYWRlciByZWFkZXIsIGludCBvZmZzZXQpIHsKLQkJLy8gZG8gbm90aGluZwotCi0JfQotCi0JcHVibGljIHZvaWQgcmVzZXQoU3RyaW5nIGlucHV0KSB7Ci0JCS8vIGRvIG5vdGhpbmcKLQotCX0KLQotCXB1YmxpYyB2b2lkIHJlc2V0KFN0cmluZyBpbnB1dCwgaW50IG9mZnNldCkgewotCQkvLyBkbyBub3RoaW5nCi0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdEFib3V0VG9CZUNoYW5nZWRFdmVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RBYm91dFRvQmVDaGFuZ2VkRXZlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzlmODRkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdEFib3V0VG9CZUNoYW5nZWRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLkFib3V0VG9CZUNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotCi1wdWJsaWMgY2xhc3MgVGVzdEFib3V0VG9CZUNoYW5nZWRFdmVudCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RBYm91dFRvQmVDaGFuZ2VkRXZlbnQoKSB7Ci0JCUFib3V0VG9CZUNoYW5nZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbChldmVudCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldERlbGV0ZWRUZXh0KCkgewotCQlBYm91dFRvQmVDaGFuZ2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCVN0cmluZyBkID0gZXZlbnQuZ2V0RGVsZXRlZFRleHQoKTsKLQkJYXNzZXJ0RXF1YWxzKGQsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRPcmlnaW5hbFJlcXVlc3RlcigpIHsKLQkJQWJvdXRUb0JlQ2hhbmdlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlPYmplY3QgciA9IGV2ZW50LmdldE9yaWdpbmFsUmVxdWVzdGVyKCk7Ci0JCWFzc2VydEVxdWFscyh0aGlzLCByKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U3RydWN0dXJlZERvY3VtZW50KCkgewotCQlBYm91dFRvQmVDaGFuZ2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZCA9IGV2ZW50LmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlhc3NlcnROb3ROdWxsKGQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZXREZWxldGVkVGV4dCgpIHsKLQkJQWJvdXRUb0JlQ2hhbmdlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlldmVudC5zZXREZWxldGVkVGV4dCgianVua3lOb3RoaW5nIik7Ci0JCS8vIGFzc3VtZSBvayBpZiBubyBleGNlcHRpb24KLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQl9Ci0KLQlwcml2YXRlIEFib3V0VG9CZUNoYW5nZWRFdmVudCBnZXRCYXNpY0V2ZW50KCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRJbnN0YW5jZShuZXcgTnVsbFBhcnNlcigpKTsKLQkJQWJvdXRUb0JlQ2hhbmdlZEV2ZW50IGV2ZW50ID0gbmV3IEFib3V0VG9CZUNoYW5nZWRFdmVudChkb2N1bWVudCwgdGhpcywgInRlc3QiLCAwLCAwKTsKLQkJcmV0dXJuIGV2ZW50OwotCi0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdE5ld0RvY3VtZW50Q29udGVudEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdE5ld0RvY3VtZW50Q29udGVudEV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMjYzNzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3ROZXdEb2N1bWVudENvbnRlbnRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5ld0RvY3VtZW50Q29udGVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0TmV3RG9jdW1lbnRDb250ZW50RXZlbnQgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JZmluYWwgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RTdHJpbmcgPSAidGVzdGluZyI7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TmV3RG9jdW1lbnRDb250ZW50RXZlbnQoKSB7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROb3ROdWxsKGV2ZW50KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0T2Zmc2V0KCkgewotCQlOZXdEb2N1bWVudENvbnRlbnRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJaW50IG8gPSBldmVudC5nZXRPZmZzZXQoKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIG8pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMZW5ndGgoKSB7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlpbnQgaSA9IGV2ZW50LmdldExlbmd0aCgpOwotCQlhc3NlcnRFcXVhbHModGVzdFN0cmluZy5sZW5ndGgoKSwgaSk7Ci0JfQotCi0JLyoKLQkgKiBDbGFzcyB1bmRlciB0ZXN0IGZvciBTdHJpbmcgZ2V0VGV4dCgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldFRleHQoKSB7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlTdHJpbmcgdGV4dCA9IGV2ZW50LmdldFRleHQoKTsKLQkJYXNzZXJ0RXF1YWxzKHRlc3RTdHJpbmcsIHRleHQpOwotCX0KLQotCXByaXZhdGUgTmV3RG9jdW1lbnRDb250ZW50RXZlbnQgZ2V0QmFzaWNFdmVudCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IE51bGxQYXJzZXIoKSk7Ci0JCWRvY3VtZW50LnNldFRleHQodGhpcywgdGVzdFN0cmluZyk7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gbmV3IE5ld0RvY3VtZW50Q29udGVudEV2ZW50KGRvY3VtZW50LCB0aGlzKTsKLQkJcmV0dXJuIGV2ZW50OwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3ROZXdEb2N1bWVudEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdE5ld0RvY3VtZW50RXZlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY4YWU3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdE5ld0RvY3VtZW50RXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LlN0cnVjdHVyZWREb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5OZXdEb2N1bWVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0TmV3RG9jdW1lbnRFdmVudCBleHRlbmRzIFRlc3RDYXNlIHsKLQlmaW5hbCBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFN0cmluZyA9ICJ0ZXN0aW5nIjsKLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRPZmZzZXQoKSB7Ci0JCU5ld0RvY3VtZW50RXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWludCBvID0gZXZlbnQuZ2V0T2Zmc2V0KCk7Ci0JCWFzc2VydEVxdWFscygwLCBvKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TGVuZ3RoKCkgewotCQlOZXdEb2N1bWVudEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlpbnQgaSA9IGV2ZW50LmdldExlbmd0aCgpOwotCQlhc3NlcnRFcXVhbHModGVzdFN0cmluZy5sZW5ndGgoKSwgaSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5ld0RvY3VtZW50RXZlbnQoKSB7Ci0JCU5ld0RvY3VtZW50RXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZXZlbnQpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEdldFRleHQoKSB7Ci0JCU5ld0RvY3VtZW50RXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCVN0cmluZyB0ZXh0ID0gZXZlbnQuZ2V0VGV4dCgpOwotCQlhc3NlcnRFcXVhbHModGVzdFN0cmluZywgdGV4dCk7Ci0JfQotCi0JcHJpdmF0ZSBOZXdEb2N1bWVudEV2ZW50IGdldEJhc2ljRXZlbnQoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBTdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudEluc3RhbmNlKG5ldyBOdWxsUGFyc2VyKCkpOwotCQlkb2N1bWVudC5zZXRUZXh0KHRoaXMsIHRlc3RTdHJpbmcpOwotCQlOZXdEb2N1bWVudEV2ZW50IGV2ZW50ID0gbmV3IE5ld0RvY3VtZW50RXZlbnQoZG9jdW1lbnQsIHRoaXMpOwotCQlyZXR1cm4gZXZlbnQ7Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdE5vQ2hhbmdlRXZlbnQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0Tm9DaGFuZ2VFdmVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzRmYzkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0Tm9DaGFuZ2VFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5vQ2hhbmdlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLQotcHVibGljIGNsYXNzIFRlc3ROb0NoYW5nZUV2ZW50IGV4dGVuZHMgVGVzdENhc2UgewotCWZpbmFsIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3RyaW5nID0gInRlc3RpbmciOwotCi0JcHVibGljIHZvaWQgdGVzdE5vQ2hhbmdlRXZlbnQoKSB7Ci0JCU5vQ2hhbmdlRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZXZlbnQpOwotCQlhc3NlcnRFcXVhbHMoTm9DaGFuZ2VFdmVudC5OT19DT05URU5UX0NIQU5HRSwgZXZlbnQucmVhc29uKTsKLQl9Ci0KLQlwcml2YXRlIE5vQ2hhbmdlRXZlbnQgZ2V0QmFzaWNFdmVudCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IE51bGxQYXJzZXIoKSk7Ci0JCWRvY3VtZW50LnNldFRleHQodGhpcywgdGVzdFN0cmluZyk7Ci0JCU5vQ2hhbmdlRXZlbnQgZXZlbnQgPSBuZXcgTm9DaGFuZ2VFdmVudChkb2N1bWVudCwgdGhpcywgIiIsIDAsIDApOwotCQlldmVudC5yZWFzb24gPSBOb0NoYW5nZUV2ZW50Lk5PX0NPTlRFTlRfQ0hBTkdFOwotCQlyZXR1cm4gZXZlbnQ7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFJlZ2lvbkNoYW5nZWRFdmVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RSZWdpb25DaGFuZ2VkRXZlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdjYjgyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFJlZ2lvbkNoYW5nZWRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0UmVnaW9uQ2hhbmdlZEV2ZW50IGV4dGVuZHMgVGVzdENhc2UgewotCWZpbmFsIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3RyaW5nID0gInRlc3RpbmciOwotCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbkNoYW5nZWRFdmVudCgpIHsKLQkJUmVnaW9uQ2hhbmdlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROb3ROdWxsKGV2ZW50KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVnaW9uKCkgewotCQlSZWdpb25DaGFuZ2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc3RydWN0dXJlZERvY3VtZW50UmVnaW9uID0gZXZlbnQuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCWFzc2VydEVxdWFscyhudWxsLCBzdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKSB7Ci0JCVJlZ2lvbkNoYW5nZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJSVRleHRSZWdpb24gcmVnaW9uID0gZXZlbnQuZ2V0UmVnaW9uKCk7Ci0JCWFzc2VydEVxdWFscyhudWxsLCByZWdpb24pOwotCX0KLQotCXByaXZhdGUgUmVnaW9uQ2hhbmdlZEV2ZW50IGdldEJhc2ljRXZlbnQoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBTdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudEluc3RhbmNlKG5ldyBOdWxsUGFyc2VyKCkpOwotCQlkb2N1bWVudC5zZXRUZXh0KHRoaXMsIHRlc3RTdHJpbmcpOwotCQlSZWdpb25DaGFuZ2VkRXZlbnQgZXZlbnQgPSBuZXcgUmVnaW9uQ2hhbmdlZEV2ZW50KGRvY3VtZW50LCB0aGlzLCBudWxsLCBudWxsLCAiIiwgMCwgMCk7Ci0JCXJldHVybiBldmVudDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3YjExNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RSZWdpb25zUmVwbGFjZWRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbnNSZXBsYWNlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0UmVnaW9uc1JlcGxhY2VkRXZlbnQgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlmaW5hbCBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFN0cmluZyA9ICJ0ZXN0aW5nIjsKLQotCXB1YmxpYyB2b2lkIHRlc3RSZWdpb25zUmVwbGFjZWRFdmVudCgpIHsKLQkJUmVnaW9uc1JlcGxhY2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZXZlbnQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXROZXdSZWdpb25zKCkgewotCQlSZWdpb25zUmVwbGFjZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0TnVsbChldmVudC5nZXROZXdSZWdpb25zKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRPbGRSZWdpb25zKCkgewotCQlSZWdpb25zUmVwbGFjZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0TnVsbChldmVudC5nZXRPbGRSZWdpb25zKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKSB7Ci0JCVJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROdWxsKGV2ZW50LmdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpKTsKLQl9Ci0KLQlwcml2YXRlIFJlZ2lvbnNSZXBsYWNlZEV2ZW50IGdldEJhc2ljRXZlbnQoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBTdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudEluc3RhbmNlKG5ldyBOdWxsUGFyc2VyKCkpOwotCQlkb2N1bWVudC5zZXRUZXh0KHRoaXMsIHRlc3RTdHJpbmcpOwotCQlSZWdpb25zUmVwbGFjZWRFdmVudCBldmVudCA9IG5ldyBSZWdpb25zUmVwbGFjZWRFdmVudChkb2N1bWVudCwgdGhpcywgbnVsbCwgbnVsbCwgbnVsbCwgIiIsIDAsIDApOwotCQlyZXR1cm4gZXZlbnQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzViMzU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LlN0cnVjdHVyZWREb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5TdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotCi1wdWJsaWMgY2xhc3MgVGVzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV4dGVuZHMgVGVzdENhc2UgewotCWZpbmFsIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3RyaW5nID0gInRlc3RpbmciOwotCi0JcHVibGljIHZvaWQgdGVzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbChldmVudCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKSB7Ci0JCVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROdWxsKGV2ZW50LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKSB7Ci0JCVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROdWxsKGV2ZW50LmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKSk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBnZXRCYXNpY0V2ZW50KCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRJbnN0YW5jZShuZXcgTnVsbFBhcnNlcigpKTsKLQkJZG9jdW1lbnQuc2V0VGV4dCh0aGlzLCB0ZXN0U3RyaW5nKTsKLQkJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQgZXZlbnQgPSBuZXcgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQoZG9jdW1lbnQsIHRoaXMsIG51bGwsIG51bGwsICIiLCAwLCAwKTsKLQkJcmV0dXJuIGV2ZW50OwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V4YW1wbGVzL1Rlc3RBdFNpZ24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V4YW1wbGVzL1Rlc3RBdFNpZ24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ5MTAwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9leGFtcGxlcy9UZXN0QXRTaWduLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5leGFtcGxlczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci0KLQotcHVibGljIGNsYXNzIFRlc3RBdFNpZ24gewotCi0JcHVibGljIFRlc3RBdFNpZ24oKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gbmV3IFByb3BlcnRpZXMoKTsgLy9TeXN0ZW0uZ2V0UHJvcGVydGllcygpOwotCQlwcm9wZXJ0aWVzLnB1dCgiYXQgc2lnbiIsICJ0aGlzIGlzIGFuIFx1MDA0MCBzaWduIik7Ci0JCXByb3BlcnRpZXMubGlzdChTeXN0ZW0ub3V0KTsKLQkJRmlsZU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgidGVzdEF0LnR4dCIpOwotCQlwcm9wZXJ0aWVzLnN0b3JlKG91dHB1dFN0cmVhbSwgInRlc3RzIik7Ci0JCW91dHB1dFN0cmVhbS5jbG9zZSgpOwotCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oInRlc3RBdC50eHQiKTsKLQkJUHJvcGVydGllcyByZWFkUHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JCXJlYWRQcm9wZXJ0aWVzLmxvYWQoaW5TdHJlYW0pOwotCQlTdHJpbmcgYXRTaWduID0gKFN0cmluZykgcmVhZFByb3BlcnRpZXMuZ2V0KCJhdCBzaWduIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiYXQgc2lnbiBmcm9tIHJlYWQ6ICIgKyBhdFNpZ24pOwotCi0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9saWZlL0VtcHR5TW9kZWxGb3JUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvbGlmZS9FbXB0eU1vZGVsRm9yVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJiOTVkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9saWZlL0VtcHR5TW9kZWxGb3JUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMubGlmZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5tb2RlbC5BYnN0cmFjdFN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSW5kZXhlZFJlZ2lvbjsKLQotCi0KLXB1YmxpYyBjbGFzcyBFbXB0eU1vZGVsRm9yVGVzdHMgZXh0ZW5kcyBBYnN0cmFjdFN0cnVjdHVyZWRNb2RlbCB7Ci0KLQlwdWJsaWMgRW1wdHlNb2RlbEZvclRlc3RzKCkgewotCi0JCXN1cGVyKCk7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY29uc3RydWN0b3Igc3R1YgotCX0KLQotCXB1YmxpYyBJbmRleGVkUmVnaW9uIGdldEluZGV4ZWRSZWdpb24oaW50IG9mZnNldCkgewotCi0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2xpZmUvVGVzdENyZWF0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9saWZlL1Rlc3RDcmVhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODExMmM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2xpZmUvVGVzdENyZWF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5saWZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLm1vZGVsLk1vZGVsTGlmZWN5Y2xlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLQotCi0KLXB1YmxpYyBjbGFzcyBUZXN0Q3JlYXRpb24gZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRpb24oKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gbmV3IEVtcHR5TW9kZWxGb3JUZXN0cygpOwotCQlNb2RlbExpZmVjeWNsZUV2ZW50IGV2ZW50ID0gbmV3IE1vZGVsTGlmZWN5Y2xlRXZlbnQoc3RydWN0dXJlZE1vZGVsLCBNb2RlbExpZmVjeWNsZUV2ZW50Lk1PREVMX1JFTEVBU0VEKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQl9Ci0JCWV2ZW50ID0gbmV3IE1vZGVsTGlmZWN5Y2xlRXZlbnQoc3RydWN0dXJlZE1vZGVsLCBNb2RlbExpZmVjeWNsZUV2ZW50Lk1PREVMX0RJUlRZX1NUQVRFKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQl9Ci0JCWV2ZW50ID0gbmV3IE1vZGVsTGlmZWN5Y2xlRXZlbnQoc3RydWN0dXJlZE1vZGVsLCBNb2RlbExpZmVjeWNsZUV2ZW50Lk1PREVMX0RPQ1VNRU5UX0NIQU5HRUQpOwotCQlpZiAoREVCVUcpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihldmVudCk7Ci0JCX0KLQkJLyogICAgICAgIGV2ZW50ID0gbmV3IE1vZGVsTGlmZWN5Y2xlRXZlbnQoc3RydWN0dXJlZE1vZGVsLCBNb2RlbExpZmVjeWNsZUV2ZW50Lk1PREVMX1JFSU5JVElBTElaRUQpOwotCQkgaWYgKERFQlVHKSB7Ci0JCSBTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQkgfQotCQkgZXZlbnQgPSBuZXcgTW9kZWxMaWZlY3ljbGVFdmVudChzdHJ1Y3R1cmVkTW9kZWwsIE1vZGVsTGlmZWN5Y2xlRXZlbnQuQURBUFRFUlNfTk9USUZJRUQpOwotCQkgaWYgKERFQlVHKSB7Ci0JCSBTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQkgfQotCQkgZXZlbnQgPSBuZXcgTW9kZWxMaWZlY3ljbGVFdmVudChzdHJ1Y3R1cmVkTW9kZWwsIE1vZGVsTGlmZWN5Y2xlRXZlbnQuTU9ERUxfUkVMT0FERUQpOwotCQkgaWYgKERFQlVHKSB7Ci0JCSBTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQkgfQotCQkgZXZlbnQgPSBuZXcgTW9kZWxMaWZlY3ljbGVFdmVudChzdHJ1Y3R1cmVkTW9kZWwsIE1vZGVsTGlmZWN5Y2xlRXZlbnQuTU9ERUxfUkVTT1VSQ0VfREVMRVRFRCk7Ci0JCSBpZiAoREVCVUcpIHsKLQkJIFN5c3RlbS5vdXQucHJpbnRsbihldmVudCk7Ci0JCSB9Ci0JCSBldmVudCA9IG5ldyBNb2RlbExpZmVjeWNsZUV2ZW50KHN0cnVjdHVyZWRNb2RlbCwgTW9kZWxMaWZlY3ljbGVFdmVudC5NT0RFTF9SRVNPVVJDRV9NT1ZFRCk7Ci0JCSBpZiAoREVCVUcpIHsKLQkJIFN5c3RlbS5vdXQucHJpbnRsbihldmVudCk7Ci0JCSB9Ci0JCSAqLwotCQlldmVudCA9IG5ldyBNb2RlbExpZmVjeWNsZUV2ZW50KHN0cnVjdHVyZWRNb2RlbCwgTW9kZWxMaWZlY3ljbGVFdmVudC5NT0RFTF9TQVZFRCk7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGV2ZW50KTsKLQkJfQotCi0KLQkJLy8gaWYgZ2V0cyB0byBoZXJlIHdpdGhvdXQgZXhjZXB0aW9uLCBhc3N1bWUgb2suCi0JCWFzc2VydFRydWUodHJ1ZSk7Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGVzdE9mVGhyZWFkTG9jYWxJbXByb3ZlbWVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1Rlc3RPZlRocmVhZExvY2FsSW1wcm92ZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE5M2FkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGVzdE9mVGhyZWFkTG9jYWxJbXByb3ZlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLnRocmVhZGluZzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLQotLyoqCi0gKiBUbyBwcmludCBvdXQgdGltaW5ncywgc2V0IERFQlVHX1RFU1QgdG8gdHJ1ZSwgb3RoZXIgd2lzZSwgdGhpcyB0ZXN0IHBhc3NlcwotICogaWYgbm8gZXhjZXB0aW9ucyB0aHJvd24uCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0T2ZUaHJlYWRMb2NhbEltcHJvdmVtZW50IGV4dGVuZHMgVGVzdENhc2UgewotCS8vIG51bWJlciBvZiB0aW1lcyBhIHBhaXIgb2YgdGVzdHMgKHdpdGggYW5kIHdpdGhvdXQpIHRocmVhZCBsb2NhbCBhcmUgCi0JLy8gcmVwZWF0ZWQgKGZvciBtb3JlIGFjY3VyYXRlIGF2ZXJhZ2VzKS4KLQlpbnQgblRyaWFscyA9IDM7Ci0JSVN0cnVjdHVyZWREb2N1bWVudCBmRG9jdW1lbnQgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfVEVTVCA9IGZhbHNlOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfVEVTVF9ERVRBSUwgPSBmYWxzZTsKLQkvLyB0ZXN0cyBmcm9tIDEgdG8gTUFYX1RSRUFEUy0xIHRocmVhZHMKLQlwcml2YXRlIGludCBNQVhfVEhSRUFEUyA9IDU7Ci0JcHJpdmF0ZSBsb25nIFNMRUVQX1RJTUUgPSAwOwotCi0JcHVibGljIFRlc3RPZlRocmVhZExvY2FsSW1wcm92ZW1lbnQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzdXBlcigpOwotCX0KLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIGdldENvbnRlbnQoKSB7Ci0JCXJldHVybiAiPHRlc3Q+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+IjsKLQl9Ci0KLQlwcml2YXRlIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZ2V0RG9jdW1lbnQoU3RyaW5nIGNvbnRlbnQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChmRG9jdW1lbnQgPT0gbnVsbCkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJZkRvY3VtZW50ID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcigidGVzdFBlcmYueG1sIiwgY29udGVudCwgbnVsbCk7Ci0JCX0KLQkJcmV0dXJuIGZEb2N1bWVudDsKLQl9Ci0KLQl2b2lkIGxpbmtSdW5uZXIoZmluYWwgQm9vbGVhbiBkaXJlY3Rpb24sIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBkb2N1bWVudDsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBwcmV2aW91c0RvY3VtZW50UmVnaW9uID0gbnVsbDsKLQkJbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJaW50IHN0YXJ0ID0gMDsKLQkJaW50IGxlbmd0aCA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKTsKLQkJaW50IG5SZWdpb25zID0gMDsKLQkJZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgbGVuZ3RoOyBpKyspIHsKLQkJCWludCBpbmRleCA9IGk7Ci0JCQlpZiAoIWRpcmVjdGlvbi5ib29sZWFuVmFsdWUoKSkgewotCQkJCWluZGV4ID0gKGxlbmd0aCAtIDEpIC0gaTsKLQkJCX0KLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gY3VycmVudERvY3VtZW50UmVnaW9uID0gc3RydWN0dXJlZERvY3VtZW50LmdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KGluZGV4KTsKLQkJCWlmIChjdXJyZW50RG9jdW1lbnRSZWdpb24gIT0gcHJldmlvdXNEb2N1bWVudFJlZ2lvbikgewotCQkJCW5SZWdpb25zKys7Ci0JCQkJcHJldmlvdXNEb2N1bWVudFJlZ2lvbiA9IGN1cnJlbnREb2N1bWVudFJlZ2lvbjsKLQkJCX0KLQkJCVRocmVhZC55aWVsZCgpOwotCQkJdHJ5IHsKLQkJCQlUaHJlYWQuc2xlZXAoU0xFRVBfVElNRSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJbG9uZyBlbmRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCWlmIChERUJVR19URVNUX0RFVEFJTCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJUaHJlYWQ6ICIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpICsgIiAgIGZyb20gIiArIGxlbmd0aCArICIgY2hhcmFjdGVycywgZm91bmQgIiArIG5SZWdpb25zICsgIiByZWdpb25zIGluICIgKyAoZW5kVGltZSAtIHN0YXJ0VGltZSkgKyAiIG1zZWNzLiIpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBsb25nIGRvdGVzdERvY3VtZW50V2Fsa2luZ1dpdGhUaHJlYWRMb2NhbChpbnQgblRocmVhZHMpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUJhc2ljU3RydWN0dXJlZERvY3VtZW50LnNldFVTRV9MT0NBTF9USFJFQUQodHJ1ZSk7Ci0JCWZEb2N1bWVudCA9IGdldERvY3VtZW50KGdldENvbnRlbnQoKSk7Ci0JCWxvbmcgc3RhcnRUaW1lT3ZlcmFsbCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlkb0RvY3VtZW50V2Fsa2luZyhuVGhyZWFkcyk7Ci0JCWxvbmcgZW5kVGltZU92ZXJhbGwgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJbG9uZyBmaW5hbE92ZXJhbGwgPSBlbmRUaW1lT3ZlcmFsbCAtIHN0YXJ0VGltZU92ZXJhbGw7Ci0JCWlmIChERUJVR19URVNUX0RFVEFJTCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJPdmVyYWxsIHRpbWUgdXNpbmcgTG9jYWxfVGhyZWFkOiAiICsgZmluYWxPdmVyYWxsKTsKLQkJfQotCQlyZXR1cm4gZmluYWxPdmVyYWxsOwotCX0KLQotCXByaXZhdGUgbG9uZyBkb3Rlc3REb2N1bWVudFdhbGtpbmdXaXRob3V0VGhyZWFkTG9jYWwoaW50IG5UaHJlYWRzKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5zZXRVU0VfTE9DQUxfVEhSRUFEKGZhbHNlKTsKLQkJZkRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoZ2V0Q29udGVudCgpKTsKLQkJbG9uZyBzdGFydFRpbWVPdmVyYWxsID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCWRvRG9jdW1lbnRXYWxraW5nKG5UaHJlYWRzKTsKLQkJbG9uZyBlbmRUaW1lT3ZlcmFsbCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlsb25nIGZpbmFsT3ZlcmFsbCA9IGVuZFRpbWVPdmVyYWxsIC0gc3RhcnRUaW1lT3ZlcmFsbDsKLQkJaWYgKERFQlVHX1RFU1RfREVUQUlMKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIk92ZXJhbGwgdGltZSBOT1QgdXNpbmcgTG9jYWxfVGhyZWFkOiAiICsgZmluYWxPdmVyYWxsKTsKLQkJfQotCQlyZXR1cm4gZmluYWxPdmVyYWxsOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb0RvY3VtZW50V2Fsa2luZyhpbnQgblRocmVhZHMpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVRocmVhZFtdIHRocmVhZHMgPSBuZXcgVGhyZWFkW25UaHJlYWRzXTsKLQkJYm9vbGVhbiB0b2dnbGUgPSB0cnVlOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRocmVhZHMubGVuZ3RoOyBpKyspIHsKLQkJCWZpbmFsIEJvb2xlYW4gZGlyZWN0aW9uID0gbmV3IEJvb2xlYW4odG9nZ2xlKTsKLQkJCXRvZ2dsZSA9ICF0b2dnbGU7Ci0JCQlUaHJlYWRHcm91cCB0aHJlYWRHcm91cCA9IG5ldyBUaHJlYWRHcm91cCgic3NlIHVuaXQgdGVzdHMiKTsKLQkJCVRocmVhZCB0aHJlYWQgPSBuZXcgVGhyZWFkKHRocmVhZEdyb3VwLCBuZXcgUnVubmFibGUoKSB7Ci0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlsaW5rUnVubmVyKGRpcmVjdGlvbiwgZkRvY3VtZW50KTsKLQkJCQl9Ci0JCQl9LCAoInNzZSB1bml0IHRlc3QgdGhyZWFkICIgKyBpKSk7Ci0JCQkvLyBJIHVzZWQgTUlOX1BSSU9SSVRZIHNpbmNlIHRoYXQgbWFrZXMgaXQgZWFzaWVyIHRvICJzZWUiIGluIGRlYnVnZ2VyIGxpc3Qgb2YgdGhyZWFkcwotCQkJdGhyZWFkLnNldFByaW9yaXR5KFRocmVhZC5NSU5fUFJJT1JJVFkpOwotCQkJdGhyZWFkc1tpXSA9IHRocmVhZDsKLQkJfQotCQlmb3IgKGludCBpID0gMDsgaSA8IHRocmVhZHMubGVuZ3RoOyBpKyspIHsKLQkJCXRocmVhZHNbaV0uc3RhcnQoKTsKLQkJfQotCQl0cnkgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0aHJlYWRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJdGhyZWFkc1tpXS5qb2luKCk7Ci0KLQkJCX0KLQkJfQotCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROVGhyZWFkcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWZvciAoaW50IGkgPSAxOyBpIDwgTUFYX1RIUkVBRFM7IGkrKykgewotCQkJaW50IG5UaHJlYWRzID0gaTsKLQkJCWlmIChERUJVR19URVNUX0RFVEFJTCkgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiID4+Pj4tLS0tIE4gVGhyZWFkczogIiArIGkpOwotCQkJfQotCQkJZmxvYXQgd29DdW1tID0gMDsKLQkJCWZsb2F0IHdDdW1tID0gMDsKLQotCQkJZm9yIChpbnQgaiA9IDA7IGogPCBuVHJpYWxzOyBqKyspIHsKLQkJCQl3b0N1bW0gPSB3b0N1bW0gKyBkb3Rlc3REb2N1bWVudFdhbGtpbmdXaXRob3V0VGhyZWFkTG9jYWwoblRocmVhZHMpOwotCQkJCXdDdW1tID0gd0N1bW0gKyBkb3Rlc3REb2N1bWVudFdhbGtpbmdXaXRoVGhyZWFkTG9jYWwoblRocmVhZHMpOwotCQkJfQotCQkJZmxvYXQgYXZlcmFnZVdPID0gd29DdW1tIC8gblRyaWFsczsKLQkJCWZsb2F0IGF2ZXJhZ2VXID0gd0N1bW0gLyBuVHJpYWxzOwotCQkJZmxvYXQgcGVyVGhyZWFkV08gPSBhdmVyYWdlV08gLyBuVGhyZWFkczsKLQkJCWZsb2F0IHBlclRocmVhZFcgPSBhdmVyYWdlVyAvIG5UaHJlYWRzOwotCQkJaW50IHJvdW5kZWRXTyA9IG5ldyBGbG9hdChwZXJUaHJlYWRXTykuaW50VmFsdWUoKTsKLQkJCWludCByb3VuZGVkVyA9IG5ldyBGbG9hdChwZXJUaHJlYWRXKS5pbnRWYWx1ZSgpOwotCQkJaWYgKERFQlVHX1RFU1QpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkF2ZXJhZ2UgcGVyIHRocmVhZDogd2l0aG91dDogIiArIHJvdW5kZWRXTyArICIgd2l0aDogIiArIHJvdW5kZWRXKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiA8PDw8PC0tLS0gTiBUaHJlYWRzOiAiICsgaSk7Ci0JCQl9Ci0JCX0KLQkJLy8gaWYgZ2V0cyB0byBoZXJlICh3aXRoIG5vIGV4Y2VwdGlvbnMpIGFsbCBpcyBvay4KLQkJYXNzZXJ0VHJ1ZSgwID09IDApOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGVzdE9mVGhyZWFkTG9jYWxXaXRoQ2hhbmdlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1Rlc3RPZlRocmVhZExvY2FsV2l0aENoYW5nZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNjNjQzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGVzdE9mVGhyZWFkTG9jYWxXaXRoQ2hhbmdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLnRocmVhZGluZzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5CYXNpY1N0cnVjdHVyZWREb2N1bWVudDsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3Mgc3RhcnRlZCBvZmYgYXMgY29weSBvZiBUZXN0T2ZUaHJlYWRMb2NhbEltcHJvdmVtZW50cywgYW5kIEkganVzdAotICogYWRkZWQgYW5vdGhlciB0aHJlYWQgd2l0aCBtb2RpZmllcyB0aGUgZG9jdW1lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0T2ZUaHJlYWRMb2NhbFdpdGhDaGFuZ2VzIGV4dGVuZHMgVGVzdENhc2UgewotCS8vIG51bWJlciBvZiB0aW1lcyBhIHBhaXIgb2YgdGVzdHMgKHdpdGggYW5kIHdpdGhvdXQpIHRocmVhZCBsb2NhbCBhcmUKLQkvLyByZXBlYXRlZCAoZm9yIG1vcmUgYWNjdXJhdGUgYXZlcmFnZXMpLgotCWludCBuVHJpYWxzID0gMzsKLQlJU3RydWN0dXJlZERvY3VtZW50IGZEb2N1bWVudCA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19URVNUX0RFVEFJTCA9IGZhbHNlOwotCS8vIHRlc3RzIGZyb20gMSB0byBNQVhfVFJFQURTLTEgdGhyZWFkcwotCXByaXZhdGUgaW50IE1BWF9USFJFQURTID0gMTQ7Ci0JcHJpdmF0ZSBsb25nIFNMRUVQX1RJTUUgPSAyOwotCXByaXZhdGUgaW50IE5fQ0hBTkdFUyA9IDEwMDAwOwotCi0JcHVibGljIFRlc3RPZlRocmVhZExvY2FsV2l0aENoYW5nZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzdXBlcigpOwotCX0KLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIGdldENvbnRlbnQoKSB7Ci0JCXJldHVybiAiPHRlc3Q+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+IjsKLQl9Ci0KLQlwcml2YXRlIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZ2V0RG9jdW1lbnQoU3RyaW5nIGNvbnRlbnQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChmRG9jdW1lbnQgPT0gbnVsbCkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJZkRvY3VtZW50ID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcigidGVzdFBlcmYueG1sIiwgY29udGVudCwgbnVsbCk7Ci0JCX0KLQkJcmV0dXJuIGZEb2N1bWVudDsKLQl9Ci0KLQl2b2lkIGxpbmtSdW5uZXIoZmluYWwgQm9vbGVhbiBkaXJlY3Rpb24sIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBkb2N1bWVudDsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBwcmV2aW91c0RvY3VtZW50UmVnaW9uID0gbnVsbDsKLQkJbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJaW50IHN0YXJ0ID0gMDsKLQkJaW50IGxlbmd0aCA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKTsKLQkJaW50IG5SZWdpb25zID0gMDsKLQkJLy8gSSBtYWRlIGxlbmd0aCAiZHluYW1pYyIgYWZ0ZXIgYWRkaW5nIG1vZGlmaWNhdGlvbiB0aHJlYWQKLQkJZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpOyBpKyspIHsKLQkJCWludCBpbmRleCA9IGk7Ci0JCQlpZiAoIWRpcmVjdGlvbi5ib29sZWFuVmFsdWUoKSkgewotCQkJCWludCBjdXJyZW50TGVuZ3RoID0gc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpOwotCQkJCWluZGV4ID0gKGN1cnJlbnRMZW5ndGggLSAxKSAtIGk7Ci0JCQl9Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGN1cnJlbnREb2N1bWVudFJlZ2lvbiA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRSZWdpb25BdENoYXJhY3Rlck9mZnNldChpbmRleCk7Ci0JCQlpZiAoY3VycmVudERvY3VtZW50UmVnaW9uICE9IHByZXZpb3VzRG9jdW1lbnRSZWdpb24pIHsKLQkJCQluUmVnaW9ucysrOwotCQkJCXByZXZpb3VzRG9jdW1lbnRSZWdpb24gPSBjdXJyZW50RG9jdW1lbnRSZWdpb247Ci0JCQl9Ci0JCQlUaHJlYWQueWllbGQoKTsKLQkJCXRyeSB7Ci0JCQkJVGhyZWFkLnNsZWVwKFNMRUVQX1RJTUUpOwotCQkJfQotCQkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCWxvbmcgZW5kVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlpZiAoREVCVUdfVEVTVF9ERVRBSUwpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGhyZWFkOiAiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSArICIgICBmcm9tICIgKyBsZW5ndGggKyAiIGNoYXJhY3RlcnMsIGZvdW5kICIgKyBuUmVnaW9ucyArICIgcmVnaW9ucyBpbiAiICsgKGVuZFRpbWUgLSBzdGFydFRpbWUpICsgIiBtc2Vjcy4iKTsKLQkJfQotCX0KLQotCXByaXZhdGUgbG9uZyBkb3Rlc3REb2N1bWVudFdhbGtpbmdXaXRoVGhyZWFkTG9jYWwoaW50IG5UaHJlYWRzKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5zZXRVU0VfTE9DQUxfVEhSRUFEKHRydWUpOwotCQlmRG9jdW1lbnQgPSBnZXREb2N1bWVudChnZXRDb250ZW50KCkpOwotCQlsb25nIHN0YXJ0VGltZU92ZXJhbGwgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJZG9Eb2N1bWVudFdhbGtpbmcoblRocmVhZHMpOwotCQlsb25nIGVuZFRpbWVPdmVyYWxsID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCWxvbmcgZmluYWxPdmVyYWxsID0gZW5kVGltZU92ZXJhbGwgLSBzdGFydFRpbWVPdmVyYWxsOwotCQlpZiAoREVCVUdfVEVTVF9ERVRBSUwpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiT3ZlcmFsbCB0aW1lIHVzaW5nIExvY2FsX1RocmVhZDogIiArIGZpbmFsT3ZlcmFsbCk7Ci0JCX0KLQkJcmV0dXJuIGZpbmFsT3ZlcmFsbDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9Eb2N1bWVudFdhbGtpbmcoaW50IG5UaHJlYWRzKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlUaHJlYWRbXSB0aHJlYWRzID0gbmV3IFRocmVhZFtuVGhyZWFkc107Ci0JCWJvb2xlYW4gdG9nZ2xlID0gdHJ1ZTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0aHJlYWRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlmaW5hbCBCb29sZWFuIGRpcmVjdGlvbiA9IG5ldyBCb29sZWFuKHRvZ2dsZSk7Ci0JCQkvLyB0b2dnbGUgY29udHJvbHMgd2hldGhlciBtb3ZlcyBmcm9tIHN0YXJ0IHRvIGVuZCwgb3IgZW5kIHRvIHN0YXJ0Ci0JCQkvLyBvZiBkb2N1bWVudC4KLQkJCXRvZ2dsZSA9ICF0b2dnbGU7Ci0JCQlUaHJlYWRHcm91cCB0aHJlYWRHcm91cCA9IG5ldyBUaHJlYWRHcm91cCgidW5pdCB0ZXN0cyIpOwotCQkJVGhyZWFkIHRocmVhZCA9IG5ldyBUaHJlYWQodGhyZWFkR3JvdXAsIG5ldyBSdW5uYWJsZSgpIHsKLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCWxpbmtSdW5uZXIoZGlyZWN0aW9uLCBmRG9jdW1lbnQpOwotCQkJCX0KLQkJCX0sICgic3NlIHVuaXQgdGVzdCB0aHJlYWQgIiArIGkpKTsKLQkJCS8vIEkgdXNlZCBNSU5fUFJJT1JJVFkgc2luY2UgdGhhdCBtYWtlcyBpdCBlYXNpZXIgdG8gInNlZSIgaW4KLQkJCS8vIGRlYnVnZ2VyIGxpc3Qgb2YgdGhyZWFkcwotCQkJdGhyZWFkLnNldFByaW9yaXR5KFRocmVhZC5NSU5fUFJJT1JJVFkpOwotCQkJdGhyZWFkc1tpXSA9IHRocmVhZDsKLQkJfQotCQlmb3IgKGludCBpID0gMDsgaSA8IHRocmVhZHMubGVuZ3RoOyBpKyspIHsKLQkJCXRocmVhZHNbaV0uc3RhcnQoKTsKLQkJfQotCQkvLyBub3cgdGhhdCAicmVhZGVycyIgaGF2ZSBzdGFydGVkLCB3ZSdsbCBzdGFydCBhIG1vZGlmaWNhdGlvbiB0aHJlYWQKLQkJLy8gdG9vCi0JCVRocmVhZCBtb2RpZnlpbmdUaHJlYWQgPSBuZXcgVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQltb2RpZml5RG9jdW1lbnQoZkRvY3VtZW50KTsKLQkJCX0KLQkJfSwgKCJzc2UgdW5pdCB0ZXN0IG1vZGlmaWNhdGlvbiB0aHJlYWQgIikpOwotCQkvLyBJIHVzZWQgTUFYX1BSSU9SSVRZIHRvIGJlIHN1cmUgbG90cyBvZiBtb2RpZmljYXRpb25zIHRha2UgcGxhY2UKLQkJbW9kaWZ5aW5nVGhyZWFkLnNldFByaW9yaXR5KFRocmVhZC5NSU5fUFJJT1JJVFkpOwotCQltb2RpZnlpbmdUaHJlYWQuc3RhcnQoKTsKLQkJdHJ5IHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdGhyZWFkcy5sZW5ndGg7IGkrKykgewotCQkJCXRocmVhZHNbaV0uam9pbigpOwotCQkJfQotCQkJbW9kaWZ5aW5nVGhyZWFkLmpvaW4oKTsKLQkJfQotCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCXZvaWQgbW9kaWZpeURvY3VtZW50KElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQkJUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBOX0NIQU5HRVMgKyAxOyBpKyspIHsKLQkJCWludCByYW5kb21PZmZzZXQgPSByYW5kb20ubmV4dEludChkb2N1bWVudC5nZXRMZW5ndGgoKSk7Ci0JCQkvLyAxMDAganVzdCBzZWVtcyBsaWtlIGEgZ29vZCBtYXhpbXVtIGxlbmd0aCB0byByZXBsYWNlCi0JCQkvLyAoY291bGQgcGxheSB3aXRoIGluIGZ1dHVyZSkuCi0JCQlpbnQgcmFuZG9tTGVuZ3RoID0gcmFuZG9tLm5leHRJbnQoMTAwKTsKLQkJCS8vIGlmIHdlICJhY2NpZGVudGx5IiBnZXQgbW9yZSB0aGFuIHRoZSBsZW5ndGgsIGp1c3Qgc2tpcGl0Ci0JCQlpZiAocmFuZG9tT2Zmc2V0ICsgcmFuZG9tTGVuZ3RoIDwgZG9jdW1lbnQuZ2V0TGVuZ3RoKCkpIHsKLQkJCQlkb2N1bWVudC5yZXBsYWNlVGV4dCh0aGlzLCByYW5kb21PZmZzZXQsIHJhbmRvbUxlbmd0aCwgInRlc3Rpbmd0ZXh0Iik7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TlRocmVhZHMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlmb3IgKGludCBpID0gMTsgaSA8IE1BWF9USFJFQURTOyBpKyspIHsKLQkJCWludCBuVGhyZWFkcyA9IGk7Ci0JCQlpZiAoREVCVUdfVEVTVF9ERVRBSUwpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiA+Pj4+LS0tLSBOIFRocmVhZHM6ICIgKyBpKTsKLQkJCX0KLQkJCWZsb2F0IHdDdW1tID0gMDsKLQkJCWZvciAoaW50IGogPSAwOyBqIDwgblRyaWFsczsgaisrKSB7Ci0JCQkJd0N1bW0gPSB3Q3VtbSArIGRvdGVzdERvY3VtZW50V2Fsa2luZ1dpdGhUaHJlYWRMb2NhbChuVGhyZWFkcyk7Ci0JCQl9Ci0JCX0KLQkJLy8gaWYgZ2V0cyB0byBoZXJlICh3aXRoIG5vIGV4Y2VwdGlvbnMpIGFsbCBpcyBvay4KLQkJYXNzZXJ0VHJ1ZSgwID09IDApOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGhyZWFkTG9jYWxFeGFtcGxlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGhyZWFkTG9jYWxFeGFtcGxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0N2QwMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1RocmVhZExvY2FsRXhhbXBsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMudGhyZWFkaW5nOwotCi1pbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKLQotLyoqCi0gKiBTZWUgaHR0cDovL2phdmEuc3VuLmNvbS9kZXZlbG9wZXIvSkRDVGVjaFRpcHMvMjAwMy90dDEyMDguaHRtbCMyIGZvcgotICogaW5mb3JtYXRpdmUgYXJ0aWNsZS4KLSAqLwotcHVibGljIGNsYXNzIFRocmVhZExvY2FsRXhhbXBsZSB7Ci0KLQkvLyBDcmVhdGUgdGhyZWFkIGxvY2FsIGNsYXNzCi0JLy8gSW5pdGlhbCB2YWx1ZSBpcyBhIHJhbmRvbSBudW1iZXIgZnJvbSAwLTk5OQotCXByaXZhdGUgc3RhdGljIGNsYXNzIE15VGhyZWFkTG9jYWwgZXh0ZW5kcyBUaHJlYWRMb2NhbCB7Ci0JCXByaXZhdGUgUmFuZG9tIGlubmVyUmFuZG9tID0gbmV3IFJhbmRvbSgpOwotCi0JCXByb3RlY3RlZCBPYmplY3QgaW5pdGlhbFZhbHVlKCkgewotCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKGlubmVyUmFuZG9tLm5leHRJbnQoMTAwMCkpOwotCQl9Ci0JfQotCi0JLy8gQ3JlYXRlIGNsYXNzIHZhcmlhYmxlCi0Jc3RhdGljIHZvbGF0aWxlIGludCBjb3VudGVyID0gMDsKLQotCS8vIERlZmluZS9jcmVhdGUgdGhyZWFkIGxvY2FsIHZhcmlhYmxlCi0Jc3RhdGljIFRocmVhZExvY2FsIHRocmVhZExvY2FsID0gbmV3IE15VGhyZWFkTG9jYWwoKTsKLQotCS8vIEZvciByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24KLQkvLyBzdGF0aWMgUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsKLQotCS8vIERpc3BsYXlzIHRocmVhZCBsb2NhbCB2YXJpYWJsZSwgY291bnRlciwKLQkvLyBhbmQgdGhyZWFkIG5hbWUKLQlzdGF0aWMgdm9pZCBkaXNwbGF5VmFsdWVzKCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4odGhyZWFkTG9jYWwuZ2V0KCkgKyAiXHQiICsgY291bnRlciArICJcdCIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldE5hbWUoKSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewotCi0JCS8vIEVhY2ggdGhyZWFkIGluY3JlbWVudHMgY291bnRlcgotCQkvLyBEaXNwbGF5cyB2YXJpYWJsZSBpbmZvCi0JCS8vIEFuZCBzbGVlcHMgZm9yIHRoZSByYW5kb20gYW1vdW50IG9mIHRpbWUKLQkJLy8gQmVmb3JlIGRpc3BsYXlpbmcgaW5mbyBhZ2FpbgotCQlSdW5uYWJsZSBydW5uZXIgPSBuZXcgUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJc3luY2hyb25pemVkIChUaHJlYWRMb2NhbEV4YW1wbGUuY2xhc3MpIHsKLQkJCQkJY291bnRlcisrOwotCQkJCX0KLQkJCQlkaXNwbGF5VmFsdWVzKCk7Ci0JCQkJdHJ5IHsKLQkJCQkJVGhyZWFkLnNsZWVwKCgoSW50ZWdlcikgdGhyZWFkTG9jYWwuZ2V0KCkpLmludFZhbHVlKCkpOwotCQkJCQlkaXNwbGF5VmFsdWVzKCk7Ci0JCQkJfQotCQkJCWNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJfQotCQkJfQotCQl9OwotCi0JCS8vIEFub3RoZXIgaW5zdGFuY2Ugb2YgY2xhc3MgY3JlYXRlZAotCQkvLyBhbmQgdmFsdWVzIGRpc3BsYXllZAotCQlkaXNwbGF5VmFsdWVzKCk7Ci0KLQkJLy8gSGVyZSdzIHdoZXJlIHRoZSBvdGhlciB0aHJlYWRzCi0JCS8vIGFyZSBhY3R1YWxseSBjcmVhdGVkCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7Ci0JCQlUaHJlYWQgdCA9IG5ldyBUaHJlYWQocnVubmVyKTsKLQkJCXQuc3RhcnQoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqICAKLQkgKi8KLQlwdWJsaWMgVGhyZWFkTG9jYWxFeGFtcGxlKCkgewotCQlzdXBlcigpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGhyZWFkTG9jYWxJbnN0YW5jZUV4YW1wbGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL3RocmVhZGluZy9UaHJlYWRMb2NhbEluc3RhbmNlRXhhbXBsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDA4ZjU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL3RocmVhZGluZy9UaHJlYWRMb2NhbEluc3RhbmNlRXhhbXBsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMudGhyZWFkaW5nOwotCi1pbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKLQotLyoqCi0gKiBTZWUgaHR0cDovL2phdmEuc3VuLmNvbS9kZXZlbG9wZXIvSkRDVGVjaFRpcHMvMjAwMy90dDEyMDguaHRtbCMyIGZvcgotICogaW5mb3JtYXRpdmUgYXJ0aWNsZS4KLSAqLwotcHVibGljIGNsYXNzIFRocmVhZExvY2FsSW5zdGFuY2VFeGFtcGxlIHsKLQotCS8vIENyZWF0ZSB0aHJlYWQgbG9jYWwgY2xhc3MKLQkvLyBJbml0aWFsIHZhbHVlIGlzIGEgcmFuZG9tIG51bWJlciBmcm9tIDAtOTk5Ci0JcHJpdmF0ZSBjbGFzcyBNeVRocmVhZExvY2FsIGV4dGVuZHMgVGhyZWFkTG9jYWwgewotCQlwcml2YXRlIFJhbmRvbSBpbm5lclJhbmRvbSA9IG5ldyBSYW5kb20oKTsKLQotCQlwcm90ZWN0ZWQgT2JqZWN0IGluaXRpYWxWYWx1ZSgpIHsKLQkJCXJldHVybiBuZXcgSW50ZWdlcihpbm5lclJhbmRvbS5uZXh0SW50KDEwMDApKTsKLQkJfQotCX0KLQotCS8vIENyZWF0ZSBjbGFzcyB2YXJpYWJsZQotCXN0YXRpYyB2b2xhdGlsZSBpbnQgY291bnRlciA9IDA7Ci0KLQkvLyBEZWZpbmUvY3JlYXRlIHRocmVhZCBsb2NhbCB2YXJpYWJsZQotCVRocmVhZExvY2FsIHRocmVhZExvY2FsID0gbmV3IE15VGhyZWFkTG9jYWwoKTsKLQotCS8vIEZvciByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24KLQkvLyBzdGF0aWMgUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsKLQotCS8vIERpc3BsYXlzIHRocmVhZCBsb2NhbCB2YXJpYWJsZSwgY291bnRlciwKLQkvLyBhbmQgdGhyZWFkIG5hbWUKLQl2b2lkIGRpc3BsYXlWYWx1ZXMoKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbih0aHJlYWRMb2NhbC5nZXQoKSArICJcdCIgKyBjb3VudGVyICsgIlx0IiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7Ci0JCW5ldyBUaHJlYWRMb2NhbEluc3RhbmNlRXhhbXBsZSgpLnN0YXJ0UnVuKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHN0YXJ0UnVuKCkgewotCi0JCS8vIEVhY2ggdGhyZWFkIGluY3JlbWVudHMgY291bnRlcgotCQkvLyBEaXNwbGF5cyB2YXJpYWJsZSBpbmZvCi0JCS8vIEFuZCBzbGVlcHMgZm9yIHRoZSByYW5kb20gYW1vdW50IG9mIHRpbWUKLQkJLy8gQmVmb3JlIGRpc3BsYXlpbmcgaW5mbyBhZ2FpbgotCQlSdW5uYWJsZSBydW5uZXIgPSBuZXcgUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJc3luY2hyb25pemVkICh0aGlzKSB7Ci0JCQkJCWNvdW50ZXIrKzsKLQkJCQl9Ci0JCQkJZGlzcGxheVZhbHVlcygpOwotCQkJCXRyeSB7Ci0JCQkJCVRocmVhZC5zbGVlcCgoKEludGVnZXIpIHRocmVhZExvY2FsLmdldCgpKS5pbnRWYWx1ZSgpKTsKLQkJCQkJZGlzcGxheVZhbHVlcygpOwotCQkJCX0KLQkJCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCX0KLQkJCX0KLQkJfTsKLQotCQkvLyBBbm90aGVyIGluc3RhbmNlIG9mIGNsYXNzIGNyZWF0ZWQKLQkJLy8gYW5kIHZhbHVlcyBkaXNwbGF5ZWQKLQkJZGlzcGxheVZhbHVlcygpOwotCi0JCS8vIEhlcmUncyB3aGVyZSB0aGUgb3RoZXIgdGhyZWFkcwotCQkvLyBhcmUgYWN0dWFsbHkgY3JlYXRlZAotCQlmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykgewotCQkJVGhyZWFkIHQgPSBuZXcgVGhyZWFkKHJ1bm5lcik7Ci0JCQl0LnN0YXJ0KCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiAgCi0JICovCi0JcHVibGljIFRocmVhZExvY2FsSW5zdGFuY2VFeGFtcGxlKCkgewotCQlzdXBlcigpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExZDhkYzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0Ci0JbmFtZT0idGVzdHN1aXRlIgotCWRlZmF1bHQ9InJ1biIKLQliYXNlZGlyPSIuIj4KLQk8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotCTwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0JPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIgLz4gLS0+Ci0KLQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JPGVjaG8gbWVzc2FnZT0iZWNsaXBzZSBwbGFjZSAke2VjbGlwc2UtaG9tZX0iIC8+Ci0KLQk8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgcGx1Z2luLW5hbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9InBsdWdpbi1uYW1lIgotCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzIiAvPgotCTxwcm9wZXJ0eQotCQluYW1lPSJsaWJyYXJ5LWZpbGUiCi0JCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLQkJPHRzdGFtcCAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQKLQkJCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLQkJCQlpbmNsdWRlcz0ib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLip4bWwiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLQk8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQkJPHByb3BlcnR5Ci0JCQluYW1lPSJ3c3QtZm9sZGVyIgotCQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93c3RfZm9sZGVyIiAvPgotCQk8ZGVsZXRlCi0JCQlkaXI9IiR7d3N0LWZvbGRlcn0iCi0JCQlxdWlldD0idHJ1ZSIgLz4KLQkJPGFudAotCQkJdGFyZ2V0PSJjb3JlLXRlc3QiCi0JCQlhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0JCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJkYXRhLWRpciIKLQkJCQl2YWx1ZT0iJHt3c3QtZm9sZGVyfSIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9InBsdWdpbi1uYW1lIgotCQkJCXZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImNsYXNzbmFtZSIKLQkJCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLlNTRU1vZGVsVGVzdFN1aXRlIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0icGx1Z2luLXBhdGgiCi0JCQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLQk8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLQkJPCEtLTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPi0tPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLQk8dGFyZ2V0Ci0JCW5hbWU9InJ1biIKLQkJZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLQkJPGFudAotCQkJdGFyZ2V0PSJjb2xsZWN0IgotCQkJYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iaW5jbHVkZXMiCi0JCQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy4qeG1sIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0ib3V0cHV0LWZpbGUiCi0JCQkJdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLQkJPC9hbnQ+Ci0JCTwhLS0JCTxlbWFpbFJlc3VsdHMgcmVzdWx0c0ZpbGU9IiR7YnVpbGQtcmVzdWx0cy1ob21lfS8ke3BsdWdpbi1uYW1lfS54bWwiIGFkZHJlc3NsaXN0PSJkYXZpZF93aWxsaWFtc0B1cy5pYm0uY29tIiAvPiAtLT4KLQk8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUxYzhmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MmExZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXNzZWVkaXRvcnRlc3RzLmphcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMDcyYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz48L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkOGI1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjM3OjIxIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFjNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyNDk1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jU3VuIEFwciAxNiAxNDowNToyOSBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk3MTI1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHM7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4wCi1CdW5kbGUtQ2xhc3NQYXRoOiBzc2VlZGl0b3J0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuU1NFVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy52aWV3ZXIKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS51aS5pZGUsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS51aSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmp1bml0LAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yLAotIG9yZy5lY2xpcHNlLnVpLmVkaXRvcnMsCi0gb3JnLmVjbGlwc2UuamZhY2UudGV4dCwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5tb2R1bGVjb3JlLAotIGNvbS5pYm0uaWN1Ci1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWM1OTg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPk1heSAyLCAyMDA2PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE3ZjQxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotc291cmNlLnNzZWVkaXRvcnRlc3RzLmphciA9IHNyYy8KLW91dHB1dC5zc2VlZGl0b3J0ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHNzZWVkaXRvcnRlc3RzLmphcixcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWViZGI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjRlMWZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlLm9yZwotQnVuZGxlLU5hbWUuMCA9IFN0cnVjdHVyZWQgU291cmNlIEVkaXRvciBUZXN0cwotZWRpdG9yLm5hbWUuMCA9IEdlbmVyaWMgU3RydWN0dXJlZCBUZXh0IEVkaXRvcgotY2F0ZWdvcnkubmFtZS4wID0gU1NFIFRlc3RpbmcKLXZpZXcubmFtZS4wID0gRXh0ZW5kZWRTdG9yYWdlRWRpdG9ySW5wdXQgTWFuYWdlbWVudCBUZXN0ZXIKLXZpZXcubmFtZS4xID0gQWN0aW9uIFRlc3RlcgotYWN0aW9uLmxhYmVsLjAgPSBvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIFRlc3QgQWN0aW9uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTAwZjgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08cGx1Z2luPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuZWRpdG9ycyI+Ci0JCTxlZGl0b3IKLQkJCW5hbWU9IiVlZGl0b3IubmFtZS4wIgotCQkJZXh0ZW5zaW9ucz0icHJvamVjdCwgY2xhc3NwYXRoLCB3ZWJzZXR0aW5ncywgc2VydmVyUHJlZmVyZW5jZSIKLQkJCWljb249IiRubCQvaWNvbnMvc291cmNlRWRpdG9yLmdpZiIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yIgotCQkJY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5hY3Rpb25zLkFjdGlvbkNvbnRyaWJ1dG9yIgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IudGVzdCI+Ci0JCTwvZWRpdG9yPgotCTwvZXh0ZW5zaW9uPgotCQotCTwhLS0gRWRpdG9yIGFjdGlvbnNldHMgLS0+Ci0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuYWN0aW9uU2V0UGFydEFzc29jaWF0aW9ucyI+Ci0JCTxhY3Rpb25TZXRQYXJ0QXNzb2NpYXRpb24KLQkJCXRhcmdldElEPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuYWN0aW9uU2V0LmFubm90YXRpb25OYXZpZ2F0aW9uIj4KLQkJCTxwYXJ0Ci0JCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IudGVzdCI+Ci0JCQk8L3BhcnQ+Ci0JCTwvYWN0aW9uU2V0UGFydEFzc29jaWF0aW9uPgotCQk8YWN0aW9uU2V0UGFydEFzc29jaWF0aW9uCi0JCQl0YXJnZXRJRD0ib3JnLmVjbGlwc2UudWkuTmF2aWdhdGVBY3Rpb25TZXQiPgotCQkJPHBhcnQKLQkJCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvci50ZXN0Ij4KLQkJCTwvcGFydD4KLQkJPC9hY3Rpb25TZXRQYXJ0QXNzb2NpYXRpb24+Ci0JPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3cyI+Ci0JCTxjYXRlZ29yeQotCQkJbmFtZT0iJWNhdGVnb3J5Lm5hbWUuMCIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzIj4KLQkJPC9jYXRlZ29yeT4KLQkJPHZpZXcKLQkJCW5hbWU9IiV2aWV3Lm5hbWUuMCIKLQkJCWNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuRXh0ZW5kZWRTdG9yYWdlRWRpdG9ySW5wdXRWaWV3IgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuRXh0ZW5kZWRTdG9yYWdlRWRpdG9ySW5wdXRWaWV3Ij4KLQkJPC92aWV3PgotCQk8dmlldwotCQkJbmFtZT0iJXZpZXcubmFtZS4xIgotCQkJY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy5BY3Rpb25UZXN0VmlldyIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLkFjdGlvblRlc3RWaWV3Ij4KLQkJPC92aWV3PgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyI+Ci0JCTx2aWV3ZXJDb250cmlidXRpb24KLQkJCXRhcmdldElEPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yLkVkaXRvckNvbnRleHQiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy50ZXN0Ij4KLQkJCTxhY3Rpb24KLQkJCQlsYWJlbD0iJWFjdGlvbi5sYWJlbC4wIgotCQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLlRlc3RBY3Rpb25EZWxlZ2F0ZSIKLQkJCQltZW51YmFyUGF0aD0iYWRkaXRpb25zIgotCQkJCWlkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLnRlc3QuMSIgLz4KLQkJPC92aWV3ZXJDb250cmlidXRpb24+Ci0JPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmVkaXRvckNvbmZpZ3VyYXRpb24iPgotCQk8cHJvdmlzaW9uYWxDb25maWd1cmF0aW9uCi0JCQl0eXBlPSJsaW5lc3R5bGVwcm92aWRlciIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLlRlc3RMaW5lU3R5bGVQcm92aWRlciIKLQkJCXRhcmdldD0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwuU0NSSVBULmxhbmd1YWdlLkJMVUUiIC8+Ci0JCTxwcm92aXNpb25hbENvbmZpZ3VyYXRpb24KLQkJCXR5cGU9ImxpbmVzdHlsZXByb3ZpZGVyIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuVGVzdExpbmVTdHlsZVByb3ZpZGVyIgotCQkJdGFyZ2V0PSJvcmcuZWNsaXBzZS53c3QuaHRtbC5TQ1JJUFQudHlwZS5URVhUL0JMVUUiIC8+Ci0JCTxwcm92aXNpb25hbENvbmZpZ3VyYXRpb24KLQkJCXR5cGU9ImxpbmVzdHlsZXByb3ZpZGVyIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuVGVzdExpbmVTdHlsZVByb3ZpZGVyIgotCQkJdGFyZ2V0PSJvcmcuZWNsaXBzZS5qc3QuanNwLlNDUklQVC5CTFVFIiAvPgotCTwvZXh0ZW5zaW9uPgotCQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0FjdGlvblRlc3RWaWV3LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0FjdGlvblRlc3RWaWV3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjOGM3ZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9BY3Rpb25UZXN0Vmlldy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuQ29tcG9uZW50Q29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsUmVzb3VyY2U7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIG5pdGluCi0gKiAKLSAqIEEgdmlldyB0byBoYW5nIGFjdGlvbnMgb2ZmIG9mIHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUgYXQgYXJiaXRyYXJ5IHRpbWVzLgotICovCi1wdWJsaWMgY2xhc3MgQWN0aW9uVGVzdFZpZXcgZXh0ZW5kcyBWaWV3UGFydCB7Ci0KLQlwcml2YXRlIGNsYXNzIENvbXBvbmVudFZpZXdlciBleHRlbmRzIEFjdGlvbiB7Ci0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJaWYgKGZTZWxlY3Rpb24gIT0gbnVsbCAmJiAhZlNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgZlNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBmU2VsZWN0aW9uOwotCQkJCWlmIChzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCkgaW5zdGFuY2VvZiBJUmVzb3VyY2UpIHsKLQkJCQkJSVJlc291cmNlIHJlc291cmNlID0gKElSZXNvdXJjZSkgc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCQkJCQlJVmlydHVhbFJlc291cmNlW10gdmlydHVhbFJlc291cmNlcyA9IENvbXBvbmVudENvcmUuY3JlYXRlUmVzb3VyY2VzKHJlc291cmNlLmdldFByb2plY3QoKSk7Ci0JCQkJCS8vIE9ubHkgcmV0dXJuIHJlc3VsdHMgZm9yIEZsZXhpYmxlIHByb2plY3RzCi0JCQkJCWlmICh2aXJ0dWFsUmVzb3VyY2VzICE9IG51bGwpIHsKLQkJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdmlydHVhbFJlc291cmNlcy5sZW5ndGg7IGkrKykgewotCQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbih2aXJ0dWFsUmVzb3VyY2VzW2ldLmdldENvbXBvbmVudCgpLmdldFJvb3RGb2xkZXIoKS5nZXRXb3Jrc3BhY2VSZWxhdGl2ZVBhdGgoKSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQljbGFzcyBFbXB0eVRleHRTZXR0ZXIgZXh0ZW5kcyBBY3Rpb24gewotCQlwdWJsaWMgRW1wdHlUZXh0U2V0dGVyKCkgewotCQkJc3VwZXIoIlNldCBUZXh0IEVkaXRvciB0ZXh0IHRvIGVtcHR5Iik7Ci0JCQlzZXRUb29sVGlwVGV4dCgiU2V0IFRleHQgRWRpdG9yIHRleHQgdG8gZW1wdHkgdXNpbmcgc2V0KCkgQVBJIik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQlzdXBlci5ydW4oKTsKLQkJCUlFZGl0b3JQYXJ0IGVkaXRvciA9IGdldFZpZXdTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQkJSVRleHRFZGl0b3IgdGV4dEVkaXRvciA9IG51bGw7Ci0JCQlpZiAoZWRpdG9yIGluc3RhbmNlb2YgSVRleHRFZGl0b3IpCi0JCQkJdGV4dEVkaXRvciA9IChJVGV4dEVkaXRvcikgZWRpdG9yOwotCQkJZWxzZQotCQkJCXRleHRFZGl0b3IgPSAoSVRleHRFZGl0b3IpIGVkaXRvci5nZXRBZGFwdGVyKElUZXh0RWRpdG9yLmNsYXNzKTsKLQkJCWlmICh0ZXh0RWRpdG9yICE9IG51bGwpIHsKLQkJCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSB0ZXh0RWRpdG9yLmdldERvY3VtZW50UHJvdmlkZXIoKS5nZXREb2N1bWVudChlZGl0b3IuZ2V0RWRpdG9ySW5wdXQoKSk7Ci0JCQkJZG9jdW1lbnQuc2V0KCIiKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXByaW50KCJFcnJvciBnZXR0aW5nIElEb2N1bWVudC5cbiIpOwotCQkJfQotCQl9Ci0JfQotCi0JQ29udHJvbCBmQ29udHJvbCA9IG51bGw7Ci0KLQlJU2VsZWN0aW9uIGZTZWxlY3Rpb247Ci0JcHJpdmF0ZSBJU2VsZWN0aW9uTGlzdGVuZXIgZlNlbGVjdGlvbkxpc3RlbmVyOwotCi0JcHJpdmF0ZSBMaXN0IGNyZWF0ZUFjdGlvbnMoKSB7Ci0JCUxpc3QgYWN0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQotCQlhY3Rpb25zLmFkZChuZXcgRW1wdHlUZXh0U2V0dGVyKCkpOwotCQlhY3Rpb25zLmFkZChuZXcgQ29tcG9uZW50Vmlld2VyKCkpOwotCQlyZXR1cm4gYWN0aW9uczsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBMaXN0IGNyZWF0ZUNvbnRyaWJ1dHV0aW9ucygpIHsKLQkJTGlzdCBhY3Rpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQlyZXR1cm4gYWN0aW9uczsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2NyZWF0ZVBhcnRDb250cm9sKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUlUZXh0Vmlld2VyIHRleHQgPSBuZXcgVGV4dFZpZXdlcihwYXJlbnQsIFNXVC5SRUFEX09OTFkpOwotCQl0ZXh0LnNldERvY3VtZW50KG5ldyBEb2N1bWVudCgpKTsKLQkJZkNvbnRyb2wgPSB0ZXh0LmdldFRleHRXaWRnZXQoKTsKLQkJdGV4dC5nZXREb2N1bWVudCgpLnNldCgiVXNlIGVpdGhlciB0aGUgdG9vbGJhciBvciB0aGUgbWVudSB0byBydW4geW91ciBhY3Rpb25zXG5cbiIpOwotCX0KLQotCXByaXZhdGUgSVNlbGVjdGlvbkxpc3RlbmVyIGdldFNlbGVjdGlvbkxpc3RlbmVyKCkgewotCQlpZiAoZlNlbGVjdGlvbkxpc3RlbmVyID09IG51bGwpIHsKLQkJCWZTZWxlY3Rpb25MaXN0ZW5lciA9IG5ldyBJU2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0JCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJV29ya2JlbmNoUGFydCBwYXJ0LCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQkJCQlmU2VsZWN0aW9uID0gc2VsZWN0aW9uOwotCQkJCX0KLQkJCX07Ci0JCX0KLQkJcmV0dXJuIGZTZWxlY3Rpb25MaXN0ZW5lcjsKLQl9Ci0KLQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JVmlld1BhcnQjaW5pdChvcmcuZWNsaXBzZS51aS5JVmlld1NpdGUpCi0JICovCi0JcHVibGljIHZvaWQgaW5pdChJVmlld1NpdGUgc2l0ZSkgdGhyb3dzIFBhcnRJbml0RXhjZXB0aW9uIHsKLQkJc3VwZXIuaW5pdChzaXRlKTsKLQkJTGlzdCBhY3Rpb25zID0gY3JlYXRlQWN0aW9ucygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGFjdGlvbnMuc2l6ZSgpOyBpKyspIHsKLQkJCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldFRvb2xCYXJNYW5hZ2VyKCkuYWRkKChJQWN0aW9uKSBhY3Rpb25zLmdldChpKSk7Ci0JCQlzaXRlLmdldEFjdGlvbkJhcnMoKS5nZXRNZW51TWFuYWdlcigpLmFkZCgoSUFjdGlvbikgYWN0aW9ucy5nZXQoaSkpOwotCQl9Ci0JCUxpc3QgY29udHJpYnV0aW9ucyA9IGNyZWF0ZUNvbnRyaWJ1dHV0aW9ucygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRyaWJ1dGlvbnMuc2l6ZSgpOyBpKyspIHsKLQkJCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldFRvb2xCYXJNYW5hZ2VyKCkuYWRkKChJQ29udHJpYnV0aW9uSXRlbSkgY29udHJpYnV0aW9ucy5nZXQoaSkpOwotCQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKS5hZGQoKElDb250cmlidXRpb25JdGVtKSBjb250cmlidXRpb25zLmdldChpKSk7Ci0JCX0KLQkJc2l0ZS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRTZWxlY3Rpb25TZXJ2aWNlKCkuYWRkUG9zdFNlbGVjdGlvbkxpc3RlbmVyKGdldFNlbGVjdGlvbkxpc3RlbmVyKCkpOwotCX0KLQotCXZvaWQgcHJpbnQoU3RyaW5nIHMpIHsKLQkJKChTdHlsZWRUZXh0KSBmQ29udHJvbCkuYXBwZW5kKHMpOwotCX0KLQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCi0JICovCi0JcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7Ci0JCWlmIChmQ29udHJvbCAhPSBudWxsICYmICFmQ29udHJvbC5pc0Rpc3Bvc2VkKCkpIHsKLQkJCWZDb250cm9sLnNldEZvY3VzKCk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9Db21tb25FZGl0b3JQcmVmZXJlbmNlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvQ29tbW9uRWRpdG9yUHJlZmVyZW5jZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NDJjMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9Db21tb25FZGl0b3JQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TU0VVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnByZWZlcmVuY2VzLkNvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb247Ci0KLS8qKgotICogVGhlIHB1cnBvc2Ugb2YgdGhpcyB0ZXN0IGlzIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgdGhlCi0gKiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcidzIGNvbW1vbiBlZGl0b3IgcHJlZmVyZW5jZXMuIFRlc3RzIGluY2x1ZGUKLSAqIHNldHRpbmcvZ2V0dGluZyBwcmVmZXJlbmNlcy4KLSAqIAotICogTk9URTogVGhpcyB0ZXN0IHNob3VsZCBiZSBwcmVmb3JtZWQgb24gYSBjbGVhbiB3b3Jrc3BhY2UuIElmIHBlcmZvcm1lZCBvbgotICogYW4gZXhpc3Rpbmcgd29ya3NwYWNlLCB0aGlzIHRlc3Qgd2lsbCBtYW5pcHVsYXRlIHByZWZlcmVuY2VzIGluIHRoZQotICogd29ya3NwYWNlLCB0aG91Z2ggYXR0ZW1wdHMgd2lsbCBiZSBtYWRlIHRvIHJlc3RvcmUgb3JpZ2luYWwgdmFsdWVzIGFmdGVyCi0gKiB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgQ29tbW9uRWRpdG9yUHJlZmVyZW5jZXNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRlc3RzIGV4aXN0YW5jZSBvZiBwcmVmZXJlbmNlIHZhbHVlcyB3aGVuIGdldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMKLQkgKiB0aHJvdWdoIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1bmRsZUdldFByZWZlcmVuY2VzKCkgewotCQlmaW5hbCBTdHJpbmcgYnVuZGxlTmFtZSA9ICJvcmcuZWNsaXBzZS53c3Quc3NlLnVpIjsKLQotCQkvLyBuZWVkIHRvIHN0YXJ0IHVwIGJ1bmRsZSBmb3IgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgbG9hZGVkCi0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlTmFtZSk7Ci0JCXRyeSB7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpCi0JCQkJYnVuZGxlLnN0YXJ0KCk7Ci0JCQllbHNlCi0JCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2UgY291bGQgbm90IGZpbmQgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSk7Ci0JCX0gY2F0Y2ggKEJ1bmRsZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBvZiBleGNlcHRpb24gc3RhcnRpbmcgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSArICIgZXhjZXB0aW9uOiAiICsgZSk7Ci0JCX0KLQotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIENvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lcy5FVkFMVUFURV9URU1QT1JBUllfUFJPQkxFTVMpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgYnVuZGxlR2V0UHJlZmVyZW5jZShTdHJpbmcgYnVuZGxlTmFtZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IExvbmcudG9TdHJpbmcoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwkvLyByYW5kb20gc3RyaW5nCi0JCQotCQlTdHJpbmcgdmFsdWUgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKS5nZXRTdHJpbmcoYnVuZGxlTmFtZSwgcHJlZktleSwgZGVmYXVsdFZhbHVlLCBudWxsKTsKLQkJYXNzZXJ0Tm90U2FtZSgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZS4gS2V5OiAiK3ByZWZLZXksIGRlZmF1bHRWYWx1ZSwgdmFsdWUpOwkJCi0JfQotCi0JLyoqCi0JICogVGVzdHMgZGVmYXVsdCB2YWx1ZXMgb2YgcHJlZmVyZW5jZXMuCi0JICogCi0JICogTk9URTogRXhwZWN0ZWQgZGVmYXVsdCB2YWx1ZXMgYXJlIGhhcmQtY29kZWQsIHNvIGlmIGRlZmF1bHQgdmFsdWVzIGRvCi0JICogZ2V0IGNoYW5nZWQsIGFzc2VydGlvbnMgbmVlZCB0byBiZSB1cGRhdGVkIGFzIHdlbGwKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2VzKCkgewotCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gU1NFVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCQkKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uoc3RvcmUsIENvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lcy5FVkFMVUFURV9URU1QT1JBUllfUFJPQkxFTVMsIEJvb2xlYW4udG9TdHJpbmcodHJ1ZSkpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2UoSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXksIFN0cmluZyBleHBlY3RlZCkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gc3RvcmUuZ2V0RGVmYXVsdFN0cmluZyhwcmVmS2V5KTsKLQkJYXNzZXJ0RXF1YWxzKCJHZXQgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIrcHJlZktleSwgZXhwZWN0ZWQsIGRlZmF1bHRWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcyBieSBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWUgdG8gYmUgYQotCSAqIGNlcnRhaW4gdmFsdWUsIHRoZW4gZ2V0dGluZyB0aGUgcHJlZmVyZW5jZSB2YWx1ZSB0byB2ZXJpZnkgaXQgd2FzIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luU2V0UHJlZmVyZW5jZXMoKSB7Ci0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBTU0VVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JCQotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihzdG9yZSwgQ29tbW9uRWRpdG9yUHJlZmVyZW5jZU5hbWVzLkVWQUxVQVRFX1RFTVBPUkFSWV9QUk9CTEVNUyk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihJUHJlZmVyZW5jZVN0b3JlIHN0b3JlLCBTdHJpbmcgcHJlZktleSkgewotCQlib29sZWFuIG9yaWdpbmFsVmFsdWUgPSBzdG9yZS5nZXRCb29sZWFuKHByZWZLZXkpOwotCQlib29sZWFuIGV4cGVjdGVkVmFsdWUgPSAhb3JpZ2luYWxWYWx1ZTsKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCWJvb2xlYW4gZm91bmRWYWx1ZSA9IHN0b3JlLmdldEJvb2xlYW4ocHJlZktleSk7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIitwcmVmS2V5KyIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBvcmlnaW5hbFZhbHVlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0V4dGVuZGVkU3RvcmFnZUVkaXRvcklucHV0Vmlldy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9FeHRlbmRlZFN0b3JhZ2VFZGl0b3JJbnB1dFZpZXcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVhYjk5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0V4dGVuZGVkU3RvcmFnZUVkaXRvcklucHV0Vmlldy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklTdG9yYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRXJyb3JEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkFycmF5Q29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ2VsbEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbHVtbldlaWdodERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Eb3VibGVDbGlja0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSURvdWJsZUNsaWNrTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkZpbGVEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBlcnNpc3RhYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JUmV1c2FibGVFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVN0b3JhZ2VFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JVmlld1NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZWRpdG9ycy50ZXh0LkVkaXRvcnNVSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5tb2RlbC5Xb3JrYmVuY2hMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JRWxlbWVudFN0YXRlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVXBkYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS51dGlscy5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlNTRVVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXh0ZW5zaW9ucy5icmVha3BvaW50LklFeHRlbmRlZFN0b3JhZ2VFZGl0b3JJbnB1dDsKLQotCi0vKioKLSAqIEBhdXRob3Igbml0aW4KLSAqIAotICogQSB2aWV3IHRvIGFzc2lzdCBpbiB0ZXN0aW5nIG91dCBTdHJ1Y3R1cmVkVGV4dEVkaXRvcidzIEVkaXRvcklucHV0Ci0gKiBoYW5kbGluZy4KLSAqIAotICogUGVybWFuZW50bHkgaW4tcHJvZ3Jlc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBFeHRlbmRlZFN0b3JhZ2VFZGl0b3JJbnB1dFZpZXcgZXh0ZW5kcyBWaWV3UGFydCB7Ci0JY2xhc3MgQWRkRmlsZUlucHV0QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKLQkJcHVibGljIEFkZEZpbGVJbnB1dEFjdGlvbigpIHsKLQkJCXN1cGVyKCJBZGQgRmlsZUVkaXRvcklucHV0Iik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQlzdXBlci5ydW4oKTsKLQkJCVJlc291cmNlU2VsZWN0aW9uRGlhbG9nIGRsZyA9IG5ldyBSZXNvdXJjZVNlbGVjdGlvbkRpYWxvZyhmSW5wdXRMaXN0LmdldENvbnRyb2woKS5nZXRTaGVsbCgpLCBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLCAiQ2hvb3NlIik7Ci0JCQlpbnQgcmV0dmFsID0gZGxnLm9wZW4oKTsKLQkJCWlmIChyZXR2YWwgPT0gV2luZG93Lk9LKSB7Ci0JCQkJT2JqZWN0W10gZmlsZXMgPSBkbGcuZ2V0UmVzdWx0KCk7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykgewotCQkJCQlmSW5wdXRzLmFkZChuZXcgRmlsZUVkaXRvcklucHV0KChJRmlsZSkgZmlsZXNbaV0pKTsKLQkJCQl9Ci0JCQkJZklucHV0TGlzdC5yZWZyZXNoKHRydWUpOwotCQkJfQotCQl9Ci0JfQotCi0JY2xhc3MgQWRkU3RvcmFnZUlucHV0QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKLQkJcHVibGljIEFkZFN0b3JhZ2VJbnB1dEFjdGlvbigpIHsKLQkJCXN1cGVyKCJBZGQgU3RvcmFnZUVkaXRvcklucHV0Iik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQlzdXBlci5ydW4oKTsKLQkJCUZpbGVEaWFsb2cgZGxnID0gbmV3IEZpbGVEaWFsb2coZklucHV0TGlzdC5nZXRDb250cm9sKCkuZ2V0U2hlbGwoKSk7Ci0JCQlTdHJpbmcgZmlsZU5hbWUgPSBkbGcub3BlbigpOwotCQkJaWYgKGZpbGVOYW1lICE9IG51bGwpIHsKLQkJCQlmSW5wdXRzLmFkZChuZXcgRmlsZVN0b3JhZ2VFZGl0b3JJbnB1dChuZXcgRmlsZShmaWxlTmFtZSkpKTsKLQkJCQlmSW5wdXRMaXN0LnJlZnJlc2godHJ1ZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQljbGFzcyBEb3VibGVDbGlja0xpc3RlbmVyIGltcGxlbWVudHMgSURvdWJsZUNsaWNrTGlzdGVuZXIgewotCQlwdWJsaWMgdm9pZCBkb3VibGVDbGljayhEb3VibGVDbGlja0V2ZW50IGV2ZW50KSB7Ci0JCQluZXcgSW5wdXRPcGVuQWN0aW9uKCkucnVuKCk7Ci0JCX0KLQl9Ci0KLQljbGFzcyBFZGl0b3JJbnB1dExhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJVGFibGVMYWJlbFByb3ZpZGVyIHsKLQkJSUxhYmVsUHJvdmlkZXIgYmFzZVByb3ZpZGVyID0gbmV3IFdvcmtiZW5jaExhYmVsUHJvdmlkZXIoKTsKLQotCQlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCQkvLyBub3QgaW1wbGVtZW50ZWQKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCQkvLyBubyBuZWVkCi0JCX0KLQotCQlwdWJsaWMgSW1hZ2UgZ2V0Q29sdW1uSW1hZ2UoT2JqZWN0IGVsZW1lbnQsIGludCBjb2x1bW5JbmRleCkgewotCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0ICYmIGNvbHVtbkluZGV4ID09IDApIHsKLQkJCQlyZXR1cm4gYmFzZVByb3ZpZGVyLmdldEltYWdlKCgoSUZpbGVFZGl0b3JJbnB1dCkgZWxlbWVudCkuZ2V0RmlsZSgpKTsKLQkJCX0KLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJcHVibGljIFN0cmluZyBnZXRDb2x1bW5UZXh0KE9iamVjdCBlbGVtZW50LCBpbnQgY29sdW1uSW5kZXgpIHsKLQkJCUlFZGl0b3JJbnB1dCBpbnB1dCA9IChJRWRpdG9ySW5wdXQpIGVsZW1lbnQ7Ci0JCQlTdHJpbmcgdGV4dCA9IG51bGw7Ci0JCQlzd2l0Y2ggKGNvbHVtbkluZGV4KSB7Ci0JCQkJY2FzZSAwIDoKLQkJCQkJdHJ5IHsKLQkJCQkJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgRmlsZVN0b3JhZ2VFZGl0b3JJbnB1dCkgewotCQkJCQkJCUlQYXRoIGZ1bGxwYXRoID0gKChGaWxlU3RvcmFnZUVkaXRvcklucHV0KSBlbGVtZW50KS5nZXRTdG9yYWdlKCkuZ2V0RnVsbFBhdGgoKTsKLQkJCQkJCQl0ZXh0ID0gZnVsbHBhdGggIT0gbnVsbCA/IGZ1bGxwYXRoLnRvU3RyaW5nKCkgOiAoKEZpbGVTdG9yYWdlRWRpdG9ySW5wdXQpIGVsZW1lbnQpLmdldE5hbWUoKTsKLQkJCQkJCQlpZiAoKChGaWxlU3RvcmFnZUVkaXRvcklucHV0KSBlbGVtZW50KS5pc0RpcnR5KCkpIHsKLQkJCQkJCQkJdGV4dCA9ICIqIiArIHRleHQ7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQkJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpIHsKLQkJCQkJCQl0ZXh0ID0gKChJRmlsZUVkaXRvcklucHV0KSBlbGVtZW50KS5nZXRGaWxlKCkuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJCX0KLQotCQkJCQlicmVhazsKLQkJCQljYXNlIDEgOgotCQkJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEZpbGVTdG9yYWdlRWRpdG9ySW5wdXQpIHsKLQkJCQkJCXRleHQgPSAiRmlsZVN0b3JhZ2VFZGl0b3JJbnB1dCI7Ci0JCQkJCX0KLQkJCQkJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpIHsKLQkJCQkJCXRleHQgPSAiRmlsZUVkaXRvcklucHV0IjsKLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCXRleHQgPSBpbnB1dC5nZXRDbGFzcygpLmdldE5hbWUoKTsKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCX0KLQkJCWlmICh0ZXh0ID09IG51bGwpCi0JCQkJdGV4dCA9ICIiOwotCQkJcmV0dXJuIHRleHQ7Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgewotCQkJLy8gbm90IGltcGxlbWVudGVkCi0JCX0KLQl9Ci0KLQotCWNsYXNzIEZpbGVCYWNrZWRTdG9yYWdlIGltcGxlbWVudHMgSVN0b3JhZ2UgewotCQlGaWxlIGZGaWxlID0gbnVsbDsKLQotCQlGaWxlQmFja2VkU3RvcmFnZShGaWxlIGZpbGUpIHsKLQkJCXN1cGVyKCk7Ci0JCQlmRmlsZSA9IGZpbGU7Ci0JCX0KLQotCQlib29sZWFuIGV4aXN0cygpIHsKLQkJCXJldHVybiBmRmlsZS5leGlzdHMoKTsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGUjZ2V0QWRhcHRlcihqYXZhLmxhbmcuQ2xhc3MpCi0JCSAqLwotCQlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3MgYWRhcHRlcikgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklTdG9yYWdlI2dldENvbnRlbnRzKCkKLQkJICovCi0JCXB1YmxpYyBJbnB1dFN0cmVhbSBnZXRDb250ZW50cygpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCUlucHV0U3RyZWFtIGNvbnRlbnRzID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJY29udGVudHMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZGaWxlKTsKLQkJCQlCeXRlQnVmZmVyIGJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGUoKGludCkgZkZpbGUubGVuZ3RoKCkpOwotCQkJCWJ5dGVbXSBieXRlcyA9IG5ldyBieXRlWzIwNDhdOwotCQkJCXdoaWxlIChjb250ZW50cy5hdmFpbGFibGUoKSA+IDApIHsKLQkJCQkJaW50IGNvdW50ID0gY29udGVudHMucmVhZChieXRlcyk7Ci0JCQkJCWJ1ZmZlci5wdXQoYnl0ZXMsIDAsIGNvdW50KTsKLQkJCQl9Ci0JCQkJY29udGVudHMuY2xvc2UoKTsKLQotCQkJCWNvbnRlbnRzID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGJ1ZmZlci5hcnJheSgpKTsKLQkJCX0KLQkJCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewotCQkJCWNvbnRlbnRzID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG5ldyBieXRlWzBdKTsKLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJY29udGVudHMgPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0obmV3IGJ5dGVbMF0pOwotCQkJfQotCQkJcmV0dXJuIGNvbnRlbnRzOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JU3RvcmFnZSNnZXRGdWxsUGF0aCgpCi0JCSAqLwotCQlwdWJsaWMgSVBhdGggZ2V0RnVsbFBhdGgoKSB7Ci0JCQlpZiAocHJvdmlkZUlTdG9yYWdlRnVsbFBhdGgpIHsKLQkJCQlyZXR1cm4gbmV3IFBhdGgoZkZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOwotCQkJfQotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklTdG9yYWdlI2dldE5hbWUoKQotCQkgKi8KLQkJcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQkJcmV0dXJuIGZGaWxlLmdldE5hbWUoKTsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVN0b3JhZ2UjaXNSZWFkT25seSgpCi0JCSAqLwotCQlwdWJsaWMgYm9vbGVhbiBpc1JlYWRPbmx5KCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQl9Ci0KLQljbGFzcyBGaWxlU3RvcmFnZUVkaXRvcklucHV0IGltcGxlbWVudHMgSUV4dGVuZGVkU3RvcmFnZUVkaXRvcklucHV0IHsKLQkJTGlzdCBmRWxlbWVudFN0YXRlTGlzdGVuZXJzID0gbmV3IFZlY3RvcigwKTsKLQkJYm9vbGVhbiBmSXNEaXJ0eSA9IGZhbHNlOwotCQlGaWxlQmFja2VkU3RvcmFnZSBmU3RvcmFnZSA9IG51bGw7Ci0KLQkJRmlsZVN0b3JhZ2VFZGl0b3JJbnB1dChGaWxlIGZpbGUpIHsKLQkJCWZTdG9yYWdlID0gbmV3IEZpbGVCYWNrZWRTdG9yYWdlKGZpbGUpOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5JRXh0ZW5kZWRTdG9yYWdlRWRpdG9ySW5wdXQjYWRkRWxlbWVudFN0YXRlTGlzdGVuZXIob3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JRWxlbWVudFN0YXRlTGlzdGVuZXIpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCBhZGRFbGVtZW50U3RhdGVMaXN0ZW5lcihJRWxlbWVudFN0YXRlTGlzdGVuZXIgbGlzdGVuZXIpIHsKLQkJCWZFbGVtZW50U3RhdGVMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKLQkJfQotCi0JCXZvaWQgZWxlbWVudENvbnRlbnRBYm91dFRvQmVSZXBsYWNlZCgpIHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgZkVsZW1lbnRTdGF0ZUxpc3RlbmVycy5zaXplKCk7IGkrKykgewotCQkJCSgoSUVsZW1lbnRTdGF0ZUxpc3RlbmVyKSBmRWxlbWVudFN0YXRlTGlzdGVuZXJzLmdldChpKSkuZWxlbWVudENvbnRlbnRBYm91dFRvQmVSZXBsYWNlZChGaWxlU3RvcmFnZUVkaXRvcklucHV0LnRoaXMpOwotCQkJfQotCQl9Ci0KLQkJdm9pZCBlbGVtZW50Q29udGVudFJlcGxhY2VkKCkgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmRWxlbWVudFN0YXRlTGlzdGVuZXJzLnNpemUoKTsgaSsrKSB7Ci0JCQkJKChJRWxlbWVudFN0YXRlTGlzdGVuZXIpIGZFbGVtZW50U3RhdGVMaXN0ZW5lcnMuZ2V0KGkpKS5lbGVtZW50Q29udGVudFJlcGxhY2VkKEZpbGVTdG9yYWdlRWRpdG9ySW5wdXQudGhpcyk7Ci0JCQl9Ci0JCX0KLQotCQl2b2lkIGVsZW1lbnREZWxldGVkKCkgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmRWxlbWVudFN0YXRlTGlzdGVuZXJzLnNpemUoKTsgaSsrKSB7Ci0JCQkJKChJRWxlbWVudFN0YXRlTGlzdGVuZXIpIGZFbGVtZW50U3RhdGVMaXN0ZW5lcnMuZ2V0KGkpKS5lbGVtZW50RGVsZXRlZChGaWxlU3RvcmFnZUVkaXRvcklucHV0LnRoaXMpOwotCQkJfQotCQl9Ci0KLQkJdm9pZCBlbGVtZW50RGlydHlTdGF0ZUNoYW5nZWQoYm9vbGVhbiBkaXJ0eSkgewotCQkJc2V0RGlydHkoZGlydHkpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmRWxlbWVudFN0YXRlTGlzdGVuZXJzLnNpemUoKTsgaSsrKSB7Ci0JCQkJKChJRWxlbWVudFN0YXRlTGlzdGVuZXIpIGZFbGVtZW50U3RhdGVMaXN0ZW5lcnMuZ2V0KGkpKS5lbGVtZW50RGlydHlTdGF0ZUNoYW5nZWQoRmlsZVN0b3JhZ2VFZGl0b3JJbnB1dC50aGlzLCBkaXJ0eSk7Ci0JCQl9Ci0JCX0KLQotCQl2b2lkIGVsZW1lbnRNb3ZlZChPYmplY3Qgb2xkRWxlbWVudCwgT2JqZWN0IG5ld0VsZW1lbnQpIHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgZkVsZW1lbnRTdGF0ZUxpc3RlbmVycy5zaXplKCk7IGkrKykgewotCQkJCSgoSUVsZW1lbnRTdGF0ZUxpc3RlbmVyKSBmRWxlbWVudFN0YXRlTGlzdGVuZXJzLmdldChpKSkuZWxlbWVudE1vdmVkKEZpbGVTdG9yYWdlRWRpdG9ySW5wdXQudGhpcywgRmlsZVN0b3JhZ2VFZGl0b3JJbnB1dC50aGlzKTsKLQkJCX0KLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0I2V4aXN0cygpCi0JCSAqLwotCQlwdWJsaWMgYm9vbGVhbiBleGlzdHMoKSB7Ci0JCQlyZXR1cm4gZlN0b3JhZ2UuZXhpc3RzKCk7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlI2dldEFkYXB0ZXIoamF2YS5sYW5nLkNsYXNzKQotCQkgKi8KLQkJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGFkYXB0ZXIpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJRmlsZSBnZXRGaWxlKCkgewotCQkJcmV0dXJuIGZTdG9yYWdlLmZGaWxlOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQjZ2V0SW1hZ2VEZXNjcmlwdG9yKCkKLQkJICovCi0JCXB1YmxpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKCkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNnZXROYW1lKCkKLQkJICovCi0JCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJCXJldHVybiBmU3RvcmFnZS5nZXROYW1lKCk7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNnZXRQZXJzaXN0YWJsZSgpCi0JCSAqLwotCQlwdWJsaWMgSVBlcnNpc3RhYmxlRWxlbWVudCBnZXRQZXJzaXN0YWJsZSgpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JU3RvcmFnZUVkaXRvcklucHV0I2dldFN0b3JhZ2UoKQotCQkgKi8KLQkJcHVibGljIElTdG9yYWdlIGdldFN0b3JhZ2UoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQlyZXR1cm4gZlN0b3JhZ2U7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNnZXRUb29sVGlwVGV4dCgpCi0JCSAqLwotCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJcmV0dXJuIGZTdG9yYWdlLmdldEZ1bGxQYXRoKCkgIT0gbnVsbCA/IGZTdG9yYWdlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSA6IGZTdG9yYWdlLmdldE5hbWUoKTsKLQkJfQotCi0JCWJvb2xlYW4gaXNEaXJ0eSgpIHsKLQkJCXJldHVybiBmSXNEaXJ0eTsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5leHRlbnNpb25zLmJyZWFrcG9pbnQuSUV4dGVuZGVkU3RvcmFnZUVkaXRvcklucHV0I3JlbW92ZUVsZW1lbnRTdGF0ZUxpc3RlbmVyKG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSUVsZW1lbnRTdGF0ZUxpc3RlbmVyKQotCQkgKi8KLQkJcHVibGljIHZvaWQgcmVtb3ZlRWxlbWVudFN0YXRlTGlzdGVuZXIoSUVsZW1lbnRTdGF0ZUxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCQlmRWxlbWVudFN0YXRlTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7Ci0JCX0KLQotCQl2b2lkIHNldERpcnR5KGJvb2xlYW4gZGlydHkpIHsKLQkJCWZJc0RpcnR5ID0gZGlydHk7Ci0JCX0KLQl9Ci0KLQljbGFzcyBJbnB1dENoYW5nZURpcnR5U3RhdGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gaW1wbGVtZW50cyBJVXBkYXRlIHsKLQkJcHVibGljIElucHV0Q2hhbmdlRGlydHlTdGF0ZUFjdGlvbigpIHsKLQkJCXN1cGVyKCJUb2dnbGUgZGlydHkgZmxhZyIpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJc3VwZXIucnVuKCk7Ci0JCQlJRWRpdG9ySW5wdXRbXSBpbnB1dHMgPSBnZXRTZWxlY3RlZElucHV0cygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKLQkJCQlpZiAoaW5wdXRzW2ldIGluc3RhbmNlb2YgRmlsZVN0b3JhZ2VFZGl0b3JJbnB1dCkgewotCQkJCQkoKEZpbGVTdG9yYWdlRWRpdG9ySW5wdXQpIGlucHV0c1tpXSkuZWxlbWVudERpcnR5U3RhdGVDaGFuZ2VkKCEoKEZpbGVTdG9yYWdlRWRpdG9ySW5wdXQpIGlucHV0c1tpXSkuaXNEaXJ0eSgpKTsKLQkJCQl9Ci0JCQl9Ci0JCQlmSW5wdXRMaXN0LnJlZnJlc2godHJ1ZSk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCB1cGRhdGUoKSB7Ci0JCQlzZXRFbmFibGVkKGZTZWxlY3RlZEVsZW1lbnQgIT0gbnVsbCAmJiBmU2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmlsZVN0b3JhZ2VFZGl0b3JJbnB1dCk7Ci0JCX0KLQl9Ci0KLQljbGFzcyBJbnB1dERlbGV0ZUFjdGlvbiBleHRlbmRzIEFjdGlvbiBpbXBsZW1lbnRzIElVcGRhdGUgewotCQlwdWJsaWMgSW5wdXREZWxldGVBY3Rpb24oKSB7Ci0JCQlzdXBlcigiRGVsZXRlIElucHV0Iik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQlzdXBlci5ydW4oKTsKLQkJCUlFZGl0b3JJbnB1dFtdIGlucHV0cyA9IGdldFNlbGVjdGVkSW5wdXRzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewotCQkJCWlmIChpbnB1dHNbaV0gaW5zdGFuY2VvZiBGaWxlU3RvcmFnZUVkaXRvcklucHV0KSB7Ci0JCQkJCSgoRmlsZVN0b3JhZ2VFZGl0b3JJbnB1dCkgaW5wdXRzW2ldKS5lbGVtZW50RGVsZXRlZCgpOwotCQkJCX0KLQkJCX0KLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJZklucHV0cy5yZW1vdmUoaW5wdXRzW2ldKTsKLQkJCX0KLQkJCWZJbnB1dExpc3QucmVmcmVzaCgpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgdXBkYXRlKCkgewotCQkJc2V0RW5hYmxlZChmU2VsZWN0ZWRFbGVtZW50ICE9IG51bGwgJiYgZlNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZpbGVTdG9yYWdlRWRpdG9ySW5wdXQpOwotCQl9Ci0JfQotCi0JY2xhc3MgSW5wdXRNb3ZlQWN0aW9uIGV4dGVuZHMgQWN0aW9uIGltcGxlbWVudHMgSVVwZGF0ZSB7Ci0JCXB1YmxpYyBJbnB1dE1vdmVBY3Rpb24oKSB7Ci0JCQlzdXBlcigiTW92ZSBJbnB1dCIpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJc3VwZXIucnVuKCk7Ci0JCQlJRWRpdG9ySW5wdXRbXSBpbnB1dHMgPSBnZXRTZWxlY3RlZElucHV0cygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKLQkJCQlpZiAoaW5wdXRzW2ldIGluc3RhbmNlb2YgRmlsZVN0b3JhZ2VFZGl0b3JJbnB1dCkgewotCQkJCQkoKEZpbGVTdG9yYWdlRWRpdG9ySW5wdXQpIGlucHV0c1tpXSkuZWxlbWVudE1vdmVkKGlucHV0c1tpXSwgaW5wdXRzW2ldKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCB1cGRhdGUoKSB7Ci0JCQlzZXRFbmFibGVkKGZTZWxlY3RlZEVsZW1lbnQgIT0gbnVsbCAmJiBmU2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmlsZVN0b3JhZ2VFZGl0b3JJbnB1dCk7Ci0JCX0KLQl9Ci0KLQljbGFzcyBJbnB1dE9wZW5BY3Rpb24gZXh0ZW5kcyBBY3Rpb24gewotCQlwdWJsaWMgSW5wdXRPcGVuQWN0aW9uKCkgewotCQkJc3VwZXIoIk9wZW4iKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJSUVkaXRvcklucHV0W10gaW5wdXRzID0gZ2V0U2VsZWN0ZWRJbnB1dHMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5vcGVuRWRpdG9yKGlucHV0c1tpXSwgZ2V0RWRpdG9ySWQoaW5wdXRzW2ldKSk7Ci0JCQkJfQotCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCW9wZW5FcnJvcihnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCksICJPcGVuU3lzdGVtRWRpdG9yQWN0aW9uLmRpYWxvZ1RpdGxlIiwgZS5nZXRNZXNzYWdlKCksIGUpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCWNsYXNzIElucHV0UmVwbGFjZUNvbnRlbnRzQWN0aW9uIGV4dGVuZHMgQWN0aW9uIGltcGxlbWVudHMgSVVwZGF0ZSB7Ci0JCXB1YmxpYyBJbnB1dFJlcGxhY2VDb250ZW50c0FjdGlvbigpIHsKLQkJCXN1cGVyKCJSZXBsYWNlIElucHV0J3MgQ29udGVudHMiKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJSUVkaXRvcklucHV0W10gaW5wdXRzID0gZ2V0U2VsZWN0ZWRJbnB1dHMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJKChGaWxlU3RvcmFnZUVkaXRvcklucHV0KSBpbnB1dHNbaV0pLmVsZW1lbnRDb250ZW50QWJvdXRUb0JlUmVwbGFjZWQoKTsKLQkJCQkoKEZpbGVTdG9yYWdlRWRpdG9ySW5wdXQpIGlucHV0c1tpXSkuZWxlbWVudENvbnRlbnRSZXBsYWNlZCgpOwotCQkJfQotCQl9Ci0KLQkJcHVibGljIHZvaWQgdXBkYXRlKCkgewotCQkJc2V0RW5hYmxlZChmU2VsZWN0ZWRFbGVtZW50ICE9IG51bGwgJiYgZlNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZpbGVTdG9yYWdlRWRpdG9ySW5wdXQpOwotCQl9Ci0JfQotCi0JY2xhc3MgUmVtb3ZlSW5wdXRBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gewotCQlwdWJsaWMgUmVtb3ZlSW5wdXRBY3Rpb24oKSB7Ci0JCQlzdXBlcigiUmVtb3ZlIik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQlzdXBlci5ydW4oKTsKLQkJCUlFZGl0b3JJbnB1dFtdIGlucHV0cyA9IGdldFNlbGVjdGVkSW5wdXRzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewotCQkJCWZJbnB1dHMucmVtb3ZlKGlucHV0c1tpXSk7Ci0JCQl9Ci0JCQlmSW5wdXRMaXN0LnJlZnJlc2goKTsKLQkJfQotCX0KLQotCWNsYXNzIFJldXNlRWRpdG9yQWN0aW9uIGV4dGVuZHMgQWN0aW9uIGltcGxlbWVudHMgSVVwZGF0ZSB7Ci0JCXB1YmxpYyBSZXVzZUVkaXRvckFjdGlvbigpIHsKLQkJCXN1cGVyKCJSZXVzZSBFZGl0b3IiKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJSUVkaXRvcklucHV0W10gaW5wdXRzID0gZ2V0U2VsZWN0ZWRJbnB1dHMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJSUVkaXRvclBhcnQgZWRpdG9yID0gZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJCQlpZiAoZWRpdG9yIGluc3RhbmNlb2YgSVJldXNhYmxlRWRpdG9yKSB7Ci0JCQkJCWdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkucmV1c2VFZGl0b3IoKChJUmV1c2FibGVFZGl0b3IpIGVkaXRvciksIGlucHV0c1tpXSk7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQlTU0VVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpLmJlZXAoKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCB1cGRhdGUoKSB7Ci0JCQlib29sZWFuIGVuYWJsZSA9IHRydWU7Ci0JCQl0cnkgewotCQkJCWVuYWJsZSA9IGZTZWxlY3RlZEVsZW1lbnQgIT0gbnVsbCAmJiBnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpIGluc3RhbmNlb2YgSVJldXNhYmxlRWRpdG9yOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJZW5hYmxlID0gdHJ1ZTsKLQkJCX0KLQkJCXNldEVuYWJsZWQoZW5hYmxlKTsKLQkJfQotCX0KLQotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIHByb3ZpZGVJU3RvcmFnZUZ1bGxQYXRoID0gdHJ1ZTsKLQotCS8qKgotCSAqIE9wZW4gYW4gZXJyb3Igc3R5bGUgZGlhbG9nIGZvciBQYXJ0SW5pdEV4Y2VwdGlvbiBieSBpbmNsdWRpbmcgYW55IGV4dHJhCi0JICogaW5mb3JtYXRpb24gZnJvbSB0aGUgbmVzdGVkIENvcmVFeGNlcHRpb24gaWYgcHJlc2VudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgb3BlbkVycm9yKFNoZWxsIHBhcmVudCwgU3RyaW5nIHRpdGxlLCBTdHJpbmcgbWVzc2FnZSwgUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0JCS8vIENoZWNrIGZvciBhIG5lc3RlZCBDb3JlRXhjZXB0aW9uCi0JCUNvcmVFeGNlcHRpb24gbmVzdGVkRXhjZXB0aW9uID0gbnVsbDsKLQkJSVN0YXR1cyBzdGF0dXMgPSBleGNlcHRpb24uZ2V0U3RhdHVzKCk7Ci0JCWlmIChzdGF0dXMgIT0gbnVsbCAmJiBzdGF0dXMuZ2V0RXhjZXB0aW9uKCkgaW5zdGFuY2VvZiBDb3JlRXhjZXB0aW9uKQotCQkJbmVzdGVkRXhjZXB0aW9uID0gKENvcmVFeGNlcHRpb24pIHN0YXR1cy5nZXRFeGNlcHRpb24oKTsKLQotCQlpZiAobmVzdGVkRXhjZXB0aW9uICE9IG51bGwpIHsKLQkJCS8vIE9wZW4gYW4gZXJyb3IgZGlhbG9nIGFuZCBpbmNsdWRlIHRoZSBleHRyYQotCQkJLy8gc3RhdHVzIGluZm9ybWF0aW9uIGZyb20gdGhlIG5lc3RlZCBDb3JlRXhjZXB0aW9uCi0JCQlFcnJvckRpYWxvZy5vcGVuRXJyb3IocGFyZW50LCB0aXRsZSwgbWVzc2FnZSwgbmVzdGVkRXhjZXB0aW9uLmdldFN0YXR1cygpKTsKLQkJfQotCQllbHNlIHsKLQkJCS8vIE9wZW4gYSByZWd1bGFyIGVycm9yIGRpYWxvZyBzaW5jZSB0aGVyZSBpcyBubwotCQkJLy8gZXh0cmEgaW5mb3JtYXRpb24gdG8gZGlzcGxheQotCQkJTWVzc2FnZURpYWxvZy5vcGVuRXJyb3IocGFyZW50LCB0aXRsZSwgbWVzc2FnZSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIExpc3QgYWN0aW9ucyA9IG51bGw7Ci0KLQlUYWJsZVZpZXdlciBmSW5wdXRMaXN0ID0gbnVsbDsKLQotCUxpc3QgZklucHV0cyA9IG5ldyBBcnJheUxpc3QoMCk7Ci0KLQlPYmplY3QgZlNlbGVjdGVkRWxlbWVudCA9IG51bGw7Ci0KLQotCXB1YmxpYyBFeHRlbmRlZFN0b3JhZ2VFZGl0b3JJbnB1dFZpZXcoKSB7Ci0JCXN1cGVyKCk7Ci0JCWFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNjcmVhdGVQYXJ0Q29udHJvbChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgewotCQlmSW5wdXRMaXN0ID0gbmV3IFRhYmxlVmlld2VyKHBhcmVudCwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULk1VTFRJIHwgU1dULkhfU0NST0xMIHwgU1dULlZfU0NST0xMKTsKLQkJZklucHV0TGlzdC5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFycmF5Q29udGVudFByb3ZpZGVyKCkpOwotCQlmSW5wdXRMaXN0LnNldExhYmVsUHJvdmlkZXIobmV3IEVkaXRvcklucHV0TGFiZWxQcm92aWRlcigpKTsKLQkJZklucHV0TGlzdC5hZGREb3VibGVDbGlja0xpc3RlbmVyKG5ldyBEb3VibGVDbGlja0xpc3RlbmVyKCkpOwotCQlmSW5wdXRMaXN0LmdldFRhYmxlKCkuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKLQkJZklucHV0TGlzdC5nZXRUYWJsZSgpLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKLQkJU3RyaW5nW10gY29sdW1ucyA9IG5ldyBTdHJpbmdbXXsiUGF0aCIsICJUeXBlIn07Ci0JCWZJbnB1dExpc3Quc2V0TGFiZWxQcm92aWRlcihuZXcgRWRpdG9ySW5wdXRMYWJlbFByb3ZpZGVyKCkpOwotCi0KLQkJVGFibGVMYXlvdXQgdGxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOwotCQlDZWxsRWRpdG9yW10gY2VsbEVkaXRvcnMgPSBuZXcgQ2VsbEVkaXRvcls1XTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7Ci0JCQl0bGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMSkpOwotCQkJVGFibGVDb2x1bW4gdGMgPSBuZXcgVGFibGVDb2x1bW4oZklucHV0TGlzdC5nZXRUYWJsZSgpLCBTV1QuTk9ORSk7Ci0JCQl0Yy5zZXRUZXh0KGNvbHVtbnNbaV0pOwotCQkJdGMuc2V0UmVzaXphYmxlKHRydWUpOwotCQkJdGMuc2V0V2lkdGgoRGlzcGxheS5nZXRDdXJyZW50KCkuZ2V0Qm91bmRzKCkud2lkdGggLyAxNCk7Ci0JCX0KLQkJZklucHV0TGlzdC5zZXRDZWxsRWRpdG9ycyhjZWxsRWRpdG9ycyk7Ci0JCWZJbnB1dExpc3Quc2V0Q29sdW1uUHJvcGVydGllcyhjb2x1bW5zKTsKLQotCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIHRydWUpOwotCQlmSW5wdXRMaXN0LmdldFRhYmxlKCkuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLQkJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoIiNwb3B1cCIpOyAvLyROT04tTkxTLTEkCi0JCW1lbnVNYW5hZ2VyLnNldFJlbW92ZUFsbFdoZW5TaG93bihmYWxzZSk7Ci0KLQkJbWVudU1hbmFnZXIuYWRkKG5ldyBJbnB1dE9wZW5BY3Rpb24oKSk7Ci0JCW1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQltZW51TWFuYWdlci5hZGQobmV3IElucHV0TW92ZUFjdGlvbigpKTsKLQkJbWVudU1hbmFnZXIuYWRkKG5ldyBJbnB1dENoYW5nZURpcnR5U3RhdGVBY3Rpb24oKSk7Ci0JCW1lbnVNYW5hZ2VyLmFkZChuZXcgSW5wdXREZWxldGVBY3Rpb24oKSk7Ci0JCW1lbnVNYW5hZ2VyLmFkZChuZXcgSW5wdXRSZXBsYWNlQ29udGVudHNBY3Rpb24oKSk7Ci0JCW1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQltZW51TWFuYWdlci5hZGQobmV3IFJlbW92ZUlucHV0QWN0aW9uKCkpOwotCQlNZW51IG1lbnUgPSBtZW51TWFuYWdlci5jcmVhdGVDb250ZXh0TWVudShmSW5wdXRMaXN0LmdldENvbnRyb2woKSk7Ci0JCWZJbnB1dExpc3QuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7Ci0KLQotCQlTU0VUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5zZXREZWZhdWx0KGdldElucHV0c1ByZWZlcmVuY2VOYW1lKCksICIiKTsKLQkJU3RyaW5nIHBhdGhzW10gPSBTdHJpbmdVdGlscy51bnBhY2soU1NFVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuZ2V0U3RyaW5nKGdldElucHV0c1ByZWZlcmVuY2VOYW1lKCkpKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwYXRocy5sZW5ndGg7IGkrKykgewotCQkJaWYgKHBhdGhzW2ldLnN0YXJ0c1dpdGgoIlMhIikpIHsKLQkJCQlmSW5wdXRzLmFkZChuZXcgRmlsZVN0b3JhZ2VFZGl0b3JJbnB1dChuZXcgRmlsZShwYXRoc1tpXS5zdWJzdHJpbmcoMikpKSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChwYXRoc1tpXS5zdGFydHNXaXRoKCJGISIpKSB7Ci0JCQkJZklucHV0cy5hZGQobmV3IEZpbGVFZGl0b3JJbnB1dChSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgocGF0aHNbaV0uc3Vic3RyaW5nKDIpKSkpKTsKLQkJCX0KLQkJfQotCi0JCWZJbnB1dExpc3Quc2V0SW5wdXQoZklucHV0cyk7Ci0JCWZJbnB1dExpc3QuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgewotCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKLQkJCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWwgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBldmVudC5nZXRTZWxlY3Rpb24oKSk7Ci0JCQkJZlNlbGVjdGVkRWxlbWVudCA9IHNlbC5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJCX0KLQkJfSk7Ci0JfQotCi0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2Rpc3Bvc2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCUxpc3QgcGF0aHMgPSBuZXcgQXJyYXlMaXN0KDApOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGZJbnB1dHMuc2l6ZSgpOyBpKyspIHsKLQkJCXRyeSB7Ci0JCQkJT2JqZWN0IGlucHV0ID0gZklucHV0cy5nZXQoaSk7Ci0JCQkJU3RyaW5nIHBhdGggPSBudWxsOwotCQkJCWlmIChpbnB1dCBpbnN0YW5jZW9mIEZpbGVTdG9yYWdlRWRpdG9ySW5wdXQpIHsKLQkJCQkJcGF0aCA9ICJTISIgKyAoKEZpbGVTdG9yYWdlRWRpdG9ySW5wdXQpIGlucHV0KS5nZXRGaWxlKCkuZ2V0Q2Fub25pY2FsUGF0aCgpOwotCQkJCX0KLQkJCQllbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpIHsKLQkJCQkJcGF0aCA9ICJGISIgKyAoKElGaWxlRWRpdG9ySW5wdXQpIGlucHV0KS5nZXRGaWxlKCkuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpOwotCQkJCX0KLQkJCQlpZiAocGF0aCAhPSBudWxsKSB7Ci0JCQkJCXBhdGhzLmFkZChwYXRoKTsKLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJU1NFVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuc2V0VmFsdWUoZ2V0SW5wdXRzUHJlZmVyZW5jZU5hbWUoKSwgU3RyaW5nVXRpbHMucGFjaygoU3RyaW5nW10pIHBhdGhzLnRvQXJyYXkobmV3IFN0cmluZ1swXSkpKTsKLQkJU1NFVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLnNhdmVQbHVnaW5QcmVmZXJlbmNlcygpOwotCX0KLQotCVN0cmluZyBnZXRFZGl0b3JJZChJRWRpdG9ySW5wdXQgaW5wdXQpIHsKLQkJSVdvcmtiZW5jaCB3b3JrYmVuY2ggPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpOwotCQlJRWRpdG9yUmVnaXN0cnkgZWRpdG9yUmVnaXN0cnkgPSB3b3JrYmVuY2guZ2V0RWRpdG9yUmVnaXN0cnkoKTsKLQkJSUNvbnRlbnRUeXBlW10gdHlwZXMgPSBudWxsOwotCQlTdHJpbmcgZWRpdG9ySUQgPSBudWxsOwotCQlpZiAoaW5wdXQgaW5zdGFuY2VvZiBJU3RvcmFnZUVkaXRvcklucHV0KSB7Ci0JCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG51bGw7Ci0JCQl0cnkgewotCQkJCWlucHV0U3RyZWFtID0gKChJU3RvcmFnZUVkaXRvcklucHV0KSBpbnB1dCkuZ2V0U3RvcmFnZSgpLmdldENvbnRlbnRzKCk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCXRyeSB7Ci0JCQkJdHlwZXMgPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKS5maW5kQ29udGVudFR5cGVzRm9yKGlucHV0U3RyZWFtLCBpbnB1dC5nZXROYW1lKCkpOwotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQkJdHJ5IHsKLQkJCQlpZiAoaW5wdXRTdHJlYW0gIT0gbnVsbCkgewotCQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCi0JCUlFZGl0b3JEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBlZGl0b3JSZWdpc3RyeS5nZXREZWZhdWx0RWRpdG9yKGlucHV0LmdldE5hbWUoKSwgdHlwZXNbMF0pOwotCQlpZiAoZGVzY3JpcHRvciAhPSBudWxsKSB7Ci0JCQllZGl0b3JJRCA9IGRlc2NyaXB0b3IuZ2V0SWQoKTsKLQkJfQotCQlpZiAoZWRpdG9ySUQgPT0gbnVsbCkgewotCQkJZWRpdG9ySUQgPSBFZGl0b3JzVUkuREVGQVVMVF9URVhUX0VESVRPUl9JRDsKLQkJfQotCQlyZXR1cm4gZWRpdG9ySUQ7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybgotCSAqLwotCVN0cmluZyBnZXRJbnB1dHNQcmVmZXJlbmNlTmFtZSgpIHsKLQkJcmV0dXJuICJFeHRlbmRlZFN0b3JhZ2VFZGl0b3JJbnB1dFZpZXc6aW5wdXRzIjsKLQl9Ci0KLQlJRWRpdG9ySW5wdXRbXSBnZXRTZWxlY3RlZElucHV0cygpIHsKLQkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmSW5wdXRMaXN0LmdldFNlbGVjdGlvbigpOwotCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbCA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uOwotCQkJaWYgKHNlbC5pc0VtcHR5KCkpIHsKLQkJCQlyZXR1cm4gbmV3IElFZGl0b3JJbnB1dFswXTsKLQkJCX0KLQkJCU9iamVjdFtdIGFyciA9IHNlbC50b0FycmF5KCk7Ci0JCQlJRWRpdG9ySW5wdXRbXSBpbnB1dHMgPSBuZXcgSUVkaXRvcklucHV0W2Fyci5sZW5ndGhdOwotCQkJU3lzdGVtLmFycmF5Y29weShhcnIsIDAsIGlucHV0cywgMCwgaW5wdXRzLmxlbmd0aCk7Ci0JCQlyZXR1cm4gaW5wdXRzOwotCQl9Ci0JCXJldHVybiBuZXcgSUVkaXRvcklucHV0WzBdOwotCX0KLQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JVmlld1BhcnQjaW5pdChvcmcuZWNsaXBzZS51aS5JVmlld1NpdGUpCi0JICovCi0JcHVibGljIHZvaWQgaW5pdChJVmlld1NpdGUgc2l0ZSkgdGhyb3dzIFBhcnRJbml0RXhjZXB0aW9uIHsKLQkJc3VwZXIuaW5pdChzaXRlKTsKLQotCQlzaXRlLmdldEFjdGlvbkJhcnMoKS5nZXRUb29sQmFyTWFuYWdlcigpLmFkZChyZW1lbWJlckFjdGlvbihuZXcgQWRkU3RvcmFnZUlucHV0QWN0aW9uKCkpKTsKLQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0VG9vbEJhck1hbmFnZXIoKS5hZGQocmVtZW1iZXJBY3Rpb24obmV3IEFkZEZpbGVJbnB1dEFjdGlvbigpKSk7Ci0JCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldFRvb2xCYXJNYW5hZ2VyKCkuYWRkKHJlbWVtYmVyQWN0aW9uKG5ldyBSZXVzZUVkaXRvckFjdGlvbigpKSk7Ci0JCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldFRvb2xCYXJNYW5hZ2VyKCkuYWRkKHJlbWVtYmVyQWN0aW9uKG5ldyBSZW1vdmVJbnB1dEFjdGlvbigpKSk7Ci0KLQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKS5hZGQocmVtZW1iZXJBY3Rpb24obmV3IElucHV0T3BlbkFjdGlvbigpKSk7Ci0JCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldE1lbnVNYW5hZ2VyKCkuYWRkKHJlbWVtYmVyQWN0aW9uKG5ldyBSZXVzZUVkaXRvckFjdGlvbigpKSk7Ci0JCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldE1lbnVNYW5hZ2VyKCkuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0JCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldE1lbnVNYW5hZ2VyKCkuYWRkKHJlbWVtYmVyQWN0aW9uKG5ldyBJbnB1dE1vdmVBY3Rpb24oKSkpOwotCQlzaXRlLmdldEFjdGlvbkJhcnMoKS5nZXRNZW51TWFuYWdlcigpLmFkZChyZW1lbWJlckFjdGlvbihuZXcgSW5wdXRDaGFuZ2VEaXJ0eVN0YXRlQWN0aW9uKCkpKTsKLQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKS5hZGQocmVtZW1iZXJBY3Rpb24obmV3IElucHV0RGVsZXRlQWN0aW9uKCkpKTsKLQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKS5hZGQocmVtZW1iZXJBY3Rpb24obmV3IElucHV0UmVwbGFjZUNvbnRlbnRzQWN0aW9uKCkpKTsKLQl9Ci0KLQlJQWN0aW9uIHJlbWVtYmVyQWN0aW9uKElBY3Rpb24gYWN0aW9uKSB7Ci0JCWFjdGlvbnMuYWRkKGFjdGlvbik7Ci0JCXJldHVybiBhY3Rpb247Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCi0JICovCi0JcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7Ci0JCWZJbnB1dExpc3QuZ2V0Q29udHJvbCgpLnNldEZvY3VzKCk7Ci0JfQotCi0KLQlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVFbmFibGVtZW50KCkgewotCQlmb3IgKGludCBpID0gMDsgaSA8IGFjdGlvbnMuc2l6ZSgpOyBpKyspIHsKLQkJCU9iamVjdCBhY3Rpb24gPSBhY3Rpb25zLmdldChpKTsKLQkJCWlmIChhY3Rpb24gaW5zdGFuY2VvZiBJVXBkYXRlKSB7Ci0JCQkJKChJVXBkYXRlKSBhY3Rpb24pLnVwZGF0ZSgpOwotCQkJfQotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvTG9nZ2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0xvZ2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Mzc2Njc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzOwotCi1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0vKioKLSAqIFNtYWxsIGNvbnZlbmllbmNlIGNsYXNzIHRvIGxvZyBtZXNzYWdlcyB0byBwbHVnaW4ncyBsb2cgZmlsZSBhbmQgYWxzbywgaWYKLSAqIGRlc2lyZWQsIHRoZSBjb25zb2xlLiBUaGlzIGNsYXNzIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgY2xhc3NlcyBpbiB0aGlzCi0gKiBwbHVnaW4uIE90aGVyIHBsdWdpbnMgc2hvdWxkIG1ha2UgdGhlaXIgb3duIGNvcHksIHdpdGggYXBwcm9wcmlhdGUgSUQuCi0gKi8KLXB1YmxpYyBjbGFzcyBMb2dnZXIgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnVpLnRlc3RzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNFRklMVEVSX0xPQ0FUSU9OID0gIi9kZWJ1Zy90cmFjZWZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gSVN0YXR1cy5PSzsgLy8gMAotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk8gPSBJU3RhdHVzLklORk87IC8vIDEKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gSVN0YXR1cy5XQVJOSU5HOyAvLyAyCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSBJU3RhdHVzLkVSUk9SOyAvLyA0Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19ERUJVRyA9IDIwMCArIE9LOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fREVCVUcgPSAyMDAgKyBJTkZPOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkdfREVCVUcgPSAyMDAgKyBXQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RFQlVHID0gMjAwICsgRVJST1I7Ci0KLQkvKioKLQkgKiBBZGRzIG1lc3NhZ2UgdG8gbG9nLgotCSAqIAotCSAqIEBwYXJhbSBsZXZlbAotCSAqICAgICAgICAgICAgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgKE9LLCBJTkZPLCBXQVJOSU5HLCBFUlJPUiwKLQkgKiAgICAgICAgICAgIE9LX0RFQlVHLCBJTkZPX0RFQlVHLCBXQVJOSU5HX0RFQlVHLCBFUlJPUl9ERUJVRykKLQkgKiBAcGFyYW0gbWVzc2FnZQotCSAqICAgICAgICAgICAgdGV4dCB0byBhZGQgdG8gdGhlIGxvZwotCSAqIEBwYXJhbSBleGNlcHRpb24KLQkgKiAgICAgICAgICAgIGV4Y2VwdGlvbiB0aHJvd24KLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX2xvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChsZXZlbCA9PSBPS19ERUJVRyB8fCBsZXZlbCA9PSBJTkZPX0RFQlVHIHx8IGxldmVsID09IFdBUk5JTkdfREVCVUcgfHwgbGV2ZWwgPT0gRVJST1JfREVCVUcpIHsKLQkJCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCQlyZXR1cm47Ci0JCX0KLQotCQlpbnQgc2V2ZXJpdHkgPSBJU3RhdHVzLk9LOwotCQlzd2l0Y2ggKGxldmVsKSB7Ci0JCQljYXNlIElORk9fREVCVUcgOgotCQkJY2FzZSBJTkZPIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuSU5GTzsKLQkJCQlicmVhazsKLQkJCWNhc2UgV0FSTklOR19ERUJVRyA6Ci0JCQljYXNlIFdBUk5JTkcgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5XQVJOSU5HOwotCQkJCWJyZWFrOwotCQkJY2FzZSBFUlJPUl9ERUJVRyA6Ci0JCQljYXNlIEVSUk9SIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuRVJST1I7Ci0JCX0KLQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhzZXZlcml0eSwgUExVR0lOX0lELCBzZXZlcml0eSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JfQotCi0JLyoqCi0JICogUHJpbnRzIG1lc3NhZ2UgdG8gbG9nIGlmIGNhdGVnb3J5IG1hdGNoZXMgL2RlYnVnL3RyYWNlZmlsdGVyIG9wdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gbWVzc2FnZQotCSAqICAgICAgICAgICAgdGV4dCB0byBwcmludAotCSAqIEBwYXJhbSBjYXRlZ29yeQotCSAqICAgICAgICAgICAgY2F0ZWdvcnkgb2YgdGhlIG1lc3NhZ2UsIHRvIGJlIGNvbXBhcmVkIHdpdGgKLQkgKiAgICAgICAgICAgIC9kZWJ1Zy90cmFjZWZpbHRlcgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAoaXNUcmFjaW5nKGNhdGVnb3J5KSkgewotCQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgUExVR0lOX0lELCBJU3RhdHVzLk9LLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gaXMgZGVidWdnaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRGVidWdnaW5nKCkgewotCQlyZXR1cm4gUGxhdGZvcm0uaW5EZWJ1Z01vZGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmVzIGlmIGN1cnJlbnRseSB0cmFjaW5nIGEgY2F0ZWdvcnkKLQkgKiAKLQkgKiBAcGFyYW0gY2F0ZWdvcnkKLQkgKiBAcmV0dXJuIHRydWUgaWYgdHJhY2luZyBjYXRlZ29yeSwgZmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzVHJhY2luZyhTdHJpbmcgY2F0ZWdvcnkpIHsKLQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyB0cmFjZUZpbHRlciA9IFBsYXRmb3JtLmdldERlYnVnT3B0aW9uKFBMVUdJTl9JRCArIFRSQUNFRklMVEVSX0xPQ0FUSU9OKTsKLQkJaWYgKHRyYWNlRmlsdGVyICE9IG51bGwpIHsKLQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHRyYWNlRmlsdGVyLCAiLCIpOyAvLyROT04tTkxTLTEkCi0JCQl3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCVN0cmluZyBjYXQgPSB0b2tlbml6ZXIubmV4dFRva2VuKCkudHJpbSgpOwotCQkJCWlmIChjYXRlZ29yeS5lcXVhbHMoY2F0KSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSkgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvU1NFVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvU1NFVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM0ZDkxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1NTRVRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBTU0VUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIFNTRVRlc3RzUGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBTU0VUZXN0c1BsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQkJdHJ5IHsKLQkJCXJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLlRlc3RzUGx1Z2luUmVzb3VyY2VzIik7Ci0JCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiB4KSB7Ci0JCQlyZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBTU0VUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsIG9yICdrZXknIGlmIG5vdAotCSAqIGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gU1NFVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsKSA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvU1NFVUlUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvU1NFVUlUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJjYjQ1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1NTRVVJVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHM7Ci0KLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLnZpZXdlci5UZXN0Vmlld2VyQ29uZmlndXJhdGlvbjsKLQotLyoqCi0gKiBAYXV0aG9yIHBhdmVyeQotICovCi1wdWJsaWMgY2xhc3MgU1NFVUlUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBTU0VVSVRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBTU0VVSVRlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIlNTRSBVSSBUZXN0IFN1aXRlIik7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShWZXJpZnlFZGl0b3JQbHVnaW4uY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKENvbW1vbkVkaXRvclByZWZlcmVuY2VzVGVzdC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFZpZXdlckNvbmZpZ3VyYXRpb24uY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvci5jbGFzcykpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVGVzdEFjdGlvbkRlbGVnYXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1Rlc3RBY3Rpb25EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmMwZTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVGVzdEFjdGlvbkRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JBY3Rpb25EZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLQotLyoqCi0gKiBAYXV0aG9yIG5zZAotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0QWN0aW9uRGVsZWdhdGUgZXh0ZW5kcyBBY3Rpb24gaW1wbGVtZW50cyBJRWRpdG9yQWN0aW9uRGVsZWdhdGUgewotCUlFZGl0b3JQYXJ0IGVkaXRvciA9IG51bGw7Ci0JSUFjdGlvbiBmYWN0aW9uID0gbnVsbDsKLQotCS8qKgotCSAqIAotCSAqLwotCXB1YmxpYyBUZXN0QWN0aW9uRGVsZWdhdGUoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRleHQKLQkgKi8KLQlwdWJsaWMgVGVzdEFjdGlvbkRlbGVnYXRlKFN0cmluZyB0ZXh0KSB7Ci0JCXN1cGVyKHRleHQpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0ZXh0Ci0JICogQHBhcmFtIGltYWdlCi0JICovCi0JcHVibGljIFRlc3RBY3Rpb25EZWxlZ2F0ZShTdHJpbmcgdGV4dCwgSW1hZ2VEZXNjcmlwdG9yIGltYWdlKSB7Ci0JCXN1cGVyKHRleHQsIGltYWdlKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGV4dAotCSAqIEBwYXJhbSBzdHlsZQotCSAqLwotCXB1YmxpYyBUZXN0QWN0aW9uRGVsZWdhdGUoU3RyaW5nIHRleHQsIGludCBzdHlsZSkgewotCQlzdXBlcih0ZXh0LCBzdHlsZSk7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JRWRpdG9yQWN0aW9uRGVsZWdhdGUjc2V0QWN0aXZlRWRpdG9yKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uLAotCSAqICAgICAgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQpCi0JICovCi0JcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElBY3Rpb24gdGFyZ2V0QWN0aW9uLCBJRWRpdG9yUGFydCB0YXJnZXRFZGl0b3IpIHsKLQkJZWRpdG9yID0gdGFyZ2V0RWRpdG9yOwotCQlmYWN0aW9uID0gdGFyZ2V0QWN0aW9uOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3J1bihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBydW5BY3Rpb24pIHsKLQkJTWVzc2FnZURpYWxvZy5vcGVuSW5mb3JtYXRpb24oZWRpdG9yLmdldEVkaXRvclNpdGUoKS5nZXRTaGVsbCgpLCAiVGVzdCIsICJDb21wbGV0ZWQiKTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uLAotCSAqICAgICAgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uKQotCSAqLwotCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoSUFjdGlvbiBhY3Rpb24sIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JCS8vIGRvIG5vdGhpbmcKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1Rlc3RFbWFpbE5vdGljZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0RW1haWxOb3RpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRjM2VlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1Rlc3RFbWFpbE5vdGljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKLSAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMKLSAqIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZAotICogaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIFRlc3RFbWFpbE5vdGljZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIGJvb2xlYW4gc2VuZE5vdGlmaWNhdGlvbnMgPSBmYWxzZTsKLQotCXB1YmxpYyBUZXN0RW1haWxOb3RpY2UoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIFRlc3RFbWFpbE5vdGljZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1haWwoKSB7Ci0JCWFzc2VydEZhbHNlKCJTaW1wbGUgdGVzdCB0byBiZSBzdXJlIGVtYWlsIGdldHMgc2VudCBvbiBmYWlsdXJlIiwgc2VuZE5vdGlmaWNhdGlvbnMpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1Rlc3RMaW5lU3R5bGVQcm92aWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0TGluZVN0eWxlUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFmM2FlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1Rlc3RMaW5lU3R5bGVQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUeXBlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVSYW5nZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJHQjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuc3R5bGUuSGlnaGxpZ2h0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5zdHlsZS5MaW5lU3R5bGVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnV0aWwuRWRpdG9yVXRpbGl0eTsKLQotcHVibGljIGNsYXNzIFRlc3RMaW5lU3R5bGVQcm92aWRlciBpbXBsZW1lbnRzIExpbmVTdHlsZVByb3ZpZGVyIHsKLQotCUNvbG9yIGZvcmVncm91bmQgPSBudWxsOwotCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIFRlc3RMaW5lU3R5bGVQcm92aWRlcigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXIjaW5pdChvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGV4dC5JU3RydWN0dXJlZERvY3VtZW50LAotCSAqICAgICAgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5zdHlsZS5IaWdobGlnaHRlcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0KElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQsIEhpZ2hsaWdodGVyIGhpZ2hsaWdodGVyKSB7Ci0JCS8vIG5vdGhpbmcgdG8gaW5pdAotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5zdHlsZS5MaW5lU3R5bGVQcm92aWRlciNwcmVwYXJlUmVnaW9ucyhvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUeXBlZFJlZ2lvbiwKLQkgKiAgICAgIGludCwgaW50LCBqYXZhLnV0aWwuQ29sbGVjdGlvbikKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBwcmVwYXJlUmVnaW9ucyhJVHlwZWRSZWdpb24gY3VycmVudFJlZ2lvbiwgaW50IHN0YXJ0LCBpbnQgbGVuZ3RoLCBDb2xsZWN0aW9uIHN0eWxlUmFuZ2VzKSB7Ci0JCS8vIG1ha2UgZXZlcnl0aGluZyBib2xkIGdyZXkKLQkJaWYgKGZvcmVncm91bmQgPT0gbnVsbCkKLQkJCWZvcmVncm91bmQgPSBFZGl0b3JVdGlsaXR5LmdldENvbG9yKG5ldyBSR0IoMTI3LCAxMjcsIDEyNykpOwotCQlzdHlsZVJhbmdlcy5hZGQobmV3IFN0eWxlUmFuZ2Uoc3RhcnQsIGxlbmd0aCwgZm9yZWdyb3VuZCwgbnVsbCwgU1dULkJPTEQpKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyI3JlbGVhc2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0JCS8vIG5vdGhpbmcgdG8gcmVsZWFzZQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0U3RydWN0dXJlZFRleHRFZGl0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVGVzdFN0cnVjdHVyZWRUZXh0RWRpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjY2QxNGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0U3RydWN0dXJlZFRleHRFZGl0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuSVNob3dJblRhcmdldExpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotCi1wdWJsaWMgY2xhc3MgVGVzdFN0cnVjdHVyZWRUZXh0RWRpdG9yIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJUZXN0U3RydWN0dXJlZFRleHRFZGl0b3IiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIEZJTEVfTkFNRSA9ICJ0ZXN0U3RydWN0dXJlZFRleHRFZGl0b3IueG1sIjsKLQotCXByaXZhdGUgc3RhdGljIFN0cnVjdHVyZWRUZXh0RWRpdG9yIGZFZGl0b3I7Ci0JcHJpdmF0ZSBzdGF0aWMgSUZpbGUgZkZpbGU7Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmSXNTZXR1cCA9IGZhbHNlOwotCi0JcHVibGljIFRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvcigpIHsKLQkJc3VwZXIoIlRlc3RTdHJ1Y3RyZWRUZXh0RWRpdG9yIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaWYgKCFmSXNTZXR1cCkgewotCQkJLy8gY3JlYXRlIHByb2plY3QKLQkJCWNyZWF0ZVByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkJCWZGaWxlID0gZ2V0T3JDcmVhdGVGaWxlKFBST0pFQ1RfTkFNRSArICIvIiArIEZJTEVfTkFNRSk7Ci0JCQlmSXNTZXR1cCA9IHRydWU7Ci0JCX0KLQotCQlpZiAoZklzU2V0dXAgJiYgZkVkaXRvciA9PSBudWxsKSB7Ci0JCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLQkJCUlFZGl0b3JJbnB1dCBpbnB1dCA9IG5ldyBGaWxlRWRpdG9ySW5wdXQoZkZpbGUpOwotCQkJLyoKLQkJCSAqIFRoaXMgc2hvdWxkIHRha2UgY2FyZSBvZiB0ZXN0aW5nIGluaXQsIGNyZWF0ZVBhcnRDb250cm9sLAotCQkJICogYmVnaW5CYWNrZ3JvdW5kT3BlcmF0aW9uLCBlbmRCYWNrZ3JvdW5kT3BlcmF0aW9uIG1ldGhvZHMKLQkJCSAqLwotCQkJSUVkaXRvclBhcnQgcGFydCA9IHBhZ2Uub3BlbkVkaXRvcihpbnB1dCwgIm9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IiLCB0cnVlKTsKLQkJCWlmIChwYXJ0IGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpCi0JCQkJZkVkaXRvciA9IChTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgcGFydDsKLQkJCWVsc2UKLQkJCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gb3BlbiBzdHJ1Y3R1cmVkIHRleHQgZWRpdG9yIiwgZmFsc2UpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaWYgKGZFZGl0b3IgIT0gbnVsbCkgewotCQkJLyoKLQkJCSAqIFRoaXMgc2hvdWxkIHRha2UgY2FyZSBvZiB0ZXN0aW5nIGNsb3NlIGFuZCBkaXNwb3NlIG1ldGhvZHMKLQkJCSAqLwotCQkJZkVkaXRvci5jbG9zZShmYWxzZSk7Ci0JCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gY2xvc2UgZWRpdG9yIiwgdHJ1ZSk7Ci0JCQlmRWRpdG9yID0gbnVsbDsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVQcm9qZWN0KFN0cmluZyBwcm9qTmFtZSkgewotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qTmFtZSk7Ci0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qTmFtZSk7Ci0JCXRyeSB7Ci0JCQlwcm9qZWN0LmNyZWF0ZShkZXNjcmlwdGlvbiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQlwcm9qZWN0Lm9wZW4obmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBJRmlsZSBnZXRPckNyZWF0ZUZpbGUoU3RyaW5nIGZpbGVQYXRoKSB7Ci0JCUlGaWxlIGJsYW5rSnNwRmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlUGF0aCkpOwotCQlpZiAoYmxhbmtKc3BGaWxlICE9IG51bGwgJiYgIWJsYW5rSnNwRmlsZS5leGlzdHMoKSkgewotCQkJdHJ5IHsKLQkJCQlibGFua0pzcEZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShuZXcgYnl0ZVswXSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGJsYW5rSnNwRmlsZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RG9TYXZpbmcoKSB7Ci0JCWZFZGl0b3IuZG9SZXZlcnRUb1NhdmVkKCk7Ci0JCWFzc2VydFRydWUoIlVuYWJsZSB0byByZXZlcnQgdG8gc2F2ZWQiLCB0cnVlKTsKLQkJZkVkaXRvci5kb1NhdmUobmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCWFzc2VydFRydWUoIlVuYWJsZSB0byBzYXZlIiwgdHJ1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVkaXRvckNvbnRleHRNZW51QWJvdXRUb1Nob3coKSB7Ci0JCUlNZW51TWFuYWdlciBtZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCk7Ci0JCWZFZGl0b3IuZWRpdG9yQ29udGV4dE1lbnVBYm91dFRvU2hvdyhtZW51KTsKLQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIHByZXBhcmUgZm9yIGNvbnRleHQgbWVudSBhYm91dCB0byBzaG93IiwgdHJ1ZSk7Ci0JCW1lbnUuZGlzcG9zZSgpOwotCQltZW51ID0gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QWRhcHRlcigpIHsKLQkJT2JqZWN0IGFkYXB0ZXIgPSBmRWRpdG9yLmdldEFkYXB0ZXIoSVNob3dJblRhcmdldExpc3QuY2xhc3MpOwotCQlhc3NlcnRUcnVlKCJHZXQgYWRhcHRlciBmb3Igc2hvdyBpbiB0YXJnZXQgZmFpbGVkIiwgYWRhcHRlciBpbnN0YW5jZW9mIElTaG93SW5UYXJnZXRMaXN0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U2V0RWRpdG9yUGFydCgpIHsKLQkJZkVkaXRvci5zZXRFZGl0b3JQYXJ0KG51bGwpOwotCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gc2V0IGVkaXRvciBwYXJ0IiwgdHJ1ZSk7Ci0JCUlFZGl0b3JQYXJ0IHBhcnQgPSBmRWRpdG9yLmdldEVkaXRvclBhcnQoKTsKLQkJYXNzZXJ0VHJ1ZSgiRGlkIG5vdCBnZXQgZXhwZWN0ZWQgZWRpdG9yIHBhcnQiLCBwYXJ0IGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbml0aWFsaXplRG9jdW1lbnRQcm92aWRlcigpIHsKLQkJZkVkaXRvci5pbml0aWFsaXplRG9jdW1lbnRQcm92aWRlcihudWxsKTsKLQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIGluaXRpYWxpemUgZG9jdW1lbnQgcHJvdmlkZXIiLCB0cnVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0T3JpZW50YXRpb24oKSB7Ci0JCWludCBvciA9IGZFZGl0b3IuZ2V0T3JpZW50YXRpb24oKTsKLQkJYXNzZXJ0RXF1YWxzKFNXVC5MRUZUX1RPX1JJR0hULCBvcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFNlbGVjdGlvblByb3ZpZGVyKCkgewotCQlJU2VsZWN0aW9uUHJvdmlkZXIgcHJvdmlkZXIgPSBmRWRpdG9yLmdldFNlbGVjdGlvblByb3ZpZGVyKCk7Ci0JCWFzc2VydE5vdE51bGwoIkVkaXRvcidzIHNlbGVjdGlvbiBwcm92aWRlciB3YXMgbnVsbCIsIHByb3ZpZGVyKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VGV4dFZpZXdlcigpIHsKLQkJU3RydWN0dXJlZFRleHRWaWV3ZXIgdmlld2VyID0gZkVkaXRvci5nZXRUZXh0Vmlld2VyKCk7Ci0JCWFzc2VydE5vdE51bGwoIkVkaXRvcidzIHRleHQgdmlld2VyIHdhcyBudWxsIiwgdmlld2VyKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVtZW1iZXJSZXN0b3JlU2VsZWN0aW9uKCkgewotCQlmRWRpdG9yLnJlbWVtYmVyU2VsZWN0aW9uKCk7Ci0JCWFzc2VydFRydWUoIlVuYWJsZSB0byByZW1lbWJlciBlZGl0b3Igc2VsZWN0aW9uIiwgdHJ1ZSk7Ci0JCWZFZGl0b3IucmVzdG9yZVNlbGVjdGlvbigpOwotCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gcmVzdG9yZSBlZGl0b3Igc2VsZWN0aW9uIiwgdHJ1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNhZmVseVNhbml0eUNoZWNrKCkgewotCQlmRWRpdG9yLnNhZmVseVNhbml0eUNoZWNrU3RhdGUoZkVkaXRvci5nZXRFZGl0b3JJbnB1dCgpKTsKLQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIHNhZmVseSBzYW5pdHkgY2hlY2sgZWRpdG9yIHN0YXRlIiwgdHJ1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNob3dCdXN5KCkgewotCQlmRWRpdG9yLnNob3dCdXN5KGZhbHNlKTsKLQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIHNob3cgZWRpdG9yIGlzIGJ1c3kiLCB0cnVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VXBkYXRlKCkgewotCQlmRWRpdG9yLnVwZGF0ZSgpOwotCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gdXBkYXRlIGVkaXRvciIsIHRydWUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVmVyaWZ5RWRpdG9yUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1ZlcmlmeUVkaXRvclBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzUzZjZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVmVyaWZ5RWRpdG9yUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJHQjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU1NFVUlQbHVnaW47Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCi0gKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zCi0gKiBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQKLSAqIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcHVibGljIGNsYXNzIFZlcmlmeUVkaXRvclBsdWdpbiBleHRlbmRzIFRlc3RDYXNlIHsKLQotCUxpc3QgY29sb3JMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkV4aXN0cygpIHsKLQkJUGx1Z2luIHBsdWdpbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlwbHVnaW4gPSBTU0VVSVBsdWdpbi5nZXREZWZhdWx0KCk7Ci0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXBsdWdpbiA9IG51bGw7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbCgic3NlIGVkaXRvciBwbHVnaW4gY291bGQgbm90IGJlIGluc3RhbnRpYXRlZCIsIHBsdWdpbik7Ci0KLQl9Ci0KLQkvKioKLQkgKiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMganVzdCB0byB0ZXN0IGlmIHdlIGNhbiBkaXJlY3RseSBjcmVhdGUgbG90cwotCSAqIG9mIFJCRyBjb2xvcnMsIGV2ZW4gaWYgZGlzcGxheSBzZXQgdG8gIjI1NiIgKG9uIExpbnV4KS4gQW5kLCBCVFcsIGl0Ci0JICogZG9lcyBub3QgZmFpbCBldmVuIHdpdGggMjU2IGNvbG9ycyBzZXQsIGF0IGxlYXN0IG9uIExpbnV4LCBpbiBkZXYuIGVudi4KLQkgKiBWYXJ5aW5nIGFsbCB0aHJlZSBSR0IgbnVtYmVycywgdGhvdWdoLCBpdCBpcyBlYXN5IHRvIHJ1biBvdXQgb2YgbWVtb3J5IQotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDb2xvckhhbmRsZXMoKSB7Ci0JCURpc3BsYXkgZGlzcGxheSA9IERpc3BsYXkuZ2V0Q3VycmVudCgpOwotCQlpZiAoZGlzcGxheSA9PSBudWxsKQotCQkJZGlzcGxheSA9IERpc3BsYXkuZ2V0RGVmYXVsdCgpOwotCQlhc3NlcnROb3ROdWxsKCJkaXNwbGF5IGNvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQiLCBkaXNwbGF5KTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQkJZm9yIChpbnQgaiA9IDA7IGogPCAyNTY7IGorKykgewotCQkJCS8vIDI1NiBjdWJlZCBydW5zIG91dCBvZiBtZW1vcnkKLQkJCQkvLyBmb3IgKGludCBrID0gMDsgayA8IDI1NjsgaysrKSB7Ci0JCQkJY29sb3JMaXN0LmFkZChuZXcgQ29sb3IoZGlzcGxheSwgbmV3IFJHQihpLCBqLCA1MCkpKTsKLQkJCQkvLyB9Ci0KLQkJCX0KLQotCQl9Ci0JCS8vIGlmIHdlIGdldCB0aGlzIGZhciB3aXRob3V0IGVycm9yLCBhbGwgaXMgb2suCi0JCWFzc2VydFRydWUodHJ1ZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMTQ5ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3MCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMudmlld2VyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JQXV0b0VkaXRTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHREb3VibGVDbGlja1N0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVVuZG9NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29udGVudEFzc2lzdGFudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmZvcm1hdHRlci5JQ29udGVudEZvcm1hdHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0Lmh5cGVybGluay5JSHlwZXJsaW5rRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5oeXBlcmxpbmsuSUh5cGVybGlua1ByZXNlbnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmluZm9ybWF0aW9uLklJbmZvcm1hdGlvblByZXNlbnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnByZXNlbnRhdGlvbi5JUHJlc2VudGF0aW9uUmVjb25jaWxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJlY29uY2lsZXIuSVJlY29uY2lsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUFubm90YXRpb25Ib3ZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRleHQuSVN0cnVjdHVyZWRQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5zdHlsZS5MaW5lU3R5bGVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLkxvZ2dlcjsKLQotcHVibGljIGNsYXNzIFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb24gZkNvbmZpZyA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGZEaXNwbGF5RXhpc3RzID0gdHJ1ZTsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyIGZWaWV3ZXIgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0KLQlwdWJsaWMgVGVzdFZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCXN1cGVyKCJUZXN0Vmlld2VyQ29uZmlndXJhdGlvbiIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCF0aGlzLmlzU2V0dXApIHsKLQkJCXNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBzZXRVcFZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCWlmIChEaXNwbGF5LmdldEN1cnJlbnQoKSAhPSBudWxsKSB7Ci0KLQkJCVNoZWxsIHNoZWxsID0gbnVsbDsKLQkJCUNvbXBvc2l0ZSBwYXJlbnQgPSBudWxsOwotCi0JCQlpZiAoUGxhdGZvcm1VSS5pc1dvcmtiZW5jaFJ1bm5pbmcoKSkgewotCQkJCXNoZWxsID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJc2hlbGwgPSBuZXcgU2hlbGwoRGlzcGxheS5nZXRDdXJyZW50KCkpOwotCQkJfQotCQkJcGFyZW50ID0gbmV3IENvbXBvc2l0ZShzaGVsbCwgU1dULk5PTkUpOwotCi0JCQkvLyBkdW1teSB2aWV3ZXIKLQkJCWZWaWV3ZXIgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXIocGFyZW50LCBudWxsLCBudWxsLCBmYWxzZSwgU1dULk5PTkUpOwotCQkJZkNvbmZpZyA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb24oKTsKLQkJfQotCQllbHNlIHsKLQkJCWZEaXNwbGF5RXhpc3RzID0gZmFsc2U7Ci0JCQlMb2dnZXIubG9nKExvZ2dlci5JTkZPLCAiUmVtZW1iZXIsIHZpZXdlciBjb25maWd1cmF0aW9uIHRlc3RzIGFyZSBub3QgcnVuIGJlY2F1c2Ugd29ya2JlbmNoIGlzIG5vdCBvcGVuIChub3JtYWwgb24gYnVpbGQgbWFjaGluZSkiKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRBbm5vdGF0aW9uSG92ZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlBbm5vdGF0aW9uSG92ZXIgaG92ZXIgPSBmQ29uZmlnLmdldEFubm90YXRpb25Ib3ZlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiQW5ub3RhdGlvbkhvdmVyIGlzIG51bGwiLCBob3Zlcik7Ci0JfQotCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRBdXRvRWRpdFN0cmF0ZWdpZXMoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlBdXRvRWRpdFN0cmF0ZWd5W10gc3RyYXRlZ2llcyA9IGZDb25maWcuZ2V0QXV0b0VkaXRTdHJhdGVnaWVzKGZWaWV3ZXIsIElTdHJ1Y3R1cmVkUGFydGl0aW9ucy5ERUZBVUxUX1BBUlRJVElPTik7Ci0JCWFzc2VydE5vdE51bGwoc3RyYXRlZ2llcyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBhdXRvIGVkaXQgc3RyYXRlZ2llcyIsIHN0cmF0ZWdpZXMubGVuZ3RoID4gMCk7Ci0JfQotCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb25maWd1cmVkQ29udGVudFR5cGVzKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBjb25maWd1cmVkQ29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKGNvbmZpZ3VyZWRDb250ZW50VHlwZXMpOwotCQlhc3NlcnRUcnVlKGNvbmZpZ3VyZWRDb250ZW50VHlwZXMubGVuZ3RoID09IDEpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb25maWd1cmVkRG9jdW1lbnRQYXJ0aXRpb25pbmcoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCVN0cmluZyBwYXJ0aXRpb25pbmcgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWREb2N1bWVudFBhcnRpdGlvbmluZyhmVmlld2VyKTsKLQkJYXNzZXJ0RXF1YWxzKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcsIHBhcnRpdGlvbmluZyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbmZpZ3VyZWRUZXh0SG92ZXJTdGF0ZU1hc2tzKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlpbnRbXSBtYXNrcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZFRleHRIb3ZlclN0YXRlTWFza3MoZlZpZXdlciwgSVN0cnVjdHVyZWRQYXJ0aXRpb25zLkRFRkFVTFRfUEFSVElUSU9OKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIG1hc2tzLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRBc3Npc3RhbnQoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlDb250ZW50QXNzaXN0YW50IGNhID0gZkNvbmZpZy5nZXRDb250ZW50QXNzaXN0YW50KGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBpcyBubyBjb250ZW50IGFzc2lzdGFudCIsIGNhKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEZvcm1hdHRlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUNvbnRlbnRGb3JtYXR0ZXIgY2YgPSBmQ29uZmlnLmdldENvbnRlbnRGb3JtYXR0ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE51bGwoInRoZXJlIGlzIGEgY29udGVudCBmb3JtYXR0ZXIiLCBjZik7Ci0JfQotCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXREb3VibGVDbGlja1N0cmF0ZWd5KCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlJVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3kgc3RyYXRlZ3kgPSBmQ29uZmlnLmdldERvdWJsZUNsaWNrU3RyYXRlZ3koZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmIChzdHJhdGVneSAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGRvdWJsZSBjbGljayBzdHJhdGVnaWVzIiwgZmFsc2UpOwotCX0KLQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SHlwZXJsaW5rRGV0ZWN0b3JzKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJSHlwZXJsaW5rRGV0ZWN0b3JbXSBkZXRlY3RvcnMgPSBmQ29uZmlnLmdldEh5cGVybGlua0RldGVjdG9ycyhmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgYXJlIG5vIGh5cGVybGluayBkZXRlY3RvcnMiLCBkZXRlY3RvcnMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gaHlwZXJsaW5rIGRldGVjdG9ycyIsIGRldGVjdG9ycy5sZW5ndGggPiAwKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SHlwZXJsaW5rUHJlc2VudGVyKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJSHlwZXJsaW5rUHJlc2VudGVyIHByZXNlbnRlciA9IGZDb25maWcuZ2V0SHlwZXJsaW5rUHJlc2VudGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJoeXBlcmxpbmsgcHJlc2VudGVyIHNob3VsZG4ndCBiZSBudWxsIiwgcHJlc2VudGVyKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IgaW5mb0NvbnRyb2xDcmVhdG9yID0gZkNvbmZpZy5nZXRJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJpbmZvIGNvbnRyb2wgY3JlYXRvciB3YXMgbnVsbCIsIGluZm9Db250cm9sQ3JlYXRvcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEluZm9ybWF0aW9uUHJlc2VudGVyKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJSW5mb3JtYXRpb25QcmVzZW50ZXIgcHJlc2VudGVyID0gZkNvbmZpZy5nZXRJbmZvcm1hdGlvblByZXNlbnRlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiSW5mb3JtYXRpb25QcmVzZW50ZXIgd2FzIG51bGwiLCBwcmVzZW50ZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMaW5lU3R5bGVQcm92aWRlcnMoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQkvLyB0aGVyZSBzaG91bGQgYmUgbm8gbGluZXN0eWxlcHJvdmlkZXJzIGZvciBkZWZhdWx0Ci0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUxpbmVTdHlsZVByb3ZpZGVyIHByb3ZpZGVyc1tdID0gZkNvbmZpZy5nZXRMaW5lU3R5bGVQcm92aWRlcnMoZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWFzc2VydE51bGwoImxpbmUgc3R5bGUgcHJvdmlkZXJzIGlzIG5vdCBudWxsIiwgcHJvdmlkZXJzKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0T3ZlcnZpZXdSdWxlckFubm90YXRpb25Ib3ZlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUFubm90YXRpb25Ib3ZlciBhbm5vdGF0aW9uSG92ZXIgPSBmQ29uZmlnLmdldE92ZXJ2aWV3UnVsZXJBbm5vdGF0aW9uSG92ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoImFubm90YXRpb24gaG92ZXIgd2FzIG51bGwiLCBhbm5vdGF0aW9uSG92ZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRQcmVzZW50YXRpb25SZWNvbmNpbGVyKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJUHJlc2VudGF0aW9uUmVjb25jaWxlciBwcmVzZW50YXRpb25SZWNvbmNpbGVyID0gZkNvbmZpZy5nZXRQcmVzZW50YXRpb25SZWNvbmNpbGVyKGZWaWV3ZXIpOwotCQkvLyBvdXIgZGVmYXVsdCBwcmVzZW50YXRpb24gcmVjb25jaWxlciBpcyBudWxsCi0JCWFzc2VydE51bGwoInByZXNlbnRhdGlvbiByZWNvbmNpbGVyIHdhcyBub3QgbnVsbCIsIHByZXNlbnRhdGlvblJlY29uY2lsZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRSZWNvbmNpbGVyKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJUmVjb25jaWxlciByID0gZkNvbmZpZy5nZXRSZWNvbmNpbGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJSZWNvbmNpbGVyIHdhcyBudWxsIiwgcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFVuZG9NYW5hZ2VyKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJVW5kb01hbmFnZXIgdW5kb01hbmFnZXIgPSBmQ29uZmlnLmdldFVuZG9NYW5hZ2VyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ1bmRvIG1hbmFnZXIgd2FzIG51bGwiLCB1bmRvTWFuYWdlcik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2OTZhNzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdAotCW5hbWU9InRlc3RzdWl0ZSIKLQlkZWZhdWx0PSJydW4iCi0JYmFzZWRpcj0iLiI+Ci0JPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLQk8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotCTwhLS0gPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iLz4gLS0+Ci0KLQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JPGVjaG8gbWVzc2FnZT0iZWNsaXBzZSBwbGFjZSAke2VjbGlwc2UtaG9tZX0iIC8+Ci0KLQk8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgcGx1Z2luLW5hbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9InBsdWdpbi1uYW1lIgotCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cyIgLz4KLQk8cHJvcGVydHkKLQkJbmFtZT0ibGlicmFyeS1maWxlIgotCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLQk8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotCTwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotCTx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0JCTx0c3RhbXAgLz4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0Ci0JCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0JCQkJaW5jbHVkZXM9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuKnhtbCIgLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotCTx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCQk8cHJvcGVydHkKLQkJCW5hbWU9IndzdC1mb2xkZXIiCi0JCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dzdF9mb2xkZXIiIC8+Ci0JCTxkZWxldGUKLQkJCWRpcj0iJHt3b3Jrc3BhY2V9IgotCQkJcXVpZXQ9InRydWUiIC8+Ci0JCTxhbnQKLQkJCXRhcmdldD0idWktdGVzdCIKLQkJCWFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImRhdGEtZGlyIgotCQkJCXZhbHVlPSIke3dzdC1mb2xkZXJ9IiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCQkJdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iY2xhc3NuYW1lIgotCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLlNTRVVJVGVzdFN1aXRlIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0icGx1Z2luLXBhdGgiCi0JCQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLQk8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLQkJPCEtLTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIi8+LS0+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0JPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotCTx0YXJnZXQKLQkJbmFtZT0icnVuIgotCQlkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotCQk8YW50Ci0JCQl0YXJnZXQ9ImNvbGxlY3QiCi0JCQlhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0JCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJpbmNsdWRlcyIKLQkJCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy4qeG1sIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0ib3V0cHV0LWZpbGUiCi0JCQkJdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLQkJPC9hbnQ+Ci0JCTwhLS0JCTxlbWFpbFJlc3VsdHMgcmVzdWx0c0ZpbGU9IiR7YnVpbGQtcmVzdWx0cy1ob21lfS8ke3BsdWdpbi1uYW1lfS54bWwiIGFkZHJlc3NsaXN0PSJkYXZpZF93aWxsaWFtc0B1cy5pYm0uY29tIiAvPiAtLT4KLQk8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MWM4ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTA3N2E0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYmluCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MTc1MTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+PC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzdkMTBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNGcmkgTWFyIDI1IDE3OjM0OjAxIEVTVCAyMDA1Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvL2RhdGEvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZD1VVEY4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZjZjYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogVGVzdCBQbHVnLWluCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHM7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDAuNy4wCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWwuVGVzdFBsdWdpbgotQnVuZGxlLVZlbmRvcjogSUJNCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWwsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5yZXNvbHZlci50b29scy50ZXN0cy5pbnRlcm5hbCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnVyaXJlc29sdmVyLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmp1bml0LAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuYXBhY2hlLnhlcmNlcywKLSBvcmcuZWNsaXBzZS54c2QKLUVjbGlwc2UtQXV0b1N0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWM1OTg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+TWF5IDIsIDIwMDY8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZmZjM2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLXNvdXJjZS5jYXRhbG9ndGVzdHMuamFyID0gc3JjLwotb3V0cHV0LmNhdGFsb2d0ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBhY3R1YWxfcmVzdWx0cy8sXAotICAgICAgICAgICAgICAgZGF0YS8sXAotICAgICAgICAgICAgICAgamFycy8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgY2F0YWxvZ3Rlc3RzLmphcixcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCi0KLXNyYy5pbmNsdWRlcyA9IGFjdHVhbF9yZXN1bHRzLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL0ludm9pY2UvSW52b2ljZS5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MzdiYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/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+Ci0KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjRiYzE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NhdGFsb2cxLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSW52b2ljZUlkX3Rlc3QiIHVyaT0iLi9JbnZvaWNlL0ludm9pY2UuZHRkIiB3ZWJVUkw9Imh0dHA6Ly93ZWJVUkwiLz4KLSAgPHN5c3RlbSBzeXN0ZW1JZD0iSW52b2ljZS5kdGQiIHVyaT0iLi9JbnZvaWNlL0ludm9pY2UuZHRkIiBjaGFjaGVkPSJ5ZXMiIHByb3BlcnR5PSJ2YWx1ZTEiLz4KLSAgPHVyaSBuYW1lPSJodHRwOi8vd3d3LnRlc3QuY29tL0ludm9pY2UuZHRkIiB1cmk9Ii4vSW52b2ljZS9JbnZvaWNlLmR0ZCIgY2hhY2hlZD0ibm8iIHByb3BlcnR5PSJ2YWx1ZTIiLz4KLSAgPG5leHRDYXRhbG9nIGNhdGFsb2c9ImNhdGFsb2cyLnhtbCIgaWQ9Im5leHRDYXRhbG9nMSIvPgotPC9jYXRhbG9nPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWNhMDNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NhdGFsb2cyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+IAotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgotICA8cHVibGljIHB1YmxpY0lkPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZV8wMDEiIHVyaT0iLi9QdWJsaWNhdGlvbkNhdGFsb2cvQ2F0YWxvZ3VlLnhzZCIgLz4gCi0gIDxzeXN0ZW0gc3lzdGVtSWQ9IkNhdGFsb2d1ZS54c2QiIHVyaT0iLi9QdWJsaWNhdGlvbkNhdGFsb2cvQ2F0YWxvZ3VlLnhzZCIgLz4gCi0gIDx1cmkgbmFtZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUueHNkIiB1cmk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QiIC8+IAotICA8Z3JvdXAgaWQ9Imdyb3VwMSIgcHJlZmVyPSJzeXN0ZW0iPgotICAgIDxwdWJsaWMgcHVibGljSWQ9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlXzAwMiIgdXJpPSIuL1B1YmxpY2F0aW9uQ2F0YWxvZy9DYXRhbG9ndWUueHNkIiAvPiAKLSAgPC9ncm91cD4KLSAgPC9jYXRhbG9nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NhdGFsb2cyYmFrLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NhdGFsb2cyYmFrLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBhNWIyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jYXRhbG9nMmJhay54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlIiB1cmk9Ii4vUHVibGljYXRpb25DYXRhbG9nL0NhdGFsb2d1ZS54c2QiLz4KLSAgPHN5c3RlbSBzeXN0ZW1JZD0iQ2F0YWxvZ3VlLnhzZCIgdXJpPSIuL1B1YmxpY2F0aW9uQ2F0YWxvZy9DYXRhbG9ndWUueHNkIi8+Ci0gICA8Z3JvdXAgaWQ9Imdyb3VwMSIgcHJlZmVyPSJzeXN0ZW0iPgotIAkJPHVyaSBuYW1lPSJodHRwOi8vQ2F0YWxvZ3VlLnhzZCIgdXJpPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZS9DYXRhbG9ndWUueHNkIi8+Ci0gICA8L2dyb3VwPgotPC9jYXRhbG9nPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY29tcGF0YWJpbGl0eVRlc3QueG1sY2F0YWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NvbXBhdGFiaWxpdHlUZXN0LnhtbGNhdGFsb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ODQ1NTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY29tcGF0YWJpbGl0eVRlc3QueG1sY2F0YWxvZworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotPFhNTENhdGFsb2dTZXR0aW5ncz4NCi0gIDxVc2VyRW50cmllcz4NCi0gICAgPFVzZXJFbnRyeSBUWVBFPSJQVUJMSUMiIElEPSJJbnZvaWNlSWQiIA0KLVVSST0icGxhdGZvcm06L3Jlc291cmNlL1hNTEV4YW1wbGVzL0ludm9pY2UyL0ludm9pY2UuZHRkIi8+DQotICA8L1VzZXJFbnRyaWVzPg0KLTwvWE1MQ2F0YWxvZ1NldHRpbmdzPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2RlbGVnYXRlQW5kUmV3cml0ZS9jYXRhbG9nLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2RlbGVnYXRlQW5kUmV3cml0ZS9jYXRhbG9nLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M3OTRjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9kZWxlZ2F0ZUFuZFJld3JpdGUvY2F0YWxvZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhRE9DVFlQRSBjYXRhbG9nIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgotICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgWE1MIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2sveG1sY2F0YWxvZyIvPgotICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3htbGNhdGFsb2ciLz4KLSAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9IklTTyA4ODc5OjE5ODYiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3NnbWwvZG9jYm9vay94bWxjYXRhbG9nIi8+Ci0gIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2svIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2sveG1sY2F0YWxvZyIvPgotICA8ZGVsZWdhdGVVUkkgdXJpU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3NnbWwvZG9jYm9vay94bWxjYXRhbG9nIi8+Ci0gIDxyZXdyaXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9zY3JvbGxrZWVwZXIuc291cmNlZm9yZ2UubmV0L2R0ZHMvc2Nyb2xsa2VlcGVyLW9tZi0xLjAvc2Nyb2xsa2VlcGVyLW9tZi5kdGQiIHJld3JpdGVQcmVmaXg9Ii91c3Ivc2hhcmUveG1sL3Njcm9sbGtlZXBlci9kdGRzL3Njcm9sbGtlZXBlci1vbWYuZHRkIi8+Ci0gIDxyZXdyaXRlVVJJIHVyaVN0YXJ0U3RyaW5nPSJodHRwOi8vc2Nyb2xsa2VlcGVyLnNvdXJjZWZvcmdlLm5ldC9kdGRzL3Njcm9sbGtlZXBlci1vbWYtMS4wL3Njcm9sbGtlZXBlci1vbWYuZHRkIiByZXdyaXRlUHJlZml4PSIvdXNyL3NoYXJlL3htbC9zY3JvbGxrZWVwZXIvZHRkcy9zY3JvbGxrZWVwZXItb21mLmR0ZCIvPgotPC9jYXRhbG9nPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZG9jYm9vay94bWxjYXRhbG9nLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2RvY2Jvb2sveG1sY2F0YWxvZy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyODNkZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZG9jYm9vay94bWxjYXRhbG9nLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPCFET0NUWVBFIGNhdGFsb2cgUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIiAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIFB1Ymxpc2hpbmcvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tcHViLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHcmVlayBMZXR0ZXJzLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWdyazEuZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBJbmZvcm1hdGlvbiBQb29sIFY0LjEuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjEuMi0xLjAtMTcuMi9kYnBvb2x4Lm1vZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBCb3ggYW5kIExpbmUgRHJhd2luZy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1ib3guZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMS4yLTEuMC0xNy4yL2RvY2Jvb2t4LmR0ZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHcmVlayBTeW1ib2xzLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWdyazMuZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogTmVnYXRlZCBSZWxhdGlvbnMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tYW1zbi5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTnVtZXJpYyBhbmQgU3BlY2lhbCBHcmFwaGljLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLW51bS5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgWE1MIENoYXJhY3RlciBFbnRpdGllcyBWNC4xLjIvL0VOIiB1cmk9InhtbC1kdGQtNC4xLjItMS4wLTE3LjIvZGJjZW50eC5tb2QiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWx0ZXJuYXRpdmUgR3JlZWsgU3ltYm9scy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1ncms0LmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBYTUwgTm90YXRpb25zIFY0LjEuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjEuMi0xLjAtMTcuMi9kYm5vdG54Lm1vZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBEaWFjcml0aWNhbCBNYXJrcy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1kaWEuZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE1vbm90b25pa28gR3JlZWsvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tZ3JrMi5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgWE1MIEFkZGl0aW9uYWwgR2VuZXJhbCBFbnRpdGllcyBWNC4xLjIvL0VOIiB1cmk9InhtbC1kdGQtNC4xLjItMS4wLTE3LjIvZGJnZW5lbnQubW9kIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBEb2N1bWVudCBIaWVyYXJjaHkgVjQuMS4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMS4yLTEuMC0xNy4yL2RiaGllcngubW9kIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogQXJyb3cgUmVsYXRpb25zLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWFtc2EuZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogT3JkaW5hcnkvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tYW1zby5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgUnVzc2lhbiBDeXJpbGxpYy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1jeXJsLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHZW5lcmFsIFRlY2huaWNhbC8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby10ZWNoLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IERlbGltaXRlcnMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tYW1zYy5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0RURCBYTUwgRXhjaGFuZ2UgVGFibGUgTW9kZWwgMTk5OTAzMTUvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL3NvZXh0Ymx4LmR0ZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIENBTFMgVGFibGUgTW9kZWwgVjQuMS4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMS4yLTEuMC0xNy4yL2NhbHN0Ymx4LmR0ZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBMYXRpbiAxLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWxhdDEuZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogQmluYXJ5IE9wZXJhdG9ycy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1hbXNiLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBMYXRpbiAyLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWxhdDIuZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogUmVsYXRpb25zLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWFtc3IuZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE5vbi1SdXNzaWFuIEN5cmlsbGljLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWN5cjIuZW50Ii8+Ci0gIDxyZXdyaXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIiIHJld3JpdGVQcmVmaXg9InhtbC1kdGQtNC4xLjItMS4wLTE3LjIiLz4KLSAgPHJld3JpdGVVUkkgdXJpU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIiIHJld3JpdGVQcmVmaXg9InhtbC1kdGQtNC4xLjItMS4wLTE3LjIiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIEluZm9ybWF0aW9uIFBvb2wgVjQuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZGJwb29seC5tb2QiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9kb2Nib29reC5kdGQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgWE1MIENoYXJhY3RlciBFbnRpdGllcyBWNC4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9kYmNlbnR4Lm1vZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBYTUwgTm90YXRpb25zIFY0LjIvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2Ribm90bngubW9kIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIFhNTCBBZGRpdGlvbmFsIEdlbmVyYWwgRW50aXRpZXMgVjQuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZGJnZW5lbnQubW9kIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBEb2N1bWVudCBIaWVyYXJjaHkgVjQuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZGJoaWVyeC5tb2QiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBDQUxTIFRhYmxlIE1vZGVsIFY0LjIvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2NhbHN0Ymx4LmR0ZCIvPgotICA8cmV3cml0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMiIgcmV3cml0ZVByZWZpeD0ieG1sLWR0ZC00LjItMS4wLTE3LjIiLz4KLSAgPHJld3JpdGVVUkkgdXJpU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yIiByZXdyaXRlUHJlZml4PSJ4bWwtZHRkLTQuMi0xLjAtMTcuMiIvPgotPC9jYXRhbG9nPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS1jYXRhbG9nLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUtY2F0YWxvZy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2N2NkMDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS1jYXRhbG9nLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTwhRE9DVFlQRSBjYXRhbG9nCi0gUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIgotICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIgotICAgICAgICAgcHJlZmVyPSJwdWJsaWMiPgotIDx1cmkgbmFtZT0iaHR0cDovL2FwYWNoZS5vcmcveG1sL3hjYXRhbG9nL2V4YW1wbGUiIHVyaT0iLi9leGFtcGxlL2V4YW1wbGUueHNkIi8+ICAKLSA8c3lzdGVtIHN5c3RlbUlkPSJteWV4YW1wbGUueHNkIiB1cmk9Ii4vZXhhbXBsZS9leGFtcGxlLW5vbmFtZXNwYWNlLnhzZCIvPiAgICAKLSAgICAKLSA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vQS8vIgotICAgICAgICAgICAgICAgICBjYXRhbG9nPSJleGFtcGxlLWNhdGFsb2cyLnhtbCIvPgotCi0gICAgICAgICAgICAgICAgICAgCi08L2NhdGFsb2c+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS1jYXRhbG9nMi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlLWNhdGFsb2cyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThiYjFlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlLWNhdGFsb2cyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPCFET0NUWVBFIGNhdGFsb2cKLSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCi0gImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciCi0gICAgICAgICBwcmVmZXI9InB1YmxpYyI+Ci0gPHB1YmxpYyBwdWJsaWNJZD0iLS8vQS8vWE1MIENBVEFMT0cgSURFTlRJRklFUi8vRU4iIAotICAgICAgICAgdXJpPSIuL2V4YW1wbGUvZXhhbXBsZS5lbnQiLz4KLTwvY2F0YWxvZz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUtZHRkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS1kdGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGFhYWU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS1kdGQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhRE9DVFlQRSByb290IFsKLSA8IUVOVElUWSB0ZXh0IFBVQkxJQyAiLS8vQS8vWE1MIENBVEFMT0cgSURFTlRJRklFUi8vRU4iIAotICAidXJuOnB1YmxpY2lkOi06QTpYTUwrQ0FUQUxPRytJREVOVElGSUVSOkVOIj4KLV0+Ci08cm9vdD4mdGV4dDs8L3Jvb3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUtbm9uYW1lc3BhY2UueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLW5vbmFtZXNwYWNlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyOTk4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUtbm9uYW1lc3BhY2UueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSA8eHM6ZWxlbWVudCBuYW1lPSJyb290IiB0eXBlPSJ4czphbnlVUkkiLz4KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLXNjaGVtYS1ub25hbWVzcGFjZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUtc2NoZW1hLW5vbmFtZXNwYWNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkxNzVmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUtc2NoZW1hLW5vbmFtZXNwYWNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08cm9vdCB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCSAgIHhzaTpub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uPSJteWV4YW1wbGUueHNkIj4KLWh0dHA6Ly9hcGFjaGUub3JnL3htbC9hbnlVUkk8L3Jvb3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUtc2NoZW1hLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS1zY2hlbWEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTdjYjNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS1zY2hlbWEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxyb290ICB4bWxucz0iaHR0cDovL2FwYWNoZS5vcmcveG1sL3hjYXRhbG9nL2V4YW1wbGUiPgotaHR0cDovL2FwYWNoZS5vcmcveG1sL2FueVVSSTwvcm9vdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS5lbnQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUuZW50CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDA4NzU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS5lbnQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1IZWxsbyB3b3JsZCEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWEyOWZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgICAgICAgIHhtbG5zPSJodHRwOi8vYXBhY2hlLm9yZy94bWwveGNhdGFsb2cvZXhhbXBsZSIKLSAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vYXBhY2hlLm9yZy94bWwveGNhdGFsb2cvZXhhbXBsZSI+Ci0gPHhzOmVsZW1lbnQgbmFtZT0icm9vdCIgdHlwZT0ieHM6YW55VVJJIi8+Ci08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3JlcG9ydC1jYXRhbG9nX21hcHBlZGluY2x1ZGVkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3JlcG9ydC1jYXRhbG9nX21hcHBlZGluY2x1ZGVkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYxMjdiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9yZXBvcnQtY2F0YWxvZ19tYXBwZWRpbmNsdWRlZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08IURPQ1RZUEUgY2F0YWxvZwotIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIKLSAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyIKLQlwcmVmZXI9InB1YmxpYyI+Ci0JCi0JPHVyaSBuYW1lPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL1JlcG9ydCIKLQkJdXJpPSIuL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnRfLnhzZCIgLz4KLSAgICA8IS0tIHdlIGNhbiBub3QgbWFwIFB1YmxpY0lkIG9yIFVSSSBvZiB0aGUgaW5jbHVkZWQvcmVkZWZpbmVkIHNjaGVtYXMgLS0+CQotCTx1cmkgbmFtZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9JUE8iCi0JCXVyaT0iLi9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvaXBvXy54c2QiIC8+Ci0JPHN5c3RlbSBzeXN0ZW1JZD0iYWRkcmVzc18ueHNkIgotCQl1cmk9Ii4vUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2FkZHJlc3MueHNkIiAvPgotCi08L2NhdGFsb2c+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvcmVwb3J0LWNhdGFsb2dfcHVibGljLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3JlcG9ydC1jYXRhbG9nX3B1YmxpYy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczNGVjYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvcmVwb3J0LWNhdGFsb2dfcHVibGljLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTwhRE9DVFlQRSBjYXRhbG9nCi0gUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIgotICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIgotCXByZWZlcj0icHVibGljIj4KLQkKLQk8dXJpIG5hbWU9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IgotCQl1cmk9Ii4vUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydF8ueHNkIiAvPgotICAgIDwhLS0gd2UgY2FuIG5vdCBtYXAgUHVibGljSWQgb3IgVVJJIG9mIHRoZSBpbmNsdWRlZC9yZWRlZmluZWQgc2NoZW1hcyAtLT4JCi0JPHVyaSBuYW1lPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0lQTyIKLQkJdXJpPSIuL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG8ueHNkIiAvPgotCQotCi0KLTwvY2F0YWxvZz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9yZXBvcnQtY2F0YWxvZ19zeXN0ZW0ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvcmVwb3J0LWNhdGFsb2dfc3lzdGVtLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY2YTFiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9yZXBvcnQtY2F0YWxvZ19zeXN0ZW0ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPCFET0NUWVBFIGNhdGFsb2cKLSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCi0gImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgotCi0JPHVyaSBuYW1lPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL1JlcG9ydCIKLQkJdXJpPSIuL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnRfLnhzZCIgLz4KLQk8c3lzdGVtIHN5c3RlbUlkPSJpcG9fXy54c2QiCi0JCXVyaT0iLi9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvaXBvXy54c2QiIC8+Ci0JPHN5c3RlbSBzeXN0ZW1JZD0iYWRkcmVzc18ueHNkIgotCQl1cmk9Ii4vUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2FkZHJlc3MueHNkIiAvPgotCi08L2NhdGFsb2c+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvc2NoZW1hcy5qYXIgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9zY2hlbWFzLmphcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQxZTRkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9zY2hlbWFzLmphcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci9jYXRhbG9nLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci9jYXRhbG9nLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThiMDRhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIvY2F0YWxvZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyIgeG1sOmJhc2U9Ii4iPgotICAgCQk8cHVibGljIHB1YmxpY0lkPSJteXF1b3RlIiB1cmk9InF1b3RlMi54bWwiLz4gIAotPC9jYXRhbG9nPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3F1b3RlMS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIvcXVvdGUxLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZjYmE1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIvcXVvdGUxLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci0KLSAgPCEtLSBJIGJlbG9uZyB0bzoKLSAgICAgICBvcmcuYXBhY2hlLnRvb2xzLmFudC50eXBlcy5YTUxDYXRhbG9nQnVpbGRGaWxlVGVzdC5qYXZhIAotICAgICAgIC0tPgotCi08cGFyYT4KLSAgQSBzdGl0Y2ggaW4gdGltZSBzYXZlcyBuaW5lCi08L3BhcmE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIvcXVvdGUyLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci9xdW90ZTIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGNkMTRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci9xdW90ZTIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLQotPHBhcmE+Ci0gIE5vIG5ld3MgaXMgZ29vZCBuZXdzCi08L3BhcmE+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nLnhzbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5MmIwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZy54c2wKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHhzbDpzdHlsZXNoZWV0IAotICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKLSAgdmVyc2lvbj0iMS4wIj4KLQotICA8eHNsOm91dHB1dCBtZXRob2Q9InRleHQiLz4KLQotICA8IS0tIG5hbWUgb2YgdGhlIG91dHB1dCBwYXJhbWV0ZXIgdG8gd3JpdGUgLS0+Ci0gIDx4c2w6cGFyYW0gbmFtZT0ib3V0cHJvcCI+dmFsdWU8L3hzbDpwYXJhbT4KLQotICA8eHNsOnN0cmlwLXNwYWNlIGVsZW1lbnRzPSIqIi8+Ci0KLSAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+Ci0gICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRvdXRwcm9wIi8+OiA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii9mcmFnbWVudC9wYXJhIi8+Ci0gIDwveHNsOnRlbXBsYXRlPgotCi0gIDwhLS0gVGhpcyB3aWxsIG9ubHkgYmUgbWF0Y2hlZCBpbiBkb2MyLnhtbCAtLT4KLSAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iUmVmIj4KLSAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImRvY3VtZW50KEBmaWxlKS9mcmFnbWVudC9wYXJhIi8+Ci0gIDwveHNsOnRlbXBsYXRlPgotCi0gIDwhLS0gVGhpcyB3aWxsIG9ubHkgYmUgbWF0Y2hlZCBpbiBkb2MxLnhtbCAtLT4KLSAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGV4dCgpIj4KLSAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibm9ybWFsaXplLXNwYWNlKC4pIi8+Ci0gIDwveHNsOnRlbXBsYXRlPgotCi08L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cxLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYzczMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cxLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCFET0NUWVBFIGZyYWdtZW50IFsKLSAgPCFFTlRJVFkgcXVvdGUgUFVCTElDICJteXF1b3RlIiAicXVvdGUxLnhtbCI+Ci1dPgotCi08ZnJhZ21lbnQ+Ci0gIDxwYXJhPgotICAgICAgJnF1b3RlOwotICA8L3BhcmE+Ci08L2ZyYWdtZW50PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cyLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkNDFkMGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci0KLTxmcmFnbWVudD4KLSAgPHBhcmE+Ci0gICAgPFJlZiBmaWxlPSJ4bWxjYXRhbG9nMS54bWwiLz4KLSAgPC9wYXJhPgotPC9mcmFnbWVudD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMi54bWwtb3V0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cyLnhtbC1vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ZDdmYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cyLnhtbC1vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi10ZXN0dmFsdWU6IEEgc3RpdGNoIGluIHRpbWUgc2F2ZXMgbmluZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMi54bWwtb3V0LWRpZmYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sLW91dC1kaWZmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODdhNWRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMi54bWwtb3V0LWRpZmYKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw8PDwgdGVzdHZhbHVlOiBBIHN0aXRjaCBpbiB0aW1lIHNhdmVzIG5pbmUNCi08PDw8IHRlc3R2YWx1ZTogTm8gbmV3cyBpcyBnb29kIG5ld3MNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sLXJlc3VsdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMi54bWwtcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGUyOGE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMi54bWwtcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotdGVzdHZhbHVlOiBObyBuZXdzIGlzIGdvb2QgbmV3cwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3hzZC9YU0xTY2hlbWEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEveHNkL1hTTFNjaGVtYS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5OTY0NWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEveHNkL1hTTFNjaGVtYS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj4KLQk8IS0tIHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiIHNjaGVtYUxvY2F0aW9uPSJ4bWwueHNkIiAvLS0+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0ic3R5bGVzaGVldCIgdHlwZT0id3JhcHBlciIgLz4KLQk8eHNkOmVsZW1lbnQgbmFtZT0idHJhbnNmb3JtIiB0eXBlPSJ3cmFwcGVyIiAvPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJ3cmFwcGVyIj4KLQkJPHhzZDpncm91cCByZWY9InRvcExldmVsRWxlbWVudHMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImV4dGVuc2lvbi1lbGVtZW50LXByZWZpeGVzIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJleGNsdWRlLXJlc3VsdC1wcmVmaXhlcyIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzZDpJRCIgdXNlPSJvcHRpb25hbCIgLz4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idmVyc2lvbiIgdHlwZT0ieHNkOk5NVE9LRU4iIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbXBvcnQiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iaHJlZiIgdHlwZT0ieHNkOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iaW5jbHVkZSI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJocmVmIiB0eXBlPSJ4c2Q6YW55VVJJIiB1c2U9InJlcXVpcmVkIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCi0JPHhzZDplbGVtZW50IG5hbWU9InN0cmlwLXNwYWNlIj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImVsZW1lbnRzIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9InJlcXVpcmVkIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJwcmVzZXJ2ZS1zcGFjZSI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJlbGVtZW50cyIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0cHV0Ij4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im1ldGhvZCIgdXNlPSJvcHRpb25hbCI+Ci0JCQkJPHhzZDpzaW1wbGVUeXBlPgotCQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ieG1sIiAvPgotCQkJCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iaHRtbCIgLz4KLQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InRleHQiIC8+Ci0JCQkJCTwveHNkOnJlc3RyaWN0aW9uPgotCQkJCTwveHNkOnNpbXBsZVR5cGU+Ci0JCQk8L3hzZDphdHRyaWJ1dGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIiB0eXBlPSJ4c2Q6Tk1UT0tFTiIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImVuY29kaW5nIiB0eXBlPSJ4c2Q6Tk1UT0tFTiIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im9taXQteG1sLWRlY2xhcmF0aW9uIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJZZXNOb1R5cGUiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJzdGFuZGFsb25lIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJZZXNOb1R5cGUiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJkb2N0eXBlLXB1YmxpYyIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImRvY3R5cGUtc3lzdGVtIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iY2RhdGEtc2VjdGlvbi1lbGVtZW50cyIgdHlwZT0ieHNkOk5NVE9LRU5TIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iaW5kZW50IiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJZZXNOb1R5cGUiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJtZWRpYS10eXBlIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJrZXkiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNkOk5NVE9LRU4iIHVzZT0icmVxdWlyZWQiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJtYXRjaCIgdHlwZT0icGF0dGVybiIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InVzZSIgdHlwZT0iZXhwcmVzc2lvbiIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0iZGVjaW1hbC1mb3JtYXQiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNkOk5NVE9LRU4iIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSIuIiBuYW1lPSJkZWNpbWFsLXNlcGFyYXRvciIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIGRlZmF1bHQ9IiwiIG5hbWU9Imdyb3VwaW5nLXNlcGFyYXRvciIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIGRlZmF1bHQ9IkluZmluaXR5IiBuYW1lPSJpbmZpbml0eSIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIGRlZmF1bHQ9Ii0iIG5hbWU9Im1pbnVzLXNpZ24iIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSJOYU4iIG5hbWU9Ik5hTiIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIGRlZmF1bHQ9IiUiIG5hbWU9InBlcmNlbnQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSLigLAiIG5hbWU9InBlci1taWxsZSIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIGRlZmF1bHQ9IjAiIG5hbWU9Inplcm8tZGlnaXQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSIjIiBuYW1lPSJkaWdpdCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIGRlZmF1bHQ9IjsiIG5hbWU9InBhdHRlcm4tc2VwYXJhdG9yIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJuYW1lc3BhY2UtYWxpYXMiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ic3R5bGVzaGVldC1wcmVmaXgiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0icmVxdWlyZWQiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJyZXN1bHQtcHJlZml4IiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9InJlcXVpcmVkIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0ZW1wbGF0ZSI+Ci0JCTx4c2Q6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJwYXJhbSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KLQkJCQk8eHNkOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJPHhzZDpncm91cCByZWY9ImNoYXItaW5zdHJ1Y3Rpb25zIj48L3hzZDpncm91cD4KLQkJCQkJPHhzZDphbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9InNraXAiIC8+Ci0JCQkJPC94c2Q6Y2hvaWNlPgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJtYXRjaCIgdHlwZT0icGF0dGVybiIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzZDpOTVRPS0VOIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0icHJpb3JpdHkiIHR5cGU9InhzZDpOTVRPS0VOIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibW9kZSIgdHlwZT0ieHNkOk5NVE9LRU4iIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8IS0tICB4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIiAvLS0+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9InZhbHVlLW9mIj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWxlY3QtcmVxdWlyZWQiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmciIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9ImNvcHktb2YiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9InNlbGVjdC1yZXF1aXJlZCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0ibnVtYmVyIj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlIGRlZmF1bHQ9InNpbmdsZSIgbmFtZT0ibGV2ZWwiPgotCQkJCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InNpbmdsZSIgLz4KLQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im11bHRpcGxlIiAvPgotCQkJCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYW55IiAvPgotCQkJCQk8L3hzZDpyZXN0cmljdGlvbj4KLQkJCQk8L3hzZDpzaW1wbGVUeXBlPgotCQkJPC94c2Q6YXR0cmlidXRlPgotCSAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iY291bnQiIHR5cGU9InBhdHRlcm4iIHVzZT0ib3B0aW9uYWwiLz4KLQkJICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9ImZyb20iIHR5cGU9InBhdHRlcm4iIHVzZT0ib3B0aW9uYWwiLz4KLQkJICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9InZhbHVlIiB0eXBlPSJleHByZXNzaW9uIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSIxIiBuYW1lPSJmb3JtYXQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJsYW5nIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibGV0dGVyLXZhbHVlIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iZ3JvdXBpbmctc2VwYXJhdG9yIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iZ3JvdXBpbmctc2l6ZSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0iYXBwbHktdGVtcGxhdGVzIj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIiBtaW5PY2N1cnM9IjAiPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9InNvcnQiIC8+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0id2l0aC1wYXJhbSIgLz4KLQkJCTwveHNkOmNob2ljZT4KLQkJCTx4c2Q6YXR0cmlidXRlIGRlZmF1bHQ9Im5vZGUoKSIgbmFtZT0ic2VsZWN0IiB0eXBlPSJleHByZXNzaW9uIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibW9kZSIgdHlwZT0ieHNkOk5NVE9LRU4iIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9ImFwcGx5LWltcG9ydHMiPgotCQk8eHNkOmNvbXBsZXhUeXBlIC8+Ci0JPC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJmb3ItZWFjaCI+Ci0JCTx4c2Q6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJzb3J0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgotCQkJCTx4c2Q6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCQk8eHNkOmdyb3VwIHJlZj0iY2hhci1pbnN0cnVjdGlvbnMiPjwveHNkOmdyb3VwPgotCQkJCQk8eHNkOmFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ic2tpcCIgLz4KLQkJCQk8L3hzZDpjaG9pY2U+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWxlY3QtcmVxdWlyZWQiIC8+Ci0JCQk8IS0tICB4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIiAvLS0+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0ic29ydCI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSIuIiBuYW1lPSJzZWxlY3QiIHR5cGU9ImV4cHJlc3Npb24iIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJsYW5nIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0idGV4dCIgbmFtZT0iZGF0YS10eXBlIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0iYXNjZW5kaW5nIiBuYW1lPSJvcmRlciIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImNhc2Utb3JkZXIiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9ImlmIj4KLQkJPHhzZDpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iaW5zdHJ1Y3Rpb25zIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj48L3hzZDpncm91cD4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InRlc3QiIHR5cGU9ImV4cHJlc3Npb24iIHVzZT0icmVxdWlyZWQiIC8+Ci0JCQk8IS0tICB4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIiAvLS0+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iY2hvb3NlIj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0id2hlbiIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJvdGhlcndpc2UiIG1pbk9jY3Vycz0iMCIgLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCi0JPHhzZDplbGVtZW50IG5hbWU9IndoZW4iPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJpbnN0cnVjdGlvbnMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ0ZXN0IiB0eXBlPSJleHByZXNzaW9uIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCi0JPHhzZDplbGVtZW50IG5hbWU9Im90aGVyd2lzZSI+Ci0JCTx4c2Q6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgotCQkJPHhzZDpncm91cCByZWY9Imluc3RydWN0aW9ucyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KLQkJCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJhdHRyaWJ1dGUtc2V0Ij4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50ICByZWY9ImF0dHJpYnV0ZSIgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzZDpOTVRPS0VOIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idXNlLWF0dHJpYnV0ZS1zZXRzIiB0eXBlPSJ4c2Q6Tk1UT0tFTlMiIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9ImNhbGwtdGVtcGxhdGUiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJ3aXRoLXBhcmFtIiBtaW5PY2N1cnM9IjAiICBtYXhPY2N1cnM9InVuYm91bmRlZCIgIC8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzZDpOTVRPS0VOIiB1c2U9InJlcXVpcmVkIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ3aXRoLXBhcmFtIiB0eXBlPSJOYW1lZEFuZFNlbGVjdGFibGUiIC8+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9InZhcmlhYmxlIiB0eXBlPSJOYW1lZEFuZFNlbGVjdGFibGUiIC8+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9InBhcmFtIiB0eXBlPSJOYW1lZEFuZFNlbGVjdGFibGUiIC8+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9InRleHQiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzaW1wbGVDb250ZW50PgotCQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCQk8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmciIC8+Ci0JCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQkJPC94c2Q6c2ltcGxlQ29udGVudD4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0icHJvY2Vzc2luZy1pbnN0cnVjdGlvbiI+Ci0JCTx4c2Q6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgotCQkJPHhzZDpncm91cCByZWY9ImNoYXItaW5zdHJ1Y3Rpb25zIj48L3hzZDpncm91cD4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0icmVxdWlyZWQiIC8+Ci0JCQk8IS0tICB4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIiAvLS0+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9ImVsZW1lbnQiPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJpbnN0cnVjdGlvbnMiPjwveHNkOmdyb3VwPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJ1c2UtYXR0cmlidXRlLXNldHMiIC8+Ci0JCQk8IS0tICB4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIiAvLS0+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9ImF0dHJpYnV0ZSI+Ci0JCTx4c2Q6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgotCQkJPHhzZDpncm91cCByZWY9ImNoYXItaW5zdHJ1Y3Rpb25zIi8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJjb21tZW50Ij4KLQkJPHhzZDpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iY2hhci1pbnN0cnVjdGlvbnMiLz4KLQkJCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0iY29weSI+Ci0JCTx4c2Q6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgotCQkJPHhzZDpncm91cCByZWY9Imluc3RydWN0aW9ucyIvPgotCQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCQkJPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9InVzZS1hdHRyaWJ1dGUtc2V0cyIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0ibWVzc2FnZSI+Ci0JCTx4c2Q6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgotCQkJPHhzZDpncm91cCByZWY9ImNoYXItaW5zdHJ1Y3Rpb25zIi8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSJubyIgbmFtZT0idGVybWluYXRlIiB0eXBlPSJZZXNOb1R5cGUiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iZmFsbGJhY2siPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIiBtaW5PY2N1cnM9IjAiPgotCQkJCTx4c2Q6Z3JvdXAgcmVmPSJpbnN0cnVjdGlvbnMiPjwveHNkOmdyb3VwPgotCQkJPC94c2Q6Y2hvaWNlPgotCQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCi0JPHhzZDpncm91cCBuYW1lPSJpbnN0cnVjdGlvbnMiPgotCQk8eHNkOmNob2ljZT4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJjaGFyLWluc3RydWN0aW9ucyI+PC94c2Q6Z3JvdXA+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJwcm9jZXNzaW5nLWluc3RydWN0aW9uIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iY29tbWVudCIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImVsZW1lbnQiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJhdHRyaWJ1dGUiIC8+Ci0JCTwveHNkOmNob2ljZT4KLQk8L3hzZDpncm91cD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iY2hhci1pbnN0cnVjdGlvbnMiPgotCQk8eHNkOmNob2ljZT4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImFwcGx5LXRlbXBsYXRlcyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImNhbGwtdGVtcGxhdGUiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJhcHBseS1pbXBvcnRzIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iZm9yLWVhY2giIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJ2YWx1ZS1vZiIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImNvcHktb2YiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJudW1iZXIiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJjaG9vc2UiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJpZiIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InRleHQiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJjb3B5IiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0idmFyaWFibGUiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJtZXNzYWdlIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iZmFsbGJhY2siIC8+Ci0JCTwveHNkOmNob2ljZT4KLQk8L3hzZDpncm91cD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0idG9wTGV2ZWxFbGVtZW50cyI+Ci0JCTx4c2Q6Y2hvaWNlPgotCQkJPHhzZDplbGVtZW50IHJlZj0iaW1wb3J0IiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iaW5jbHVkZSIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InN0cmlwLXNwYWNlIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0icHJlc2VydmUtc3BhY2UiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJrZXkiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJkZWNpbWFsLWZvcm1hdCIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImF0dHJpYnV0ZS1zZXQiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJuYW1lc3BhY2UtYWxpYXMiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJwYXJhbSIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InZhcmlhYmxlIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0ib3V0cHV0IiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0idGVtcGxhdGUiIC8+Ci0JCTwveHNkOmNob2ljZT4KLQk8L3hzZDpncm91cD4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJZZXNOb1R5cGUiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ieWVzIiAvPgotCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibm8iIC8+Ci0JCTwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik5hbWVkQW5kU2VsZWN0YWJsZSIgbWl4ZWQ9InRydWUiPgotCQk8eHNkOmdyb3VwIHJlZj0iaW5zdHJ1Y3Rpb25zIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6Tk1UT0tFTiIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9InNlbGVjdC1vcHRpb25hbCIgLz4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9ImV4cHJlc3Npb24iPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9InBhdHRlcm4iPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlbGVjdC1vcHRpb25hbCI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9InNlbGVjdCIgdHlwZT0iZXhwcmVzc2lvbiIgLz4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlbGVjdC1yZXF1aXJlZCI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9InNlbGVjdCIgdHlwZT0iZXhwcmVzc2lvbiIgdXNlPSJyZXF1aXJlZCIgLz4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImRpc2FibGUtb3V0cHV0LWVzY2FwaW5nIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmciIHR5cGU9Illlc05vVHlwZSIgZGVmYXVsdD0ibm8iIC8+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJ1c2UtYXR0cmlidXRlLXNldHMiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ1c2UtYXR0cmlidXRlLXNldHMiIHR5cGU9InhzZDpOTVRPS0VOUyIgdXNlPSJvcHRpb25hbCIvPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi08L3hzZDpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYThmZmU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0KLSAgICAJPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmNhdGFsb2dDb250cmlidXRpb25zIj4KLQkgIDxjYXRhbG9nQ29udHJpYnV0aW9uPiAKLSAgICAgICAgICAgPHN5c3RlbSBpZD0idGVzdFN5c3RlbUlkIgotICAgICAgICAgICAgICAgc3lzdGVtSWQ9Imh0dHA6Ly9wZXJzb25hbC9wZXJzb25hbC5kdGQiCi0gICAgICAgICAgICAgICB1cmk9ImRhdGEvUGVyc29uYWwvcGVyc29uYWwuZHRkIj4gCi0gICAgICAgICAgICAgICA8L3N5c3RlbT4KLSAgICAgICAgICAgPHB1YmxpYyBpZD0idGVzdFB1YmxpY0lkMSIKLSAgICAgICAgICAgICAgIHB1YmxpY0lkPSJJbnZvaWNlSWRfdGVzdCIKLSAgICAgICAgICAgICAgIHVyaT0iZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIgotICAgICAgICAgICAgICAgd2ViVVJMPSJodHRwOi8vb3JnLmVjbGlwc2Uud3N0LnhtbC5leGFtcGxlL0ludm9pY2UuZHRkIj4KLSAgICAgICAgICA8L3B1YmxpYz4KLSAgICAgICAgICA8dXJpIGlkPSJ0ZXN0VXJpSWQxIgotICAgICAgICAgICAgICAgbmFtZT0iaHR0cDovL2FwYWNoZS5vcmcveG1sL3hjYXRhbG9nL2V4YW1wbGUiIAotICAgICAgICAgICAgICAgdXJpPSJkYXRhL2V4YW1wbGUvZXhhbXBsZS54c2QiLz4gCi0gICAgICAgICAgPHVyaSBpZD0idGVzdFVSSUlkMiIKLSAgICAgICAgICAgICAgIG5hbWU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICAgICAgICAgICAgdXJpPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnhzZC9jYWNoZS93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZCI+Ci0gICAgICAgICAgPC91cmk+IAotICAgICAgICAgICA8dXJpIGlkPSJ0ZXN0VVJJSWQzIgotICAgICAgICAgICAgICAgbmFtZT0iaHR0cDovL29hc2lzLm5hbWVzLnRjLmVudGl0eS54bWxucy54bWwuY2F0YWxvZyIKLSAgICAgICAgICAgICAgIHVyaT0iamFyOnBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvc2NoZW1hcy5qYXIhL2RhdGEvY2F0YWxvZy54c2QiPgotICAgICAgICAgIDwvdXJpPiAKLSAgICAgICAgICA8bmV4dENhdGFsb2cgaWQ9InRlc3ROZXN0ZWRDYXRhbG9nIgotICAgICAgICAgICAgICAgY2F0YWxvZz0iZGF0YS9jYXRhbG9nMS54bWwiLz4gCi0gICAgICAgPC9jYXRhbG9nQ29udHJpYnV0aW9uPiAKLQk8L2V4dGVuc2lvbj4gCi0gICAKLSAKLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQWJzdHJhY3RDYXRhbG9nVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQWJzdHJhY3RDYXRhbG9nVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDQ1ODIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0Fic3RyYWN0Q2F0YWxvZ1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLkNhdGFsb2dDb250cmlidXRvclJlZ2lzdHJ5UmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLkNhdGFsb2dTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2dFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JTmV4dENhdGFsb2c7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0Q2F0YWxvZ1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotICAgIHByaXZhdGUgQ2F0YWxvZ1NldCBjYXRhbG9nU2V0ID0gbmV3IENhdGFsb2dTZXQoKTsKLSAgICAKLSAgICBwcm90ZWN0ZWQgSUNhdGFsb2cgc3lzdGVtQ2F0YWxvZzsKLQotICAgIHByb3RlY3RlZCBJQ2F0YWxvZyB1c2VyQ2F0YWxvZzsKLQotICAgIHByb3RlY3RlZCBJQ2F0YWxvZyBkZWZhdWx0Q2F0YWxvZzsKLSAgICAKLSAgICAKLSAgICBwdWJsaWMgQWJzdHJhY3RDYXRhbG9nVGVzdChTdHJpbmcgbmFtZSkKLSAgICB7Ci0gICAgICAgIHN1cGVyKG5hbWUpOwotICAgICAgICAKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgc3RhdGljIExpc3QgZ2V0Q2F0YWxvZ0VudHJpZXMoSUNhdGFsb2cgY2F0YWxvZywgaW50IGVudHJ5VHlwZSkKLSAgICB7Ci0gICAgICAgIExpc3QgcmVzdWx0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBJQ2F0YWxvZ0VudHJ5W10gZW50cmllcyA9IGNhdGFsb2cuZ2V0Q2F0YWxvZ0VudHJpZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBJQ2F0YWxvZ0VudHJ5IGVudHJ5ID0gZW50cmllc1tpXTsKLSAgICAgICAgICAgIGlmIChlbnRyeS5nZXRFbnRyeVR5cGUoKSA9PSBlbnRyeVR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZChlbnRyeSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIElDYXRhbG9nIGdldENhdGFsb2coU3RyaW5nIGlkLCBTdHJpbmcgdXJpU3RyaW5nKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotCQlyZXR1cm4gY2F0YWxvZ1NldC5sb29rdXBPckNyZWF0ZUNhdGFsb2coaWQsIHVyaVN0cmluZyk7Ci0gICAgfQotICAgIAotCi0gICAgcHVibGljIHZvaWQgaW5pdENhdGFsb2dzKCkKLSAgICB7Ci0gICAgICAgIGRlZmF1bHRDYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLSAgICAgICAgSU5leHRDYXRhbG9nW10gbmV4dENhdGFsb2dzID0gZGVmYXVsdENhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmV4dENhdGFsb2dzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBJTmV4dENhdGFsb2cgY2F0YWxvZyA9IG5leHRDYXRhbG9nc1tpXTsKLSAgICAgICAgICAgIElDYXRhbG9nIHJlZmVyZW5jZWRDYXRhbG9nID0gY2F0YWxvZy5nZXRSZWZlcmVuY2VkQ2F0YWxvZygpOwotICAgICAgICAgICAgaWYgKHJlZmVyZW5jZWRDYXRhbG9nICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKFhNTENvcmVQbHVnaW4uU1lTVEVNX0NBVEFMT0dfSUQKLSAgICAgICAgICAgICAgICAgICAgICAgIC5lcXVhbHMocmVmZXJlbmNlZENhdGFsb2cuZ2V0SWQoKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzeXN0ZW1DYXRhbG9nID0gcmVmZXJlbmNlZENhdGFsb2c7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChYTUxDb3JlUGx1Z2luLlVTRVJfQ0FUQUxPR19JRAotICAgICAgICAgICAgICAgICAgICAgICAgLmVxdWFscyhyZWZlcmVuY2VkQ2F0YWxvZy5nZXRJZCgpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVzZXJDYXRhbG9nID0gcmVmZXJlbmNlZENhdGFsb2c7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBzdXBlci5zZXRVcCgpOwotICAgICAgICBpbml0Q2F0YWxvZ3MoKTsKLSAgICB9Ci0JCi0JcHJvdGVjdGVkIHN0YXRpYyBTdHJpbmcgbWFrZUFic29sdXRlKFN0cmluZyBiYXNlTG9jYXRpb24sIFN0cmluZyBsb2NhdGlvbikKLQkgIHsKLQkJICBVUkwgbG9jYWwgPSBudWxsOwotCQkgIGxvY2F0aW9uID0gbG9jYXRpb24ucmVwbGFjZSgnXFwnLCAnLycpOwotCQkgIHRyeQotCQkgIHsKLQkJCSAgVVJMIGJhc2VVUkwgPSBuZXcgVVJMKGJhc2VMb2NhdGlvbik7Ci0JCQkgIGxvY2FsID0gbmV3IFVSTChiYXNlVVJMLCBsb2NhdGlvbik7Ci0JCSAgfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0JCSAgewotCQkgIH0KLQkJICAKLQkJICBpZiAobG9jYWwgIT0gbnVsbCkKLQkJICB7Ci0JCQkgIHJldHVybiBsb2NhbC50b1N0cmluZygpOwotCQkgIH0gZWxzZQotCQkgIHsKLQkJCSAgcmV0dXJuIGxvY2F0aW9uOwotCQkgIH0KLQkgIH0KLQkKLQlwcm90ZWN0ZWQgc3RhdGljIFVSTCByZXNvbHZlUGx1Z2luTG9jYXRpb24oU3RyaW5nIHBsdWdpbklkKXsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShwbHVnaW5JZCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkKLQkJewotCQkJVVJMIGJ1bmRsZUVudHJ5ID0gYnVuZGxlLmdldEVudHJ5KCIvIik7Ci0JCQl0cnkKLQkJCXsKLQkJCQlyZXR1cm4gUGxhdGZvcm0ucmVzb2x2ZShidW5kbGVFbnRyeSk7Ci0JCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQkJewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8vIHNlZSBDYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlci5yZXNvbHZlUGF0aChTdHJpbmcgcGF0aCkgCi0JICBwcm90ZWN0ZWQgU3RyaW5nIHJlc29sdmVQYXRoKFN0cmluZyBwbHVnaW5JZCwgU3RyaW5nIHBhdGgpIAotCSAgewotCi0JCSAgcmV0dXJuICBDYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlci5yZXNvbHZlUGF0aCggCi0JCQkJICBDYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlci5nZXRQbGF0Zm9ybVVSTChwbHVnaW5JZCksIHBhdGgpOwotCSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9BbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQWxsVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM0YmQ3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9BbGxUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1wdWJsaWMgY2xhc3MgQWxsVGVzdHMgewotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKAotCQkJCSJUZXN0IGZvciBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMiKTsKLQkJLy8kSlVuaXQtQkVHSU4kCi0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDYXRhbG9nUmVhZGVyVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDYXRhbG9nUmVzb2x2ZXJUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENhdGFsb2dXcml0ZXJUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENhdGFsb2dDb250cmlidXRvclJlZ2lzdHJ5UmVhZGVyVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDYXRhbG9nVGVzdC5jbGFzcyk7Ci0JCS8vJEpVbml0LUVORCQKLQkJcmV0dXJuIHN1aXRlOwotCX0KLSAgICAKLQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0NhdGFsb2dDb250cmlidXRvclJlZ2lzdHJ5UmVhZGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWM4MGY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0NhdGFsb2dDb250cmlidXRvclJlZ2lzdHJ5UmVhZGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuWE1MQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZ0VudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklOZXh0Q2F0YWxvZzsKLQotCi0KLXB1YmxpYyBjbGFzcyBDYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlclRlc3QgZXh0ZW5kcyBBYnN0cmFjdENhdGFsb2dUZXN0Ci17Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBzdXBlci5zZXRVcCgpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgc3VwZXIudGVhckRvd24oKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ2F0YWxvZ0NvbnRyaWJ1dG9yUmVnaXN0cnlSZWFkZXJUZXN0KFN0cmluZyBuYW1lKQotICAgIHsKLSAgICAgICAgc3VwZXIobmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIHZvaWQgdGVzdFJlYWRSZWdpc3RyeSgpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoZGVmYXVsdENhdGFsb2cpOwotICAgICAgICBhc3NlcnRFcXVhbHMoWE1MQ29yZVBsdWdpbi5ERUZBVUxUX0NBVEFMT0dfSUQsIGRlZmF1bHRDYXRhbG9nLmdldElkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZGVmYXVsdENhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCkubGVuZ3RoKTsKLQotCQlTdHJpbmcgcGx1Z2luSWQgPSBUZXN0UGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKTsKLSAgICAKLQkJICAvLyB0ZXN0IHN5c3RlbSBlbnRyaWVzCi0gICAgICAgIGFzc2VydE5vdE51bGwoc3lzdGVtQ2F0YWxvZyk7Ci0gICAgICAgIExpc3QgZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKHN5c3RlbUNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9TWVNURU0pOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGVudHJpZXMuc2l6ZSgpOyBpKyspCi0JCXsKLQkJCUlDYXRhbG9nRW50cnkgZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldChpKTsKLQkJCWlmKCJ0ZXN0U3lzdGVtSWQiLmVxdWFscyhlbnRyeS5nZXRJZCgpKSkKLQkJCXsKLQkJCQlTdHJpbmcgcmVzb2x2ZWRVUkkgPSByZXNvbHZlUGF0aChwbHVnaW5JZCwgImRhdGEvUGVyc29uYWwvcGVyc29uYWwuZHRkIik7Ci0JCQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vcGVyc29uYWwvcGVyc29uYWwuZHRkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkJfQotCQl9Ci0JCQotCQkvLyB0ZXN0IHB1YmxpYyBlbnRyaWVzCi0gICAgICAgIGVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhzeXN0ZW1DYXRhbG9nLCBJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfUFVCTElDKTsgICAgICAKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyaWVzLnNpemUoKTsgaSsrKQotCQl7Ci0JCQlJQ2F0YWxvZ0VudHJ5IGVudHJ5ID0gKElDYXRhbG9nRW50cnkpZW50cmllcy5nZXQoaSk7Ci0JCQlpZigidGVzdFB1YmxpY0lkMSIuZXF1YWxzKGVudHJ5LmdldElkKCkpKQotCQkJewotCQkJCVN0cmluZyByZXNvbHZlZFVSSSA9IHJlc29sdmVQYXRoKHBsdWdpbklkLCAiZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIik7Ci0JCQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJJbnZvaWNlSWRfdGVzdCIsIGVudHJ5LmdldEtleSgpKTsKLQkJCQkvLyB0ZXN0IHVzZXIgZGVmaW5lZCBhdHRyaWJ1dGVzCi0JCQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0LnhtbC5leGFtcGxlL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoIndlYlVSTCIpKTsKLQotCQkJfQotCQkJCi0JCQllbHNlIGlmKCJ0ZXN0TWFwcGluZ0luZm8iLmVxdWFscyhlbnRyeS5nZXRJZCgpKSkKLQkJCXsKLQkJCQlTdHJpbmcgcmVzb2x2ZWRVUkkgPSByZXNvbHZlUGF0aChwbHVnaW5JZCwgInBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UueHNkL2NhY2hlL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEueHNkIik7Ci0JCQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYTEiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQl9Ci0JICAgICAKLQkJfQotICAgICAgCi0gICAgICAgIC8vIHRlc3QgdXJpIGVudHJpZXMKLSAgICAgICAgZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKHN5c3RlbUNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9VUkkpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGVudHJpZXMuc2l6ZSgpOyBpKyspCi0JCXsKLQkJCUlDYXRhbG9nRW50cnkgZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldChpKTsKLQkJCWlmKCJ0ZXN0VVJJSWQxIi5lcXVhbHMoZW50cnkuZ2V0SWQoKSkpCi0JCQl7Ci0JCQkJICBTdHJpbmcgcmVzb2x2ZWRVUkkgPSByZXNvbHZlUGF0aChwbHVnaW5JZCwgImRhdGEvZXhhbXBsZS9leGFtcGxlLnhzZCIpOwotCQkJICAgICAgYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCQkgICAgICBhc3NlcnRFcXVhbHMoImh0dHA6Ly9hcGFjaGUub3JnL3htbC94Y2F0YWxvZy9leGFtcGxlIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkJfQotCQkJZWxzZSBpZigidGVzdFVSSUlkMiIuZXF1YWxzKGVudHJ5LmdldElkKCkpKQotCQkJewotCQkJCVN0cmluZyByZXNvbHZlZFVSSSA9IHJlc29sdmVQYXRoKHBsdWdpbklkLCAicGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS54c2QvY2FjaGUvd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS54c2QiKTsKLQkJCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIGVudHJ5LmdldFVSSSgpKTsKLQkJCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkJfQotCQkJZWxzZSBpZigidGVzdFVSSUlkMyIuZXF1YWxzKGVudHJ5LmdldElkKCkpKQotCQkJewotCQkJCVN0cmluZyByZXNvbHZlZFVSSSA9IHJlc29sdmVQYXRoKHBsdWdpbklkLCAiamFyOnBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvc2NoZW1hcy5qYXIhL2RhdGEvY2F0YWxvZy54c2QiKTsKLQkJCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIGVudHJ5LmdldFVSSSgpKTsKLQkJCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly9vYXNpcy5uYW1lcy50Yy5lbnRpdHkueG1sbnMueG1sLmNhdGFsb2ciLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQl9Ci0JCX0KLSAgICAgIAotICAgICAgICAvLyB0ZXN0IHRlc3RlZCBjYXRhbG9nCi0gICAgICAgIElOZXh0Q2F0YWxvZ1tdIG5leHRDYXRhbG9nRW50cmllcyA9IHN5c3RlbUNhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmV4dENhdGFsb2dFbnRyaWVzLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlJTmV4dENhdGFsb2cgbmV4dENhdGFsb2dFbnRyeSA9IChJTmV4dENhdGFsb2cpIG5leHRDYXRhbG9nRW50cmllc1tpXTsKLQkJCWlmKCJ0ZXN0TmVzdGVkQ2F0YWxvZyIuZXF1YWxzKG5leHRDYXRhbG9nRW50cnkuZ2V0SWQoKSkpCi0JCQl7Ci0JCQkJU3RyaW5nIHJlc29sdmVkVVJJID0gcmVzb2x2ZVBhdGgocGx1Z2luSWQsICJkYXRhL2NhdGFsb2cxLnhtbCIpOwotCQkJCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgbmV4dENhdGFsb2dFbnRyeS5nZXRDYXRhbG9nTG9jYXRpb24oKSk7Ci0JCQkJSUNhdGFsb2cgbmV4dENhdGFsb2cgPSBuZXh0Q2F0YWxvZ0VudHJ5LmdldFJlZmVyZW5jZWRDYXRhbG9nKCk7Ci0JCQkJYXNzZXJ0Tm90TnVsbChuZXh0Q2F0YWxvZyk7Ci0JCQkJYXNzZXJ0RXF1YWxzKDMsIG5leHRDYXRhbG9nLmdldENhdGFsb2dFbnRyaWVzKCkubGVuZ3RoKTsKLQkJCQkvLyB0ZXN0IHB1YmxpYyBlbnRyaWVzCi0JCQkJZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKG5leHRDYXRhbG9nLAotCQkJCQkJSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0JCQkJYXNzZXJ0RXF1YWxzKDEsIGVudHJpZXMuc2l6ZSgpKTsKLQkJCQlJQ2F0YWxvZ0VudHJ5IGVudHJ5ID0gKElDYXRhbG9nRW50cnkpIGVudHJpZXMuZ2V0KDApOwotCQkJCS8vVVJJIHVyaSA9IFVSSUhlbHBlci5nZXRVUklGb3JGaWxlUGF0aChyZXNvbHZlZFVSSSk7Ci0JCQkJLy9yZXNvbHZlZFVSSSA9IFVSSUhlbHBlci5tYWtlQWJzb2x1dGUodXJpLnRvVVJMKCksICIuL0ludm9pY2UvSW52b2ljZS5kdGQiKTsKLQkJCQlhc3NlcnRFcXVhbHMoIi4vSW52b2ljZS9JbnZvaWNlLmR0ZCIsIGVudHJ5LmdldFVSSSgpKTsKLQkJCQlhc3NlcnRFcXVhbHMoIkludm9pY2VJZF90ZXN0IiwgZW50cnkuZ2V0S2V5KCkpOwotCQkJCS8vIHRlc3Qgc3lzdGVtIGVudHJpZXMKLQkJCQllbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMobmV4dENhdGFsb2csCi0JCQkJCQlJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfU1lTVEVNKTsKLQkJCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQkJCWVudHJ5ID0gKElDYXRhbG9nRW50cnkpIGVudHJpZXMuZ2V0KDApOwotCQkJCWFzc2VydEVxdWFscygiLi9JbnZvaWNlL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0VVJJKCkpOwotCQkJCWFzc2VydEVxdWFscygiSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQkJLy8gdGVzdCB1cmkgZW50cmllcwotCQkJCWVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhuZXh0Q2F0YWxvZywKLQkJCQkJCUlDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9VUkkpOwotCQkJCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCQkJZW50cnkgPSAoSUNhdGFsb2dFbnRyeSkgZW50cmllcy5nZXQoMCk7Ci0JCQkJYXNzZXJ0RXF1YWxzKCIuL0ludm9pY2UvSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LnRlc3QuY29tL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkJfQotCQl9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1JlYWRlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0NhdGFsb2dSZWFkZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3OTM1NWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1JlYWRlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5DYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklDYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklDYXRhbG9nRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSU5leHRDYXRhbG9nOwotCi0KLXB1YmxpYyBjbGFzcyBDYXRhbG9nUmVhZGVyVGVzdCBleHRlbmRzIEFic3RyYWN0Q2F0YWxvZ1Rlc3QgewotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCX0KLQotCXB1YmxpYyBDYXRhbG9nUmVhZGVyVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQotCS8qCi0JICogQ2xhc3MgdW5kZXIgdGVzdCBmb3Igdm9pZCByZWFkKElDYXRhbG9nLCBTdHJpbmcpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFJlYWRDYXRhbG9nKCl0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQkvL3JlYWQgY2F0YWxvZwotCQlTdHJpbmcgY2F0YWxvZ0ZpbGUgPSAiL2RhdGEvY2F0YWxvZzEueG1sIjsKLQkJVVJMIGNhdGFsb2dVcmwgPSBUZXN0UGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeShjYXRhbG9nRmlsZSk7Ci0JCWFzc2VydE5vdE51bGwoY2F0YWxvZ1VybCk7Ci0JCVVSTCBiYXNlID0gUGxhdGZvcm0ucmVzb2x2ZShjYXRhbG9nVXJsKTsKLQotCQlDYXRhbG9nIGNhdGFsb2cgPSAoQ2F0YWxvZylnZXRDYXRhbG9nKCJjYXRhbG9nMSIsIGJhc2UudG9TdHJpbmcoKSk7Ci0JCS8vQ2F0YWxvZ1JlYWRlci5yZWFkKGNhdGFsb2csIGNhdGFsb2dGaWxlUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoY2F0YWxvZyk7Ci0JCQotCQkvLyB0ZXN0IG1haW4gY2F0YWxvZyAtIGNhdGFsb2cxLnhtbAotCQkvL2Fzc2VydEVxdWFscygiY2F0MSIsIGNhdGFsb2cuZ2V0SWQoKSk7Ci0JCWFzc2VydEVxdWFscygzLCBjYXRhbG9nLmdldENhdGFsb2dFbnRyaWVzKCkubGVuZ3RoKTsKLQkJCQotCQkvLyB0ZXN0IHB1YmxpYyBlbnRyaWVzCi0JCUxpc3QgZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKGNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9QVUJMSUMpOwotCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQlJQ2F0YWxvZ0VudHJ5IGVudHJ5ID0gKElDYXRhbG9nRW50cnkpZW50cmllcy5nZXQoMCk7Ci0JCS8vU3RyaW5nIHJlc29sdmVkVVJJID0gVVJJSGVscGVyLm1ha2VBYnNvbHV0ZShiYXNlLCAiLi9JbnZvaWNlL0ludm9pY2UuZHRkIik7Ci0JCQotCQlhc3NlcnRFcXVhbHMoIi4vSW52b2ljZS9JbnZvaWNlLmR0ZCIsIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJJbnZvaWNlSWRfdGVzdCIsIGVudHJ5LmdldEtleSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd2ViVVJMIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoIndlYlVSTCIpKTsKLQotCQkKLQkJLy8gIHRlc3Qgc3lzdGVtIGVudHJpZXMKLQkJZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKGNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9TWVNURU0pOwotCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDApOwotCQlhc3NlcnRFcXVhbHMoIi4vSW52b2ljZS9JbnZvaWNlLmR0ZCIsIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJJbnZvaWNlLmR0ZCIsIGVudHJ5LmdldEtleSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ5ZXMiLCBlbnRyeS5nZXRBdHRyaWJ1dGVWYWx1ZSgiY2hhY2hlZCIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ2YWx1ZTEiLCBlbnRyeS5nZXRBdHRyaWJ1dGVWYWx1ZSgicHJvcGVydHkiKSk7Ci0KLQotCQkvLyAgdGVzdCB1cmkgZW50cmllcwotCQllbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoY2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1VSSSk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCWVudHJ5ID0gKElDYXRhbG9nRW50cnkpZW50cmllcy5nZXQoMCk7Ci0JCWFzc2VydEVxdWFscygiLi9JbnZvaWNlL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0VVJJKCkpOwotCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93d3cudGVzdC5jb20vSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCWFzc2VydEVxdWFscygibm8iLCBlbnRyeS5nZXRBdHRyaWJ1dGVWYWx1ZSgiY2hhY2hlZCIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ2YWx1ZTIiLCBlbnRyeS5nZXRBdHRyaWJ1dGVWYWx1ZSgicHJvcGVydHkiKSk7Ci0JCQotCQkvLyAgdGVzdCBuZXh0IGNhdGFsb2cgLSBjYXRhbG9nMi54bWwKLQkJSU5leHRDYXRhbG9nW10gbmV4dENhdGFsb2dFbnRyaWVzID0gY2F0YWxvZy5nZXROZXh0Q2F0YWxvZ3MoKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIG5leHRDYXRhbG9nRW50cmllcy5sZW5ndGgpOwotCQotCQlJTmV4dENhdGFsb2cgbmV4dENhdGFsb2dFbnRyeSA9IChJTmV4dENhdGFsb2cpbmV4dENhdGFsb2dFbnRyaWVzWzBdOwotCQlhc3NlcnROb3ROdWxsKG5leHRDYXRhbG9nRW50cnkpOwotCQkKLS8vCQlTdHJpbmcgY2F0YWxvZ1JlZklkID0gbmV4dENhdGFsb2dFbnRyeS5nZXRDYXRhbG9nUmVmSWQoKTsKLS8vCQlhc3NlcnRFcXVhbHMoIm5leHRDYXRhbG9nMSIsIGNhdGFsb2dSZWZJZCk7Ci0JCS8vcmVzb2x2ZWRVUkkgPSBVUklIZWxwZXIubWFrZUFic29sdXRlKGJhc2UsICJjYXRhbG9nMi54bWwiKTsKLQkJYXNzZXJ0RXF1YWxzKCJjYXRhbG9nMi54bWwiLCBuZXh0Q2F0YWxvZ0VudHJ5LmdldENhdGFsb2dMb2NhdGlvbigpKTsKLQotCQlJQ2F0YWxvZyBuZXh0Q2F0YWxvZyA9IG5leHRDYXRhbG9nRW50cnkuZ2V0UmVmZXJlbmNlZENhdGFsb2coKTsKLQotCQlhc3NlcnROb3ROdWxsKG5leHRDYXRhbG9nKTsKLQkJYXNzZXJ0RXF1YWxzKDQsIG5leHRDYXRhbG9nLmdldENhdGFsb2dFbnRyaWVzKCkubGVuZ3RoKTsKLQkJCi0JCS8vIHRlc3QgcHVibGljIGVudHJpZXMKLQkJZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKG5leHRDYXRhbG9nLCBJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfUFVCTElDKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIGVudHJpZXMuc2l6ZSgpKTsKLQkJZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldCgwKTsKLQkJLy9yZXNvbHZlZFVSSSA9IFVSSUhlbHBlci5tYWtlQWJzb2x1dGUobmV4dENhdGFsb2cuZ2V0QmFzZSgpLCAiLi9QdWJsaWNhdGlvbkNhdGFsb2cvQ2F0YWxvZ3VlLnhzZCIpOwotCQlhc3NlcnRFcXVhbHMoIi4vUHVibGljYXRpb25DYXRhbG9nL0NhdGFsb2d1ZS54c2QiLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCWFzc2VydEVxdWFscygiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWVfMDAxIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkKLQkJLy8gdGVzdCBwdWJsaWMgZW50cnkgZnJvbSBhIGdyb3VwCi0JCWVudHJ5ID0gKElDYXRhbG9nRW50cnkpZW50cmllcy5nZXQoMSk7Ci0JCS8vcmVzb2x2ZWRVUkkgPSBVUklIZWxwZXIubWFrZUFic29sdXRlKG5leHRDYXRhbG9nLmdldEJhc2UoKSwgIi4vUHVibGljYXRpb25DYXRhbG9nL0NhdGFsb2d1ZS54c2QiKTsKLQkJYXNzZXJ0RXF1YWxzKCIuL1B1YmxpY2F0aW9uQ2F0YWxvZy9DYXRhbG9ndWUueHNkIiwgZW50cnkuZ2V0VVJJKCkpOwotCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlXzAwMiIsIGVudHJ5LmdldEtleSgpKTsKLQotCQkvLyAgdGVzdCBzeXN0ZW0gZW50cmllcwotCQllbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMobmV4dENhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9TWVNURU0pOwotCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDApOwotCQlhc3NlcnRFcXVhbHMoIi4vUHVibGljYXRpb25DYXRhbG9nL0NhdGFsb2d1ZS54c2QiLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCWFzc2VydEVxdWFscygiQ2F0YWxvZ3VlLnhzZCIsIGVudHJ5LmdldEtleSgpKTsKLQkJLy8gIHRlc3QgdXJpIGVudHJpZXMKLQkJZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKG5leHRDYXRhbG9nLCBJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfVVJJKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGVudHJpZXMuc2l6ZSgpKTsKLQkJZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZS9DYXRhbG9ndWUueHNkIiwgZW50cnkuZ2V0VVJJKCkpOwotCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlLnhzZCIsIGVudHJ5LmdldEtleSgpKTsKLQkJCi0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENvbXBhdGFiaWxpdHlSZWFkZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8JcmVhZCBjYXRhbG9nCi0JCVN0cmluZyBjYXRhbG9nRmlsZSA9ICIvZGF0YS9jb21wYXRhYmlsaXR5VGVzdC54bWxjYXRhbG9nIjsKLQkJVVJMIGNhdGFsb2dVcmwgPSBUZXN0UGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeShjYXRhbG9nRmlsZSk7Ci0JCWFzc2VydE5vdE51bGwoY2F0YWxvZ1VybCk7Ci0JCVVSTCBiYXNlID0gUGxhdGZvcm0ucmVzb2x2ZShjYXRhbG9nVXJsKTsKLQotCQlDYXRhbG9nIGNhdGFsb2cgPSAoQ2F0YWxvZylnZXRDYXRhbG9nKCJjb21wYXRhYmlsaXR5Q2F0YWxvZyIsIGJhc2UudG9TdHJpbmcoKSk7Ci0JCS8vQ2F0YWxvZ1JlYWRlci5yZWFkKGNhdGFsb2csIGNhdGFsb2dGaWxlUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoY2F0YWxvZyk7Ci0JCUxpc3QgZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKGNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9QVUJMSUMpOwotCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQlJQ2F0YWxvZ0VudHJ5IGVudHJ5ID0gKElDYXRhbG9nRW50cnkpZW50cmllcy5nZXQoMCk7Ci0JCWFzc2VydEVxdWFscygicGxhdGZvcm06L3Jlc291cmNlL1hNTEV4YW1wbGVzL0ludm9pY2UyL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0VVJJKCkpOwotCQlhc3NlcnRFcXVhbHMoIkludm9pY2VJZCIsIGVudHJ5LmdldEtleSgpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nUmVzb2x2ZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nUmVzb2x2ZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMmNiYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1Jlc29sdmVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWw7Ci0KLQotcHVibGljIGNsYXNzIENhdGFsb2dSZXNvbHZlclRlc3QgZXh0ZW5kcyBBYnN0cmFjdENhdGFsb2dUZXN0IHsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQl9Ci0KLQlwdWJsaWMgQ2F0YWxvZ1Jlc29sdmVyVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgZmluYWwgdm9pZCB0ZXN0UmVzb2x2ZVJlc29sdmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCi0JCi0JCS8vIGZyb20gcGx1Z2luLnhtbCBmaWxlCi0JCVN0cmluZyBwbHVnaW5CYXNlID0gcmVzb2x2ZVBsdWdpbkxvY2F0aW9uKFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpKS50b1N0cmluZygpOwotCi0JCVN0cmluZyByZXNvbHZlZEFjdHVhbCA9IGRlZmF1bHRDYXRhbG9nLnJlc29sdmVQdWJsaWMoIkludm9pY2VJZF90ZXN0IiwgbnVsbCk7Ci0JCVN0cmluZyByZXNvbHZlZFVSSSA9IG1ha2VBYnNvbHV0ZShwbHVnaW5CYXNlLCAiZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIik7Ci0JCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgcmVzb2x2ZWRBY3R1YWwpOwotCQlyZXNvbHZlZEFjdHVhbCA9IGRlZmF1bHRDYXRhbG9nLnJlc29sdmVTeXN0ZW0oImh0dHA6Ly9wZXJzb25hbC9wZXJzb25hbC5kdGQiKTsKLQkJcmVzb2x2ZWRVUkkgPSBtYWtlQWJzb2x1dGUocGx1Z2luQmFzZSwgImRhdGEvUGVyc29uYWwvcGVyc29uYWwuZHRkIik7Ci0JCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgcmVzb2x2ZWRBY3R1YWwpOwotCQlyZXNvbHZlZEFjdHVhbCA9IGRlZmF1bHRDYXRhbG9nLnJlc29sdmVVUkkoImh0dHA6Ly9hcGFjaGUub3JnL3htbC94Y2F0YWxvZy9leGFtcGxlIik7Ci0JCXJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsICJkYXRhL2V4YW1wbGUvZXhhbXBsZS54c2QiKTsKLQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCByZXNvbHZlZEFjdHVhbCk7Ci0JCXJlc29sdmVkQWN0dWFsID0gZGVmYXVsdENhdGFsb2cucmVzb2x2ZVVSSSgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiKTsKLQkJcmVzb2x2ZWRVUkkgPSByZXNvbHZlUGF0aCgiIiwgInBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UueHNkL2NhY2hlL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEueHNkIik7Ci0JCXJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsIHJlc29sdmVkVVJJKTsKLQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCByZXNvbHZlZEFjdHVhbCk7Ci0JCQotCQkvLyBmcm9tIGNhdGFsb2cxLnhtbAotCQlyZXNvbHZlZEFjdHVhbCA9IGRlZmF1bHRDYXRhbG9nLnJlc29sdmVQdWJsaWMoIkludm9pY2VJZF90ZXN0IiwgbnVsbCk7Ci0JCXJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsICJkYXRhL0ludm9pY2UvSW52b2ljZS5kdGQiKTsKLQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCByZXNvbHZlZEFjdHVhbCk7Ci0KLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlU3lzdGVtKCJJbnZvaWNlLmR0ZCIpOwotCQlyZXNvbHZlZFVSSSA9IG1ha2VBYnNvbHV0ZShwbHVnaW5CYXNlLCAiZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIik7Ci0JCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgcmVzb2x2ZWRBY3R1YWwpOwotCi0JCXJlc29sdmVkQWN0dWFsID0gZGVmYXVsdENhdGFsb2cucmVzb2x2ZVVSSSgiaHR0cDovL3d3dy50ZXN0LmNvbS9JbnZvaWNlLmR0ZCIpOwotCQlyZXNvbHZlZFVSSSA9IG1ha2VBYnNvbHV0ZShwbHVnaW5CYXNlLCAiZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIik7Ci0JCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgcmVzb2x2ZWRBY3R1YWwpOwotCi0JCQotCQkvLyBmcm9tIGNhdGFsb2cyLnhtbAotCQlyZXNvbHZlZEFjdHVhbCA9IGRlZmF1bHRDYXRhbG9nLnJlc29sdmVQdWJsaWMoImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlXzAwMSIsIG51bGwpOwotCQlyZXNvbHZlZFVSSSA9IG1ha2VBYnNvbHV0ZShwbHVnaW5CYXNlLCAiZGF0YS9QdWJsaWNhdGlvbkNhdGFsb2cvQ2F0YWxvZ3VlLnhzZCIpOwotCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIHJlc29sdmVkQWN0dWFsKTsKLQkJCi0JCXJlc29sdmVkQWN0dWFsID0gZGVmYXVsdENhdGFsb2cucmVzb2x2ZVB1YmxpYygiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWVfMDAyIiwgbnVsbCk7Ci0JCXJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsICJkYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZy9DYXRhbG9ndWUueHNkIik7Ci0JCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgcmVzb2x2ZWRBY3R1YWwpOwotCi0JCXJlc29sdmVkQWN0dWFsID0gZGVmYXVsdENhdGFsb2cucmVzb2x2ZVN5c3RlbSgiQ2F0YWxvZ3VlLnhzZCIpOwotCQlyZXNvbHZlZFVSSSA9IG1ha2VBYnNvbHV0ZShwbHVnaW5CYXNlLCAiZGF0YS9QdWJsaWNhdGlvbkNhdGFsb2cvQ2F0YWxvZ3VlLnhzZCIpOwotCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIHJlc29sdmVkQWN0dWFsKTsKLQotCQlyZXNvbHZlZEFjdHVhbCA9IGRlZmF1bHRDYXRhbG9nLnJlc29sdmVVUkkoImh0dHA6Ly9DYXRhbG9ndWUueHNkIik7Ci0JCXJlc29sdmVkVVJJID0gImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlLnhzZCI7Ci0JCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgcmVzb2x2ZWRVUkkpOwotCi0KLQl9Ci0KLQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdlYzM0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLkNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2dFbnRyeTsKLQotCi0KLXB1YmxpYyBjbGFzcyBDYXRhbG9nVGVzdCBleHRlbmRzIEFic3RyYWN0Q2F0YWxvZ1Rlc3QgewotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCX0KLQotCXB1YmxpYyBDYXRhbG9nVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgdGVzdENhdGFsb2coKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgIENhdGFsb2cgd29ya2luZ1VzZXJDYXRhbG9nID0gbmV3IENhdGFsb2cobnVsbCwgIndvcmtpbmciLCBudWxsKTsKLSAgICAgICBhc3NlcnROb3ROdWxsKHVzZXJDYXRhbG9nKTsKLSAgICAgICB3b3JraW5nVXNlckNhdGFsb2cuYWRkRW50cmllc0Zyb21DYXRhbG9nKHVzZXJDYXRhbG9nKTsKLSAgICAgICAKLSAgICAgICBJQ2F0YWxvZ0VudHJ5IGNhdGFsb2dFbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KXVzZXJDYXRhbG9nLmNyZWF0ZUNhdGFsb2dFbGVtZW50KElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9QVUJMSUMpOwotICAgICAgIGNhdGFsb2dFbnRyeS5zZXRLZXkoInRlc3RLZXkiKTsKLSAgICAgICBjYXRhbG9nRW50cnkuc2V0VVJJKCJodHRwOi8vdGVzdHVyaSIpOwotICAgICAgIHdvcmtpbmdVc2VyQ2F0YWxvZy5hZGRDYXRhbG9nRWxlbWVudChjYXRhbG9nRW50cnkpOwotICAgICAKLSAgICAgICB1c2VyQ2F0YWxvZy5hZGRFbnRyaWVzRnJvbUNhdGFsb2cod29ya2luZ1VzZXJDYXRhbG9nKTsKLQkgICBTdHJpbmcgdXNlckNhdGFsb2dMb2NhdGlvbiA9IHVzZXJDYXRhbG9nLmdldExvY2F0aW9uKCk7Ci0JICAKLSAgICAgICB1c2VyQ2F0YWxvZy5zYXZlKCk7Ci0gICAgICAgdXNlckNhdGFsb2cuY2xlYXIoKTsKLSAgICAgICAKLSAgICAgICB1c2VyQ2F0YWxvZyA9IGdldENhdGFsb2coWE1MQ29yZVBsdWdpbi5VU0VSX0NBVEFMT0dfSUQsIHVzZXJDYXRhbG9nTG9jYXRpb24pOwotICAgICAgIAotICAgICAgIExpc3QgZW50cmllcyA9IGdldENhdGFsb2dFbnRyaWVzKHVzZXJDYXRhbG9nLCBJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfUFVCTElDKTsKLSAgICAgICBhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotICAgICAgIElDYXRhbG9nRW50cnkgZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldCgwKTsKLSAgICAgCi0gICAgICAgYXNzZXJ0RXF1YWxzKCJodHRwOi8vdGVzdHVyaSIsIGVudHJ5LmdldFVSSSgpKTsKLSAgICAgICBhc3NlcnRFcXVhbHMoInRlc3RLZXkiLCBlbnRyeS5nZXRLZXkoKSk7Ci0KLSAgIAotICAgIH0KLQotCi0gICAKLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1dyaXRlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0NhdGFsb2dXcml0ZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZGFiNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1dyaXRlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5DYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklDYXRhbG9nRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSU5leHRDYXRhbG9nOwotCi1wdWJsaWMgY2xhc3MgQ2F0YWxvZ1dyaXRlclRlc3QgZXh0ZW5kcyBBYnN0cmFjdENhdGFsb2dUZXN0IHsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQl9Ci0KLQlwdWJsaWMgQ2F0YWxvZ1dyaXRlclRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIGZpbmFsIHZvaWQgdGVzdFdyaXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJLy8gcmVhZCBjYXRhbG9nCi0JCVN0cmluZyBjYXRhbG9nRmlsZSA9ICIvZGF0YS9jYXRhbG9nMS54bWwiOwotCQlVUkwgY2F0YWxvZ1VybCA9IFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KAotCQkJCWNhdGFsb2dGaWxlKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nVXJsKTsKLQkJVVJMIHJlc29sdmVkVVJMID0gUGxhdGZvcm0ucmVzb2x2ZShjYXRhbG9nVXJsKTsKLQotCQlDYXRhbG9nIHRlc3RDYXRhbG9nID0gKENhdGFsb2cpIGdldENhdGFsb2coImNhdGFsb2cxIiwgcmVzb2x2ZWRVUkwKLQkJCQkudG9TdHJpbmcoKSk7Ci0JCWFzc2VydE5vdE51bGwodGVzdENhdGFsb2cpOwotCQl0ZXN0Q2F0YWxvZy5zZXRCYXNlKHJlc29sdmVkVVJMLnRvU3RyaW5nKCkpOwotCQkvLyBDYXRhbG9nUmVhZGVyLnJlYWQodGVzdENhdGFsb2csIHJlc29sdmVkVVJMLmdldEZpbGUoKSk7Ci0JCWFzc2VydE5vdE51bGwodGVzdENhdGFsb2cpOwotCi0JCS8vIHdyaXRlIGNhdGFsb2cKLQkJVVJMIHJlc3VsdHNGb2xkZXIgPSBUZXN0UGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeSgKLQkJCQkiLyIpOwotCQlJUGF0aCBwYXRoID0gbmV3IFBhdGgoUGxhdGZvcm0ucmVzb2x2ZShyZXN1bHRzRm9sZGVyKS5nZXRGaWxlKCkpOwotCQlTdHJpbmcgcmVzdWx0Q2F0YWxvZ0ZpbGUgPSBwYXRoLmFwcGVuZCgiYWN0dWFsX3Jlc3VsdHMvY2F0YWxvZzEueG1sIikudG9GaWxlKCkudG9VUkkoKS50b1N0cmluZygpOwotCQl0ZXN0Q2F0YWxvZy5zZXRMb2NhdGlvbihyZXN1bHRDYXRhbG9nRmlsZSk7Ci0JCS8vIHdyaXRlIGNhdGFsb2cKLQkJdGVzdENhdGFsb2cuc2F2ZSgpOwotCQkKLQkJLy8gcmVhZCBjYXRhbG9nIGZpbGUgZnJvbSB0aGUgc2F2ZWQgbG9jYXRpb24gYW5kIHRlc3QgaXRzIGNvbnRlbnQKLQkJQ2F0YWxvZyBjYXRhbG9nID0gKENhdGFsb2cpIGdldENhdGFsb2coImNhdGFsb2cyIiwgdGVzdENhdGFsb2cuZ2V0TG9jYXRpb24oKSk7Ci0JCWFzc2VydE5vdE51bGwoY2F0YWxvZyk7Ci0KLQkJLy8gdGVzdCBzYXZlZCBjYXRhbG9nIC0gY2F0YWxvZzEueG1sCi0JCWFzc2VydEVxdWFscygzLCBjYXRhbG9nLmdldENhdGFsb2dFbnRyaWVzKCkubGVuZ3RoKTsKLQotCQkvLyB0ZXN0IHB1YmxpYyBlbnRyaWVzCi0JCUxpc3QgZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKGNhdGFsb2csCi0JCQkJSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCUlDYXRhbG9nRW50cnkgZW50cnkgPSAoSUNhdGFsb2dFbnRyeSkgZW50cmllcy5nZXQoMCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCIuL0ludm9pY2UvSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCWFzc2VydEVxdWFscygiSW52b2ljZUlkX3Rlc3QiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCWFzc2VydEVxdWFscygiaHR0cDovL3dlYlVSTCIsIGVudHJ5LmdldEF0dHJpYnV0ZVZhbHVlKCJ3ZWJVUkwiKSk7Ci0KLQkJLy8gdGVzdCBzeXN0ZW0gZW50cmllcwotCQllbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoY2F0YWxvZywKLQkJCQlJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfU1lTVEVNKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGVudHJpZXMuc2l6ZSgpKTsKLQkJZW50cnkgPSAoSUNhdGFsb2dFbnRyeSkgZW50cmllcy5nZXQoMCk7Ci0JCWFzc2VydEVxdWFscygiLi9JbnZvaWNlL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0VVJJKCkpOwotCQlhc3NlcnRFcXVhbHMoIkludm9pY2UuZHRkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQlhc3NlcnRFcXVhbHMoInllcyIsIGVudHJ5LmdldEF0dHJpYnV0ZVZhbHVlKCJjaGFjaGVkIikpOwotCQlhc3NlcnRFcXVhbHMoInZhbHVlMSIsIGVudHJ5LmdldEF0dHJpYnV0ZVZhbHVlKCJwcm9wZXJ0eSIpKTsKLQotCQkvLyB0ZXN0IHVyaSBlbnRyaWVzCi0JCWVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhjYXRhbG9nLAotCQkJCUlDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9VUkkpOwotCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KSBlbnRyaWVzLmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKCIuL0ludm9pY2UvSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCWFzc2VydEVxdWFscygiaHR0cDovL3d3dy50ZXN0LmNvbS9JbnZvaWNlLmR0ZCIsIGVudHJ5LmdldEtleSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJubyIsIGVudHJ5LmdldEF0dHJpYnV0ZVZhbHVlKCJjaGFjaGVkIikpOwotCQlhc3NlcnRFcXVhbHMoInZhbHVlMiIsIGVudHJ5LmdldEF0dHJpYnV0ZVZhbHVlKCJwcm9wZXJ0eSIpKTsKLQotCQkvLyB0ZXN0IG5leHQgY2F0YWxvZyAtIGNhdGFsb2cyLnhtbAotCQlJTmV4dENhdGFsb2dbXSBuZXh0Q2F0YWxvZ0VudHJpZXMgPSBjYXRhbG9nLmdldE5leHRDYXRhbG9ncygpOwotCQlhc3NlcnRFcXVhbHMoMSwgbmV4dENhdGFsb2dFbnRyaWVzLmxlbmd0aCk7Ci0KLQkJSU5leHRDYXRhbG9nIG5leHRDYXRhbG9nRW50cnkgPSAoSU5leHRDYXRhbG9nKSBuZXh0Q2F0YWxvZ0VudHJpZXNbMF07Ci0JCWFzc2VydE5vdE51bGwobmV4dENhdGFsb2dFbnRyeSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJjYXRhbG9nMi54bWwiLCBuZXh0Q2F0YWxvZ0VudHJ5LmdldENhdGFsb2dMb2NhdGlvbigpKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL1Rlc3RQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL1Rlc3RQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU0MjIxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9UZXN0UGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0UGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgVGVzdFBsdWdpbiBwbHVnaW47Ci0JLy9SZXNvdXJjZSBidW5kbGUuCi0JcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZUJ1bmRsZTsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFRlc3RQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQkJcGx1Z2luID0gbnVsbDsKLQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFRlc3RQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsKSA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQl0cnkgewotCQkJaWYgKHJlc291cmNlQnVuZGxlID09IG51bGwpCi0JCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC53c3QueG1sLmNhdGFsb2cudGVzdC5UZXN0UGx1Z2luUmVzb3VyY2VzIik7Ci0JCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiB4KSB7Ci0JCQlyZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0JCX0KLQkJcmV0dXJuIHJlc291cmNlQnVuZGxlOwotCX0KLQkKLQkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyByZXNvbHZlUGx1Z2luTG9jYXRpb24oU3RyaW5nIHBhdGgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVVSTCB1cmwgPSBnZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkocGF0aCk7Ci0JCXVybCA9IFBsYXRmb3JtLnJlc29sdmUodXJsKTsKLQkJcmV0dXJuIHVybC5nZXRGaWxlKCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9YU0RTY2hlbWFUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9YU0RTY2hlbWFUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiYjU1YjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvWFNEU2NoZW1hVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuaW1wbC5YU0RTY2hlbWFJbXBsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgWFNEU2NoZW1hVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNjaGVtYUZvclNjaGVtYSgpewotCQkKLQkJICBYU0RTY2hlbWFJbXBsLmdldFNjaGVtYUZvclNjaGVtYSgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiKTsgIAotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvWmlwVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvWmlwVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2E4NzM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL1ppcFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBaaXBUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JIHB1YmxpYyB2b2lkIHRlc3RaaXAoKSB0aHJvd3MgRXhjZXB0aW9uewotCQkgIAotCQkgIFVSTCB1cmwgPSBuZXcgVVJMKCJqYXI6ZmlsZTovRDovdGNzL2NhdGFsb2dKYXJUZXN0L3NjaGVtYXMuamFyIS9kYXRhL2NhdGFsb2cueHNkIik7Ci0JCSAgSW5wdXRTdHJlYW0gaXMgPSB1cmwub3BlblN0cmVhbSgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9yZXNvbHZlci90b29scy90ZXN0cy9pbnRlcm5hbC9GaWxlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Jlc29sdmVyL3Rvb2xzL3Rlc3RzL2ludGVybmFsL0ZpbGVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1ZWY4ZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Jlc29sdmVyL3Rvb2xzL3Rlc3RzL2ludGVybmFsL0ZpbGVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwucmVzb2x2ZXIudG9vbHMudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLQotcHVibGljIGNsYXNzIEZpbGVVdGlsIHsKLQotCXB1YmxpYyBGaWxlVXRpbCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIGNvcHlGaWxlKFN0cmluZyBzcmMsIFN0cmluZyBkZXN0KSB7Ci0JCUlucHV0U3RyZWFtIGlzID0gbnVsbDsKLQkJRmlsZU91dHB1dFN0cmVhbSBmb3MgPSBudWxsOwotCQl0cnkgewotCQkJaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKHNyYyk7Ci0JCQlmb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShkZXN0KTsKLQkJCWludCBjID0gMDsKLQkJCWJ5dGVbXSBhcnJheSA9IG5ldyBieXRlWzEwMjRdOwotCQkJd2hpbGUgKChjID0gaXMucmVhZChhcnJheSkpID49IDApIHsKLQkJCQlmb3Mud3JpdGUoYXJyYXksIDAsIGMpOwotCQkJfQotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQl9IGZpbmFsbHkgewotCQkJdHJ5IHsKLQkJCQlmb3MuY2xvc2UoKTsKLQkJCQlpcy5jbG9zZSgpOwotCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCX0KLQkJfQotCX0KLQkKLQlwdWJsaWMgc3RhdGljIEZpbGUgY3JlYXRlRmlsZUFuZFBhcmVudERpcmVjdG9yaWVzKFN0cmluZyBmaWxlTmFtZSkKLQkJdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbGVOYW1lKTsKLQkJRmlsZSBwYXJlbnQgPSBmaWxlLmdldFBhcmVudEZpbGUoKTsKLQkJaWYgKCFwYXJlbnQuZXhpc3RzKCkpIHsKLQkJCXBhcmVudC5ta2RpcnMoKTsKLQkJfQotCQlmaWxlLmNyZWF0ZU5ld0ZpbGUoKTsKLQkJcmV0dXJuIGZpbGU7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgdm9pZCBkZWxldGVEaXJlY3RvcmllcyhGaWxlIGRpcikKLQkJdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJRmlsZVtdIGNoaWxkcmVuID0gZGlyLmxpc3RGaWxlcygpOwotCQlmb3IoaW50IGk9MDsgaTwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspewotCQkJaWYoY2hpbGRyZW5baV0ubGlzdCgpICE9IG51bGwgJiYgY2hpbGRyZW5baV0ubGlzdCgpLmxlbmd0aCA+IDApewotCQkJCWRlbGV0ZURpcmVjdG9yaWVzKGNoaWxkcmVuW2ldKTsKLQkJCX0KLQkJCWVsc2V7Ci0JCQkJY2hpbGRyZW5baV0uZGVsZXRlKCk7Ci0JCQl9Ci0JCX0KLQkJZGlyLmRlbGV0ZSgpOwotCQkJCi0JfQotCQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiB0ZXh0dWFsQ29tcGFyZShmaW5hbCBGaWxlIGZpcnN0LCBmaW5hbCBGaWxlIHNlY29uZCwgRmlsZSBkaWZmKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgIEJ1ZmZlcmVkUmVhZGVyIHIxID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZpcnN0KSk7Ci0gICAgICAgIEJ1ZmZlcmVkUmVhZGVyIHIyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKHNlY29uZCkpOwotICAgICAgICBQcmludFdyaXRlciBwcmludFdyaXRlciA9IG5ldyBQcmludFdyaXRlcihuZXcgRmlsZU91dHB1dFN0cmVhbShkaWZmKSk7ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgYm9vbGVhbiBkaWZmRm91bmQgPSBmYWxzZTsKLSAgICAgICAgd2hpbGUgKHIxLnJlYWR5KCkpIHsKLSAgICAgICAgICAgIFN0cmluZyBzMSA9IHIxLnJlYWRMaW5lKCk7Ci0gICAgICAgICAgICBTdHJpbmcgczIgPSByMi5yZWFkTGluZSgpOwotICAgICAgICAgICAgaWYgKHMxID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAoczIgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpZmZGb3VuZDsgICAvLyBmaWxlcyBlcXVhbAotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZGlmZkZvdW5kID0gdHJ1ZTsgIC8vIGZpbGVzIGRpZmZlciBpbiBsZW5ndGgKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghczEuZXF1YWxzKHMyKSkgewotICAgICAgICAgICAgCXByaW50V3JpdGVyLnByaW50bG4oIjw8PDwgIiArIHMxKTsKLSAgICAgICAgICAgIAlwcmludFdyaXRlci5wcmludGxuKCI8PDw8ICIgKyBzMik7Ci0gICAgICAgICAgICAgICAgZGlmZkZvdW5kID0gdHJ1ZTsgICAgLy8gZmlsZXMgZGlmZmVyCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0gCi0gICAgICAgIAotICAgICAgICBwcmludFdyaXRlci5mbHVzaCgpOyAKLSAgICAgICAgCi0gICAgICAgIHJldHVybiAgZGlmZkZvdW5kOwotICAgICAKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9yZXNvbHZlci90b29scy90ZXN0cy9pbnRlcm5hbC9SZXNvbHZpbmdYTUxQYXJzZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9yZXNvbHZlci90b29scy90ZXN0cy9pbnRlcm5hbC9SZXNvbHZpbmdYTUxQYXJzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg5ZDAwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvcmVzb2x2ZXIvdG9vbHMvdGVzdHMvaW50ZXJuYWwvUmVzb2x2aW5nWE1MUGFyc2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnJlc29sdmVyLnRvb2xzLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sLnJlc29sdmVyLkNhdGFsb2dNYW5hZ2VyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sLnJlc29sdmVyLmFwcHMuWFBhcnNlRXJyb3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWwucmVzb2x2ZXIudG9vbHMuUmVzb2x2aW5nWE1MUmVhZGVyOwotCi1pbXBvcnQgb3JnLnhtbC5zYXguU0FYTm90UmVjb2duaXplZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBSZXNvbHZpbmdYTUxQYXJzZXIgewotCQotCXB1YmxpYyBib29sZWFuIHZhbGlkYXRpb25FcnJvciA9IGZhbHNlOwotCi0JcHJvdGVjdGVkIHN0YXRpYyBpbnQgbWF4RXJycyA9IDEwOwotCi0JcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIG5zQXdhcmUgPSB0cnVlOwotCi0JcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIHZhbGlkYXRpbmcgPSB0cnVlOwotCi0JcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIHNob3dFcnJvcnMgPSB0cnVlOwotCi0JcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIHNob3dXYXJuaW5ncyA9IHRydWU7Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIFZlY3RvciBjYXRhbG9nRmlsZXMgPSBuZXcgVmVjdG9yKCk7Ci0KLQlwcm90ZWN0ZWQgIHZvaWQgcGFyc2VBbmRWYWxpZGF0ZShTdHJpbmcgeG1sRmlsZSwgU3RyaW5nW10gY2F0YWxvZ3MpCi0JCQl0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBGaWxlTm90Rm91bmRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQotCQkJQ2F0YWxvZ01hbmFnZXIgbXlNYW5hZ2VyID0gbmV3IENhdGFsb2dNYW5hZ2VyKCk7Ci0JCQlTdHJpbmdCdWZmZXIgY2F0YWxvZ0ZpbGUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQlmb3IoaW50IGk9MDsgaTxjYXRhbG9ncy5sZW5ndGg7IGkrKyl7Ci0JCQkJY2F0YWxvZ0ZpbGUgPSBjYXRhbG9nRmlsZS5hcHBlbmQoY2F0YWxvZ3NbaV0gKyAiOyIpOwotCQkJfQotCQkJbXlNYW5hZ2VyLnNldENhdGFsb2dGaWxlcyhjYXRhbG9nRmlsZS50b1N0cmluZygpKTsKLQkJICAgIG15TWFuYWdlci5zZXRJZ25vcmVNaXNzaW5nUHJvcGVydGllcyh0cnVlKTsKLQkJICAgIG15TWFuYWdlci5zZXRWZXJib3NpdHkoMik7Ci0JCSAgICBSZXNvbHZpbmdYTUxSZWFkZXIgcmVhZGVyID0gbmV3IFJlc29sdmluZ1hNTFJlYWRlcihteU1hbmFnZXIpOwotCQkJdHJ5IHsKLQkJCQlyZWFkZXIuc2V0RmVhdHVyZSgiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL25hbWVzcGFjZXMiLAotCQkJCQkJCQluc0F3YXJlKTsKLQkJCQlyZWFkZXIuc2V0RmVhdHVyZSgiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL3ZhbGlkYXRpb24iLAotCQkJCQkJdmFsaWRhdGluZyk7Ci0JCQkJcmVhZGVyLnNldEZlYXR1cmUoCi0JCQkJCQkiaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL3ZhbGlkYXRpb24vc2NoZW1hIiwgdHJ1ZSk7Ci0JCQl9IGNhdGNoIChTQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uIGUxKSB7Ci0JCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9IGNhdGNoIChTQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZTEpIHsKLQkJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQotCQlYUGFyc2VFcnJvciB4cGUgPSBuZXcgWFBhcnNlRXJyb3Ioc2hvd0Vycm9ycywgc2hvd1dhcm5pbmdzKTsKLQkJeHBlLnNldE1heE1lc3NhZ2VzKG1heEVycnMpOwotCQlyZWFkZXIuc2V0RXJyb3JIYW5kbGVyKHhwZSk7Ci0KLQkJU3RyaW5nIHBhcnNlVHlwZSA9IHZhbGlkYXRpbmcgPyAidmFsaWRhdGluZyIgOiAid2VsbC1mb3JtZWQiOwotCQlTdHJpbmcgbnNUeXBlID0gbnNBd2FyZSA/ICJuYW1lc3BhY2UtYXdhcmUiIDogIm5hbWVzcGFjZS1pZ25vcmFudCI7Ci0JCWlmIChtYXhFcnJzID4gMCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJBdHRlbXB0aW5nICIgKyBwYXJzZVR5cGUgKyAiLCAiICsgbnNUeXBlCi0JCQkJCSsgIiBwYXJzZSIpOwotCQl9Ci0KLQkJdHJ5IHsKLQkJCXJlYWRlci5wYXJzZSh4bWxGaWxlKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXZhbGlkYXRpb25FcnJvciA9IHRydWU7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0KLQkJaWYgKG1heEVycnMgPiAwKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50KCJQYXJzZSAiKTsKLQkJCWlmICh4cGUuZ2V0RmF0YWxDb3VudCgpID4gMCkgewotCQkJCXZhbGlkYXRpb25FcnJvciA9IHRydWU7Ci0JCQkJU3lzdGVtLm91dC5wcmludCgiZmFpbGVkICIpOwotCQkJfSBlbHNlIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50KCJzdWNjZWVkZWQgIik7Ci0JCQkJU3lzdGVtLm91dC5wcmludCgiKCIpOwotCQkJfQotCQkJU3lzdGVtLm91dC5wcmludCgid2l0aCAiKTsKLQotCQkJaW50IGVyckNvdW50ID0geHBlLmdldEVycm9yQ291bnQoKTsKLQkJCWludCB3YXJuQ291bnQgPSB4cGUuZ2V0V2FybmluZ0NvdW50KCk7Ci0KLQkJCWlmIChlcnJDb3VudCA+IDApIHsKLQkJCQl2YWxpZGF0aW9uRXJyb3IgPSB0cnVlOwotCQkJCVN5c3RlbS5vdXQucHJpbnQoZXJyQ291bnQgKyAiIGVycm9yIik7Ci0JCQkJU3lzdGVtLm91dC5wcmludChlcnJDb3VudCA+IDEgPyAicyIgOiAiIik7Ci0JCQkJU3lzdGVtLm91dC5wcmludCgiIGFuZCAiKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludCgibm8gZXJyb3JzIGFuZCAiKTsKLQkJCX0KLQotCQkJaWYgKHdhcm5Db3VudCA+IDApIHsKLQkJCQl2YWxpZGF0aW9uRXJyb3IgPSB0cnVlOwotCQkJCVN5c3RlbS5vdXQucHJpbnQod2FybkNvdW50ICsgIiB3YXJuaW5nIik7Ci0JCQkJU3lzdGVtLm91dC5wcmludCh3YXJuQ291bnQgPiAxID8gInMiIDogIiIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnQoIi4iKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludCgibm8gd2FybmluZ3MuIik7Ci0JCQl9Ci0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiIik7Ci0JCX0KLQl9Ci0JCi0JCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvcmVzb2x2ZXIvdG9vbHMvdGVzdHMvaW50ZXJuYWwvVHJhWExpYWlzb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9yZXNvbHZlci90b29scy90ZXN0cy9pbnRlcm5hbC9UcmFYTGlhaXNvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Njg2MWMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9yZXNvbHZlci90b29scy90ZXN0cy9pbnRlcm5hbC9UcmFYTGlhaXNvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjgxICswLDAgQEAKLS8qCi0gKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDIgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotICogcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sIGlmCi0gKiAgICBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZ2VtZW50OgotICogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0gKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSAqICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZ2VtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSAqICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZ2VtZW50cyBub3JtYWxseSBhcHBlYXIuCi0gKgotICogNC4gVGhlIG5hbWVzICJUaGUgSmFrYXJ0YSBQcm9qZWN0IiwgIkFudCIsIGFuZCAiQXBhY2hlIFNvZnR3YXJlCi0gKiAgICBGb3VuZGF0aW9uIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0gKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSAqCi0gKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIgotICogICAgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0gKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgR3JvdXAuCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0gKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSAqIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBGb3IgbW9yZQotICogaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlCi0gKiA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0gKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnJlc29sdmVyLnRvb2xzLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguRW50aXR5UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguWE1MUmVhZGVyOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyRmFjdG9yeTsKLQotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRlbXBsYXRlczsKLQotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uRXJyb3JMaXN0ZW5lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVVJJUmVzb2x2ZXI7Ci0KLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnNheC5TQVhTb3VyY2U7Ci0KLS8qKgotICogQ29uY3JldGUgbGlhaXNvbiBmb3IgWFNMVCBwcm9jZXNzb3IgaW1wbGVtZW50aW5nIFRyYVguIChpZSBKQVhQIDEuMSkKLSAqCi0gKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpydWJ5c0B1cy5pYm0uY29tIj5TYW0gUnVieTwvYT4KLSAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOmRpbXNAeWFob28uY29tIj5EYXZhbnVtIFNyaW5pdmFzPC9hPgotICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86c2JhaWxsaWV6QGFwYWNoZS5vcmciPlN0ZXBoYW5lIEJhaWxsaWV6PC9hPgotICogQHNpbmNlIEFudCAxLjMKLSAqLwotcHVibGljIGNsYXNzIFRyYVhMaWFpc29uIGltcGxlbWVudHMgWFNMVExpYWlzb24sIEVycm9yTGlzdGVuZXIgewotCi0JLyoqIFRoZSB0cmF4IFRyYW5zZm9ybWVyRmFjdG9yeSAqLwotCXByaXZhdGUgVHJhbnNmb3JtZXJGYWN0b3J5IHRmYWN0b3J5ID0gbnVsbDsKLQotCS8qKiBzdHlsZXNoZWV0IHN0cmVhbSwgY2xvc2UgaXQgYXNhcCAqLwotCXByaXZhdGUgRmlsZUlucHV0U3RyZWFtIHhzbFN0cmVhbSA9IG51bGw7Ci0KLQkvKiogU3R5bGVzaGVldCB0ZW1wbGF0ZSAqLwotCXByaXZhdGUgVGVtcGxhdGVzIHRlbXBsYXRlcyA9IG51bGw7Ci0KLQkvKiogdHJhbnNmb3JtZXIgKi8KLQlwcml2YXRlIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0gbnVsbDsKLQotCS8qKiBwb3NzaWJsZSByZXNvbHZlciBmb3IgcHVibGljSWRzICovCi0JcHJpdmF0ZSBFbnRpdHlSZXNvbHZlciBlbnRpdHlSZXNvbHZlcjsKLQotCS8qKiBwb3NzaWJsZSByZXNvbHZlciBmb3IgVVJJcyAqLwotCXByaXZhdGUgVVJJUmVzb2x2ZXIgdXJpUmVzb2x2ZXI7Ci0KLQlwdWJsaWMgVHJhWExpYWlzb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdGZhY3RvcnkgPSBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQkJdGZhY3Rvcnkuc2V0RXJyb3JMaXN0ZW5lcih0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdGhlIG91dHB1dCBwcm9wZXJ0eSBmb3IgdGhlIGN1cnJlbnQgdHJhbnNmb3JtZXIuCi0JICogTm90ZSB0aGF0IHRoZSBzdHlsZXNoZWV0IG11c3QgYmUgc2V0IHByaW9yIHRvIGNhbGxpbmcKLQkgKiB0aGlzIG1ldGhvZC4KLQkgKiBAcGFyYW0gbmFtZSB0aGUgb3V0cHV0IHByb3BlcnR5IG5hbWUuCi0JICogQHBhcmFtIHZhbHVlIHRoZSBvdXRwdXQgcHJvcGVydHkgdmFsdWUuCi0JICovCi0JcHVibGljIHZvaWQgc2V0T3V0cHV0UHJvcGVydHkoU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkgewotCQlpZiAodHJhbnNmb3JtZXIgPT0gbnVsbCkgewotCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigic3R5bGVzaGVldCBtdXN0IGJlIHNldCBwcmlvciB0byBzZXR0aW5nIHRoZSBvdXRwdXQgcHJvcGVydGllcyIpOwotCQl9Ci0JCXRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KG5hbWUsIHZhbHVlKTsKLQl9Ci0KLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0gSU1QT1JUQU5UCi0JLy8gMSkgRG9uJ3QgdXNlIHRoZSBTdHJlYW1Tb3VyY2UoRmlsZSkgY3Rvci4gSXQgd29uJ3Qgd29yayB3aXRoCi0JLy8geGFsYW4gcHJpb3IgdG8gMi4yIGJlY2F1c2Ugb2Ygc3lzdGVtaWQgYnVncy4KLQotCS8vIDIpIFVzZSBhIHN0cmVhbSBzbyB0aGF0IHlvdSBjYW4gY2xvc2UgaXQgeW91cnNlbGYgcXVpY2tseQotCS8vIGFuZCBhdm9pZCBrZWVwaW5nIHRoZSBoYW5kbGUgdW50aWwgdGhlIG9iamVjdCBpcyBnYXJiYWdlZC4KLQkvLyAoYWx3YXlzIGtlZXAgY29udHJvbCksIG90aGVyd2lzZSB5b3Ugd29uJ3QgYmUgYWJsZSB0byBkZWxldGUKLQkvLyB0aGUgZmlsZSBxdWlja2x5IG9uIHdpbmRvd3MuCi0KLQkvLyAzKSBBbHdheXMgc2V0IHRoZSBzeXN0ZW1pZCB0byB0aGUgc291cmNlIGZvciBpbXBvcnRzLCBpbmNsdWRlcy4uLgotCS8vIGluIHhzbCBhbmQgeG1sLi4uCi0KLQlwdWJsaWMgdm9pZCBzZXRTdHlsZXNoZWV0KEZpbGUgc3R5bGVzaGVldCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXhzbFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oc3R5bGVzaGVldCk7Ci0JCVN0cmVhbVNvdXJjZSBzcmMgPSBuZXcgU3RyZWFtU291cmNlKHhzbFN0cmVhbSk7Ci0JCXNyYy5zZXRTeXN0ZW1JZChnZXRTeXN0ZW1JZChzdHlsZXNoZWV0KSk7Ci0JCXRlbXBsYXRlcyA9IHRmYWN0b3J5Lm5ld1RlbXBsYXRlcyhzcmMpOwotCQl0cmFuc2Zvcm1lciA9IHRlbXBsYXRlcy5uZXdUcmFuc2Zvcm1lcigpOwotCQl0cmFuc2Zvcm1lci5zZXRFcnJvckxpc3RlbmVyKHRoaXMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRyYW5zZm9ybShGaWxlIGluZmlsZSwgRmlsZSBvdXRmaWxlKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJRmlsZUlucHV0U3RyZWFtIGZpcyA9IG51bGw7Ci0JCUZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWZpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oaW5maWxlKTsKLQkJCWZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKG91dGZpbGUpOwotCQkJLy8gRklYTUU6IG5lZWQgdG8gdXNlIGEgU0FYU291cmNlIGFzIHRoZSBzb3VyY2UgZm9yIHRoZSB0cmFuc2Zvcm0KLQkJCS8vIHNvIHdlIGNhbiBwbHVnIGluIG91ciBvd24gZW50aXR5IHJlc29sdmVyCi0JCQlTb3VyY2Ugc3JjID0gbnVsbDsKLQkJCWlmIChlbnRpdHlSZXNvbHZlciAhPSBudWxsKSB7Ci0JCQkJaWYgKHRmYWN0b3J5LmdldEZlYXR1cmUoU0FYU291cmNlLkZFQVRVUkUpKSB7Ci0JCQkJCVNBWFBhcnNlckZhY3Rvcnkgc3BGYWN0b3J5ID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQkJCQlzcEZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0JCQkJCVhNTFJlYWRlciByZWFkZXIgPSBzcEZhY3RvcnkubmV3U0FYUGFyc2VyKCkuZ2V0WE1MUmVhZGVyKCk7Ci0JCQkJCXJlYWRlci5zZXRFbnRpdHlSZXNvbHZlcihlbnRpdHlSZXNvbHZlcik7Ci0JCQkJCXNyYyA9IG5ldyBTQVhTb3VyY2UocmVhZGVyLCBuZXcgSW5wdXRTb3VyY2UoZmlzKSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKLQkJCQkJCSJ4Y2F0YWxvZyBzcGVjaWZpZWQsIGJ1dCAiCi0JCQkJCQkJKyAicGFyc2VyIGRvZXNuJ3Qgc3VwcG9ydCBTQVgiKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXNyYyA9IG5ldyBTdHJlYW1Tb3VyY2UoZmlzKTsKLQkJCX0KLQkJCXNyYy5zZXRTeXN0ZW1JZChnZXRTeXN0ZW1JZChpbmZpbGUpKTsKLQkJCVN0cmVhbVJlc3VsdCByZXMgPSBuZXcgU3RyZWFtUmVzdWx0KGZvcyk7Ci0JCQkvLyBub3Qgc3VyZSB3aGF0IGNvdWxkIGJlIHRoZSBuZWVkIG9mIHRoaXMuLi4KLQkJCXJlcy5zZXRTeXN0ZW1JZChnZXRTeXN0ZW1JZChvdXRmaWxlKSk7Ci0KLQkJCWlmICh1cmlSZXNvbHZlciAhPSBudWxsKQotCQkJCXRyYW5zZm9ybWVyLnNldFVSSVJlc29sdmVyKHVyaVJlc29sdmVyKTsKLQotCQkJdHJhbnNmb3JtZXIudHJhbnNmb3JtKHNyYywgcmVzKTsKLQkJfSBmaW5hbGx5IHsKLQkJCS8vIG1ha2Ugc3VyZSB0byBjbG9zZSBhbGwgaGFuZGxlcywgb3RoZXJ3aXNlIHRoZSBnYXJiYWdlCi0JCQkvLyBjb2xsZWN0b3Igd2lsbCBjbG9zZSB0aGVtLi4ud2hlbmV2ZXIgcG9zc2libGUgYW5kCi0JCQkvLyBXaW5kb3dzIG1heSBjb21wbGFpbiBhYm91dCBub3QgYmVpbmcgYWJsZSB0byBkZWxldGUgZmlsZXMuCi0JCQl0cnkgewotCQkJCWlmICh4c2xTdHJlYW0gIT0gbnVsbCkgewotCQkJCQl4c2xTdHJlYW0uY2xvc2UoKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpZ25vcmVkKSB7Ci0JCQl9Ci0JCQl0cnkgewotCQkJCWlmIChmaXMgIT0gbnVsbCkgewotCQkJCQlmaXMuY2xvc2UoKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpZ25vcmVkKSB7Ci0JCQl9Ci0JCQl0cnkgewotCQkJCWlmIChmb3MgIT0gbnVsbCkgewotCQkJCQlmb3MuY2xvc2UoKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpZ25vcmVkKSB7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvLyBtYWtlIHN1cmUgdGhhdCB0aGUgc3lzdGVtaWQgaXMgbWFkZSBvZiAnLycgYW5kIG5vdCAnXCcgb3RoZXJ3aXNlCi0JLy8gY3JpbXNvbiB3aWxsIGNvbXBsYWluIHRoYXQgaXQgY2Fubm90IHJlc29sdmUgcmVsYXRpdmUgZW50aXRpZXMKLQkvLyBiZWNhdXNlIGl0IGdyYWJzIHRoZSBiYXNlIHVyaSB2aWEgbGFzdEluZGV4T2YoJy8nKSB3aXRob3V0Ci0JLy8gbWFraW5nIHN1cmUgaXQgaXMgcmVhbGx5IGEgLydlZCBwYXRoCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRTeXN0ZW1JZChGaWxlIGZpbGUpIHsKLQkJU3RyaW5nIHBhdGggPSBmaWxlLmdldEFic29sdXRlUGF0aCgpOwotCQlwYXRoID0gcGF0aC5yZXBsYWNlKCdcXCcsICcvJyk7Ci0KLQkJLy8gb24gV2luZG93cywgdXNlICdmaWxlOi8vLycKLQkJaWYgKEZpbGUuc2VwYXJhdG9yQ2hhciA9PSAnXFwnKSB7Ci0JCQlyZXR1cm4gRklMRV9QUk9UT0NPTF9QUkVGSVggKyAiLyIgKyBwYXRoOwotCQl9Ci0JCS8vIFVuaXgsIHVzZSAnZmlsZTovLycKLQkJcmV0dXJuIEZJTEVfUFJPVE9DT0xfUFJFRklYICsgcGF0aDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRQYXJhbShTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKSB7Ci0JCXRyYW5zZm9ybWVyLnNldFBhcmFtZXRlcihuYW1lLCB2YWx1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgZXJyb3IoVHJhbnNmb3JtZXJFeGNlcHRpb24gZSkgewotCQlsb2dFcnJvcihlLCAiRXJyb3IiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBmYXRhbEVycm9yKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpIHsKLQkJbG9nRXJyb3IoZSwgIkZhdGFsIEVycm9yIik7Ci0JfQotCi0JcHVibGljIHZvaWQgd2FybmluZyhUcmFuc2Zvcm1lckV4Y2VwdGlvbiBlKSB7Ci0JCWxvZ0Vycm9yKGUsICJXYXJuaW5nIik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGxvZ0Vycm9yKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUsIFN0cmluZyB0eXBlKSB7Ci0KLQkJU3RyaW5nQnVmZmVyIG1zZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJaWYgKGUuZ2V0TG9jYXRvcigpICE9IG51bGwpIHsKLQkJCWlmIChlLmdldExvY2F0b3IoKS5nZXRTeXN0ZW1JZCgpICE9IG51bGwpIHsKLQkJCQlTdHJpbmcgdXJsID0gZS5nZXRMb2NhdG9yKCkuZ2V0U3lzdGVtSWQoKTsKLQkJCQlpZiAodXJsLnN0YXJ0c1dpdGgoImZpbGU6Ly8vIikpIHsKLQkJCQkJdXJsID0gdXJsLnN1YnN0cmluZyg4KTsKLQkJCQl9Ci0JCQkJbXNnLmFwcGVuZCh1cmwpOwotCQkJfSBlbHNlIHsKLQkJCQltc2cuYXBwZW5kKCJVbmtub3duIGZpbGUiKTsKLQkJCX0KLQkJCWlmIChlLmdldExvY2F0b3IoKS5nZXRMaW5lTnVtYmVyKCkgIT0gLTEpIHsKLQkJCQltc2cuYXBwZW5kKCI6IiArIGUuZ2V0TG9jYXRvcigpLmdldExpbmVOdW1iZXIoKSk7Ci0JCQkJaWYgKGUuZ2V0TG9jYXRvcigpLmdldENvbHVtbk51bWJlcigpICE9IC0xKSB7Ci0JCQkJCW1zZy5hcHBlbmQoIjoiICsgZS5nZXRMb2NhdG9yKCkuZ2V0Q29sdW1uTnVtYmVyKCkpOwotCQkJCX0KLQkJCX0KLQkJfQotCQltc2cuYXBwZW5kKCI6ICIgKyB0eXBlICsgIiEgIik7Ci0JCW1zZy5hcHBlbmQoZS5nZXRNZXNzYWdlKCkpOwotCQlpZiAoZS5nZXRDYXVzZSgpICE9IG51bGwpIHsKLQkJCW1zZy5hcHBlbmQoIiBDYXVzZTogIiArIGUuZ2V0Q2F1c2UoKSk7Ci0JCX0KLQotCQlTeXN0ZW0ub3V0LnByaW50bG4obXNnLnRvU3RyaW5nKCkpOwotCX0KLQotCS8qKiBTZXQgdGhlIGNsYXNzIHRvIHJlc29sdmUgZW50aXRpZXMgZHVyaW5nIHRoZSB0cmFuc2Zvcm1hdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEVudGl0eVJlc29sdmVyKEVudGl0eVJlc29sdmVyIGFSZXNvbHZlcikgewotCQllbnRpdHlSZXNvbHZlciA9IGFSZXNvbHZlcjsKLQl9Ci0KLQkvKiogU2V0IHRoZSBjbGFzcyB0byByZXNvbHZlIFVSSXMgZHVyaW5nIHRoZSB0cmFuc2Zvcm1hdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFVSSVJlc29sdmVyKFVSSVJlc29sdmVyIGFSZXNvbHZlcikgewotCQl1cmlSZXNvbHZlciA9IGFSZXNvbHZlcjsKLQkJdGZhY3Rvcnkuc2V0VVJJUmVzb2x2ZXIoYVJlc29sdmVyKTsKLQl9Ci0KLX0gLy8tLSBUcmFYTGlhaXNvbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Jlc29sdmVyL3Rvb2xzL3Rlc3RzL2ludGVybmFsL1ZhbGlkYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9yZXNvbHZlci90b29scy90ZXN0cy9pbnRlcm5hbC9WYWxpZGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ZTdhYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Jlc29sdmVyL3Rvb2xzL3Rlc3RzL2ludGVybmFsL1ZhbGlkYXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5yZXNvbHZlci50b29scy50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWwuVGVzdFBsdWdpbjsKLQotCi0vKioKLSAqIFRvIHJ1biB0aGlzIHRlc3QgbmVlZCB0byBhZGQgcmVzb2x2ZXIuamFyIHRvIHRoZSBjbGFzc3BhdGguCi0gKiBSdW4gYXMgSlVuaXQgUGx1Z2luIHRlc3Q6Ci0gKiAtIHB1dCByZXNvbHZlci5qYXIgb24gdGhlIGJvb3QgY2xhc3MgcGF0aAotICogLSBhZGQgVk0gYXJndW1lbnQ6Ci0gKiAKLSAqIC1YYm9vdGNsYXNzcGF0aC9wOjxpbnN0YWxsIGxvY2F0aW9uPlxqcmVcbGliXGV4dFxyZXNvbHZlci5qYXIKLSAqCi0gKgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkKLQkKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JfQotCi0JcHVibGljIFZhbGlkYXRvclRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCQotCQotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0aW5nUGFyc2VyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHhtbEZpbGUgPSAiL2RhdGEvUGVyc29uYWwvcGVyc29uYWwtc2NoZW1hLnhtbCI7Ci0JCXhtbEZpbGUgPSBUZXN0UGx1Z2luLnJlc29sdmVQbHVnaW5Mb2NhdGlvbih4bWxGaWxlKTsKLQkJCi0JCVN0cmluZyBjYXRhbG9nRmlsZSA9ICIvZGF0YS9jYXRhbG9nMi54bWwiOwotCQljYXRhbG9nRmlsZSA9IFRlc3RQbHVnaW4ucmVzb2x2ZVBsdWdpbkxvY2F0aW9uKGNhdGFsb2dGaWxlKTsKLQkJCQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0iICsgdGhpcy5nZXROYW1lKCkgKyAiLS0tLS0tLS0tIik7Ci0JCVJlc29sdmluZ1hNTFBhcnNlciBwYXJzZXIgPSBuZXcgUmVzb2x2aW5nWE1MUGFyc2VyKCk7Ci0JCXBhcnNlci5wYXJzZUFuZFZhbGlkYXRlKHhtbEZpbGUsIG5ldyBTdHJpbmdbXXtjYXRhbG9nRmlsZX0pOwotCQlhc3NlcnRGYWxzZShwYXJzZXIudmFsaWRhdGlvbkVycm9yKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9yZXNvbHZlci90b29scy90ZXN0cy9pbnRlcm5hbC9YU0xUTGlhaXNvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Jlc29sdmVyL3Rvb2xzL3Rlc3RzL2ludGVybmFsL1hTTFRMaWFpc29uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiZjM2YTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Jlc29sdmVyL3Rvb2xzL3Rlc3RzL2ludGVybmFsL1hTTFRMaWFpc29uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoKLSAqIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0gKiByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwgaWYKLSAqICAgIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVnZW1lbnQ6Ci0gKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSAqICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotICogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVnZW1lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotICogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVnZW1lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSAqCi0gKiA0LiBUaGUgbmFtZXMgIlRoZSBKYWthcnRhIFByb2plY3QiLCAiQW50IiwgYW5kICJBcGFjaGUgU29mdHdhcmUKLSAqICAgIEZvdW5kYXRpb24iIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSAqICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotICoKLSAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUiCi0gKiAgICBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSAqICAgIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBHcm91cC4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0gKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotICogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEZvciBtb3JlCi0gKiBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUKLSAqIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSAqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwucmVzb2x2ZXIudG9vbHMudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLS8qKgotICogUHJveHkgaW50ZXJmYWNlIGZvciBYU0xUIHByb2Nlc3NvcnMuCi0gKgotICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86cnVieXNAdXMuaWJtLmNvbSI+U2FtIFJ1Ynk8L2E+Ci0gKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpzYmFpbGxpZXpAYXBhY2hlLm9yZyI+U3RlcGhhbmUgQmFpbGxpZXo8L2E+Ci0gKiBAc2VlIFhTTFRQcm9jZXNzCi0gKiBAc2luY2UgQW50IDEuMQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFhTTFRMaWFpc29uIHsKLQotICAgIC8qKgotICAgICAqIHRoZSBmaWxlIHByb3RvY29sIHByZWZpeCBmb3Igc3lzdGVtaWQuCi0gICAgICogVGhpcyBmaWxlIHByb3RvY29sIG11c3QgYmUgYXBwZW5kZWQgdG8gYW4gYWJzb2x1dGUgcGF0aC4KLSAgICAgKiBUeXBpY2FsbHk6IDx0dD5GSUxFX1BST1RPQ09MX1BSRUZJWCArIGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk8L3R0PgotICAgICAqIE5vdGUgdGhhdCBvbiBXaW5kb3dzLCBhbiBleHRyYSAnLycgbXVzdCBiZSBhcHBlbmRlZCB0byB0aGUKLSAgICAgKiBwcm90b2NvbCBwcmVmaXggc28gdGhhdCB0aGVyZSBpcyBhbHdheXMgMyBjb25zZWN1dGl2ZSBzbGFzaGVzLgotICAgICAqIEBzaW5jZSBBbnQgMS40Ci0gICAgICovCi0gICAgU3RyaW5nIEZJTEVfUFJPVE9DT0xfUFJFRklYID0gImZpbGU6Ly8iOwotCi0gICAgLyoqCi0gICAgICogc2V0IHRoZSBzdHlsZXNoZWV0IHRvIHVzZSBmb3IgdGhlIHRyYW5zZm9ybWF0aW9uLgotICAgICAqIEBwYXJhbSBzdHlsZXNoZWV0IHRoZSBzdHlsZXNoZWV0IHRvIGJlIHVzZWQgZm9yIHRyYW5zZm9ybWF0aW9uLgotICAgICAqIEBzaW5jZSBBbnQgMS40Ci0gICAgICovCi0gICAgdm9pZCBzZXRTdHlsZXNoZWV0KEZpbGUgc3R5bGVzaGVldCkgdGhyb3dzIEV4Y2VwdGlvbjsKLQotICAgIC8qKgotICAgICAqIEFkZCBhIHBhcmFtZXRlciB0byBiZSBzZXQgZHVyaW5nIHRoZSBYU0wgdHJhbnNmb3JtYXRpb24uCi0gICAgICogQHBhcmFtIG5hbWUgdGhlIHBhcmFtZXRlciBuYW1lLgotICAgICAqIEBwYXJhbSBleHByZXNzaW9uIHRoZSBwYXJhbWV0ZXIgdmFsdWUgYXMgYW4gZXhwcmVzc2lvbiBzdHJpbmcuCi0gICAgICogQHRocm93cyBFeGNlcHRpb24gdGhyb3duIGlmIGFueSBwcm9ibGVtcyBoYXBwZW5zLgotICAgICAqIEBzaW5jZSBBbnQgMS4zCi0gICAgICovCi0gICAgdm9pZCBhZGRQYXJhbShTdHJpbmcgbmFtZSwgU3RyaW5nIGV4cHJlc3Npb24pIHRocm93cyBFeGNlcHRpb247Ci0KLSAgICAvKioKLSAgICAgKiBQZXJmb3JtIHRoZSB0cmFuc2Zvcm1hdGlvbiBvZiBhIGZpbGUgaW50byBhbm90aGVyLgotICAgICAqIEBwYXJhbSBpbmZpbGUgdGhlIGlucHV0IGZpbGUsIHByb2JhYmx5IGFuIFhNTCBvbmUuIDotKQotICAgICAqIEBwYXJhbSBvdXRmaWxlIHRoZSBvdXRwdXQgZmlsZSByZXN1bHRpbmcgZnJvbSB0aGUgdHJhbnNmb3JtYXRpb24KLSAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbiB0aHJvd24gaWYgYW55IHByb2JsZW1zIGhhcHBlbnMuCi0gICAgICogQHNlZSAjc2V0U3R5bGVzaGVldChGaWxlKQotICAgICAqIEBzaW5jZSBBbnQgMS40Ci0gICAgICovCi0gICAgdm9pZCB0cmFuc2Zvcm0oRmlsZSBpbmZpbGUsIEZpbGUgb3V0ZmlsZSkgdGhyb3dzIEV4Y2VwdGlvbjsKLQotfSAvLy0tIFhTTFRMaWFpc29uCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvcmVzb2x2ZXIvdG9vbHMvdGVzdHMvaW50ZXJuYWwvWFNMVFdpdGhDYXRhbG9nUmVzb2x2ZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvcmVzb2x2ZXIvdG9vbHMvdGVzdHMvaW50ZXJuYWwvWFNMVFdpdGhDYXRhbG9nUmVzb2x2ZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjZmIzYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Jlc29sdmVyL3Rvb2xzL3Rlc3RzL2ludGVybmFsL1hTTFRXaXRoQ2F0YWxvZ1Jlc29sdmVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnJlc29sdmVyLnRvb2xzLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWwucmVzb2x2ZXIudG9vbHMuQ2F0YWxvZ1Jlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbC5UZXN0UGx1Z2luOwotCi0KLS8qKgotICogVGVzdCBmcm9tIGh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTYzMzYKLSAqIAotICogVG8gcnVuIHRoaXMgdGVzdCBuZWVkIHRvIGFkZCByZXNvbHZlci5qYXIgdG8gdGhlIGNsYXNzcGF0aC4KLSAqIFJ1biBhcyBKVW5pdCBQbHVnaW4gdGVzdDoKLSAqIC0gcHV0IHJlc29sdmVyLmphciBvbiB0aGUgYm9vdCBjbGFzcyBwYXRoCi0gKiAtIGFkZCBWTSBhcmd1bWVudDoKLSAqIAotICogLVhib290Y2xhc3NwYXRoL3A6PGluc3RhbGwgbG9jYXRpb24+XGpyZVxsaWJcZXh0XHJlc29sdmVyLmphcgotICoKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0xUV2l0aENhdGFsb2dSZXNvbHZlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlDYXRhbG9nUmVzb2x2ZXIgY2F0YWxvZ1Jlc29sdmVyID0gbnVsbDsKLQlUcmFYTGlhaXNvbiB4c2x0TGlhc29uID0gbnVsbDsKLQlzdGF0aWMgU3RyaW5nIFNFUCA9IEZpbGUuc2VwYXJhdG9yOwotCi0JcHVibGljIFhTTFRXaXRoQ2F0YWxvZ1Jlc29sdmVyVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JCWp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihYU0xUV2l0aENhdGFsb2dSZXNvbHZlclRlc3QuY2xhc3MpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7CQotCQljYXRhbG9nUmVzb2x2ZXIgPSBuZXcgQ2F0YWxvZ1Jlc29sdmVyKCk7Ci0JCXhzbHRMaWFzb24gPSBuZXcgVHJhWExpYWlzb24oKTsKLQkJeHNsdExpYXNvbi5zZXRFbnRpdHlSZXNvbHZlcihjYXRhbG9nUmVzb2x2ZXIpOwotCQl4c2x0TGlhc29uLnNldFVSSVJlc29sdmVyKGNhdGFsb2dSZXNvbHZlcik7Ci0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlcigpIHRocm93cyBFeGNlcHRpb24gewotCQkKLQkJU3RyaW5nIHRlc3REaXJOYW1lID0gImRhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyIjsKLQkJdGVzdERpck5hbWUgPSBUZXN0UGx1Z2luLnJlc29sdmVQbHVnaW5Mb2NhdGlvbih0ZXN0RGlyTmFtZSk7Ci0JCQotCQlTdHJpbmcgY2F0YWxvZ0ZpbGVOYW1lID0gdGVzdERpck5hbWUgKyBTRVAgKyAiY2F0YWxvZy54bWwiOwkKLQkJU3RyaW5nIHhzbEZpbGVOYW1lID0gdGVzdERpck5hbWUgKyBTRVAgKyAieG1sY2F0YWxvZy54c2wiOwotCQlTdHJpbmcgeG1sRmlsZU5hbWUgPSB0ZXN0RGlyTmFtZSArIFNFUCArICJ4bWxjYXRhbG9nMi54bWwiOwotCQlTdHJpbmcgcmVzdWx0RmlsZU5hbWUgPSB4bWxGaWxlTmFtZSArICItb3V0IjsKLQkJU3RyaW5nIGlkZWFsUmVzdWx0RmlsZU5hbWUgPSB4bWxGaWxlTmFtZSArICItcmVzdWx0IjsKLQotCQkvL3NldHVwIGNhdGFsb2cgCi0KLQkJRmlsZSBjYXRhbG9nRmlsZSA9IG5ldyBGaWxlKGNhdGFsb2dGaWxlTmFtZSk7Ci0JCQotCQlhc3NlcnRUcnVlKCJDYXRhbG9nIGZpbGUgIiArIGNhdGFsb2dGaWxlTmFtZSArICIgc2hvdWxkIGV4aXN0IGZvciB0aGUgdGVzdCIsIGNhdGFsb2dGaWxlLmV4aXN0cygpKTsKLQkKLQkJY2F0YWxvZ1Jlc29sdmVyLmdldENhdGFsb2coKS5wYXJzZUNhdGFsb2coY2F0YWxvZ0ZpbGVOYW1lKTsKLQkJCi0JCUZpbGUgeHNsRmlsZSA9IG5ldyBGaWxlKHhzbEZpbGVOYW1lKTsKLQkJCi0JCWFzc2VydFRydWUoIlhTTCBmaWxlICIgKyB4c2xGaWxlTmFtZSArICIgc2hvdWxkIGV4aXN0IGZvciB0aGUgdGVzdCIsIHhzbEZpbGUuZXhpc3RzKCkpOwkJCi0JCQkKLQkJRmlsZSBpbkZpbGUgPSBuZXcgRmlsZSh4bWxGaWxlTmFtZSk7Ci0JCQotCQlhc3NlcnRUcnVlKCJYTUwgZmlsZSAiICsgeHNsRmlsZU5hbWUgKyAiIHNob3VsZCBleGlzdCBmb3IgdGhlIHRlc3QiLCB4c2xGaWxlLmV4aXN0cygpKTsJCQotCQkKLQkJRmlsZSBvdXRGaWxlID0gRmlsZVV0aWwuY3JlYXRlRmlsZUFuZFBhcmVudERpcmVjdG9yaWVzKHJlc3VsdEZpbGVOYW1lKTsKLQotCQl4c2x0TGlhc29uLnNldFN0eWxlc2hlZXQoeHNsRmlsZSk7Ci0JCXhzbHRMaWFzb24uYWRkUGFyYW0oIm91dHByb3AiLCAidGVzdHZhbHVlIik7Ci0JCi0JCXhzbHRMaWFzb24udHJhbnNmb3JtKGluRmlsZSwgb3V0RmlsZSk7Ci0JCQotCQlib29sZWFuIGRpZmZGb3VuZCA9Ci0JCQkJCUZpbGVVdGlsLnRleHR1YWxDb21wYXJlKAotCQkJCQkJb3V0RmlsZSwKLQkJCQkJCW5ldyBGaWxlKGlkZWFsUmVzdWx0RmlsZU5hbWUpLAotCQkJCQkJbmV3IEZpbGUocmVzdWx0RmlsZU5hbWUgKyAiLWRpZmYiKSk7Ci0JCQkKLQkgICBhc3NlcnRUcnVlKCJPdXRwdXQgZmlsZSBzaG91bGQgbWF0Y2ggdGhlIGV4cGVjdGVkIHJlc3VsdHMiLCAhZGlmZkZvdW5kKTsKLQotCQkKLQotCX0KLQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdXJpcmVzb2x2ZXIvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9NeVhNTENhdGFsb2dSZXNvbHZlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VyaXJlc29sdmVyL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvTXlYTUxDYXRhbG9nUmVzb2x2ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBmMTIzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdXJpcmVzb2x2ZXIvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9NeVhNTENhdGFsb2dSZXNvbHZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVyaXJlc29sdmVyLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudXRpbC5YTUxDYXRhbG9nUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMueG5pLlhNTFJlc291cmNlSWRlbnRpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE5JRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgTXlYTUxDYXRhbG9nUmVzb2x2ZXIgZXh0ZW5kcyBYTUxDYXRhbG9nUmVzb2x2ZXIgewotCi0JLyoqCi0JICogQHBhcmFtIGFyZ3MKLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotCX0KLQotCXB1YmxpYyBTdHJpbmcgcmVzb2x2ZUlkZW50aWZpZXIoWE1MUmVzb3VyY2VJZGVudGlmaWVyIHJlc291cmNlSWRlbnRpZmllcikgdGhyb3dzIElPRXhjZXB0aW9uLCBYTklFeGNlcHRpb24gewotCSAgICBTdHJpbmcgcmVzb2x2ZWRJZCA9IG51bGw7Ci0KLSAgICAgICAgLy8gVGhlIG5hbWVzcGFjZSBpcyB1c2VmdWwgZm9yIHJlc29sdmluZyBuYW1lc3BhY2UgYXdhcmUKLSAgICAgICAgLy8gZ3JhbW1hcnMgc3VjaCBhcyBYTUwgc2NoZW1hLiBMZXQgaXQgdGFrZSBwcmVjZWRlbmNlIG92ZXIKLSAgICAgICAgLy8gdGhlIGV4dGVybmFsIGlkZW50aWZpZXIgaWYgb25lIGV4aXN0cy4KLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IHJlc291cmNlSWRlbnRpZmllci5nZXROYW1lc3BhY2UoKTsKLSAgICAgICAgaWYgKG5hbWVzcGFjZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXNvbHZlZElkID0gcmVzb2x2ZVVSSShuYW1lc3BhY2UpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBSZXNvbHZlIGFnYWluc3QgYW4gZXh0ZXJuYWwgaWRlbnRpZmllciBpZiBvbmUgZXhpc3RzLiBUaGlzCi0gICAgICAgIC8vIGlzIHVzZWZ1bCBmb3IgcmVzb2x2aW5nIERURCBleHRlcm5hbCBzdWJzZXRzIGFuZCBvdGhlciAKLSAgICAgICAgLy8gZXh0ZXJuYWwgZW50aXRpZXMuIEZvciBYTUwgc2NoZW1hcyBpZiB0aGVyZSB3YXMgbm8gbmFtZXNwYWNlIAotICAgICAgICAvLyBtYXBwaW5nIHdlIG1pZ2h0IGJlIGFibGUgdG8gcmVzb2x2ZSBhIHN5c3RlbSBpZGVudGlmaWVyIAotICAgICAgICAvLyBzcGVjaWZpZWQgYXMgYSBsb2NhdGlvbiBoaW50LgotICAgICAgICBpZiAocmVzb2x2ZWRJZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBTdHJpbmcgcHVibGljSWQgPSByZXNvdXJjZUlkZW50aWZpZXIuZ2V0UHVibGljSWQoKTsKLSAgICAgICAgICAgIFN0cmluZyBzeXN0ZW1JZCA9IGdldFVzZUxpdGVyYWxTeXN0ZW1JZCgpIAotICAgICAgICAgICAgICAgID8gcmVzb3VyY2VJZGVudGlmaWVyLmdldExpdGVyYWxTeXN0ZW1JZCgpCi0gICAgICAgICAgICAgICAgOiByZXNvdXJjZUlkZW50aWZpZXIuZ2V0RXhwYW5kZWRTeXN0ZW1JZCgpOwotICAgICAgICAgICAgaWYgKHB1YmxpY0lkICE9IG51bGwgJiYgc3lzdGVtSWQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJlc29sdmVkSWQgPSByZXNvbHZlUHVibGljKHB1YmxpY0lkLCBzeXN0ZW1JZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChzeXN0ZW1JZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZWRJZCA9IHJlc29sdmVTeXN0ZW0oc3lzdGVtSWQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXNvbHZlZElkOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VyaXJlc29sdmVyL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvVmFsaWRhdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdXJpcmVzb2x2ZXIvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9WYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ2NTM5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdXJpcmVzb2x2ZXIvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9WYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudXJpcmVzb2x2ZXIudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLkRPTVBhcnNlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLlNBWFBhcnNlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy51dGlsLlhNTENhdGFsb2dSZXNvbHZlcjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRvciB7Ci0JCi0JcHVibGljIGJvb2xlYW4gdmFsaWRhdGlvbkVycm9yID0gZmFsc2U7Ci0JCi0JcHVibGljIHZvaWQgdmFsaWRhdGVXaXRoU2NoZW1hX0pBWFAoU3RyaW5nIHhtbEZpbGUsIFN0cmluZ1tdIGNhdGFsb2dzKSB7Ci0JCXRyeSB7Ci0JCQlTeXN0ZW0uc2V0UHJvcGVydHkoImphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3RvcnkiLAotCQkJCQkib3JnLmFwYWNoZS54ZXJjZXMuamF4cC5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5SW1wbCIpOwotCQkJRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQkJZmFjdG9yeS5zZXROYW1lc3BhY2VBd2FyZSh0cnVlKTsKLQkJCWZhY3Rvcnkuc2V0VmFsaWRhdGluZyh0cnVlKTsKLQkJCWZhY3Rvcnkuc2V0QXR0cmlidXRlKAotCQkJCQkiaHR0cDovL2phdmEuc3VuLmNvbS94bWwvamF4cC9wcm9wZXJ0aWVzL3NjaGVtYUxhbmd1YWdlIiwKLQkJCQkJImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIik7Ci0JCi0JCQkvLyBDcmVhdGUgY2F0YWxvZyByZXNvbHZlciBhbmQgc2V0IGEgY2F0YWxvZyBsaXN0LgotCQkJWE1MQ2F0YWxvZ1Jlc29sdmVyIHJlc29sdmVyID0gbmV3IFhNTENhdGFsb2dSZXNvbHZlcigpOwotCQkJcmVzb2x2ZXIuc2V0UHJlZmVyUHVibGljKHRydWUpOwotCQkJcmVzb2x2ZXIuc2V0Q2F0YWxvZ0xpc3QoY2F0YWxvZ3MpOwotCQkJZmFjdG9yeS5zZXRBdHRyaWJ1dGUoCi0JCQkJCSAgImh0dHA6Ly9hcGFjaGUub3JnL3htbC9wcm9wZXJ0aWVzL2ludGVybmFsL2VudGl0eS1yZXNvbHZlciIsIAotCQkJCQkgIHJlc29sdmVyKTsKLQotCQkJRG9jdW1lbnRCdWlsZGVyIGJ1aWxkZXIgPSBmYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQkJRXJyb3JIYW5kbGVyIGhhbmRsZXIgPSBuZXcgRXJyb3JIYW5kbGVyKHRoaXMpOwotCQkJYnVpbGRlci5zZXRFcnJvckhhbmRsZXIoaGFuZGxlcik7Ci0JCQlidWlsZGVyLnNldEVudGl0eVJlc29sdmVyKHJlc29sdmVyKTsKLQkJCWJ1aWxkZXIucGFyc2UoeG1sRmlsZSk7Ci0JCQkKLQkJCWlmICh2YWxpZGF0aW9uRXJyb3IgPT0gdHJ1ZSkKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlhNTCBEb2N1bWVudCBoYXMgRXJyb3I6ICIKLQkJCQkJCSsgaGFuZGxlci5zYXhQYXJzZUV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOwotCQkJZWxzZQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiWE1MIERvY3VtZW50IGlzIHZhbGlkIik7Ci0JCX0gY2F0Y2ggKGphdmEuaW8uSU9FeGNlcHRpb24gaW9lKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIklPRXhjZXB0aW9uICIgKyBpb2UuZ2V0TWVzc2FnZSgpKTsKLQkJfSBjYXRjaCAoU0FYRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU0FYRXhjZXB0aW9uICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCX0gY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uICAgICAgICAgICAgICAgICAgICAiCi0JCQkJCQkJKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQkJCi0JfQotCi0JCi0JcHVibGljIHZvaWQgdmFsaWRhdGVXaXRoU2NoZW1hX1hlcmNlc1NBWFBhcnNlcihTdHJpbmcgWG1sRG9jdW1lbnRVcmwsIFN0cmluZyBbXSBjYXRhbG9ncykgewotCQlTQVhQYXJzZXIgcGFyc2VyID0gbmV3IFNBWFBhcnNlcigpOwotCQl0cnkgewotCQkJcGFyc2VyLnNldEZlYXR1cmUoImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy92YWxpZGF0aW9uIiwgdHJ1ZSk7Ci0JCQlwYXJzZXIuc2V0RmVhdHVyZSgKLQkJCQkJImh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy92YWxpZGF0aW9uL3NjaGVtYSIsIHRydWUpOwotCQkJCi0JCQkvLwlDcmVhdGUgY2F0YWxvZyByZXNvbHZlciBhbmQgc2V0IGEgY2F0YWxvZyBsaXN0LgotCQkJWE1MQ2F0YWxvZ1Jlc29sdmVyIHJlc29sdmVyID0gbmV3IFhNTENhdGFsb2dSZXNvbHZlcigpOwotCQkJcmVzb2x2ZXIuc2V0VXNlTGl0ZXJhbFN5c3RlbUlkKHRydWUpOwotCQkJcmVzb2x2ZXIuc2V0UHJlZmVyUHVibGljKHRydWUpOwotCQkJcmVzb2x2ZXIuc2V0Q2F0YWxvZ0xpc3QoY2F0YWxvZ3MpOwotCQkJCi0JCQkvLwlTZXQgdGhlIHJlc29sdmVyIG9uIHRoZSBwYXJzZXIuCi0JCQlwYXJzZXIuc2V0UHJvcGVydHkoImh0dHA6Ly9hcGFjaGUub3JnL3htbC9wcm9wZXJ0aWVzL2ludGVybmFsL2VudGl0eS1yZXNvbHZlciIsIAotCQkJCQkgIHJlc29sdmVyKTsKLQotCQkJRXJyb3JIYW5kbGVyIGhhbmRsZXIgPSBuZXcgRXJyb3JIYW5kbGVyKHRoaXMpOwotCQkJcGFyc2VyLnNldEVycm9ySGFuZGxlcihoYW5kbGVyKTsKLQkJCQotCQkJcGFyc2VyLnBhcnNlKFhtbERvY3VtZW50VXJsKTsKLQkJCWlmICh2YWxpZGF0aW9uRXJyb3IgPT0gdHJ1ZSl7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJYTUwgRG9jdW1lbnQgaGFzIEVycm9yOiAiCi0JCQkJCQkrIGhhbmRsZXIuc2F4UGFyc2VFeGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKLQkJCQl0aHJvdyAgaGFuZGxlci5zYXhQYXJzZUV4Y2VwdGlvbjsKLQkJCX0KLQkJCWVsc2V7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJYTUwgRG9jdW1lbnQgaXMgdmFsaWQiKTsKLQkJCX0KLQkJCQkKLQkJfSBjYXRjaCAoamF2YS5pby5JT0V4Y2VwdGlvbiBpb2UpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiSU9FeGNlcHRpb24gIiArIGlvZS5nZXRNZXNzYWdlKCkpOwotCQl9IGNhdGNoIChTQVhFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTQVhFeGNlcHRpb24gIiArIGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB2YWxpZGF0ZVdpdGhTY2hlbWFfWGVyY2VzRE9NUGFyc2VyKFN0cmluZyBYbWxEb2N1bWVudFVybCwgU3RyaW5nIFtdIGNhdGFsb2dzKSB7Ci0JCURPTVBhcnNlciBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7Ci0JCXRyeSB7Ci0JCQlwYXJzZXIuc2V0RmVhdHVyZSgiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL3ZhbGlkYXRpb24iLCB0cnVlKTsKLQkJCXBhcnNlci5zZXRGZWF0dXJlKAotCQkJCQkiaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL3ZhbGlkYXRpb24vc2NoZW1hIiwgdHJ1ZSk7Ci0JCQkKLQkJCS8vCUNyZWF0ZSBjYXRhbG9nIHJlc29sdmVyIGFuZCBzZXQgYSBjYXRhbG9nIGxpc3QuCi0JCQlYTUxDYXRhbG9nUmVzb2x2ZXIgcmVzb2x2ZXIgPSBuZXcgWE1MQ2F0YWxvZ1Jlc29sdmVyKCk7Ci0JCQlyZXNvbHZlci5zZXRVc2VMaXRlcmFsU3lzdGVtSWQodHJ1ZSk7Ci0JCQlyZXNvbHZlci5zZXRQcmVmZXJQdWJsaWModHJ1ZSk7Ci0JCQlyZXNvbHZlci5zZXRDYXRhbG9nTGlzdChjYXRhbG9ncyk7Ci0JCQkKLQkJCS8vCVNldCB0aGUgcmVzb2x2ZXIgb24gdGhlIHBhcnNlci4KLQkJCXBhcnNlci5zZXRQcm9wZXJ0eSgiaHR0cDovL2FwYWNoZS5vcmcveG1sL3Byb3BlcnRpZXMvaW50ZXJuYWwvZW50aXR5LXJlc29sdmVyIiwgCi0JCQkJCSAgcmVzb2x2ZXIpOwotCi0JCQlFcnJvckhhbmRsZXIgaGFuZGxlciA9IG5ldyBFcnJvckhhbmRsZXIodGhpcyk7Ci0JCQlwYXJzZXIuc2V0RXJyb3JIYW5kbGVyKGhhbmRsZXIpOwotCQkJCi0JCQlwYXJzZXIucGFyc2UoWG1sRG9jdW1lbnRVcmwpOwotCQkJaWYgKHZhbGlkYXRpb25FcnJvciA9PSB0cnVlKXsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlhNTCBEb2N1bWVudCBoYXMgRXJyb3I6ICIKLQkJCQkJCSsgaGFuZGxlci5zYXhQYXJzZUV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOwotCQkJCXRocm93ICBoYW5kbGVyLnNheFBhcnNlRXhjZXB0aW9uOwotCQkJfQotCQkJZWxzZXsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlhNTCBEb2N1bWVudCBpcyB2YWxpZCIpOwotCQkJfQotCQkJCQotCQl9IGNhdGNoIChqYXZhLmlvLklPRXhjZXB0aW9uIGlvZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJJT0V4Y2VwdGlvbiAiICsgaW9lLmdldE1lc3NhZ2UoKSk7Ci0JCX0gY2F0Y2ggKFNBWEV4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNBWEV4Y2VwdGlvbiAiICsgZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBjbGFzcyBFcnJvckhhbmRsZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlciB7Ci0KLQkJVmFsaWRhdG9yIHZhbGlkYXRvcjsKLQotCQlwdWJsaWMgU0FYUGFyc2VFeGNlcHRpb24gc2F4UGFyc2VFeGNlcHRpb24gPSBudWxsOwotCi0JCXB1YmxpYyBFcnJvckhhbmRsZXIoVmFsaWRhdG9yIHZhbGlkYXRvcikgewotCQkJc3VwZXIoKTsKLQkJCXRoaXMudmFsaWRhdG9yID0gdmFsaWRhdG9yOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgZXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gZXhjZXB0aW9uKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJCXZhbGlkYXRpb25FcnJvciA9IHRydWU7Ci0JCQlzYXhQYXJzZUV4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGZhdGFsRXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gZXhjZXB0aW9uKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJCXZhbGlkYXRpb25FcnJvciA9IHRydWU7Ci0JCQlzYXhQYXJzZUV4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHdhcm5pbmcoU0FYUGFyc2VFeGNlcHRpb24gZXhjZXB0aW9uKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJfQotCX0KLQotCQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91cmlyZXNvbHZlci92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1ZhbGlkYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91cmlyZXNvbHZlci92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1ZhbGlkYXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI4NGNhZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdXJpcmVzb2x2ZXIvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9WYWxpZGF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVyaXJlc29sdmVyLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsLlRlc3RQbHVnaW47Ci0KLS8qKgotICogVG8gcnVuIHRoaXMgdGVzdCBuZWVkIHRvIGFkZCByZXNvbHZlci5qYXIgdG8gdGhlIGNsYXNzcGF0aC4KLSAqIFJ1biBhcyBKVW5pdCBQbHVnaW4gdGVzdDoKLSAqIC0gcHV0IHJlc29sdmVyLmphciBvbiB0aGUgYm9vdCBjbGFzcyBwYXRoCi0gKiAtIGFkZCBWTSBhcmd1bWVudDoKLSAqIAotICogLVhib290Y2xhc3NwYXRoL3A6PGluc3RhbGwgbG9jYXRpb24+XGpyZVxsaWJcZXh0XHJlc29sdmVyLmphcgotICoKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0b3JUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCQotCVZhbGlkYXRvciB2YWxpZGF0b3IgPSBudWxsOwotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJdmFsaWRhdG9yID0gbmV3IFZhbGlkYXRvcigpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JfQotCi0JcHVibGljIFZhbGlkYXRvclRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCQotCQotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0aW5nWGVyY2VzU0FYUGFyc2VyMSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyB4bWxGaWxlID0gIi9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLXNjaGVtYS54bWwiOwotCQl4bWxGaWxlID0gVGVzdFBsdWdpbi5yZXNvbHZlUGx1Z2luTG9jYXRpb24oeG1sRmlsZSk7Ci0JCQotCQlTdHJpbmcgY2F0YWxvZ0ZpbGUgPSAiL2RhdGEvY2F0YWxvZzIueG1sIjsKLQkJY2F0YWxvZ0ZpbGUgPSBUZXN0UGx1Z2luLnJlc29sdmVQbHVnaW5Mb2NhdGlvbihjYXRhbG9nRmlsZSk7Ci0JCQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLSIgKyB0aGlzLmdldE5hbWUoKSArICItLS0tLS0tLS0iKTsKLQkJdmFsaWRhdG9yLnZhbGlkYXRlV2l0aFNjaGVtYV9YZXJjZXNTQVhQYXJzZXIoeG1sRmlsZSwgbmV3IFN0cmluZ1tde2NhdGFsb2dGaWxlfSk7Ci0JCWFzc2VydEZhbHNlKHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGluZ1hlcmNlc1NBWFBhcnNlcjIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgeG1sRmlsZSA9ICIvZGF0YS9leGFtcGxlL2V4YW1wbGUtc2NoZW1hLnhtbCI7Ci0JCXhtbEZpbGUgPSBUZXN0UGx1Z2luLnJlc29sdmVQbHVnaW5Mb2NhdGlvbih4bWxGaWxlKTsKLQkJCi0JCVN0cmluZyBjYXRhbG9nRmlsZSA9ICIvZGF0YS9leGFtcGxlLWNhdGFsb2cueG1sIjsKLQkJY2F0YWxvZ0ZpbGUgPSBUZXN0UGx1Z2luLnJlc29sdmVQbHVnaW5Mb2NhdGlvbihjYXRhbG9nRmlsZSk7Ci0JCQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLSIgKyB0aGlzLmdldE5hbWUoKSArICItLS0tLS0tLS0iKTsKLQkJdmFsaWRhdG9yLnZhbGlkYXRlV2l0aFNjaGVtYV9YZXJjZXNTQVhQYXJzZXIoeG1sRmlsZSwgbmV3IFN0cmluZ1tde2NhdGFsb2dGaWxlfSk7Ci0JCWFzc2VydEZhbHNlKHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWF0aW5nWGVyY2VzU0FYUGFyc2VyMygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyB4bWxGaWxlID0gIi9kYXRhL2V4YW1wbGUvZXhhbXBsZS1zY2hlbWEtbm9uYW1lc3BhY2UueG1sIjsKLQkJeG1sRmlsZSA9IFRlc3RQbHVnaW4ucmVzb2x2ZVBsdWdpbkxvY2F0aW9uKHhtbEZpbGUpOwotCQkKLQkJU3RyaW5nIGNhdGFsb2dGaWxlID0gIi9kYXRhL2V4YW1wbGUtY2F0YWxvZy54bWwiOwotCQljYXRhbG9nRmlsZSA9IFRlc3RQbHVnaW4ucmVzb2x2ZVBsdWdpbkxvY2F0aW9uKGNhdGFsb2dGaWxlKTsKLQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tIiArIHRoaXMuZ2V0TmFtZSgpICsgIi0tLS0tLS0tLSIpOwotCQl2YWxpZGF0b3IudmFsaWRhdGVXaXRoU2NoZW1hX1hlcmNlc1NBWFBhcnNlcih4bWxGaWxlLCBuZXcgU3RyaW5nW117Y2F0YWxvZ0ZpbGV9KTsKLQkJYXNzZXJ0RmFsc2UodmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0aW5nWGVyY2VzRE9NUGFyc2VyMSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyB4bWxGaWxlID0gIi9kYXRhL2V4YW1wbGUvZXhhbXBsZS1zY2hlbWEtbm9uYW1lc3BhY2UueG1sIjsKLQkJeG1sRmlsZSA9IFRlc3RQbHVnaW4ucmVzb2x2ZVBsdWdpbkxvY2F0aW9uKHhtbEZpbGUpOwotCQkKLQkJU3RyaW5nIGNhdGFsb2dGaWxlID0gIi9kYXRhL2V4YW1wbGUtY2F0YWxvZy54bWwiOwotCQljYXRhbG9nRmlsZSA9IFRlc3RQbHVnaW4ucmVzb2x2ZVBsdWdpbkxvY2F0aW9uKGNhdGFsb2dGaWxlKTsKLQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tIiArIHRoaXMuZ2V0TmFtZSgpICsgIi0tLS0tLS0tLSIpOwotCQl2YWxpZGF0b3IudmFsaWRhdGVXaXRoU2NoZW1hX1hlcmNlc0RPTVBhcnNlcih4bWxGaWxlLCBuZXcgU3RyaW5nW117Y2F0YWxvZ0ZpbGV9KTsKLQkJYXNzZXJ0RmFsc2UodmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0aW5nSkFYUFBhcnNlcjEoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgeG1sRmlsZSA9ICIvZGF0YS9leGFtcGxlL2V4YW1wbGUtc2NoZW1hLnhtbCI7Ci0JCXhtbEZpbGUgPSBUZXN0UGx1Z2luLnJlc29sdmVQbHVnaW5Mb2NhdGlvbih4bWxGaWxlKTsKLQkJCi0JCVN0cmluZyBjYXRhbG9nRmlsZSA9ICIvZGF0YS9leGFtcGxlLWNhdGFsb2cueG1sIjsKLQkJY2F0YWxvZ0ZpbGUgPSBUZXN0UGx1Z2luLnJlc29sdmVQbHVnaW5Mb2NhdGlvbihjYXRhbG9nRmlsZSk7Ci0JCQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLSIgKyB0aGlzLmdldE5hbWUoKSArICItLS0tLS0tLS0iKTsKLQkJdmFsaWRhdG9yLnZhbGlkYXRlV2l0aFNjaGVtYV9KQVhQKHhtbEZpbGUsIG5ldyBTdHJpbmdbXXtjYXRhbG9nRmlsZX0pOwkKLQkJYXNzZXJ0RmFsc2UodmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0aW9uV2l0aEltcG9ydGVkQW5kSW5jbHVkZWRTY2hlbWExKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHhtbEZpbGUgPSAiL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydF8ueG1sIjsKLQkJeG1sRmlsZSA9IFRlc3RQbHVnaW4ucmVzb2x2ZVBsdWdpbkxvY2F0aW9uKHhtbEZpbGUpOwotCQkKLQkJU3RyaW5nIGNhdGFsb2dGaWxlID0gIi9kYXRhL3JlcG9ydC1jYXRhbG9nX3N5c3RlbS54bWwiOwotCQljYXRhbG9nRmlsZSA9IFRlc3RQbHVnaW4ucmVzb2x2ZVBsdWdpbkxvY2F0aW9uKGNhdGFsb2dGaWxlKTsKLQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tIiArIHRoaXMuZ2V0TmFtZSgpICsgIi0tLS0tLS0tLSIpOwotCQl2YWxpZGF0b3IudmFsaWRhdGVXaXRoU2NoZW1hX1hlcmNlc0RPTVBhcnNlcih4bWxGaWxlLCBuZXcgU3RyaW5nW117Y2F0YWxvZ0ZpbGV9KTsKLQkJLy8gSW5jbHVkZWQgc2NoZW1hIHdpbGwgYmUgcmVzb2x2ZWQKLQkJYXNzZXJ0RmFsc2UodmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0aW9uV2l0aEltcG9ydGVkQW5kSW5jbHVkZWRTY2hlbWEyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHhtbEZpbGUgPSAiL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydF8ueG1sIjsKLQkJeG1sRmlsZSA9IFRlc3RQbHVnaW4ucmVzb2x2ZVBsdWdpbkxvY2F0aW9uKHhtbEZpbGUpOwotCQkKLQkJU3RyaW5nIGNhdGFsb2dGaWxlID0gIi9kYXRhL3JlcG9ydC1jYXRhbG9nX3B1YmxpYy54bWwiOwotCQljYXRhbG9nRmlsZSA9IFRlc3RQbHVnaW4ucmVzb2x2ZVBsdWdpbkxvY2F0aW9uKGNhdGFsb2dGaWxlKTsKLQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tIiArIHRoaXMuZ2V0TmFtZSgpICsgIi0tLS0tLS0tLSIpOwotCQl2YWxpZGF0b3IudmFsaWRhdGVXaXRoU2NoZW1hX1hlcmNlc0RPTVBhcnNlcih4bWxGaWxlLCBuZXcgU3RyaW5nW117Y2F0YWxvZ0ZpbGV9KTsKLQkJLy8gSW5jbHVkZWQgc2NoZW1hIHdpbGwgbm90IGJlIHJlc29sdmVkCi0JCWFzc2VydFRydWUodmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0aW9uV2l0aEltcG9ydGVkQW5kSW5jbHVkZWRTY2hlbWEzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHhtbEZpbGUgPSAiL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydF8ueG1sIjsKLQkJeG1sRmlsZSA9IFRlc3RQbHVnaW4ucmVzb2x2ZVBsdWdpbkxvY2F0aW9uKHhtbEZpbGUpOwotCQkKLQkJU3RyaW5nIGNhdGFsb2dGaWxlID0gIi9kYXRhL3JlcG9ydC1jYXRhbG9nX21hcHBlZGluY2x1ZGVkLnhtbCI7Ci0JCWNhdGFsb2dGaWxlID0gVGVzdFBsdWdpbi5yZXNvbHZlUGx1Z2luTG9jYXRpb24oY2F0YWxvZ0ZpbGUpOwotCQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0iICsgdGhpcy5nZXROYW1lKCkgKyAiLS0tLS0tLS0tIik7Ci0JCXZhbGlkYXRvci52YWxpZGF0ZVdpdGhTY2hlbWFfWGVyY2VzRE9NUGFyc2VyKHhtbEZpbGUsIG5ldyBTdHJpbmdbXXtjYXRhbG9nRmlsZX0pOwotCQkvLyBJbmNsdWRlZCBzY2hlbWEgd2lsbCBub3QgYmUgcmVzb2x2ZWQKLQkJYXNzZXJ0VHJ1ZSh2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRpb25XaXRoSW1wb3J0ZWRTY2hlbWFOb0NhdGFsb2coKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgeG1sRmlsZSA9ICIvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0LnhtbCI7Ci0JCXhtbEZpbGUgPSBUZXN0UGx1Z2luLnJlc29sdmVQbHVnaW5Mb2NhdGlvbih4bWxGaWxlKTsKLQkJCi0JCVN0cmluZyBjYXRhbG9nRmlsZSA9ICIiOwotCQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0iICsgdGhpcy5nZXROYW1lKCkgKyAiLS0tLS0tLS0tIik7Ci0JCXZhbGlkYXRvci52YWxpZGF0ZVdpdGhTY2hlbWFfWGVyY2VzRE9NUGFyc2VyKHhtbEZpbGUsIG5ldyBTdHJpbmdbXXtjYXRhbG9nRmlsZX0pOwotCQlhc3NlcnRGYWxzZSh2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yKTsKLQl9Ci0JCi0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjM4NGMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InJ1biIgYmFzZWRpcj0iLiI+Ci0KLSAgPCEtLSBDb25maWd1cmFibGUgUHJvcGVydGllcyAtLT4KLQotICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgZWNsaXBzZS1ob21lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMiLz4KLQotICA8IS0tIEVuZCBDb25maWd1cmFibGUgUHJvcGVydGllcyAtLT4KLQotICA8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICA8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotICA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIvPgotICA8cHJvcGVydHkgbmFtZT0iYnZ0d29ya3NwYWNlIiB2YWx1ZT0iJHtiYXNlZGlyfSIvPgotICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIvPgotICA8cHJvcGVydHkgbmFtZT0id29ya3NwYWNlLWZvbGRlciIgdmFsdWU9IiR7YnZ0d29ya3NwYWNlfS8ke3BsdWdpbi1uYW1lfSIvPgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgPHRzdGFtcC8+Ci0gICAgIDxkZWxldGU+Ci0gICAgICAgPGZpbGVzZXQgZGlyPSIke2VjbGlwc2UtaG9tZX0iIGluY2x1ZGVzPSJvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuKi54bWwiLz4KLSAgICA8L2RlbGV0ZT4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICA8IS0tIFN0YXJ0IHdpdGggY2xlYW4gZGF0YSB3b3Jrc3BhY2UgLS0+ICAKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2UtZm9sZGVyfSIgcXVpZXQ9InRydWUiLz4KLQotICAgIDxhbnQgdGFyZ2V0PSJjb3JlLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2UtZm9sZGVyfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWwuQWxsVGVzdHMiLz4KLSAgICA8L2FudD4KLQotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlLWZvbGRlcn0iIHF1aWV0PSJ0cnVlIi8+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICA8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMqLnhtbCIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIi8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTFjOGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ0ZWE1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi1zc2Vtb2RlbHhtbHRlc3RzLmphcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWZmYmE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPjwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkOGI1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6Mzc6MjEgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFjNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyNDk1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjA1OjI5IEVEVCAyMDA2Ci1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU5NjNlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMAotQnVuZGxlLUNsYXNzUGF0aDogc3NlbW9kZWx4bWx0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5TU0VNb2RlbFhNTFRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNvbnRlbnRtb2RlbCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvbSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZm9ybWF0LAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5mb3JtYXQudGVzdGZpbGVzLnhtbCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWwsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnRleHQsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnRleHQudGVzdGZpbGVzLnhtbCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbAotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmp1bml0LAotIG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UudWkuaWRlLAotIG9yZy5lY2xpcHNlLnRleHQsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLAotIGNvbS5pYm0uaWN1Ci1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVjNTk4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPk1heSAyLCAyMDA2PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhZTkyNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotc291cmNlLnNzZW1vZGVseG1sdGVzdHMuamFyID0gc3JjLwotb3V0cHV0LnNzZW1vZGVseG1sdGVzdHMuamFyID0gYmluLwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBzc2Vtb2RlbHhtbHRlc3RzLmphcixcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICB0ZXN0ZmlsZXMuemlwLFwKLSAgICAgICAgICAgICAgIHByb2plY3R0ZXN0ZmlsZXMvLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4MDhhNWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlLm9yZwotQnVuZGxlLU5hbWUuMCA9IFNTRSBNb2RlbCBYTUwgVGVzdHMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2YxYThjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnRUeXBlcyI+Ci0JCTwhLS0gYXNzb2NpYXRlIC5mcmFneCBmaWxlcyB3aXRoIHRoZSBYTUwgY29udGVudCB0eXBlIC0tPgotCQk8ZmlsZS1hc3NvY2lhdGlvbgotCQkJY29udGVudC10eXBlPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIgotCQkJZmlsZS1leHRlbnNpb25zPSJmcmFneCIgLz4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24KLQkJaWQ9IlRlc3QiCi0JCXBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYXBwbGljYXRpb25zIj4KLQkJPGFwcGxpY2F0aW9uPgotCQkJPHJ1bgotCQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuY29udGVudG1vZGVsLkNNVmlzaXRvclRlc3QiIC8+Ci0JCTwvYXBwbGljYXRpb24+Ci0JPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMveG1sLWRvY3VtZW50LWxvYWRlci10ZXN0cy56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy94bWwtZG9jdW1lbnQtbG9hZGVyLXRlc3RzLnppcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgzYWQ2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy94bWwtZG9jdW1lbnQtbG9hZGVyLXRlc3RzLnppcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL0xvZ2dlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMmM0MDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogU21hbGwgY29udmVuaWVuY2UgY2xhc3MgdG8gbG9nIG1lc3NhZ2VzIHRvIHBsdWdpbidzIGxvZyBmaWxlIGFuZCBhbHNvLCBpZiBkZXNpcmVkLAotICogdGhlIGNvbnNvbGUuIFRoaXMgY2xhc3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBjbGFzc2VzIGluIHRoaXMgcGx1Z2luLiBPdGhlcgotICogcGx1Z2lucyBzaG91bGQgbWFrZSB0aGVpciBvd24gY29weSwgd2l0aCBhcHByb3ByaWF0ZSBJRC4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNFRklMVEVSX0xPQ0FUSU9OID0gIi9kZWJ1Zy90cmFjZWZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gSVN0YXR1cy5PSzsgLy8gMAotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk8gPSBJU3RhdHVzLklORk87IC8vIDEKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gSVN0YXR1cy5XQVJOSU5HOyAvLyAyCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSBJU3RhdHVzLkVSUk9SOyAvLyA0Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19ERUJVRyA9IDIwMCArIE9LOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fREVCVUcgPSAyMDAgKyBJTkZPOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkdfREVCVUcgPSAyMDAgKyBXQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RFQlVHID0gMjAwICsgRVJST1I7Ci0KLQkvKioKLQkgKiBBZGRzIG1lc3NhZ2UgdG8gbG9nLgotCSAqIEBwYXJhbSBsZXZlbCBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoT0ssIElORk8sIFdBUk5JTkcsIEVSUk9SLCBPS19ERUJVRywgSU5GT19ERUJVRywgV0FSTklOR19ERUJVRywgRVJST1JfREVCVUcpCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBhZGQgdG8gdGhlIGxvZwotCSAqIEBwYXJhbSBleGNlcHRpb24gZXhjZXB0aW9uIHRocm93bgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGxldmVsID09IE9LX0RFQlVHIHx8IGxldmVsID09IElORk9fREVCVUcgfHwgbGV2ZWwgPT0gV0FSTklOR19ERUJVRyB8fCBsZXZlbCA9PSBFUlJPUl9ERUJVRykgewotCQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJCXJldHVybjsKLQkJfQotCi0JCWludCBzZXZlcml0eSA9IElTdGF0dXMuT0s7Ci0JCXN3aXRjaCAobGV2ZWwpIHsKLQkJCWNhc2UgSU5GT19ERUJVRyA6Ci0JCQljYXNlIElORk8gOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5JTkZPOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXQVJOSU5HX0RFQlVHIDoKLQkJCWNhc2UgV0FSTklORyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLldBUk5JTkc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEVSUk9SX0RFQlVHIDoKLQkJCWNhc2UgRVJST1IgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5FUlJPUjsKLQkJfQotCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKHNldmVyaXR5LCBQTFVHSU5fSUQsIHNldmVyaXR5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQotCX0KLQotCS8qKgotCSAqIFByaW50cyBtZXNzYWdlIHRvIGxvZyBpZiBjYXRlZ29yeSBtYXRjaGVzIC9kZWJ1Zy90cmFjZWZpbHRlciBvcHRpb24uCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBwcmludAotCSAqIEBwYXJhbSBjYXRlZ29yeSBjYXRlZ29yeSBvZiB0aGUgbWVzc2FnZSwgdG8gYmUgY29tcGFyZWQgd2l0aCAvZGVidWcvdHJhY2VmaWx0ZXIKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX3RyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGlzVHJhY2luZyhjYXRlZ29yeSkpIHsKLQkJCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFBMVUdJTl9JRCwgSVN0YXR1cy5PSywgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0KLQkJfQotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gaXMgZGVidWdnaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRGVidWdnaW5nKCkgewotCQlyZXR1cm4gUGxhdGZvcm0uaW5EZWJ1Z01vZGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmVzIGlmIGN1cnJlbnRseSB0cmFjaW5nIGEgY2F0ZWdvcnkKLQkgKiBAcGFyYW0gY2F0ZWdvcnkKLQkgKiBAcmV0dXJuIHRydWUgaWYgdHJhY2luZyBjYXRlZ29yeSwgZmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzVHJhY2luZyhTdHJpbmcgY2F0ZWdvcnkpIHsKLQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyB0cmFjZUZpbHRlciA9IFBsYXRmb3JtLmdldERlYnVnT3B0aW9uKFBMVUdJTl9JRCArIFRSQUNFRklMVEVSX0xPQ0FUSU9OKTsKLQkJaWYgKHRyYWNlRmlsdGVyICE9IG51bGwpIHsKLQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHRyYWNlRmlsdGVyLCAiLCIpOyAvLyROT04tTkxTLTEkCi0JCQl3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCVN0cmluZyBjYXQgPSB0b2tlbml6ZXIubmV4dFRva2VuKCkudHJpbSgpOwotCQkJCWlmIChjYXRlZ29yeS5lcXVhbHMoY2F0KSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSkgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL1NTRU1vZGVsWE1MVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9TU0VNb2RlbFhNTFRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGRiYTEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL1NTRU1vZGVsWE1MVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuY29udGVudG1vZGVsLlRlc3RDYXRhbG9nUmV0cml2YWxBbmRNb2RlbENyZWF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb2N1bWVudC5HZXREb2N1bWVudFJlZ2lvbnNUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb2N1bWVudC5UZXN0U3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb2N1bWVudC5UZXN0WE1MRG9jdW1lbnRMb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50LlRyYW5zaXRpb25UZXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9tLk5hbWVWYWxpZGF0b3JUZXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZm9ybWF0LlRlc3RGb3JtYXRQcm9jZXNzb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsLlRlc3RNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsLlRlc3RNb2RlbHNGcm9tRmlsZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsLlRlc3RTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsLlRlc3RYTUxNb2RlbExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudGV4dC5UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyWE1MOwotCi0KLQotcHVibGljIGNsYXNzIFNTRU1vZGVsWE1MVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgU1NFTW9kZWxYTUxUZXN0U3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgU1NFTW9kZWxYTUxUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJUZXN0IFN1aXRlIGZvciBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMiKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RNb2RlbHNGcm9tRmlsZXMuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RYTUxNb2RlbExvYWRlci5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFhNTERvY3VtZW50TG9hZGVyLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0U3RydWN0dXJlZERvY3VtZW50LmNsYXNzKSk7Ci0JCQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdE1vZGVsTWFuYWdlci5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFN0cnVjdHVyZWRNb2RlbC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lclhNTC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoTmFtZVZhbGlkYXRvclRlc3RzLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUcmFuc2l0aW9uVGVzdHMuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFhNTENvcmVQcmVmZXJlbmNlc1Rlc3QuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RDYXRhbG9nUmV0cml2YWxBbmRNb2RlbENyZWF0aW9uLmNsYXNzKSk7Ci0JCQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoR2V0RG9jdW1lbnRSZWdpb25zVGVzdC5jbGFzcykpOwotCi0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Rm9ybWF0UHJvY2Vzc29yWE1MLmNsYXNzKSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL1NTRU1vZGVsWE1MVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL1NTRU1vZGVsWE1MVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNiYmM0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9TU0VNb2RlbFhNTFRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBTU0VNb2RlbFhNTFRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgU1NFTW9kZWxYTUxUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFNTRU1vZGVsWE1MVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU1NFTW9kZWxYTUxUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJcmV0dXJuIGtleTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFVSTCBnZXRJbnN0YWxsTG9jYXRpb24oKSB7Ci0JCVVSTCBpbnN0YWxsTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cyIpLmdldEVudHJ5KCIvIik7Ci0JCVVSTCByZXNvbHZlZExvY2F0aW9uID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc29sdmVkTG9jYXRpb24gPSBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbGxMb2NhdGlvbik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUKLQkJCXRocm93IG5ldyBFcnJvcihlKTsKLQkJfQotCQlyZXR1cm4gcmVzb2x2ZWRMb2NhdGlvbjsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgZ2V0VGVzdEZpbGUoU3RyaW5nIGZpbGVwYXRoKSB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIGZpbGVwYXRoOwotCQlGaWxlIHJlc3VsdCA9IG5ldyBGaWxlKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvWE1MQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvWE1MQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTEzZjE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL1hNTENvcmVQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuRGVmYXVsdFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JRWNsaXBzZVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JbnN0YW5jZVNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29udGVudEJhc2VkUHJlZmVyZW5jZUdhdGV3YXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbnRlbnRUeXBlRW5jb2RpbmdQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUVuY29kZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuWE1MQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuWE1MRG9jdW1lbnRMb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlhNTENvcmVQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5vc2dpLnNlcnZpY2UucHJlZnMuUHJlZmVyZW5jZXM7Ci0KLS8qKgotICogVGhlIHB1cnBvc2Ugb2YgdGhpcyB0ZXN0IGlzIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgdGhlIFhNTCBTb3VyY2UgZWRpdG9yCi0gKiBwcmVmZXJlbmNlcy4gVGVzdHMgaW5jbHVkZSBzZXR0aW5nL2dldHRpbmcgcHJlZmVyZW5jZXMuCi0gKiAKLSAqIE5PVEU6IFRoaXMgdGVzdCBzaG91bGQgYmUgcHJlZm9ybWVkIG9uIGEgY2xlYW4gd29ya3NwYWNlLiBJZiBwZXJmb3JtZWQgb24KLSAqIGFuIGV4aXN0aW5nIHdvcmtzcGFjZSwgdGhpcyB0ZXN0IHdpbGwgbWFuaXB1bGF0ZSBwcmVmZXJlbmNlcyBpbiB0aGUKLSAqIHdvcmtzcGFjZSwgdGhvdWdoIGF0dGVtcHRzIHdpbGwgYmUgbWFkZSB0byByZXN0b3JlIG9yaWdpbmFsIHZhbHVlcyBhZnRlcgotICogdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIFhNTENvcmVQcmVmZXJlbmNlc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqCi0JICogVGVzdHMgZXhpc3RhbmNlIG9mIHByZWZlcmVuY2UgdmFsdWVzIHdoZW4gZ2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcwotCSAqIHRocm91Z2ggUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QnVuZGxlR2V0UHJlZmVyZW5jZXMoKSB7Ci0JCWZpbmFsIFN0cmluZyBidW5kbGVOYW1lID0gIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZSI7Ci0KLQkJLy8gbmVlZCB0byBzdGFydCB1cCBidW5kbGUgZm9yIGRlZmF1bHQgdmFsdWVzIHRvIGJlIGxvYWRlZAotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGJ1bmRsZU5hbWUpOwotCQl0cnkgewotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKQotCQkJCWJ1bmRsZS5zdGFydCgpOwotCQkJZWxzZQotCQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIGNvdWxkIG5vdCBmaW5kIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUpOwotCQl9Ci0JCWNhdGNoIChCdW5kbGVFeGNlcHRpb24gZSkgewotCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2Ugb2YgZXhjZXB0aW9uIHN0YXJ0aW5nIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUgKyAiIGV4Y2VwdGlvbjogIiArIGUpOwotCQl9Ci0KLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBYTUxDb3JlUHJlZmVyZW5jZU5hbWVzLklOREVOVEFUSU9OX1NJWkUpOwotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIFhNTENvcmVQcmVmZXJlbmNlTmFtZXMuTElORV9XSURUSCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1bmRsZUdldFByZWZlcmVuY2UoU3RyaW5nIGJ1bmRsZU5hbWUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCWludCBkZWZhdWx0VmFsdWUgPSAtMTsKLQotCQlpbnQgdmFsdWUgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKS5nZXRJbnQoYnVuZGxlTmFtZSwgcHJlZktleSwgZGVmYXVsdFZhbHVlLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZSgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZS4gS2V5OiAiICsgcHJlZktleSwgZGVmYXVsdFZhbHVlICE9IHZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBkZWZhdWx0IHZhbHVlcyBvZiBwcmVmZXJlbmNlcy4KLQkgKiAKLQkgKiBOT1RFOiBFeHBlY3RlZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFyZC1jb2RlZCwgc28gaWYgZGVmYXVsdCB2YWx1ZXMgZG8KLQkgKiBnZXQgY2hhbmdlZCwgYXNzZXJ0aW9ucyBuZWVkIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZXMoKSB7Ci0JCUlFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSA9IG5ldyBEZWZhdWx0U2NvcGUoKS5nZXROb2RlKFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpKTsKLQotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShub2RlLCBYTUxDb3JlUHJlZmVyZW5jZU5hbWVzLlNQTElUX01VTFRJX0FUVFJTLCBCb29sZWFuLnRvU3RyaW5nKGZhbHNlKSk7Ci0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKG5vZGUsIFhNTENvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fQ0hBUiwgWE1MQ29yZVByZWZlcmVuY2VOYW1lcy5UQUIpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUsIFN0cmluZyBwcmVmS2V5LCBTdHJpbmcgZXhwZWN0ZWQpIHsKLQkJU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IExvbmcudG9TdHJpbmcoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOyAvLyByYW5kb20KLQkJLy8gc3RyaW5nCi0KLQkJU3RyaW5nIHRoZURlZmF1bHRWYWx1ZSA9IG5vZGUuZ2V0KHByZWZLZXksIGRlZmF1bHRWYWx1ZSk7Ci0JCWFzc2VydEVxdWFscygiR2V0IGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSwgZXhwZWN0ZWQsIHRoZURlZmF1bHRWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcyBieSBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWUgdG8gYmUgYQotCSAqIGNlcnRhaW4gdmFsdWUsIHRoZW4gZ2V0dGluZyB0aGUgcHJlZmVyZW5jZSB2YWx1ZSB0byB2ZXJpZnkgaXQgd2FzIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luU2V0UHJlZmVyZW5jZXMoKSB7Ci0JCUlFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSA9IG5ldyBJbnN0YW5jZVNjb3BlKCkuZ2V0Tm9kZShYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSk7Ci0KLQkJcGx1Z2luU2V0UHJlZmVyZW5jZUJvb2xlYW4obm9kZSwgWE1MQ29yZVByZWZlcmVuY2VOYW1lcy5DTEVBUl9BTExfQkxBTktfTElORVMpOwotCQlwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKG5vZGUsIFhNTENvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fQ0hBUik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJYm9vbGVhbiBvcmlnaW5hbFZhbHVlID0gZmFsc2U7Ci0JCWJvb2xlYW4gZXhwZWN0ZWRWYWx1ZSA9IHRydWU7Ci0KLQkJU3RyaW5nIG9yaWdpbmFsU3RyaW5nID0gbm9kZS5nZXQocHJlZktleSwgImJvZ3VzIik7Ci0JCWlmICghImJvZ3VzIi5lcXVhbHMob3JpZ2luYWxTdHJpbmcpKSB7Ci0JCQlvcmlnaW5hbFZhbHVlID0gQm9vbGVhbi52YWx1ZU9mKG9yaWdpbmFsU3RyaW5nKS5ib29sZWFuVmFsdWUoKTsKLQkJCWV4cGVjdGVkVmFsdWUgPSAhb3JpZ2luYWxWYWx1ZTsKLQkJfQotCQlub2RlLnB1dEJvb2xlYW4ocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCWJvb2xlYW4gZm91bmRWYWx1ZSA9IG5vZGUuZ2V0Qm9vbGVhbihwcmVmS2V5LCB0cnVlKTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSArICIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlpZiAoImJvZ3VzIi5lcXVhbHMob3JpZ2luYWxTdHJpbmcpKQotCQkJbm9kZS5yZW1vdmUocHJlZktleSk7Ci0JCWVsc2UKLQkJCW5vZGUucHV0KHByZWZLZXksIG9yaWdpbmFsU3RyaW5nKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZVN0cmluZyhJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCVN0cmluZyBvcmlnaW5hbFZhbHVlID0gbm9kZS5nZXQocHJlZktleSwgImJvZ3VzIik7Ci0JCVN0cmluZyBleHBlY3RlZFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7IC8vIHJhbmRvbQotCQkvLyBzdHJpbmcKLQkJbm9kZS5wdXQocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCVN0cmluZyBmb3VuZFZhbHVlID0gbm9kZS5nZXQocHJlZktleSwgIiIpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5ICsgIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCWlmICgiYm9ndXMiLmVxdWFscyhvcmlnaW5hbFZhbHVlKSkKLQkJCW5vZGUucmVtb3ZlKHByZWZLZXkpOwotCQllbHNlCi0JCQlub2RlLnB1dChwcmVmS2V5LCBvcmlnaW5hbFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBsaW5lIGRlbGltaXRlciBwcmVmZXJlbmNlcyBieSBtYWtpbmcgc3VyZSBkb2N1bWVudCBjcmVhdGVkCi0JICogZm9sbG93cyBsaW5lIGRlbGltaXRlciBwcmVmZXJlbmNlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REZWxpbWl0ZXJQcmVmZXJlbmNlcygpIHsKLQkJLy8gY2hlY2sgaWYgY29udGVudCB0eXBlIHByZWZlcmVuY2VzIG1hdGNoCi0JCVN0cmluZyBwcmVmZXJyZWREZWxpbWl0ZXIgPSBDb250ZW50VHlwZUVuY29kaW5nUHJlZmVyZW5jZXMuZ2V0UHJlZmVycmVkTmV3TGluZURlbGltaXRlcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJUHJlZmVyZW5jZXMgcHJlZnMgPSBDb250ZW50QmFzZWRQcmVmZXJlbmNlR2F0ZXdheS5nZXRQcmVmZXJlbmNlcyhDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJU3RyaW5nIGdhdGV3YXlEZWxpbWl0ZXIgPSBwcmVmcy5nZXQoQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuRU5EX09GX0xJTkVfQ09ERSwgbnVsbCk7Ci0JCWFzc2VydEVxdWFscygiQ29udGVudFR5cGVFbmNvZGluZ1ByZWZlcmVuY2VzIGFuZCBDb250ZW50QmFzZWRQcmVmZXJlbmNlR2F0ZXdheSBwcmVmZXJlbmNlcyBkbyBub3QgbWF0Y2giLCBnYXRld2F5RGVsaW1pdGVyLCBwcmVmZXJyZWREZWxpbWl0ZXIpOwotCi0JCS8vIHNldCBhIHBhcnRpY3VsYXIgbGluZSBkZWxpbWl0ZXIKLQkJcHJlZnMucHV0KENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkVORF9PRl9MSU5FX0NPREUsIENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkxGKTsKLQotCQkvLyBjcmVhdGUgZG9jdW1lbnQKLQkJWE1MRG9jdW1lbnRMb2FkZXIgbG9hZGVyID0gbmV3IFhNTERvY3VtZW50TG9hZGVyKCk7Ci0JCUlFbmNvZGVkRG9jdW1lbnQgZG9jdW1lbnQgPSBsb2FkZXIuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCVN0cmluZyBkb2N1bWVudERlbGltaXRlciA9IGRvY3VtZW50LmdldFByZWZlcnJlZExpbmVEZWxpbWl0ZXIoKTsKLQotCQkvLyB2ZXJpZnkgZGVsaW1pdGVyIGluIGRvY3VtZW50IG1hdGNoZXMgcHJlZmVyZW5jZQotCQlhc3NlcnRFcXVhbHMoIkRlbGltaXRlciBpbiBkb2N1bWVudCBkb2VzIG5vdCBtYXRjaCBwcmVmZXJlbmNlIiwgQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuU1RSSU5HX0xGLCBkb2N1bWVudERlbGltaXRlcik7Ci0KLQkJLy8gcmV0dXJuIHRvIG9yaWdpbmFsIHByZWZlcmVuY2UKLQkJcHJlZnMucmVtb3ZlKENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkVORF9PRl9MSU5FX0NPREUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVByaW50ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVByaW50ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJhNTIxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01QcmludGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuY29udGVudG1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01BbnlFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01FbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUVudGl0eURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Hcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Ob2RlTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuQ01WaXNpdG9yOwotCi0KLXB1YmxpYyBjbGFzcyBDTVByaW50ZXIgZXh0ZW5kcyBDTVZpc2l0b3IKLXsKLSAgcHJvdGVjdGVkIFN0cmluZ0J1ZmZlciBmU3RyaW5nQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICBwcm90ZWN0ZWQgVmVjdG9yIHZpc2l0ZWRFbGVtZW50cyA9IG5ldyBWZWN0b3IoKTsgCi0gICAgCi0gIC8qKioqKiogICBmb3JtYXR0aW5nICAgICoqKioqKi8KLSAgcHJvdGVjdGVkIFN0cmluZyBpbmRlbnQgPSAiIjsgLy8kTk9OLU5MUy0xJAotCi0gIHByb3RlY3RlZCB2b2lkIGluY3JlbWVudEluZGVudCgpCi0gIHsKLSAgICBpbmRlbnQgPSBpbmRlbnQgKyAiICAiOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBkZWNyZW1lbnRJbmRlbnQoKQotICB7Ci0gICAgaW5kZW50ID0gaW5kZW50LnN1YnN0cmluZygwLCBpbmRlbnQubGVuZ3RoKCktMik7Ci0gIH0KLQotCi0gIHB1YmxpYyB2b2lkIHByaW50Q01Ob2RlKFN0cmluZyBmaWxlbmFtZSwgQ01Ob2RlIGNtbm9kZSkKLSAgewotICAgIHZpc2l0Q01Ob2RlKGNtbm9kZSk7Ci0gICAgdHJ5IAotICAgIHsKLSAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZmlsZVN0cmVhbSA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGVuYW1lKTsKLSAgICAgIE91dHB1dFN0cmVhbVdyaXRlciB3cml0ZXIgPSBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKGZpbGVTdHJlYW0pOwotICAgICAgd3JpdGVyLndyaXRlKGZTdHJpbmdCdWZmZXIudG9TdHJpbmcoKSk7Ci0gICAgICB3cml0ZXIuZmx1c2goKTsKLSAgICAgIGZpbGVTdHJlYW0uY2xvc2UoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAJTG9nZ2VyLmxvZ0V4Y2VwdGlvbigiUE1QcmludGVyIERlYnVnOiAiLCBlKTsKLSAgICB9ICAKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0Q01BbnlFbGVtZW50KENNQW55RWxlbWVudCBhbnlFbGVtZW50KQotICB7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoaW5kZW50ICsgIjxDTUFueUVsZW1lbnQiKTsgLy8kTk9OLU5MUy0xJAotICAgIHByaW50QXR0cmlidXRlcyhmU3RyaW5nQnVmZmVyLCBhbnlFbGVtZW50KTsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZCgiPi9uIik7IC8vJE5PTi1OTFMtMSQKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICBwcmludFByb3BlcnRpZXMoZlN0cmluZ0J1ZmZlciwgYW55RWxlbWVudCk7Ci0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoaW5kZW50ICsgIjwvQ01BbnlFbGVtZW50Pi9uIik7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0Q01BdHRyaWJ1dGVEZWNsYXJhdGlvbihDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIGFkKQotICB7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoaW5kZW50ICsgIjxDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIik7IC8vJE5PTi1OTFMtMSQKLSAgICBwcmludEF0dHJpYnV0ZXMoZlN0cmluZ0J1ZmZlciwgYWQpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKCI+XG4iKTsgLy8kTk9OLU5MUy0xJAotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIHByaW50UHJvcGVydGllcyhmU3RyaW5nQnVmZmVyLCBhZCk7Ci0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgdmlzaXRDTU5vZGUoYWQuZ2V0QXR0clR5cGUoKSk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoaW5kZW50ICsgIjwvQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbj5cbiIpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdENNRGF0YVR5cGUoQ01EYXRhVHlwZSBkYXRhVHlwZSkKLSAgewotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8Q01EYXRhVHlwZSIpOyAvLyROT04tTkxTLTEkCi0gICAgcHJpbnRBdHRyaWJ1dGVzKGZTdHJpbmdCdWZmZXIsIGRhdGFUeXBlKTsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZCgiPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPEltcGxpZWRWYWx1ZSBraW5kPVwiIiArIGRhdGFUeXBlLmdldEltcGxpZWRWYWx1ZUtpbmQoKSArICJcIj4iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoZGF0YVR5cGUuZ2V0SW1wbGllZFZhbHVlKCkgKyAiPC9JbXBsaWVkVmFsdWU+XG4iKTsgLy8kTk9OLU5MUy0xJAotICAgIHByaW50RW51bWVyYXRpb24oZlN0cmluZ0J1ZmZlciwgZGF0YVR5cGUuZ2V0RW51bWVyYXRlZFZhbHVlcygpKTsKLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPC9DTURhdGFUeXBlPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0Q01Eb2N1bWVudChDTURvY3VtZW50IGRvY3VtZW50KQotICB7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoaW5kZW50ICsgIjxDTURvY3VtZW50Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBwcmludEF0dHJpYnV0ZXMoZlN0cmluZ0J1ZmZlciwgZG9jdW1lbnQpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKCI+XG4iKTsgLy8kTk9OLU5MUy0xJAotICAgIGluY3JlbWVudEluZGVudCgpOwotCi0gICAgLy8gICAgcHJpbnRFbnRpdGllcyhzYiwgZG9jdW1lbnQuZ2V0RW50aXRpZXMoKSk7IAotICAgIHByaW50UHJvcGVydGllcyhmU3RyaW5nQnVmZmVyLCBkb2N1bWVudCk7Ci0KLSAgICBDTU5hbWVkTm9kZU1hcCBtYXAgPSBkb2N1bWVudC5nZXRFbGVtZW50cygpOwotICAgIGludCBzaXplID0gbWFwLmdldExlbmd0aCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgIHsKLSAgICAgIHZpc2l0Q01Ob2RlKG1hcC5pdGVtKGkpKTsKLSAgICB9Ci0KLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPC9DTURvY3VtZW50PlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0Q01Hcm91cChDTUdyb3VwIGdyb3VwKQotICB7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoaW5kZW50ICsgIjxDTUdyb3VwIik7IC8vJE5PTi1OTFMtMSQKLSAgICBwcmludEF0dHJpYnV0ZXMoZlN0cmluZ0J1ZmZlciwgZ3JvdXApOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKCI+XG4iKTsgLy8kTk9OLU5MUy0xJAotICAgIGluY3JlbWVudEluZGVudCgpOwotCi0gICAgQ01Ob2RlTGlzdCBub2RlTGlzdCA9IGdyb3VwLmdldENoaWxkTm9kZXMoKTsKLSAgICBpbnQgc2l6ZSA9IG5vZGVMaXN0LmdldExlbmd0aCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgIHsKLSAgICAgIHZpc2l0Q01Ob2RlKG5vZGVMaXN0Lml0ZW0oaSkpOwotICAgIH0KLQotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8L0NNR3JvdXA+XG4iKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRDTUVsZW1lbnREZWNsYXJhdGlvbihDTUVsZW1lbnREZWNsYXJhdGlvbiBlZCkKLSAgewotICAgIGlmICghdmlzaXRlZEVsZW1lbnRzLmNvbnRhaW5zKGVkKSkKLSAgICB7Ci0gICAgICB2aXNpdGVkRWxlbWVudHMuYWRkKGVkKTsKLSAgICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8Q01FbGVtZW50RGVjbGFyYXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcHJpbnRBdHRyaWJ1dGVzKGZTdHJpbmdCdWZmZXIsIGVkKTsKLSAgICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKCI+XG4iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgaW5jcmVtZW50SW5kZW50KCk7Ci0gICAgICBwcmludFByb3BlcnRpZXMoZlN0cmluZ0J1ZmZlciwgZWQpOwotCi0gICAgICBDTU5hbWVkTm9kZU1hcCBub2RlTWFwID0gZWQuZ2V0QXR0cmlidXRlcygpOwotICAgICAgaW50IHNpemUgPSBub2RlTWFwLmdldExlbmd0aCgpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICB7Ci0gICAgICAgIHZpc2l0Q01Ob2RlKG5vZGVNYXAuaXRlbShpKSk7Ci0gICAgICB9Ci0KLSAgICAgIHZpc2l0Q01Ob2RlKGVkLmdldENvbnRlbnQoKSk7Ci0KLSAgICAgIENNRGF0YVR5cGUgZGF0YVR5cGUgPSBlZC5nZXREYXRhVHlwZSgpOwotICAgICAgaWYgKGRhdGFUeXBlICE9IG51bGwpCi0gICAgICAgIHZpc2l0Q01Ob2RlKGRhdGFUeXBlKTsKLQotICAgICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPC9DTUVsZW1lbnREZWNsYXJhdGlvbj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLQotICBwdWJsaWMgdm9pZCBwcmludEVudW1lcmF0aW9uKFN0cmluZ0J1ZmZlciBzYiwgU3RyaW5nW10gdmFsdWVzKQotICB7Ci0gICAgaWYgKCh2YWx1ZXMgIT0gbnVsbCkgJiYgKHZhbHVlcy5sZW5ndGggPiAwKSkKLSAgICB7Ci0gICAgICBzYi5hcHBlbmQoaW5kZW50ICsgIjxFbnVtZXJhdGlvbj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLQotICAgICAgZm9yIChpbnQgaT0wOyBpPHZhbHVlcy5sZW5ndGg7IGkrKykKLSAgICAgIHsKLSAgICAgICAgc2IuYXBwZW5kKGluZGVudCArICI8VmFsdWU+IiArIHZhbHVlc1tpXSArICI8L1ZhbHVlcz5cbiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLQotICAgICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgICBzYi5hcHBlbmQoaW5kZW50ICsgIjwvRW51bWVyYXRpb24+XG4iKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotCi0KLSAgcHVibGljIHZvaWQgcHJpbnRBdHRyaWJ1dGVzKFN0cmluZ0J1ZmZlciBzYiwgQ01Ob2RlIGNtbm9kZSkKLSAgewotICAgIGlmIChjbW5vZGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBzYi5hcHBlbmQoIiBub2RlTmFtZT1cIiIgKyBjbW5vZGUuZ2V0Tm9kZU5hbWUoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIHNiLmFwcGVuZCgiIG5vZGVUeXBlPVwiIiArIGNtbm9kZS5nZXROb2RlVHlwZSgpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCi0gICAgICBpZiAoY21ub2RlIGluc3RhbmNlb2YgQ01Db250ZW50KQotICAgICAgewotICAgICAgICBzYi5hcHBlbmQoIiBtaW5PY2N1cj1cIiIgKyAoKENNQ29udGVudCljbW5vZGUpLmdldE1pbk9jY3VyKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICAgIHNiLmFwcGVuZCgiIG1heE9jY3VyPVwiIiArICgoQ01Db250ZW50KWNtbm9kZSkuZ2V0TWF4T2NjdXIoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICAgIGlmIChjbW5vZGUgaW5zdGFuY2VvZiBDTUFueUVsZW1lbnQpCi0gICAgICB7Ci0gICAgICAgIHNiLmFwcGVuZCgiIG5hbWVzcGFjZVVSST1cIiIgKyAoKENNQW55RWxlbWVudCljbW5vZGUpLmdldE5hbWVzcGFjZVVSSSgpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgfQotICAgICAgaWYgKGNtbm9kZSBpbnN0YW5jZW9mIENNQXR0cmlidXRlRGVjbGFyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIHNiLmFwcGVuZCgiIHVhc2FnZT1cIiIgKyAoKENNQXR0cmlidXRlRGVjbGFyYXRpb24pY21ub2RlKS5nZXRVc2FnZSgpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgICBzYi5hcHBlbmQoIiBkZWZhdWx0VmFsdWU9XCIiICsgKChDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKWNtbm9kZSkuZ2V0RGVmYXVsdFZhbHVlKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICB9Ci0gICAgICBpZiAoY21ub2RlIGluc3RhbmNlb2YgQ01EYXRhVHlwZSkKLSAgICAgIHsgCi0gICAgICAgIHNiLmFwcGVuZCgiIGluc3RhbmNlVmFsdWU9XCIiICsgKChDTURhdGFUeXBlKWNtbm9kZSkuZ2VuZXJhdGVJbnN0YW5jZVZhbHVlKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICB9Ci0gICAgICBpZiAoY21ub2RlIGluc3RhbmNlb2YgQ01FbnRpdHlEZWNsYXJhdGlvbikKLSAgICAgIHsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0gKChDTUVudGl0eURlY2xhcmF0aW9uKWNtbm9kZSkuZ2V0VmFsdWUoKTsKLSAgICAgICAgaWYgKHZhbHVlLmluZGV4T2YoIlwiIikgPT0gLTEpIHNiLmFwcGVuZCgiIHZhbHVlPVwiIiArIHZhbHVlICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0gICAgICAgIGVsc2Ugc2IuYXBwZW5kKCIgdmFsdWU9XCIiICsgdmFsdWUgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICB9Ci0gICAgICBpZiAoY21ub2RlIGluc3RhbmNlb2YgQ01Hcm91cCkKLSAgICAgIHsKLSAgICAgICAgc2IuYXBwZW5kKCIgb3BlcmF0b3I9XCIiICsgKChDTUdyb3VwKWNtbm9kZSkuZ2V0T3BlcmF0b3IoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICAgIGlmIChjbW5vZGUgaW5zdGFuY2VvZiBDTUVsZW1lbnREZWNsYXJhdGlvbikKLSAgICAgIHsKLSAgICAgICAgc2IuYXBwZW5kKCIgY29udGVudFR5cGU9XCIiICsgKChDTUVsZW1lbnREZWNsYXJhdGlvbiljbW5vZGUpLmdldENvbnRlbnRUeXBlKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICB9Ci0gICAgfQotICB9Ci0KLQotICBwdWJsaWMgdm9pZCBwcmludEVudGl0aWVzKFN0cmluZ0J1ZmZlciBzYiwgQ01OYW1lZE5vZGVNYXAgZW50aXRpZXMpCi0gIHsKLSAgICBpZiAoKGVudGl0aWVzICE9IG51bGwpICYmIChlbnRpdGllcy5nZXRMZW5ndGgoKT4wKSkKLSAgICB7Ci0gICAgICBzYi5hcHBlbmQoaW5kZW50ICsgIjxFbnRpdGllcz5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLQotICAgICAgZm9yIChJdGVyYXRvciBpID0gZW50aXRpZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KQotICAgICAgewotICAgICAgICBDTUVudGl0eURlY2xhcmF0aW9uIGVudGl0eSA9IChDTUVudGl0eURlY2xhcmF0aW9uKWkubmV4dCgpOwotICAgICAgICBzYi5hcHBlbmQoaW5kZW50ICsgIjxFbnRpdHkiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcmludEF0dHJpYnV0ZXMoc2IsIGVudGl0eSk7Ci0gICAgICAgIHNiLmFwcGVuZCgiLz5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0KLSAgICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgICAgc2IuYXBwZW5kKGluZGVudCArICI8L0VudGl0aWVzPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwcmludFByb3BlcnRpZXMoU3RyaW5nQnVmZmVyIHNiLCBDTU5vZGUgY21ub2RlKQotICB7Ci0gICAgTGlzdCBwcm9wZXJ0aWVzID0gZ2V0UHJvcGVydGllcyhjbW5vZGUpOwotICAgIHNiLmFwcGVuZChpbmRlbnQgKyAiPFByb3BlcnRpZXM+XG4iKTsgLy8kTk9OLU5MUy0xJAotICAgIGluY3JlbWVudEluZGVudCgpOwotCi0gICAgZm9yIChpbnQgaT0wOyBpPHByb3BlcnRpZXMuc2l6ZSgpOyBpKyspCi0gICAgewotICAgICAgU3RyaW5nIHByb3BlcnR5ID0gKFN0cmluZylwcm9wZXJ0aWVzLmdldChpKTsKLSAgICAgIHNiLmFwcGVuZChpbmRlbnQgKyAiPFByb3BlcnR5IG5hbWU9XCIiICsgcHJvcGVydHkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0KLSAgICAgIGlmIChjbW5vZGUuc3VwcG9ydHMocHJvcGVydHkpKQotICAgICAgewotICAgICAgICBzYi5hcHBlbmQoIiBzdXBwb3J0cz1cInRydWVcIiIpOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHNiLmFwcGVuZCgiIHN1cHBvcnRzPVwiZmFsc2VcIiIpOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0gICAgICBPYmplY3QgdmFsdWUgPSBjbW5vZGUuZ2V0UHJvcGVydHkocHJvcGVydHkpOwotICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKSBzYi5hcHBlbmQoIiB2YWx1ZT1cIiIgKyAoU3RyaW5nKXZhbHVlICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBCb29sZWFuKSBzYi5hcHBlbmQoIiB2YWx1ZT1cIiIgKyB2YWx1ZSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIGVsc2UgaWYgKHZhbHVlICE9IG51bGwpIHNiLmFwcGVuZCgiIHZhbHVlPVwiIiArIHZhbHVlLmdldENsYXNzKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICBlbHNlIHNiLmFwcGVuZCgiIHZhbHVlPVwibnVsbFwiIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHNiLmFwcGVuZCgiLz5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotCi0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgc2IuYXBwZW5kKGluZGVudCArICI8L1Byb3BlcnRpZXM+XG4iKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIExpc3QgZ2V0UHJvcGVydGllcyhDTU5vZGUgY21ub2RlKQotICB7Ci0gICAgTGlzdCBwcm9wZXJ0aWVzID0gbmV3IFZlY3RvcigpOwotICAgICAgCi0gICAgaWYgKGNtbm9kZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHByb3BlcnRpZXMuYWRkKCJDTURvY3VtZW50Iik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHByb3BlcnRpZXMuYWRkKCJkb2N1bWVudGF0aW9uIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvdXNlc0xvY2FsRWxlbWVudERlY2xhcmF0aW9ucyIpOyAvLyROT04tTkxTLTEkCi0gICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL2lzTmFtZVNwYWNlQXdhcmUiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcHJvcGVydGllcy5hZGQoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QvY20vcHJvcGVydGllcy9uc1ByZWZpeFF1YWxpZmljYXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcHJvcGVydGllcy5hZGQoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QvY20vcHJvcGVydGllcy9uaWxsYWJsZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL21vZk5vdGlmaWVyIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHByb3BlcnRpZXMuYWRkKCJzcGVjIik7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgaWYgKGNtbm9kZSBpbnN0YW5jZW9mIENNRWxlbWVudERlY2xhcmF0aW9uKQotICAgICAgewotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL2RlZmluaXRpb25JbmZvIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgcHJvcGVydGllcy5hZGQoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QvY20vcHJvcGVydGllcy9kZWZpbml0aW9uIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgcHJvcGVydGllcy5hZGQoIlhTSVR5cGVzIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgcHJvcGVydGllcy5hZGQoIkRlcml2ZWRFbGVtZW50RGVjbGFyYXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAvLyBwcm9wZXJ0aWVzLmFkZCgiU3Vic3RpdHV0aW9uR3JvdXAiKTsgQ3VycnJlbnRseSBicm9rZW4gZm9yIG5leHRlZCB4c2QgZmlsZXMKLSAgICAgICAgcHJvcGVydGllcy5hZGQoIkFic3RyYWN0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICAgIGlmIChjbW5vZGUgaW5zdGFuY2VvZiBDTURvY3VtZW50KQotICAgICAgewotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL3RhcmdldE5hbWVzcGFjZVVSSSIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvaW1wb3J0ZWROYW1lc3BhY2VJbmZvIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgcHJvcGVydGllcy5hZGQoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QvY20vcHJvcGVydGllcy9uYW1lc3BhY2VJbmZvIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgcHJvcGVydGllcy5hZGQoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QvY20vcHJvcGVydGllcy9lbGVtZW50Rm9ybURlZmF1bHQiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiYW5ub3RhdGlvbk1hcCIpOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwcm9wZXJ0aWVzOwotICB9Ci0gIAotfQotCi0gCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01VdGlsaXR5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01VdGlsaXR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0NmRmYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL0NNVXRpbGl0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNvbnRlbnRtb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Db250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01FbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5DTVZpc2l0b3I7Ci0KLQotcHVibGljIGNsYXNzIENNVXRpbGl0eQoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAvKioKLSAgICogcmV0dXJuIHRydWUgaWYgdGhlIGNoaWxkIG9yIGFueSBvZiBpdHMgYW5jZXN0b3IgZ3JvdXAgbm9kZXMgYXJlIHJlcGVhdGFibGUKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc05vZGVPckFuY2VzdG9yR3JvdXBSZXBlYXRhYmxlKENNQ29udGVudCBjb250ZW50LCBDTU5vZGUgY2hpbGQpCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgLy8gc2luY2Ugd2UgY2FuJ3Qgd2FsayB1cCB0aGUgQ01Ob2RlIHRyZWUgKHdoeSB5b3UgYXNrPyAuLi4gaXRzIGEgbG9uZyBzdG9yeSkKLSAgICAvLyB3ZSB3YWxrIGRvd24gdGhlIHRyZWUgdG8gY29uc2lkZXIgdGhlIGNoaWxkJ3MgcGFyZW50IG5vZGUncwotICAgIC8vCi0gICAgYm9vbGVhbiByZXN1bHQgPSBpc1JlcGVhdGFibGUoY2hpbGQpOwotICAgIGlmICghcmVzdWx0KQotICAgIHsKLSAgICAgIENhblJlcGVhdFZpc2l0b3IgdmlzaXRvciA9IG5ldyBDYW5SZXBlYXRWaXNpdG9yKGNvbnRlbnQsIGNoaWxkKTsKLSAgICAgIHZpc2l0b3IudmlzaXRDTU5vZGUoY29udGVudCk7Ci0gICAgICByZXN1bHQgPSB2aXNpdG9yLmdldFJlc3VsdCgpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIHJldHVybiB0cnVlIGlmIHRoZSBjaGlsZCBpcyByZXBlYXRhYmxlCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNOb2RlUmVwZWF0YWJsZShDTUNvbnRlbnQgY29udGVudCwgQ01Ob2RlIGNoaWxkKQotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIC8vIHNpbmNlIHdlIGNhbid0IHdhbGsgdXAgdGhlIENNTm9kZSB0cmVlICh3aHkgeW91IGFzaz8gLi4uIGl0cyBhIGxvbmcgc3RvcnkpCi0gICAgLy8gd2Ugd2FsayBkb3duIHRoZSB0cmVlIHRvIGNvbnNpZGVyIHRoZSBjaGlsZCdzIHBhcmVudCBub2RlJ3MKLSAgICAvLwotICAgIGJvb2xlYW4gcmVzdWx0ID0gaXNSZXBlYXRhYmxlKGNoaWxkKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICB7Ci0gICAgICBJc1JlcGVhdGFibGVWaXNpdG9yIHZpc2l0b3IgPSBuZXcgSXNSZXBlYXRhYmxlVmlzaXRvcihjb250ZW50LCBjaGlsZCk7Ci0gICAgICB2aXNpdG9yLnZpc2l0Q01Ob2RlKGNvbnRlbnQpOwotICAgICAgcmVzdWx0ID0gdmlzaXRvci5nZXRSZXN1bHQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1JlcGVhdGFibGUoQ01Ob2RlIGNoaWxkKQotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIENNQ29udGVudCkKLSAgICB7Ci0gICAgICBDTUNvbnRlbnQgY29udGVudCA9IChDTUNvbnRlbnQpY2hpbGQ7Ci0gICAgICByZXN1bHQgPSBjb250ZW50LmdldE1heE9jY3VyKCkgPiAxIHx8IGNvbnRlbnQuZ2V0TWF4T2NjdXIoKSA9PSAtMTsKLSAgICB9IAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgICAKLSAgIAotICBwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIENhblJlcGVhdFZpc2l0b3IgZXh0ZW5kcyBDTVZpc2l0b3IKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIHB1YmxpYyBib29sZWFuIHJlc3VsdDsKLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1dpdGhpblJlcGVhdGFibGVHcm91cDsKLQotICAgIHByb3RlY3RlZCBDTU5vZGUgcm9vdDsKLSAgICBwcm90ZWN0ZWQgQ01Ob2RlIHRhcmdldDsKLQotICAgIHB1YmxpYyBDYW5SZXBlYXRWaXNpdG9yKENNTm9kZSByb290LCBDTU5vZGUgdGFyZ2V0KQotICAgIHsKLSAgICAgIHRoaXMucm9vdCA9IHJvb3Q7Ci0gICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB2aXNpdENNR3JvdXAoQ01Hcm91cCBncm91cCkKLSAgICB7ICAgICAgICAgCi0gICAgICBib29sZWFuIG9sZElzV2l0aGluUmVwZWF0YWJsZUdyb3VwID0gaXNXaXRoaW5SZXBlYXRhYmxlR3JvdXA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICBpc1dpdGhpblJlcGVhdGFibGVHcm91cCA9IGlzUmVwZWF0YWJsZShncm91cCk7Ci0gICAgICAKLSAgICAgIHN1cGVyLnZpc2l0Q01Hcm91cChncm91cCk7Ci0KLSAgICAgIGlzV2l0aGluUmVwZWF0YWJsZUdyb3VwID0gb2xkSXNXaXRoaW5SZXBlYXRhYmxlR3JvdXA7Ci0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCi0gICAgcHVibGljIHZvaWQgdmlzaXRDTUVsZW1lbnREZWNsYXJhdGlvbihDTUVsZW1lbnREZWNsYXJhdGlvbiBjbWVsZW1lbnQpCi0gICAgewotICAgICAgaWYgKGNtZWxlbWVudCA9PSB0YXJnZXQpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGlzV2l0aGluUmVwZWF0YWJsZUdyb3VwOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGdldFJlc3VsdCgpCi0gICAgewotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9ICAKLSAgfQotCi0KLSAgcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBJc1JlcGVhdGFibGVWaXNpdG9yIGV4dGVuZHMgQ01WaXNpdG9yCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBwcm90ZWN0ZWQgQ01Hcm91cCBjdXJyZW50R3JvdXA7Ci0KLSAgICBwcm90ZWN0ZWQgQ01Ob2RlIHJvb3Q7Ci0gICAgcHJvdGVjdGVkIENNTm9kZSB0YXJnZXQ7Ci0KLSAgICBwdWJsaWMgSXNSZXBlYXRhYmxlVmlzaXRvcihDTU5vZGUgcm9vdCwgQ01Ob2RlIHRhcmdldCkKLSAgICB7Ci0gICAgICB0aGlzLnJvb3QgPSByb290OwotICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdmlzaXRDTUdyb3VwKENNR3JvdXAgZ3JvdXApCi0gICAgeyAgICAgICAgIAotICAgICAgQ01Hcm91cCBwcmV2aW91c0dyb3VwID0gY3VycmVudEdyb3VwOwotICAgICAgY3VycmVudEdyb3VwID0gZ3JvdXA7Ci0gICAgICBzdXBlci52aXNpdENNR3JvdXAoZ3JvdXApOwotICAgICAgY3VycmVudEdyb3VwID0gcHJldmlvdXNHcm91cDsKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLSAgICBwdWJsaWMgdm9pZCB2aXNpdENNRWxlbWVudERlY2xhcmF0aW9uKENNRWxlbWVudERlY2xhcmF0aW9uIGNtZWxlbWVudCkKLSAgICB7Ci0gICAgICBpZiAoY21lbGVtZW50ID09IHRhcmdldCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGN1cnJlbnRHcm91cCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gKChjdXJyZW50R3JvdXAuZ2V0T3BlcmF0b3IoKSA9PSBDTUdyb3VwLkNIT0lDRSkgJiYKLSAgICAgICAgICAgICAgICAgICAgKGlzUmVwZWF0YWJsZShjdXJyZW50R3JvdXApKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRSZXN1bHQoKQotICAgIHsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVZhbGlkYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVZhbGlkYXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNkNGQ2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01WYWxpZGF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuY29udGVudG1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01FbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNvbnRlbnRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5pbnRlcm5hbC51dGlsLkNNVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuaW50ZXJuYWwudXRpbC5DTVZhbGlkYXRvci5FbGVtZW50UGF0aFJlY29yZGluZ1Jlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLmludGVybmFsLnV0aWwuQ01WYWxpZGF0b3IuU3RyaW5nRWxlbWVudENvbnRlbnRDb21wYXJhdG9yOwotCi1wdWJsaWMgY2xhc3MgQ01WYWxpZGF0b3JUZXN0Ci17Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdbXSkKLSAgewotICAgIGlmIChhcmcubGVuZ3RoID4gMSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy9DTURvY3VtZW50RmFjdG9yeVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkucmVnaXN0ZXJDTURvY3VtZW50QnVpbGRlcldpdGhDbGFzc05hbWUoIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9maW1wbC5DTURvY3VtZW50QnVpbGRlckltcGwiKTsKLQotICAgICAgICBTdHJpbmcgZ3JhbW1hckZpbGVOYW1lID0gYXJnWzBdOwotICAgICAgICBTdHJpbmcgZWxlbWVudE5hbWUgPSBhcmdbMV07Ci0KLSAgICAgICAgQ01Eb2N1bWVudCBjbURvY3VtZW50ID0gQ29udGVudE1vZGVsTWFuYWdlci5nZXRJbnN0YW5jZSgpLmNyZWF0ZUNNRG9jdW1lbnQoZ3JhbW1hckZpbGVOYW1lLCBudWxsKTsKLSAgICAgICAgCi0gICAgICAgIENNTmFtZWROb2RlTWFwIGVsZW1lbnRNYXAgPSBjbURvY3VtZW50LmdldEVsZW1lbnRzKCk7Ci0gICAgICAgIENNRWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQgPSAoQ01FbGVtZW50RGVjbGFyYXRpb24pZWxlbWVudE1hcC5nZXROYW1lZEl0ZW0oZWxlbWVudE5hbWUpOwotICAgICAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgICAgICB7IC8qCi0gICAgICAgICAgcHJpbnRsbigiZm91bmQgZWxlbWVudCBbIiArIGVsZW1lbnROYW1lICsgIl0gIGNvbnRlbnRUeXBlID0gIiArIGVsZW1lbnQuZ2V0Q29udGVudFR5cGUoKSk7Ci0gICAgICAgICAgR3JhcGhOb2RlIGdyYXBoTm9kZSA9IGNyZWF0ZUdyYXBoKGVsZW1lbnQpOwotICAgICAgICAgIHByaW50R3JhcGgoZ3JhcGhOb2RlKTsKLSAgICAgICAgICAqLwotICAgICAgICAgIHByaW50bG4oIi0tLS0tLS0tLS0tLS0tIGJlZ2luIHZhbGlkYXRlIC0tLS0tLS0tLS0tLS0tLSIpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgICAgICBTdHJpbmdFbGVtZW50Q29udGVudENvbXBhcmF0b3IgY29tcGFyYXRvciA9IG5ldyBTdHJpbmdFbGVtZW50Q29udGVudENvbXBhcmF0b3IoKTsKLSAgICAgICAgICBDTVZhbGlkYXRvciB2YWxpZGF0b3IgPSBuZXcgQ01WYWxpZGF0b3IoKTsKLSAgICAgICAgICBFbGVtZW50UGF0aFJlY29yZGluZ1Jlc3VsdCByZXN1bHQgPSBuZXcgRWxlbWVudFBhdGhSZWNvcmRpbmdSZXN1bHQoKTsKLSAgICAgICAgICB2YWxpZGF0b3IuZ2V0T3JpZ2luQXJyYXkoZWxlbWVudCwgQ01WYWxpZGF0b3IuY3JlYXRlU3RyaW5nTGlzdChhcmcsIDIpLCBjb21wYXJhdG9yLCByZXN1bHQpOwotICAgICAgICAgIGlmIChyZXN1bHQuaXNWYWxpZCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBDTU5vZGVbXSBub2RlTWFwcGluZyA9IHJlc3VsdC5nZXRPcmlnaW5BcnJheSgpOwotICAgICAgICAgICAgcHJpbnRsbigiVmFsaWRhdGlvbiBTdWNjZXNzISIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICBwcmludCgiICAiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlTWFwcGluZy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBub2RlTWFwcGluZ1tpXSAhPSBudWxsID8gbm9kZU1hcHBpbmdbaV0uZ2V0Tm9kZU5hbWUoKSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICBwcmludCgiWyIgKyBuYW1lICsgIl0iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGxuKCIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgcHJpbnRsbigiVmFsaWRhdGlvbiBGYWlsZWQhICIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICBpZiAocmVzdWx0LmVycm9yTWVzc2FnZSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBwcmludGxuKCIgICIgKyByZXN1bHQuZXJyb3JNZXNzYWdlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBwcmludGxuKCItLS0tLS0tLS0tLS0tLSBlbmQgdmFsaWRhdGUgLS0tLS0tLS0tLS0tLS0tIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBwcmludGxuKCJlbGVtZW50IFsiICsgZWxlbWVudE5hbWUgKyAiXSBjYW4gbm90IGJlIGZvdW5kIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHByaW50bG4oIkNNVmFsaWRhdG9yIGVycm9yIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHByaW50bG4oIjIgYXJncyByZXF1aXJlZC4uLiBvbmx5ICIgKyBhcmcubGVuZ3RoICsgIiBwcm92aWRlZCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIHByaW50bG4oInVzYWdlIGphdmEgb3JnLmVjbGlwc2Uud3N0Lm5ld3htbC51dGlsLlhNTFV0aWwgZ3JhbW1hckZpbGVOYW1lIHJvb3RFbGVtZW50TmFtZSBwYXR0ZXJuIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludChTdHJpbmcgc3RyaW5nKQotICB7ICAKLSAgfQotICAgIAotICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRsbihTdHJpbmcgc3RyaW5nKQotICB7ICAKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50bG5JbmRlbnRlZChpbnQgaW5kZW50LCBTdHJpbmcgc3RyaW5nKQotICB7Ci0gIH0gICAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01WaXNpdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL0NNVmlzaXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNhODA0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01WaXNpdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNvbnRlbnRtb2RlbDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQbGF0Zm9ybVJ1bm5hYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeWltcGwuTW9kZWxRdWVyeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2RlbHF1ZXJ5aW1wbC5YTUxBc3NvY2lhdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5DTURvY3VtZW50Q2FjaGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotcHVibGljIGNsYXNzIENNVmlzaXRvclRlc3QgaW1wbGVtZW50cyBJUGxhdGZvcm1SdW5uYWJsZSB7Ci0JcHVibGljIE9iamVjdCBydW4oT2JqZWN0IGEpIHsKLQkJU3RyaW5nIGFyZ3NbXSA9IChTdHJpbmdbXSkgYTsKLQkJaWYgKGFyZ3MubGVuZ3RoID4gMCkgewotCQkJdGVzdChhcmdzWzBdKTsKLQkJfQotCQllbHNlIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigieG1sIGZpbGUgbmFtZSBhcmd1bWVudCByZXF1aXJlZCIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVzdChTdHJpbmcgZmlsZU5hbWUpIHsKLQotCQlDbGFzc0xvYWRlciBvcmlnaW5hbENsYXNzTG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsKLQkJdHJ5IHsKLQkJCUNNRG9jdW1lbnRDYWNoZSBjYWNoZSA9IG5ldyBDTURvY3VtZW50Q2FjaGUoKTsKLQkJCVhNTEFzc29jaWF0aW9uUHJvdmlkZXIgcHJvdmlkZXIgPSBuZXcgWE1MQXNzb2NpYXRpb25Qcm92aWRlcihjYWNoZSkgewotCQkJfTsKLQotCQkJTW9kZWxRdWVyeSBtcSA9IG5ldyBNb2RlbFF1ZXJ5SW1wbChwcm92aWRlcik7Ci0KLQkJCVRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKENNVmlzaXRvclRlc3QuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0JCQlEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gYnVpbGRlci5wYXJzZShmaWxlTmFtZSk7Ci0KLQkJCS8qCi0JCQkgKiBDbGFzc0xvYWRlciBwcmV2Q2xhc3NMb2FkZXIgPQotCQkJICogVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsKLQkJCSAqIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0JCQkgKiBDbGFzcyB0aGVDbGFzcyA9Ci0JCQkgKiBDbGFzcy5mb3JOYW1lKCJvcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLkRPTVBhcnNlciIpOyBET01QYXJzZXIKLQkJCSAqIHBhcnNlciA9IChET01QYXJzZXIpdGhlQ2xhc3MubmV3SW5zdGFuY2UoKTsKLQkJCSAqIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKHByZXZDbGFzc0xvYWRlcik7Ci0JCQkgKiBwYXJzZXIucGFyc2UobmV3IElucHV0U291cmNlKGZpbGVOYW1lKSk7IERvY3VtZW50IGRvY3VtZW50ID0KLQkJCSAqIHBhcnNlci5nZXREb2N1bWVudCgpOwotCQkJICovCi0JCQl2aXNpdE5vZGUoZG9jdW1lbnQsIG1xLCAwKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihvcmlnaW5hbENsYXNzTG9hZGVyKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHZpc2l0Tm9kZShOb2RlIG5vZGUsIE1vZGVsUXVlcnkgbXEsIGludCBpbmRlbnQpIHsKLQkJQ01Ob2RlIGNtbm9kZSA9IG1xLmdldENNTm9kZShub2RlKTsKLQkJcHJpbnRsbkluZGVudGVkKGluZGVudCwgIm5vZGUgOiIgKyBub2RlLmdldE5vZGVOYW1lKCkgKyAiIGNtbm9kZSA6ICIgKyAoY21ub2RlICE9IG51bGwgPyBjbW5vZGUuZ2V0Tm9kZU5hbWUoKSA6ICJudWxsIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotCQlOYW1lZE5vZGVNYXAgbWFwID0gbm9kZS5nZXRBdHRyaWJ1dGVzKCk7Ci0JCWlmIChtYXAgIT0gbnVsbCkgewotCQkJaW5kZW50ICs9IDI7Ci0JCQlpbnQgbWFwTGVuZ3RoID0gbWFwLmdldExlbmd0aCgpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXBMZW5ndGg7IGkrKykgewotCQkJCXZpc2l0Tm9kZShtYXAuaXRlbShpKSwgbXEsIGluZGVudCk7Ci0JCQl9Ci0JCQlpbmRlbnQgLT0gMjsKLQkJfQotCQlpbmRlbnQgKz0gNDsKLQkJTm9kZUxpc3QgbGlzdCA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpOwotCQlpbnQgbGlzdExlbmd0aCA9IGxpc3QuZ2V0TGVuZ3RoKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbGlzdExlbmd0aDsgaSsrKSB7Ci0JCQl2aXNpdE5vZGUobGlzdC5pdGVtKGkpLCBtcSwgaW5kZW50KTsKLQkJfQotCQlpbmRlbnQgLT0gNDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRsbkluZGVudGVkKGludCBpbmRlbnQsIFN0cmluZyBzdHJpbmcpIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbmRlbnQ7IGkrKykgewotCQkJU3lzdGVtLm91dC5wcmludCgiICIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJU3lzdGVtLm91dC5wcmludGxuKHN0cmluZyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL1Rlc3RDYXRhbG9nUmV0cml2YWxBbmRNb2RlbENyZWF0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvVGVzdENhdGFsb2dSZXRyaXZhbEFuZE1vZGVsQ3JlYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQxZGVjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvVGVzdENhdGFsb2dSZXRyaXZhbEFuZE1vZGVsQ3JlYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNvbnRlbnRtb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLlhNTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ29udGVudE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwubW9kZWxxdWVyeS5YTUxDYXRhbG9nSWRSZXNvbHZlcjsKLQotcHVibGljIGNsYXNzIFRlc3RDYXRhbG9nUmV0cml2YWxBbmRNb2RlbENyZWF0aW9uIGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogVGVzdCB0aGF0IGEga25vd24gZXJyb3IgY2FzZSByZXR1cm5zIG51bGwuCi0JICogCi0JICogQHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEtub3duTm90RXhpc3QoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBKVU5LX1NUUklORyA9ICJkb2VzTm90RXhpc3RUZXN0IjsKLQkJSUNhdGFsb2cgeG1sQ2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0JCVN0cmluZyByZXNvbHZlZCA9IHhtbENhdGFsb2cucmVzb2x2ZVB1YmxpYyhKVU5LX1NUUklORywgbnVsbCk7Ci0JCWFzc2VydE51bGwoImV4cGVjdGVkIG5vIG1hdGNoIGZvciAiICsgSlVOS19TVFJJTkcsIHJlc29sdmVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmVkdGVzdFdBUEZPUlVNKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WEhUTUwxMCgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYSFRNTDEwVCgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYSFRNTDEwRigpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCItLy9XM0MvL0RURCBYSFRNTCAxLjAgRnJhbWVzZXQvL0VOIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhIVE1MMTBCKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIi0vL1czQy8vRFREIFhIVE1MIEJhc2ljIDEuMC8vRU4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WEhUTUwxMSgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIik7Ci0JfQotCQotCS8qKgotCSAqIFdlIGV4cGVjdCB0aGUgWE1MQ2F0YWxvZ1Jlc29sdmVyIGFuZCBYTUxDYXRhbG9nSWRSZXNvbHZlcgotCSAqIHRvIHJlc29sdmUgdG8gdGhlIHNhbWUgVVJJIGdpdmVuIGEgcHVibGljIGlkIGluIG91ciBjYXRhbG9nLgotCSAqIAotCSAqIEB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RYSFRNTDExX3htbHJlc29sdmVyKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgRVhQRUNURURfUFVCTElDSUQgPSAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiI7Ci0JCQotCQkvLyBidWcgMTE3NDI0LCBoZXJlIGV3ZSBtYWtlIHVwIGEgYmFzZSBsb2NhdGlvbiB0byBzYXRpc2Z5IHRoZSByZXNvbHZlciBBUEkKLQkJLy8gdGhhdCBleHBlY3RzIGEgbm9uLW51bGwgYmFzZSBsb2NhdGlvbgotCQlTdHJpbmcgYmFzZUxvY2F0aW9uID0gImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdFhIVE1MMTEueG1sIjsKLQkJWE1MQ2F0YWxvZ0lkUmVzb2x2ZXIgcmVzb2x2ZXIgPSBuZXcgWE1MQ2F0YWxvZ0lkUmVzb2x2ZXIoYmFzZUxvY2F0aW9uLCBudWxsKTsKLQkJU3RyaW5nIHJlc29sdmVkWE1MX0lkID0gcmVzb2x2ZXIucmVzb2x2ZShiYXNlTG9jYXRpb24sIEVYUEVDVEVEX1BVQkxJQ0lELCBudWxsKTsKLQkJCi0JCUlDYXRhbG9nIHhtbENhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotCQlTdHJpbmcgcmVzb2x2ZWRYTF9DYXQgPSB4bWxDYXRhbG9nLnJlc29sdmVQdWJsaWMoRVhQRUNURURfUFVCTElDSUQsIG51bGwpOwotCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRYTF9DYXQsIHJlc29sdmVkWE1MX0lkKTsJCSAKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENNWEhUTUwxMSgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9DTVRlc3QoIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iKTsKLQl9Ci0JcHVibGljIHZvaWQgcmVtb3ZlZHRlc3RYSFRNTDEwTSgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIik7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlZHRlc3RXQVAxMygpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjMvL0VOIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDIwMDFTY2hlbWEoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVVJJVGVzdCgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBpZiBkdGQgTk9UIGluIG91ciBjYXRhbG9nIGNhbiBoYXZlIGEgY29udGVudCBtb2RlbCAKLQkgKiBjcmVhdGVkLiAKLQkgKiAKLQkgKiBAdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RXh0ZXJuYWxEVEQoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvQ01fZGlyZWN0VVJJVGVzdCgiaHR0cDovL2hpYmVybmF0ZS5zb3VyY2Vmb3JnZS5uZXQvaGliZXJuYXRlLWNvbmZpZ3VyYXRpb24tMy4wLmR0ZCIpOwotCX0KLS8vIEJ1ZyAxMjM1NDcgLSB0ZW1wb3JhcmlseSBjb21tZW50IHRoZXNlIHRlc3RzIG91dC4KLS8vCXB1YmxpYyB2b2lkIHRlc3QyMDAxU2NoZW1hQ01EaXJlY3QoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9DTV9kaXJlY3RVUklUZXN0KCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS54c2QiKTsKLS8vCX0KLS8vCQotLy8JcHVibGljIHZvaWQgdGVzdDIwMDFTY2hlbWFDTUNhdGFsb2coKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9VUklfQ01UZXN0KCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIpOwotLy8JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RJbnZvaWNlUmVtb3RlKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb0NNX2RpcmVjdFVSSVRlc3RfY2hlY2tFbGVtZW50Q291bnQoImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvd3N0L2NvbXBvbmVudHMveHNkL3Rlc3RzL2R0ZC1yZWZlcmVuY2VzL0ludm9pY2UuZHRkIiwgMTgpOwotCX0JCi0JCi0JcHVibGljIHZvaWQgdGVzdEludm9pY2VSZW1vdGVJbmRpcmVjdCgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9DTV9kaXJlY3RVUklUZXN0X2NoZWNrRWxlbWVudENvdW50KCJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL3dzdC9jb21wb25lbnRzL3hzZC90ZXN0cy9kdGQtcmVmZXJlbmNlcy9JbmRpcmVjdEludm9pY2UuZHRkIiwgMTgpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgZG9UZXN0KFN0cmluZyBFWFBFQ1RFRF9QVUJMSUNJRCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJQ2F0YWxvZyB4bWxDYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLQkJU3RyaW5nIHJlc29sdmVkID0geG1sQ2F0YWxvZy5yZXNvbHZlUHVibGljKEVYUEVDVEVEX1BVQkxJQ0lELCBudWxsKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZXhwZWN0ZWQgdG8gZmluZCAiICsgRVhQRUNURURfUFVCTElDSUQsIHJlc29sdmVkKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9DTVRlc3QoU3RyaW5nIEVYUEVDVEVEX1BVQkxJQ0lEKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlDYXRhbG9nIHhtbENhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotCQlTdHJpbmcgcmVzb2x2ZWQgPSB4bWxDYXRhbG9nLnJlc29sdmVQdWJsaWMoRVhQRUNURURfUFVCTElDSUQsIG51bGwpOwotCQlDb250ZW50TW9kZWxNYW5hZ2VyIGNvbnRlbnRNb2RlbE1hbmFnZXIgPSBDb250ZW50TW9kZWxNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0JCUNNRG9jdW1lbnQgY29udGVudE1vZGVsID0gY29udGVudE1vZGVsTWFuYWdlci5jcmVhdGVDTURvY3VtZW50KHJlc29sdmVkLCBudWxsKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZXhwZWN0ZWQgdG8gY3JlYXRlIGNvbnRlbnQgbW9kZWwgZm9yICIgKyBFWFBFQ1RFRF9QVUJMSUNJRCwgY29udGVudE1vZGVsKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9DTV9kaXJlY3RVUklUZXN0KFN0cmluZyBFWFBFQ1RFRF9VUkkpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJQ29udGVudE1vZGVsTWFuYWdlciBjb250ZW50TW9kZWxNYW5hZ2VyID0gQ29udGVudE1vZGVsTWFuYWdlci5nZXRJbnN0YW5jZSgpOwotCQlDTURvY3VtZW50IGNvbnRlbnRNb2RlbCA9IGNvbnRlbnRNb2RlbE1hbmFnZXIuY3JlYXRlQ01Eb2N1bWVudChFWFBFQ1RFRF9VUkksIG51bGwpOwotCQlhc3NlcnROb3ROdWxsKCJleHBlY3RlZCB0byBjcmVhdGUgY29udGVudCBtb2RlbCBmb3IgIiArIEVYUEVDVEVEX1VSSSwgY29udGVudE1vZGVsKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGRvQ01fZGlyZWN0VVJJVGVzdF9jaGVja0VsZW1lbnRDb3VudChTdHJpbmcgRVhQRUNURURfVVJJLCBpbnQgY291bnQpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJQ29udGVudE1vZGVsTWFuYWdlciBjb250ZW50TW9kZWxNYW5hZ2VyID0gQ29udGVudE1vZGVsTWFuYWdlci5nZXRJbnN0YW5jZSgpOwotCQlDTURvY3VtZW50IGNvbnRlbnRNb2RlbCA9IGNvbnRlbnRNb2RlbE1hbmFnZXIuY3JlYXRlQ01Eb2N1bWVudChFWFBFQ1RFRF9VUkksIG51bGwpOwotCQlhc3NlcnROb3ROdWxsKCJleHBlY3RlZCB0byBjcmVhdGUgY29udGVudCBtb2RlbCBmb3IgIiArIEVYUEVDVEVEX1VSSSwgY29udGVudE1vZGVsKTsKLQkJaW50IGFjdHVhbENvdW50ID0gY29udGVudE1vZGVsLmdldEVsZW1lbnRzKCkuZ2V0TGVuZ3RoKCk7IAotCQlhc3NlcnRUcnVlKCJleHBlY3RlZCB0byBjcmVhdGUgY29udGVudCBtb2RlbCB3aXRoICciICsgY291bnQgKyAiJyBlbGVtZW50IGRlY2xhcmF0aW9ucyBmb3IgIiArIEVYUEVDVEVEX1VSSSArICIgYnV0IGZvdW5kICIgKyBhY3R1YWxDb3VudCwgY29udGVudE1vZGVsLmdldEVsZW1lbnRzKCkuZ2V0TGVuZ3RoKCkgPT0gY291bnQpOwkJCi0JfQkKLQotCXByaXZhdGUgdm9pZCBkb1VSSVRlc3QoU3RyaW5nIEVYUEVDVEVEX1VSSSkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotIAotCQlJQ2F0YWxvZyB4bWxDYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLQkJU3RyaW5nIHJlc29sdmVkID0geG1sQ2F0YWxvZy5yZXNvbHZlVVJJKEVYUEVDVEVEX1VSSSk7Ci0JCWFzc2VydE5vdE51bGwoImV4cGVjdGVkIHRvIGZpbmQgIiArIEVYUEVDVEVEX1VSSSwgcmVzb2x2ZWQpOwotCi0JfQotCSB2b2lkIGRvVVJJX0NNVGVzdChTdHJpbmcgRVhQRUNURURfVVJJKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCSAKLQkJSUNhdGFsb2cgeG1sQ2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0JCVN0cmluZyByZXNvbHZlZCA9IHhtbENhdGFsb2cucmVzb2x2ZVVSSShFWFBFQ1RFRF9VUkkpOwotCQlhc3NlcnROb3ROdWxsKCJleHBlY3RlZCB0byBmaW5kICIgKyBFWFBFQ1RFRF9VUkksIHJlc29sdmVkKTsKLQkJCi0JCUNvbnRlbnRNb2RlbE1hbmFnZXIgY29udGVudE1vZGVsTWFuYWdlciA9IENvbnRlbnRNb2RlbE1hbmFnZXIuZ2V0SW5zdGFuY2UoKTsKLQkJQ01Eb2N1bWVudCBjb250ZW50TW9kZWwgPSBjb250ZW50TW9kZWxNYW5hZ2VyLmNyZWF0ZUNNRG9jdW1lbnQocmVzb2x2ZWQsIG51bGwpOwotCQlhc3NlcnROb3ROdWxsKCJleHBlY3RlZCB0byBjcmVhdGUgY29udGVudCBtb2RlbCBmb3IgIiArIEVYUEVDVEVEX1VSSSwgY29udGVudE1vZGVsKTsKLQotCX0KLQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9GaWxlQnVmZmVyRG9jdW1lbnRUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L0ZpbGVCdWZmZXJEb2N1bWVudFRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTQ3ZGJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L0ZpbGVCdWZmZXJEb2N1bWVudFRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuRmlsZUJ1ZmZlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5CYXNpY1N0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudGV4dC5ydWxlcy5TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MOwotCi0KLQotcHVibGljIGNsYXNzIEZpbGVCdWZmZXJEb2N1bWVudFRlc3RlciBleHRlbmRzIFVuemlwcGVkUHJvamVjdFRlc3RlciB7Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0Q3JlYXRlKFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBDbGFzcyBleHBlY3RlZFBhcnRpb25lcikgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlhc3NlcnROb3ROdWxsKCJUZXN0IENhc2UgaW4gZXJyb3IuIENvdWxkIG5vdCBmaW5kIGZpbGUgIiArIGZpbGVQYXRoLCBmaWxlKTsKLQkJSVBhdGggbG9jYXRpb25QYXRoID0gZmlsZS5nZXRMb2NhdGlvbigpOwotCQlJVGV4dEZpbGVCdWZmZXJNYW5hZ2VyIGJ1ZmZlck1hbmFnZXIgPSBGaWxlQnVmZmVycy5nZXRUZXh0RmlsZUJ1ZmZlck1hbmFnZXIoKTsKLQkJYnVmZmVyTWFuYWdlci5jb25uZWN0KGxvY2F0aW9uUGF0aCwgbnVsbCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlciBidWZmZXIgPSBidWZmZXJNYW5hZ2VyLmdldFRleHRGaWxlQnVmZmVyKGxvY2F0aW9uUGF0aCk7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IGJ1ZmZlci5nZXREb2N1bWVudCgpOwotCQlhc3NlcnROb3ROdWxsKGRvY3VtZW50KTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgY2xhc3Mgb2YgZG9jdW1lbnQiLCBleHBlY3RlZERvY3VtZW50Q2xhc3MuaXNJbnN0YW5jZShkb2N1bWVudCkpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBwYXJ0aXRpb25lciBpbiBkb2N1bWVudC4iLCBleHBlY3RlZFBhcnRpb25lci5pc0luc3RhbmNlKGRvY3VtZW50LmdldERvY3VtZW50UGFydGl0aW9uZXIoKSkpOwotCQlidWZmZXJNYW5hZ2VyLmRpc2Nvbm5lY3QobG9jYXRpb25QYXRoLCBudWxsKTsKLQotLy8JCWRvVGVzdENyZWF0ZVdpdGhGYWNhZGUoZmlsZSwgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBleHBlY3RlZFBhcnRpb25lcik7Ci0JCSAKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZmlsZQotCSAqIEBwYXJhbSBleHBlY3RlZERvY3VtZW50Q2xhc3MKLQkgKiBAcGFyYW0gZXhwZWN0ZWRQYXJ0aW9uZXIKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICovCi0vLwlwcml2YXRlIHZvaWQgZG9UZXN0Q3JlYXRlV2l0aEZhY2FkZShJRmlsZSBmaWxlLCBDbGFzcyBleHBlY3RlZERvY3VtZW50Q2xhc3MsIENsYXNzIGV4cGVjdGVkUGFydGlvbmVyKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotLy8JCURvY3VtZW50TG9hZGVyRm9yWE1MIGRvY3VtZW50TG9hZGVyRm9yWE1MID0gbmV3IERvY3VtZW50TG9hZGVyRm9yWE1MKCk7Ci0vLwkJSURvY3VtZW50IGRvY3VtZW50ID0gZG9jdW1lbnRMb2FkZXJGb3JYTUwuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KGZpbGUsIG51bGwpOwotLy8JCUFzc2VydC5hc3NlcnROb3ROdWxsKGRvY3VtZW50KTsKLS8vCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RDcmVhdGVDcmVhdGVFbXB0eShTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgQ2xhc3MgZXhwZWN0ZWRQYXJ0aW9uZXIpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlhc3NlcnRUcnVlKCJUZXN0IENhc2UgaW4gZXJyb3IuIE5vbi1leGlzdGVudCBmaWxlIGV4aXN0ZWQhICIgKyBmaWxlUGF0aCwgZmlsZSA9PSBudWxsKTsKLQkJSVBhdGggbG9jYXRpb25QYXRoID0gbmV3IFBhdGgoZmlsZVBhdGgpOwotCQlJRmlsZSBub25FeGlzdGluZ0ZpbGUgPSBmVGVzdFByb2plY3QuZ2V0RmlsZShsb2NhdGlvblBhdGgpOwotCQlsb2NhdGlvblBhdGggPSBub25FeGlzdGluZ0ZpbGUuZ2V0RnVsbFBhdGgoKTsKLQkJSVRleHRGaWxlQnVmZmVyTWFuYWdlciBidWZmZXJNYW5hZ2VyID0gRmlsZUJ1ZmZlcnMuZ2V0VGV4dEZpbGVCdWZmZXJNYW5hZ2VyKCk7Ci0JCS8vIGNhbiBub3QgImNvbm5lY3QiIHRvIG5vbi1leGlzdGFudCBsb2NhdGlvbgotCQkvL2J1ZmZlck1hbmFnZXIuY29ubmVjdChsb2NhdGlvblBhdGgsIG51bGwpOwotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBidWZmZXJNYW5hZ2VyLmNyZWF0ZUVtcHR5RG9jdW1lbnQobG9jYXRpb25QYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbChkb2N1bWVudCk7Ci0JCWFzc2VydFRydWUoIndyb25nIGNsYXNzIG9mIGRvY3VtZW50IiwgZXhwZWN0ZWREb2N1bWVudENsYXNzLmlzSW5zdGFuY2UoZG9jdW1lbnQpKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgcGFydGl0aW9uZXIgaW4gZG9jdW1lbnQiLCBleHBlY3RlZFBhcnRpb25lci5pc0luc3RhbmNlKGRvY3VtZW50LmdldERvY3VtZW50UGFydGl0aW9uZXIoKSkpOwotCQlidWZmZXJNYW5hZ2VyLmRpc2Nvbm5lY3QobG9jYXRpb25QYXRoLCBudWxsKTsKLQotCX0KLQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9FbXB0eUZpbGUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhzbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9Ob0VuY29kaW5nLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9Ob3JtYWxOb25EZWZhdWx0LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9zaGlmdGppcy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhSnVuay54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhVmFsaWRTdHVmZi54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDIueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQzLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkNC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE11bHRpTGluZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE5vRW5jb2RpbmdWYWx1ZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xBdEZpcnN0LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsSW5MYXJnZUZpbGUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RVVEYxNi54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvVVRGMTZMRUF0U3RhcnRPZkxhcmdlRmlsZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvVVRGOFdpdGgzQnl0ZUJPTS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbkV4aXN0ZW50WE1MKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGVDcmVhdGVFbXB0eSgidGVzdGZpbGVzL3htbC90ZXN0bm9uZXhpc3RlbnQueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVDYXNlKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQkvKgotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JDU1MuY2xhc3MpOwotCX0KLQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nV2l0aEp1bmsuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFWYWxpZFN0dWZmLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZDIuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdE5vRW5jb2RpbmdWYWx1ZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9XZWxsRm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtQi5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyNDI5My90ZXN0c2hpZnRqaXNYbWxTeW50YXguanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTm9FbmNvZGluZ2luWE1MRGVjbC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlTm9FbmNvZGluZy5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0V2l0aFhNTERlY2wuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0qLwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L0dldERvY3VtZW50UmVnaW9uc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L0dldERvY3VtZW50UmVnaW9uc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY1Mjc2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9HZXREb2N1bWVudFJlZ2lvbnNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci0KLXB1YmxpYyBjbGFzcyBHZXREb2N1bWVudFJlZ2lvbnNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCQotCXByaXZhdGUgYm9vbGVhbiBmQWxyZWFkeVNldHVwID0gZmFsc2U7Ci0JcHJpdmF0ZSBJU3RydWN0dXJlZERvY3VtZW50IGZEb2MgPSBudWxsOwotCXByaXZhdGUgU3RyaW5nIGZUZXh0ID0gbnVsbDsKLQkKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQlpZighZkFscmVhZHlTZXR1cCkgewotCQkJSVN0cnVjdHVyZWRNb2RlbCBzTW9kZWwgPSBjcmVhdGVNb2RlbChDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJCWZEb2MgPSBzTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlmVGV4dCA9ICI8aHRtbD48aGVhZD48L2hlYWQ+PGJvZHk+IHRleHQgPC9ib2R5PjwvaHRtbD4iOwotCQkJZkRvYy5zZXQoZlRleHQpOwotCQkJZkFscmVhZHlTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldEFsbFJlZ2lvbnMoKSB7Ci0KLQkJLy8gYWxsIHJlZ2lvbnMKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbltdIHJlZ2lvbnMgPSBmRG9jLmdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKTsKLQkJY2hlY2tSZWdpb25zKHJlZ2lvbnMsIDcsICI8aHRtbD4iLCAiPC9odG1sPiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFeGNsdWRlRW5kcygpIHsKLQkJCi0JCS8vIGxlYXZlIG9mZiB0aGUgZW5kIHJlZ2lvbnMKLQkJLy8gPGh0bWw+WzxoZWFkPjxib2R5PiB0ZXh0IDwvYm9keT5dPC9odG1sPgotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uW10gcmVnaW9ucyA9IGZEb2MuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucyg2LGZUZXh0Lmxlbmd0aCgpIC0gKDYrNykpOwotCQljaGVja1JlZ2lvbnMocmVnaW9ucywgNSwgIjxoZWFkPiIsICI8L2JvZHk+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluY2x1ZGVFbmRzKCkgewotCQkKLQkJLy8gaW5jbHVkZSBlbmQgcmVnaW9ucwotCQkvLyA8aHRbbWw+PGhlYWQ+PC9oZWFkPjxib2R5PiB0ZXh0IDwvYm9keT48L2h0XW1sPgotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uW10gcmVnaW9ucyA9IGZEb2MuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygzLGZUZXh0Lmxlbmd0aCgpLSAoMyszKSk7Ci0JCWFzc2VydEVxdWFscyg3LCByZWdpb25zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpcnN0VHdvKCkgewotCQkvLyBmaXJzdCAyIHJlZ2lvbnMKLQkJLy8gPGhbdG1sPjxoXWVhZD48L2hlYWQ+Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25bXSByZWdpb25zID0gZkRvYy5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKDIsNik7Ci0JCWNoZWNrUmVnaW9ucyhyZWdpb25zLCAyLCAiPGh0bWw+IiwgIjxoZWFkPiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSaWdodFNlYW0oKSB7Ci0JCS8vIHJpZ2h0IHNlYW0KLQkJLy8gWzxodG1sPjxoZWFkPl08L2hlYWQ+Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25bXSByZWdpb25zID0gZkRvYy5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKDAsMTIpOwotCQljaGVja1JlZ2lvbnMocmVnaW9ucywgMiwgIjxodG1sPiIsICI8aGVhZD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TGVmdFNlYW0oKSB7Ci0JCS8vIGxlZnQgc2VhbQotCQkvLyA8L2JvZHk+WzwvaHRtbD5dCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25bXSByZWdpb25zID0gZkRvYy5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKGZUZXh0Lmxlbmd0aCgpLTcsIDcpOwotCQljaGVja1JlZ2lvbnMocmVnaW9ucywgMSwgIjwvaHRtbD4iLCAiPC9odG1sPiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMYXN0KCkgewotCQkvLyBsYXN0IHJlZ2lvbiBvbmx5Ci0JCS8vIDwvYm9keT48L2h0bWw+fAotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uW10gcmVnaW9ucyA9IGZEb2MuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucyhmVGV4dC5sZW5ndGgoKSwgMCk7Ci0JCWNoZWNrUmVnaW9ucyhyZWdpb25zLCAxLCAiPC9odG1sPiIsICI8L2h0bWw+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEZpcnN0KCkgewotCQkvLyBmaXJzdCByZWdpb24gb25seQotCQkvLyB8PGh0bWw+PGhlYWQ+Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25bXSByZWdpb25zID0gZkRvYy5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKDAsMCk7Ci0JCWNoZWNrUmVnaW9ucyhyZWdpb25zLCAxLCAiPGh0bWw+IiwgIjxodG1sPiIpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1JlZ2lvbnMoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbltdIHJlZ2lvbnMsIGludCBleHBlY3RlZExlbmd0aCwgU3RyaW5nIGZpcnN0VGV4dCwgU3RyaW5nIGxhc3RUZXh0KSB7Ci0JCQotCQkvL2ZvciAoaW50IGkgPSAwOyBpIDwgcmVnaW9ucy5sZW5ndGg7IGkrKykgCi0JCS8vCVN5c3RlbS5vdXQucHJpbnRsbihyZWdpb25zW2ldLmdldFRleHQoKSk7Ci0JCQotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRMZW5ndGgsIHJlZ2lvbnMubGVuZ3RoKTsKLQkJCi0JCVN0cmluZyB0ZXh0ID0gcmVnaW9uc1swXS5nZXRUZXh0KCk7Ci0JCWFzc2VydEVxdWFscyh0ZXh0LCBmaXJzdFRleHQpOwotCQkKLQkJdGV4dCA9IHJlZ2lvbnNbcmVnaW9ucy5sZW5ndGgtMV0uZ2V0VGV4dCgpOwotCQlhc3NlcnRFcXVhbHModGV4dCwgbGFzdFRleHQpOwotCX0KLQkKLQlwcml2YXRlIElTdHJ1Y3R1cmVkTW9kZWwgY3JlYXRlTW9kZWwoU3RyaW5nIGNvbnRlbnRUeXBlSUQpIHsKLQkJLy8gY3JlYXRlIGFuIGVtcHR5IG1vZGVsIHdpdGggaXRzIGRlZmF1bHQgZmFjdG9yaWVzCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihjb250ZW50VHlwZUlEKTsKLQkJcmV0dXJuIG1vZGVsOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RTdHJ1Y3R1cmVkRG9jdW1lbnQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RTdHJ1Y3R1cmVkRG9jdW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQxZjAzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0U3RydWN0dXJlZERvY3VtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzIgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZFBvc2l0aW9uQ2F0ZWdvcnlFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Qb3NpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2UuZGF0YWxvY2F0aW9uLkxvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5FbmNvZGluZ01lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5JU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5OZXdEb2N1bWVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuTm9DaGFuZ2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbnNSZXBsYWNlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0U3RydWN0dXJlZERvY3VtZW50IGV4dGVuZHMgVGVzdENhc2UgewotCi0JY2xhc3MgVGVzdExpc3RlbmVyIGltcGxlbWVudHMgSVN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyIHsKLQotCQlib29sZWFuIG5ld01vZGVsQ2FsbGVkID0gZmFsc2U7Ci0JCWJvb2xlYW4gbm9DaGFuZ2VDYWxsZWQgPSBmYWxzZTsKLQkJYm9vbGVhbiBub2Rlc1JlcGxhY2VkQ2FsbGVkID0gZmFsc2U7Ci0JCWJvb2xlYW4gcmVnaW9uQ2hhbmdlZENhbGxlZCA9IGZhbHNlOwotCQlib29sZWFuIHJlZ2lvbnNSZXBsYWNlZENhbGxlZCA9IGZhbHNlOwotCi0JCXB1YmxpYyB2b2lkIG5ld01vZGVsKE5ld0RvY3VtZW50RXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJCW5ld01vZGVsQ2FsbGVkID0gdHJ1ZTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIG5vQ2hhbmdlKE5vQ2hhbmdlRXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJCW5vQ2hhbmdlQ2FsbGVkID0gdHJ1ZTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIG5vZGVzUmVwbGFjZWQoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJCW5vZGVzUmVwbGFjZWRDYWxsZWQgPSB0cnVlOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcmVnaW9uQ2hhbmdlZChSZWdpb25DaGFuZ2VkRXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJCXJlZ2lvbkNoYW5nZWRDYWxsZWQgPSB0cnVlOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcmVnaW9uc1JlcGxhY2VkKFJlZ2lvbnNSZXBsYWNlZEV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KSB7Ci0JCQlyZWdpb25zUmVwbGFjZWRDYWxsZWQgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQkKLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZQcm9qZWN0TmFtZSA9ICJET0NVTUVOVC1MT0FERVIiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZaaXBGaWxlTmFtZSA9ICJ4bWwtZG9jdW1lbnQtbG9hZGVyLXRlc3RzLnppcCI7Ci0KLQlwdWJsaWMgVGVzdFN0cnVjdHVyZWREb2N1bWVudCgpIHsKLQkJc3VwZXIoIlRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnQiKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmICghdGhpcy5pc1NldHVwKSB7Ci0JCQkKLQkJCWRvU2V0dXAoKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9TZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCS8vIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQlMb2NhdGlvbiBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpOwotCi0JCVByb2plY3RVbnppcFV0aWxpdHkgdW56aXBVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJRmlsZSB6aXBGaWxlID0gRmlsZVV0aWwubWFrZUZpbGVGb3IoUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSLCBmWmlwRmlsZU5hbWUsIFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUik7Ci0JCXVuemlwVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBwbGF0Zm9ybUxvY2F0aW9uLmdldFVSTCgpLmdldEZpbGUoKSk7Ci0JCXVuemlwVXRpbC5pbml0SmF2YVByb2plY3QoZlByb2plY3ROYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiBCZSBzdXJlIHRvIHJlbGVhc2UgYW55IG1vZGVscyBvYnRhaW5lZCBmcm9tIHRoaXMgbWV0aG9kLgotCSAqIAotCSAqLwotCUlTdHJ1Y3R1cmVkTW9kZWwgZ2V0VGVzdE1vZGVsKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KGZQcm9qZWN0TmFtZSk7Ci0JCUlGaWxlIGlGaWxlID0gKElGaWxlKSBwcm9qZWN0LmZpbmRNZW1iZXIoIi9maWxlcy9zaW1wbGUueG1sIik7Ci0JCS8vIGZQcm9qZWN0TmFtZSArICIvZmlsZXMvc2ltcGxlLnhtbCIKLQotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0KLQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGlGaWxlKTsKLQotCi0JCXJldHVybiBtb2RlbDsKLQotCX0KLQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RG9jdW1lbnRDaGFuZ2luZ0xpc3RlbmVyKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIFRPRE86IG1heSBuZWVkIHRvIGZha2UgZXZlbnRzIHRvIHJlYWxseSB0ZXN0cyB0aGlzCi0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJCVRlc3RMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBUZXN0TGlzdGVuZXIoKTsKLQotCQkJc0RvYy5hZGREb2N1bWVudENoYW5naW5nTGlzdGVuZXIobGlzdGVuZXIpOwotCQkJU3RyaW5nIHRleHQgPSBzRG9jLmdldCgpOwotCQkJc0RvYy5yZXBsYWNlKDAsIHRleHQubGVuZ3RoKCksIHRleHQpOwotCi0JCQlzRG9jLnJlbW92ZURvY3VtZW50Q2hhbmdpbmdMaXN0ZW5lcihsaXN0ZW5lcik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlYWRPbmx5KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCVN0cmluZyB0ZXh0ID0gc0RvYy5nZXQoKTsKLQotCQkJc0RvYy5jbGVhclJlYWRPbmx5KDAsIHRleHQubGVuZ3RoKCkpOwotCQkJYXNzZXJ0RmFsc2Uoc0RvYy5jb250YWluc1JlYWRPbmx5KDAsIHRleHQubGVuZ3RoKCkpKTsKLQotCQkJc0RvYy5tYWtlUmVhZE9ubHkoMCwgMTApOwotCQkJYXNzZXJ0VHJ1ZShzRG9jLmNvbnRhaW5zUmVhZE9ubHkoOSwgMSkpOwotCQkJYXNzZXJ0VHJ1ZShzRG9jLmNvbnRhaW5zUmVhZE9ubHkoMCwgdGV4dC5sZW5ndGgoKSkpOwotCi0JCQlzRG9jLmNsZWFyUmVhZE9ubHkoMCwgdGV4dC5sZW5ndGgoKSk7Ci0JCQlhc3NlcnRGYWxzZShzRG9jLmNvbnRhaW5zUmVhZE9ubHkoMCwgdGV4dC5sZW5ndGgoKSkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRSZWdpb25BdENoYXJhY3Rlck9mZnNldCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByID0gc0RvYy5nZXRSZWdpb25BdENoYXJhY3Rlck9mZnNldCgwKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGdldCByZWdpb24gYXQgb2Zmc2V0OiAwIiwgcik7Ci0KLQkJCXIgPSBzRG9jLmdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KHNEb2MuZ2V0TGVuZ3RoKCkpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGRuJ3QgZ2V0IHJlZ2lvbiBhdCBvZmZzZXQ6ICIgKyBzRG9jLmdldExlbmd0aCgpLCByKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRSZWdpb25MaXN0KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCByZWdpb25zID0gc0RvYy5nZXRSZWdpb25MaXN0KCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZG4ndCBnZXQgcmVnaW9uIGxpc3QiLCByZWdpb25zKTsKLQkJCWFzc2VydEVxdWFscygxNywgcmVnaW9ucy5nZXRMZW5ndGgoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFRleHQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCVN0cmluZyB0ZXh0ID0gc0RvYy5nZXRUZXh0KCk7Ci0JCQlTdHJpbmcgZXhwZWN0ZWRUZXh0ID0gIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+XHJcbjxsaXN0PlxyXG5cdDxpdGVtMSBhdHRyMT1cImF0dHIxXCIgYXR0cjI9XCJhdHRyMlwiIGF0dHIzPVwiYXR0cjNcIj5cclxuXHRcdG9uZVxyXG5cdDwvaXRlbTE+XHJcblx0PGl0ZW0yIGF0dHIxPVwiYXR0cjFcIiBhdHRyMj1cImF0dHIyXCIgYXR0cjM9XCJhdHRyM1wiID5cclxuXHRcdHR3b1xyXG5cdDwvaXRlbTI+XHJcblx0PGl0ZW0zIGF0dHIxPVwiYXR0cjFcIiBhdHRyMj1cImF0dHIyXCIgYXR0cjM9XCJhdHRyM1wiPlxyXG5cdFx0dGhyZWVcclxuXHQ8L2l0ZW0zPlxyXG48L2xpc3Q+IjsKLQkJCWFzc2VydEVxdWFscyhleHBlY3RlZFRleHQsIHRleHQpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROZXdJbnN0YW5jZSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBuZXdEb2MgPSBzRG9jLm5ld0luc3RhbmNlKCk7Ci0JCQlhc3NlcnROb3RTYW1lKCJkb2N1bWVudCBpbnN0YW5jZXMgc2hvdWxkIGJlIGRpZmZlcmVudCIsIHNEb2MsIG5ld0RvYyk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcGxhY2VUZXh0KCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc0RvYy5yZXBsYWNlKDAsIHNEb2MuZ2V0TGVuZ3RoKCksICJyZXBsYWNlZCIpOwotCi0JCQlTdHJpbmcgdGV4dCA9IHNEb2MuZ2V0VGV4dCgpOwotCQkJYXNzZXJ0RXF1YWxzKCJyZXBsYWNlZCIsIHRleHQpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RPdmVycmlkZVJlYWRPbmx5UmVwbGFjZVRleHQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXNEb2MubWFrZVJlYWRPbmx5KDAsIDEpOwotCQkJc0RvYy5yZXBsYWNlVGV4dCh0aGlzLCAwLCBzRG9jLmdldExlbmd0aCgpLCAicmVwbGFjZWQiKTsKLQkJCWFzc2VydE5vdFNhbWUoInRleHQgc2hvdWxkIG5vdCBoYXZlIGJlZW4gcmVwbGFjYWJsZSAocmVhZCBvbmx5KSIsICJyZXBsYWNlZCIsIHNEb2MuZ2V0VGV4dCgpKTsKLQotCQkJc0RvYy5yZXBsYWNlVGV4dCh0aGlzLCAwLCBzRG9jLmdldExlbmd0aCgpLCAicmVwbGFjZWQiLCB0cnVlKTsKLQkJCWFzc2VydEVxdWFscygidGV4dCBzaG91bGQgaGF2ZSBiZWVuIGZvcmNlZCByZXBsYWNlZCIsICJyZXBsYWNlZCIsIHNEb2MuZ2V0VGV4dCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2V0VGV4dCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc0RvYy5zZXRUZXh0KHRoaXMsICJzZXQgdGV4dCIpOwotCi0JCQlhc3NlcnRFcXVhbHMoInNldCB0ZXh0IGZhaWxlZCIsICJzZXQgdGV4dCIsIHNEb2MuZ2V0VGV4dCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RW5jb2RpbmdNZW1lbnRvKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbnVsbDsKLQkJCXNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCUVuY29kaW5nTWVtZW50byBtZW1lbnRvID0gc0RvYy5nZXRFbmNvZGluZ01lbWVudG8oKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGdldCBlbmNvZGluZyBtZW1lbnRvIiwgbWVtZW50byk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldERldGVjdGVkTGluZURlbGltaXRlcigpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBwbGF0Zm9ybURlbGltaXRlciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlTdHJpbmcgZGVsaW0gPSBzRG9jLmdldExpbmVEZWxpbWl0ZXIoKTsKLQkJCWFzc2VydEVxdWFscygid3JvbmcgcHJlZmVycmVkIGxpbmUgZGVsbWl0ZXIiLCBwbGF0Zm9ybURlbGltaXRlciwgZGVsaW0pOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZXRFbmNvZGluZ01lbWVudG8oKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCUVuY29kaW5nTWVtZW50byBtZW1lbnRvID0gbmV3IEVuY29kaW5nTWVtZW50bygpOwotCQkJc0RvYy5zZXRFbmNvZGluZ01lbWVudG8obWVtZW50byk7Ci0JCQlFbmNvZGluZ01lbWVudG8gZ290dGVuTWVtZW50byA9IHNEb2MuZ2V0RW5jb2RpbmdNZW1lbnRvKCk7Ci0JCQlhc3NlcnRFcXVhbHMoIm1lbWVudG9zIGRvbid0IG1hdGNoIiwgbWVtZW50bywgZ290dGVuTWVtZW50byk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0Jdm9pZCBzZXREZXRlY3RlZExpbmVEZWxpbWl0ZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXNEb2Muc2V0UHJlZmVycmVkTGluZURlbGltaXRlcigiXG4iKTsKLQkJCVN0cmluZyBkZWxpbSA9IHNEb2MuZ2V0UHJlZmVycmVkTGluZURlbGltaXRlcigpOwotCQkJYXNzZXJ0RXF1YWxzKCJzZXQgbGluZSBkZWxpbWl0ZXIgZmFpbGVkIiwgIlxuIiwgZGVsaW0pOwotCi0JCQlzRG9jLnNldFByZWZlcnJlZExpbmVEZWxpbWl0ZXIoIlxyXG4iKTsKLQkJCWRlbGltID0gc0RvYy5nZXRQcmVmZXJyZWRMaW5lRGVsaW1pdGVyKCk7Ci0JCQlhc3NlcnRFcXVhbHMoInNldCBsaW5lIGRlbGltaXRlciBmYWlsZWQiLCAiXHJcbiIsIGRlbGltKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3RyaW5nTWF0Y2hlcygpIHsKLQkJLy8gVE9ETzogd2lsbCBuZWVkIGEgdGVzdCB3aGVuIHRoaXMgQVBJIGlzIGNyZWF0ZWQKLQkJLy8gSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQkvLyBJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlUG9zaXRpb24oKSB0aHJvd3MgQmFkUG9zaXRpb25DYXRlZ29yeUV4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlQb3NpdGlvbiBwID0gbmV3IFBvc2l0aW9uKDAsIDEwKTsKLQkJCVN0cmluZ1tdIGNhdGVnb3JpZXMgPSBzRG9jLmdldFBvc2l0aW9uQ2F0ZWdvcmllcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjYXRlZ29yaWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJc0RvYy5hZGRQb3NpdGlvbihjYXRlZ29yaWVzW2ldLCBwKTsKLQkJCX0KLQkJCWludCBmb3VuZCA9IDA7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNhdGVnb3JpZXMubGVuZ3RoOyBpKyspIHsKLQkJCQlQb3NpdGlvbltdIHBvc2l0aW9ucyA9IHNEb2MuZ2V0UG9zaXRpb25zKGNhdGVnb3JpZXNbaV0pOwotCQkJCWZvciAoaW50IGogPSAwOyBqIDwgcG9zaXRpb25zLmxlbmd0aDsgaisrKSB7Ci0JCQkJCWlmIChwb3NpdGlvbnNbal0gPT0gcCkgewotCQkJCQkJZm91bmQrKzsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHBvc2l0aW9ucyIsIGNhdGVnb3JpZXMubGVuZ3RoLCBmb3VuZCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFhNTERvY3VtZW50TG9hZGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0WE1MRG9jdW1lbnRMb2FkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU3YTA4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0WE1MRG9jdW1lbnRMb2FkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb2N1bWVudDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2UuZGF0YWxvY2F0aW9uLkxvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5YTUxEb2N1bWVudExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotCi1wdWJsaWMgY2xhc3MgVGVzdFhNTERvY3VtZW50TG9hZGVyIGV4dGVuZHMgVGVzdENhc2UgewotCQotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlByb2plY3ROYW1lID0iRE9DVU1FTlQtTE9BREVSIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmWmlwRmlsZU5hbWUgPSAieG1sLWRvY3VtZW50LWxvYWRlci10ZXN0cy56aXAiOwotCQkKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQlpZiAoIXRoaXMuaXNTZXR1cCkgewotCQkJZG9TZXR1cCgpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgZG9TZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewkKLQkKLQkJLy8gcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCUxvY2F0aW9uIHBsYXRmb3JtTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCk7Ci0JCQotCQlQcm9qZWN0VW56aXBVdGlsaXR5IHVuemlwVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCUZpbGUgemlwRmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUiwgZlppcEZpbGVOYW1lLCBQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIpOwotCQl1bnppcFV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgcGxhdGZvcm1Mb2NhdGlvbi5nZXRVUkwoKS5nZXRGaWxlKCkpOwotCQl1bnppcFV0aWwuaW5pdEphdmFQcm9qZWN0KGZQcm9qZWN0TmFtZSk7Ci0JfQotCQotCQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOZXdFbXB0eVN0cnVjdHVyZWREb2N1bWVudCgpIHsKLQotCQlYTUxEb2N1bWVudExvYWRlciB4bWxEb2N1bWVudExvYWRlciA9IG5ldyBYTUxEb2N1bWVudExvYWRlcigpOwotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBudWxsOwotCQkKLQkJZG9jdW1lbnQgPSB4bWxEb2N1bWVudExvYWRlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZmFpbGVkIHRvIGNyZWF0ZSBFbXB0eSBkb2N1bWVudCIsIGRvY3VtZW50KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudEZyb21GaWxlKCkgewotCQkvLyBmcm9tIGEgZmlsZQkKLQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmUHJvamVjdE5hbWUgKyAiL2ZpbGVzL3NpbXBsZS54bWwiKSk7Ci0JCQkKLQkJWE1MRG9jdW1lbnRMb2FkZXIgeG1sRG9jdW1lbnRMb2FkZXIgPSBuZXcgWE1MRG9jdW1lbnRMb2FkZXIoKTsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWRvY3VtZW50ID0geG1sRG9jdW1lbnRMb2FkZXIuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KGZpbGUpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsJCi0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWFzc2VydE5vdE51bGwoImZhaWxlZCB0byBjcmVhdGUgZG9jdW1lbnQgZnJvbSBJRmlsZSIsIGRvY3VtZW50KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudEZyb21JbnB1dFN0cmVhbSgpIHsKLQkJU3RyaW5nIGZpbGVMb2NhdGlvbiA9ICIvZmlsZXMvc2ltcGxlLnhtbCI7Ci0JCVN0cmluZyBhYnNvbHV0ZUZpbGVMb2NhdGlvbiA9IFBsYXRmb3JtLmdldEluc3RhbmNlTG9jYXRpb24oKSArIGZQcm9qZWN0TmFtZSArIGZpbGVMb2NhdGlvbjsKLQkJCi0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZlByb2plY3ROYW1lICsgIi9maWxlcy9zaW1wbGUueG1sIikpOwotCQkKLQkJWE1MRG9jdW1lbnRMb2FkZXIgeG1sRG9jdW1lbnRMb2FkZXIgPSBuZXcgWE1MRG9jdW1lbnRMb2FkZXIoKTsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsKLQkJCi0JCXRyeSB7Ci0JCQlkb2N1bWVudCA9IHhtbERvY3VtZW50TG9hZGVyLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudChhYnNvbHV0ZUZpbGVMb2NhdGlvbiwgZmlsZS5nZXRDb250ZW50cygpKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7CQotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlhc3NlcnROb3ROdWxsKCJmYWlsZWQgdG8gY3JlYXRlIGRvY3VtZW50IGZyb20gSW5wdXRTdHJlYW0iLCBkb2N1bWVudCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOZXdEb2N1bWVudEZyb21SZWFkZXJXaXRoRW5jb2RpbmdSdWxlKCkgewotCQkKLQkJU3RyaW5nIGZpbGVMb2NhdGlvbiA9ICIvZmlsZXMvc2ltcGxlLnhtbCI7Ci0JCVN0cmluZyBhYnNvbHV0ZUZpbGVMb2NhdGlvbiA9IFBsYXRmb3JtLmdldEluc3RhbmNlTG9jYXRpb24oKS5nZXRVUkwoKS5nZXRQYXRoKCkudG9TdHJpbmcoKSArIGZQcm9qZWN0TmFtZSArIGZpbGVMb2NhdGlvbjsKLQkJCi0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZlByb2plY3ROYW1lICsgIi9maWxlcy9zaW1wbGUueG1sIikpOwotCQkKLQkJWE1MRG9jdW1lbnRMb2FkZXIgeG1sRG9jdW1lbnRMb2FkZXIgPSBuZXcgWE1MRG9jdW1lbnRMb2FkZXIoKTsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsKLQkJCi0JCXRyeSB7Ci0JCQlkb2N1bWVudCA9IHhtbERvY3VtZW50TG9hZGVyLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudChhYnNvbHV0ZUZpbGVMb2NhdGlvbiwgZmlsZS5nZXRDb250ZW50cygpKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7CQotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlhc3NlcnROb3ROdWxsKCJmYWlsZWQgdG8gY3JlYXRlIGRvY3VtZW50IGZyb20gSW5wdXRTdHJlYW0gd2l0aCBFbmNvZGluZ1J1bGUiLCBkb2N1bWVudCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVHJhbnNpdGlvblRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9UcmFuc2l0aW9uVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFhNGRhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9UcmFuc2l0aW9uVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuRmlsZUJ1ZmZlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50RXh0ZW5zaW9uMzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkJhc2ljU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC50ZXh0LnJ1bGVzLlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUw7Ci0KLS8qKgotICogQGF1dGhvciBuc2QKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgVHJhbnNpdGlvblRlc3RzIGV4dGVuZHMgVW56aXBwZWRQcm9qZWN0VGVzdGVyIHsKLQotCS8qKgotCSAqIAotCSAqLwotCXB1YmxpYyBUcmFuc2l0aW9uVGVzdHMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0U29mdFJldmVydCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlUGF0aCA9ICJ0ZXN0ZmlsZXMveG1sL0VtcHR5RmlsZS54bWwiOyAvLyROT04tTkxTLTEkCi0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiVGVzdCBDYXNlIGluIGVycm9yLiBDb3VsZCBub3QgZmluZCBmaWxlICIgKyBmaWxlUGF0aCwgZmlsZSk7IC8vJE5PTi1OTFMtMSQKLQkJSVBhdGggbG9jYXRpb25QYXRoID0gZmlsZS5nZXRMb2NhdGlvbigpOwotCQlJVGV4dEZpbGVCdWZmZXJNYW5hZ2VyIGJ1ZmZlck1hbmFnZXIgPSBGaWxlQnVmZmVycy5nZXRUZXh0RmlsZUJ1ZmZlck1hbmFnZXIoKTsKLQkJYnVmZmVyTWFuYWdlci5jb25uZWN0KGxvY2F0aW9uUGF0aCwgbnVsbCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlciBidWZmZXIgPSBidWZmZXJNYW5hZ2VyLmdldFRleHRGaWxlQnVmZmVyKGxvY2F0aW9uUGF0aCk7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IGJ1ZmZlci5nZXREb2N1bWVudCgpOwotCQlhc3NlcnROb3ROdWxsKGRvY3VtZW50KTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgY2xhc3Mgb2YgZG9jdW1lbnQiLCBkb2N1bWVudCBpbnN0YW5jZW9mIEJhc2ljU3RydWN0dXJlZERvY3VtZW50KTsgLy8kTk9OLU5MUy0xJAotCQlhc3NlcnRUcnVlKCJ3cm9uZyBwYXJ0aXRpb25lciBpbiBkb2N1bWVudC4iLCAoKElEb2N1bWVudEV4dGVuc2lvbjMpIGRvY3VtZW50KS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpIGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTCk7IC8vJE5PTi1OTFMtMSQKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoKElTdHJ1Y3R1cmVkRG9jdW1lbnQpIGRvY3VtZW50KTsKLQkJdHJ5IHsKLQkJCXRyeSB7Ci0JCQkJZG9jdW1lbnQucmVwbGFjZSgwLCAwLCAiX18iKTsgLy8kTk9OLU5MUy0xJAotCQkJCWRvY3VtZW50LnJlcGxhY2UoMiwgMCwgIjxhIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlkb2N1bWVudC5yZXBsYWNlKDQsIDAsICI+Iik7IC8vJE5PTi1OTFMtMSQKLQkJCQlkb2N1bWVudC5yZXBsYWNlKDUsIDAsICIgICIpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJCWFzc2VydE51bGwoZSk7Ci0JCQl9Ci0JCQlkb2N1bWVudC5zZXQoIiIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQotCQkJYnVmZmVyTWFuYWdlci5kaXNjb25uZWN0KGxvY2F0aW9uUGF0aCwgbnVsbCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9VbnppcHBlZFByb2plY3RUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1VuemlwcGVkUHJvamVjdFRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODhjNTRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1VuemlwcGVkUHJvamVjdFRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5TU0VNb2RlbFhNTFRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci0KLQotLyogCi0gKiBNYWRlIGFic3RyYWN0LCBzbyB3b24ndCBiZSBhdXRvbWF0aWNhbGx5IHBpY2tlZCB1cCBhcyB0ZXN0IChzaW5jZSBpbnRlbmRlZCB0byBiZSBzdWJjbGFzc2VkKS4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFVuemlwcGVkUHJvamVjdFRlc3RlciBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByb3RlY3RlZCBzdGF0aWMgSVByb2plY3QgZlRlc3RQcm9qZWN0OwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQ7Ci0JcHJpdmF0ZSBzdGF0aWMgaW50IG5TZXR1cHMgPSAwOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BST0pFQ1RfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcubmV3dGVzdHMiOwotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJblNldHVwcysrOwotCQlpZiAoIWZUZXN0UHJvamVjdEluaXRpYWxpemVkKSB7Ci0JCQlnZXRBbmRDcmVhdGVQcm9qZWN0KCk7Ci0JCQkvLyB1bnppcCBmaWxlcyB0byB0aGUgcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Qcm9qZWN0U3RyaW5nID0gZlRlc3RQcm9qZWN0LmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpOwotCQkJU3RyaW5nIGRlc3RpbmF0aW9uRm9sZGVyID0gZGVzdGluYXRpb25Qcm9qZWN0U3RyaW5nICsgIi8iOwotCQkJLy8gdGhpcyB6aXAgZmlsZSBpcyBzaXR0aW5nIGluIHRoZSAicm9vdCIgb2YgdGVzdCBwbHVnaW4KLQkJCUZpbGUgemlwRmlsZSA9IFNTRU1vZGVsWE1MVGVzdHNQbHVnaW4uZ2V0VGVzdEZpbGUoInRlc3RmaWxlcy56aXAiKTsKLQkJCVByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQkJcHJvalV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgZGVzdGluYXRpb25Gb2xkZXIpOwotCQkJcHJvalV0aWwuaW5pdEphdmFQcm9qZWN0KFRFU1RfUFJPSkVDVF9OQU1FKTsKLQkJCWZUZXN0UHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCWZUZXN0UHJvamVjdEluaXRpYWxpemVkID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCW5TZXR1cHMtLTsKLQkJaWYgKG5TZXR1cHMgPT0gMCkgewotCQkJaWYgKCFERUJVRykgewotCQkJCS8vCQkJCURpc3BsYXkgZGlzcGxheSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpOwotCQkJCS8vCQkJCWRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLQkJCQkvLwkJCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCS8vCQkJCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQkJLy8JCQkJCQlJUHJvamVjdCBwcm9qID0gZlRlc3RQcm9qZWN0OwotCQkJCS8vCQkJCQkJZlRlc3RQcm9qZWN0ID0gbnVsbDsKLQkJCQkvLwkJCQkJCXRyeSB7Ci0JCQkJLy8JCQkJCQkJcHJvalV0aWwuZGVsZXRlUHJvamVjdChwcm9qKTsKLQkJCQkvLwkJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8JCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkvLwkJCQkJCX0KLQkJCQkvLwkJCQkJfQotCQkJCS8vCQkJCX0pOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBnZXRBbmRDcmVhdGVQcm9qZWN0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkvL1Rlc3RzUGx1Z2luIHRlc3RzUGx1Z2luID0gKFRlc3RzUGx1Z2luKQotCQkvLyBQbGF0Zm9ybS5nZXRQbHVnaW4oIm9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy50ZXN0cyIpOwotCQlJV29ya3NwYWNlIHdvcmtzcGFjZSA9IGdldFdvcmtzcGFjZSgpOwotCQlJV29ya3NwYWNlUm9vdCByb290ID0gd29ya3NwYWNlLmdldFJvb3QoKTsKLQkJZlRlc3RQcm9qZWN0ID0gcm9vdC5nZXRQcm9qZWN0KFRFU1RfUFJPSkVDVF9OQU1FKTsKLQkJLy8gdGhpcyBmb3JtIGNyZWF0ZXMgcHJvamVjdCBhcyAibGlua2VkIiBiYWNrIHRvICdmaWxlUm9vdCcKLQkJLy9jcmVhdGVQcm9qZWN0KHRlc3RQcm9qZWN0LCBuZXcgUGF0aChmaWxlUm9vdCksIG51bGwpOwotCQljcmVhdGVQcm9qZWN0KGZUZXN0UHJvamVjdCwgbnVsbCwgbnVsbCk7Ci0JCWZUZXN0UHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZShmVGVzdFByb2plY3QuZXhpc3RzKCkpOwotCQkvLwkJSUNvbnRhaW5lciBkb3Rlc3RGaWxlcyA9IHRlc3RQcm9qZWN0LmdldEZvbGRlcigiZG90ZXN0RmlsZXMiKTsKLQkJLy8JCWFzc2VydFRydWUoZG90ZXN0RmlsZXMuZXhpc3RzKCkpOwotCQkvLwkJSVJlc291cmNlW10gYWxsRm9sZGVycyA9IGRvdGVzdEZpbGVzLm1lbWJlcnMoKTsKLQkJLy8JCWFzc2VydE5vdE51bGwoYWxsRm9sZGVycyk7Ci0JfQotIAotCXByaXZhdGUgc3RhdGljIHZvaWQgY3JlYXRlUHJvamVjdChJUHJvamVjdCBwcm9qZWN0LCBJUGF0aCBsb2NhdGlvblBhdGgsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlpZiAobW9uaXRvciA9PSBudWxsKSB7Ci0JCQltb25pdG9yID0gbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKLQkJfQotCQltb25pdG9yLmJlZ2luVGFzaygiY3JlYXRpbmcgdGVzdCBwcm9qZWN0IiwgMTApOwotCQkvLyBjcmVhdGUgdGhlIHByb2plY3QKLQkJdHJ5IHsKLQkJCWlmICghcHJvamVjdC5leGlzdHMoKSkgewotCQkJCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzYyA9IHByb2plY3QuZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCQlpZiAoUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS5lcXVhbHMobG9jYXRpb25QYXRoKSkgewotCQkJCQlsb2NhdGlvblBhdGggPSBudWxsOwotCQkJCX0KLQkJCQlkZXNjLnNldExvY2F0aW9uKGxvY2F0aW9uUGF0aCk7Ci0JCQkJcHJvamVjdC5jcmVhdGUoZGVzYywgbW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCQlpZiAoIXByb2plY3QuaXNPcGVuKCkpIHsKLQkJCQlwcm9qZWN0Lm9wZW4obW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9uaXRvciAhPSBudWxsKSB7Ci0JCQkJbW9uaXRvci5kb25lKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB3b3Jrc3BhY2UgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBJV29ya3NwYWNlIGdldFdvcmtzcGFjZSgpIHsKLQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vTmFtZVZhbGlkYXRvclRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vTmFtZVZhbGlkYXRvclRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwOTM0MjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9tL05hbWVWYWxpZGF0b3JUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb207Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuTmFtZVZhbGlkYXRvcjsKLQotcHVibGljIGNsYXNzIE5hbWVWYWxpZGF0b3JUZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgaW50IG5UcmlhbHMgPSAxMDA7Ci0KLQlwdWJsaWMgTmFtZVZhbGlkYXRvclRlc3RzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3QoaW50IHRlc3ROdW1iZXIsIFN0cmluZyB0ZXN0U3RyaW5nLCBCb29sZWFuIGV4cGVjdGVkVmFsaWRpdHkpIHsKLQkJYm9vbGVhbiBpc1ZhbGlkID0gTmFtZVZhbGlkYXRvci5pc1ZhbGlkKHRlc3RTdHJpbmcpOwotCQlhc3NlcnRFcXVhbHMoInRlc3ROdW1iZXI6ICIgKyB0ZXN0TnVtYmVyLCBleHBlY3RlZFZhbGlkaXR5LmJvb2xlYW5WYWx1ZSgpLCBpc1ZhbGlkKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdElzVmFsaWQoKSB7Ci0JCU9iamVjdFtdW10gdGVzdGVlcyA9IG5ldyBPYmplY3RbXVtdewotCQkJCQl7ImluaXRpYWwiLEJvb2xlYW4uVFJVRX0sCi0JCQkJCXsiZm9vIixCb29sZWFuLlRSVUV9LAotCQkJCQl7IjQiLEJvb2xlYW4uRkFMU0V9LAotCQkJCQl7Ijk5OTkiLCBCb29sZWFuLkZBTFNFfSwKLQkJCQkJeyJmOTk5OSIsIEJvb2xlYW4uVFJVRX0sCi0JCQkJCXsiIiwgQm9vbGVhbi5GQUxTRX0sCi0JCQkJCXsiZ290IHNwYWNlIiwgQm9vbGVhbi5GQUxTRX0sCi0JCQkJCXsiIHNwYWNlYmVmb3JlIiwgQm9vbGVhbi5GQUxTRX0sCi0JCQkJCXsic3BhY2VhZnRlciAiLCBCb29sZWFuLkZBTFNFfSwKLQkJCQkJeyJuczpuYW1lc3BhY2UiLCBCb29sZWFuLlRSVUV9LAotCQkJCQl7IjpmdW5ueW5zIiwgQm9vbGVhbi5UUlVFfSwKLQkJCQkJLyogSVNTVUU6IGlzICJlbmRuczoiIHJlYWxseSB2YWxpZCBuYW1lICovCi0JCQkJCXsiZW5kbnM6IiwgQm9vbGVhbi5UUlVFfSwKLQkJCQkJeyJ1c191bmRlcnNjb3JlIiwgQm9vbGVhbi5UUlVFfSwKLQkJCQkJeyJfdW5kZXJzY29yZSIsIEJvb2xlYW4uVFJVRX0sCi0JCQkJCXsidW5kZXJzY29yZV8iLCBCb29sZWFuLlRSVUV9LAotCQkJCQl7ImF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZSIsIEJvb2xlYW4uVFJVRX0sCi0JCQkJCX07Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdGVzdGVlcy5sZW5ndGg7IGkrKykgewotCQkJZm9yIChpbnQgaiA9IDA7IGogPCBuVHJpYWxzOyBqKyspIHsKLQkJCQlkb1Rlc3QoaSwgKFN0cmluZyl0ZXN0ZWVzW2ldWzBdLCAoQm9vbGVhbikgdGVzdGVlc1tpXVsxXSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC9UZXN0Rm9ybWF0UHJvY2Vzc29yWE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvVGVzdEZvcm1hdFByb2Nlc3NvclhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTIwMGNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC9UZXN0Rm9ybWF0UHJvY2Vzc29yWE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBFY2xpcHNlIEZvdW5kYXRpb24KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBKZXNwZXIgU3RlZW4gTfhsbGVyIC0gamVzcGVyQHNlbHNrYWJldC5vcmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZm9ybWF0OwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmZvcm1hdC5JU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLlVSSVJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5mb3JtYXQuRm9ybWF0UHJvY2Vzc29yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5mb3JtYXQuSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTDsKLQotcHVibGljIGNsYXNzIFRlc3RGb3JtYXRQcm9jZXNzb3JYTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFNQTElUX01VTFRJX0FUVFJTID0gZmFsc2U7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5ERU5UID0gIiAiOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBDTEVBUl9BTExfQkxBTktfTElORVMgPSBmYWxzZTsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfTElORV9XSURUSCA9IDcyOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVURl84ID0gIlVURi04IjsKLQotCXB1YmxpYyBUZXN0Rm9ybWF0UHJvY2Vzc29yWE1MKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByaXZhdGUgRm9ybWF0UHJvY2Vzc29yWE1MIGZvcm1hdFByb2Nlc3NvcjsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZvcm1hdFByb2Nlc3NvciA9IG5ldyBGb3JtYXRQcm9jZXNzb3JYTUwoKTsKLQl9Ci0KLQkvKioKLQkgKiBtdXN0IHJlbGVhc2UgbW9kZWwgKGZyb20gZWRpdCkgYWZ0ZXIKLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiAgICAgICAgICAgIHJlbGF0aXZlIHRvIHRoaXMgY2xhc3MgKFRlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXIpCi0JICovCi0JcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIGdldE1vZGVsRm9yRWRpdChmaW5hbCBTdHJpbmcgZmlsZW5hbWUpIHsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJCWlmIChpblN0cmVhbSA9PSBudWxsKQotCQkJCXRocm93IG5ldyBGaWxlTm90Rm91bmRFeGNlcHRpb24oIkNhbid0IGZpbGUgcmVzb3VyY2Ugc3RyZWFtICIgKyBmaWxlbmFtZSk7Ci0JCQlmaW5hbCBTdHJpbmcgYmFzZUZpbGUgPSBnZXRDbGFzcygpLmdldFJlc291cmNlKGZpbGVuYW1lKS50b1N0cmluZygpOwotCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGJhc2VGaWxlLCBpblN0cmVhbSwgbmV3IFVSSVJlc29sdmVyKCkgewotCi0JCQkJU3RyaW5nIGZCYXNlID0gYmFzZUZpbGU7Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldEZpbGVCYXNlTG9jYXRpb24oKSB7Ci0JCQkJCXJldHVybiBmQmFzZTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uQnlVUkkoU3RyaW5nIHVyaSkgewotCQkJCQlyZXR1cm4gZ2V0TG9jYXRpb25CeVVSSSh1cmksIGZCYXNlKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uQnlVUkkoU3RyaW5nIHVyaSwgYm9vbGVhbiByZXNvbHZlQ3Jvc3NQcm9qZWN0TGlua3MpIHsKLQkJCQkJcmV0dXJuIGdldExvY2F0aW9uQnlVUkkodXJpKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uQnlVUkkoU3RyaW5nIHVyaSwgU3RyaW5nIGJhc2VSZWZlcmVuY2UpIHsKLQkJCQkJaW50IGxhc3RTbGFzaCA9IGJhc2VSZWZlcmVuY2UubGFzdEluZGV4T2YoIi8iKTsKLQkJCQkJaWYgKGxhc3RTbGFzaCA+IDApCi0JCQkJCQlyZXR1cm4gYmFzZVJlZmVyZW5jZS5zdWJzdHJpbmcoMCwgbGFzdFNsYXNoICsgMSkgKyB1cmk7Ci0JCQkJCXJldHVybiBiYXNlUmVmZXJlbmNlOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb25CeVVSSShTdHJpbmcgdXJpLCBTdHJpbmcgYmFzZVJlZmVyZW5jZSwgYm9vbGVhbiByZXNvbHZlQ3Jvc3NQcm9qZWN0TGlua3MpIHsKLQkJCQkJcmV0dXJuIGdldExvY2F0aW9uQnlVUkkodXJpLCBiYXNlUmVmZXJlbmNlKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpIHsKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfQotCi0JCQkJcHVibGljIElDb250YWluZXIgZ2V0Um9vdExvY2F0aW9uKCkgewotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgSW5wdXRTdHJlYW0gZ2V0VVJJU3RyZWFtKFN0cmluZyB1cmkpIHsKLQkJCQkJcmV0dXJuIGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShnZXRMb2NhdGlvbkJ5VVJJKHVyaSkpOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHNldEZpbGVCYXNlTG9jYXRpb24oU3RyaW5nIG5ld0xvY2F0aW9uKSB7Ci0JCQkJCXRoaXMuZkJhc2UgPSBuZXdMb2NhdGlvbjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KElQcm9qZWN0IG5ld1Byb2plY3QpIHsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKLQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBtb2RlbDsKLQl9Ci0KLQlwcm90ZWN0ZWQgYm9vbGVhbiBpc0J5dGVBcnJheUlkZW50aWNhbChieXRlIGIxW10sIGJ5dGUgYjJbXSkgewotCQlpZiAoYjEubGVuZ3RoICE9IGIyLmxlbmd0aCkKLQkJCXJldHVybiBmYWxzZTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBiMS5sZW5ndGg7ICsraSkKLQkJCWlmIChiMVtpXSAhPSBiMltpXSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGZvcm1hdEFuZEFzc2VydEVxdWFscyhTdHJpbmcgYmVmb3JlUGF0aCwgU3RyaW5nIGFmdGVyUGF0aCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBiZWZvcmVNb2RlbCA9IG51bGwsIGFmdGVyTW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJYmVmb3JlTW9kZWwgPSBnZXRNb2RlbEZvckVkaXQoYmVmb3JlUGF0aCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZCBub3QgcmV0cmlldmUgc3RydWN0dXJlZCBtb2RlbCBmb3IgOiAiICsgYmVmb3JlUGF0aCwgYmVmb3JlTW9kZWwpOwotCi0JCQlhZnRlck1vZGVsID0gZ2V0TW9kZWxGb3JFZGl0KGFmdGVyUGF0aCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZCBub3QgcmV0cmlldmUgc3RydWN0dXJlZCBtb2RlbCBmb3IgOiAiICsgYWZ0ZXJQYXRoLCBhZnRlck1vZGVsKTsKLQotCQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKE1BWF9MSU5FX1dJRFRIKTsKLQkJCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhDTEVBUl9BTExfQkxBTktfTElORVMpOwotCQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KElOREVOVCk7Ci0JCQkoKElTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoU1BMSVRfTVVMVElfQVRUUlMpOwotCi0JCQlmb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoYmVmb3JlTW9kZWwpOwotCi0JCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gZm9ybWF0dGVkQnl0ZXMgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCQliZWZvcmVNb2RlbC5zYXZlKGZvcm1hdHRlZEJ5dGVzKTsgLy8gImJlZm9yZU1vZGVsIiBzaG91bGQgbm93IGJlCi0JCQkvLyBhZnRlciB0aGUgZm9ybWF0dGVyCi0KLQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBhZnRlckJ5dGVzID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJYWZ0ZXJNb2RlbC5zYXZlKGFmdGVyQnl0ZXMpOwotCi0JCQlhc3NlcnRFcXVhbHMoIkZvcm1hdHRlZCBkb2N1bWVudCBkaWZmZXJzIGZyb20gdGhlIGV4cGVjdGVkIiwgbmV3IFN0cmluZyhhZnRlckJ5dGVzLnRvQnl0ZUFycmF5KCksIFVURl84KSwgbmV3IFN0cmluZyhmb3JtYXR0ZWRCeXRlcy50b0J5dGVBcnJheSgpLCBVVEZfOCkpOwotCi0JCQkvLyBEbyB0aGUgc2FtZSBjaGVjayBpbiBiaW5hcnkgZm9yIGtpY2tzCi0JCQlhc3NlcnRUcnVlKCJGb3JtYXR0ZWQgZG9jdW1lbnQgZGlmZmVycyBmcm9tdG8gdGhlIGV4cGVjdGVkIiwgaXNCeXRlQXJyYXlJZGVudGljYWwoZm9ybWF0dGVkQnl0ZXMudG9CeXRlQXJyYXkoKSwgYWZ0ZXJCeXRlcy50b0J5dGVBcnJheSgpKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAoYmVmb3JlTW9kZWwgIT0gbnVsbCkKLQkJCQliZWZvcmVNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCWlmIChhZnRlck1vZGVsICE9IG51bGwpCi0JCQkJYWZ0ZXJNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVYbWwoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvc2ltcGxlLXN0YW5kYWxvbmUueG1sIiwgInRlc3RmaWxlcy94bWwvc2ltcGxlLXN0YW5kYWxvbmUtZm10LnhtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQcmVzZXJ2ZUZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtc3RhbmRhbG9uZS54bWwiLCAidGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtc3RhbmRhbG9uZS1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFByZXNlcnZlRm9ybWF0RFREKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE9uZUxpbmVGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxMTU3MTYKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL29uZWxpbmUueG1sIiwgInRlc3RmaWxlcy94bWwvb25lbGluZS1mbXQueG1sIik7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9vbmVsaW5lLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9vbmVsaW5lLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyYWExOWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvb25lbGluZS1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG9uZT4KLQk8dHdvPjwvdHdvPgotCTx0aHJlZT4KLQkJPGZvdXI+PC9mb3VyPgotCTwvdGhyZWU+Ci08L29uZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9vbmVsaW5lLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzIzMjQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48b25lPjx0d28+PC90d28+PHRocmVlPjxmb3VyPjwvZm91cj48L3RocmVlPjwvb25lPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9zaW1wbGUtc3RhbmRhbG9uZS1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWJiNjIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxtYWluPgotCVRoaXMgaXMganVzdCBhIHNpbXBsZSB0ZXN0Ci0KLQlvZiB0aGUgZm9ybWF0dGVyCi0KLQl3aGljaCBzaG91bGQgYmUgZWFzeSB0byBwYXNzLgotCTxkYXRhLXN0dWZmIGF0dHIxPSJzaG9ydC12YWx1ZSIgYTA9IiIgYTE9JyAnIGEyPSIgICIgYTM9JyAgICcKLQkJYTQ9IiAgICAiIGE1PScgICAgICcgYTY9IiAgICAgICAiIGF0dHIyPSJzaG9ydC12YWx1ZSIKLQkJYXR0ci13aGljaC1pcy1yZWFsbHktcmVhbGx5LW9oLXNvLWhvcnJpYmx5LWxvbmcteWVzLXNpci0xPSJhbHNvIHF1aXRlIGZhbnRhc3RpY2FsbHkgbG9uZyB2YWx1ZSB3aGljaCBtdXN0bid0IGJlICBicm9rZW4iCi0JCWF0dHIzPSJzaG9ydC12YWx1ZSI+Ci0KLQkJPGNkYXRhPgotCQkJPCFbQ0RBVEFbCi0gICBEYWEsIGRhYSwgZGEsIGRhIC0gZGEsIGRhIC0gZGEsIGRhCi0JCi0JCUNhbid0IHRvdWNoIHRoaXMhCi0gIChzcGFjZXMgaGVyZSkKLQkodGFiIGhlcmUpCi0JCV1dPgotCQk8L2NkYXRhPgotCQk8YT4KLQkJCTxiPmI8L2I+Ci0JCQk8Yj5iPC9iPgotCQkJPGI+YjwvYj48IS0tIENvbW1lbnQgaGVyZSAgZG9uJ3QgdHdpZGRsZSB3aXRoIHNwYWNlcyBpbiB0aGVtIC0tPgotCQkJPGI+YjwvYj4KLQkJCTxiPmI8L2I+Ci0JCQk8Yj5iPC9iPgotCQk8L2E+Ci0JCTw/dGFyZ2V0ICB3aHkgIGFtICBJICBoZXJlIAotICA/PgotCTwvZGF0YS1zdHVmZj4KLTwvbWFpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIzZWYzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9zaW1wbGUtc3RhbmRhbG9uZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxtYWluPgotICAgICBUaGlzIGlzIGp1c3QgYSBzaW1wbGUgdGVzdAotICAKLSAgIG9mIHRoZSBmb3JtYXR0ZXIKLSAgCi13aGljaCBzaG91bGQgYmUgZWFzeSB0byBwYXNzLgotPGRhdGEtc3R1ZmYgYXR0cjE9InNob3J0LXZhbHVlIiBhMD0iIiBhMT0nICcgYTI9IiAgIiBhMz0nICAgJyBhND0iICAgICIgYTU9JyAgICAgJyBhNj0iICAgICAgICIgYXR0cjI9InNob3J0LXZhbHVlIiBhdHRyLXdoaWNoLWlzLXJlYWxseS1yZWFsbHktb2gtc28taG9ycmlibHktbG9uZy15ZXMtc2lyLTE9ImFsc28gcXVpdGUgZmFudGFzdGljYWxseSBsb25nIHZhbHVlIHdoaWNoIG11c3RuJ3QgYmUgIGJyb2tlbiIgYXR0cjM9InNob3J0LXZhbHVlIgotICA+Ci0gIAotCTxjZGF0YT4KLSA8IVtDREFUQVsKLSAgIERhYSwgZGFhLCBkYSwgZGEgLSBkYSwgZGEgLSBkYSwgZGEKLQkKLQkJQ2FuJ3QgdG91Y2ggdGhpcyEKLSAgKHNwYWNlcyBoZXJlKQotCSh0YWIgaGVyZSkKLQkJXV0+Ci0JPC9jZGF0YT4KLQk8YT4KLQk8Yj5iPC9iPgotCTxiPmIgPC9iPgotCTxiPiBiPC9iPiAgPCEtLSBDb21tZW50IGhlcmUgIGRvbid0IHR3aWRkbGUgd2l0aCBzcGFjZXMgaW4gdGhlbSAtLT4gICAgICAJPGI+IGIgPC9iPgotCTxiPgotCWIKLQk8L2I+Ci0JPGI+YjwvYj4KLQk8L2E+PD90YXJnZXQgIHdoeSAgYW0gIEkgIGhlcmUgCi0gID8+Ci08L2RhdGEtc3R1ZmY+Ci08L21haW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtZHRkLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtZHRkLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MWU2ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgbWFpbiBTWVNURU0gInhtbC1zcGFjZS1wcmVzZXJ2ZS5kdGQiPgotPG1haW4+Ci0JPG5vdGhpbmc+dGhpcyBpcyBub3QgYSB0YXJnZXQsIHN0cmlwIHNwYWNlcyBhcyB5b3UgcGxlYXNlPC9ub3RoaW5nPgotCTxwcmVzZXJ2ZT4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAuCi0gIC4KLSAgLgotICA8L3ByZXNlcnZlPgotCW9mIHRoZSBmb3JtYXR0ZXIuCi0JPHByZXNlcnZlIHhtbDpzcGFjZT0iZGVmYXVsdCI+Ci0JCVRoaXMgcGFydGljdWxhciB0ZXh0IGNhbgotCi0JCWFuZCBzaG91bGQgYmUgcmVmb3JtYXR0ZWQuCi0JPC9wcmVzZXJ2ZT4KLQotCTxwcmVzZXJ2ZT4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAgICA8bm90aGluZz4KLQkJdGhpcyBzcGFjZSAgIGlzIG5vdCBmb3Igc2FsZQlPUiBGT1JNQVRUSU5HCi0JCSwgcGxlYXNlIDwvbm90aGluZz4gPCEtLSBOT1RFIFRIRSBTUEFDRVMgLS0+ICA8c3BhY2UtZGVmYXVsdD4KLQkJCU5vIG1hbgotCi0JCQlpcyBhbgotCi0JCQlpc2xhbmQsIC4gLiAuIGJ1dCB0aGlzIHNlY3Rpb24gaXMsIHJlYWxseSwgc28gY2xlYW4gaXQgdXAKLQkJCXBsZWFzZSAtIHdhc3RlIG9mIHNwYWNlCi0gIDwvc3BhY2UtZGVmYXVsdD4KLSAgLgotICAuIFRoaXMgc2hvdWxkIGJlIHNwYWNlICAgcHJlc2VydmVkCi0gIDwvcHJlc2VydmU+Ci0JPHByZXNlcnZlMj4KLVRoaXMgcGFydGljdWxhcgotICB0ZXh0IG1heSAKLQotbm90ICByZWZvcm1hdHRlZC48L3ByZXNlcnZlMj4KLQk8bm90aGluZz50aGlzIGlzIG5vdCBhIHRhcmdldCwgc3RyaXAgc3BhY2VzIGFzIHlvdSBwbGVhc2U8L25vdGhpbmc+Ci08L21haW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtZHRkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGEyYjcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgbWFpbiBTWVNURU0gInhtbC1zcGFjZS1wcmVzZXJ2ZS5kdGQiPgotPG1haW4+Ci0JPG5vdGhpbmc+Ci0JCXRoaXMgIGlzIG5vdCBhICB0YXJnZXQsIHN0cmlwIHNwYWNlcyBhcwotCQl5b3UgIHBsZWFzZSA8L25vdGhpbmc+Ci08cHJlc2VydmUgICAgID4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAuCi0gIC4KLSAgLgotICA8L3ByZXNlcnZlPgotICAgb2YgdGhlIGZvcm1hdHRlci4KLSAgIDxwcmVzZXJ2ZSB4bWw6c3BhY2U9ImRlZmF1bHQiPgotVGhpcyBwYXJ0aWN1bGFyIHRleHQgY2FuIAotCi1hbmQgICAgIHNob3VsZCBiZSByZWZvcm1hdHRlZC48L3ByZXNlcnZlPgotICAgCi08cHJlc2VydmUgICAgID4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAgICA8bm90aGluZz4KLQkJdGhpcyBzcGFjZSAgIGlzIG5vdCBmb3Igc2FsZQlPUiBGT1JNQVRUSU5HCi0JCSwgcGxlYXNlIDwvbm90aGluZz4gPCEtLSBOT1RFIFRIRSBTUEFDRVMgLS0+ICA8c3BhY2UtZGVmYXVsdCA+Ci0gTm8gbWFuCi0gCi0gaXMgYW4KLSAKLSBpc2xhbmQsIC4KLSAgLgotICAuCi0gYnV0IHRoaXMgc2VjdGlvbiBpcywgcmVhbGx5LCBzbyBjbGVhbiBpdCB1cCBwbGVhc2UgLSB3YXN0ZSBvZiAgICAgICAgICAgc3BhY2UKLSAJPC9zcGFjZS1kZWZhdWx0PgotICAuCi0gIC4gVGhpcyBzaG91bGQgYmUgc3BhY2UgICBwcmVzZXJ2ZWQKLSAgPC9wcmVzZXJ2ZT4KLSAgIDxwcmVzZXJ2ZTI+Ci1UaGlzIHBhcnRpY3VsYXIKLSAgdGV4dCBtYXkgCi0KLW5vdCAgcmVmb3JtYXR0ZWQuPC9wcmVzZXJ2ZTI+ICA8bm90aGluZz4KLQkJdGhpcyAgaXMgbm90IGEgIHRhcmdldCwgc3RyaXAgc3BhY2VzIGFzCi0JCXlvdSAgcGxlYXNlIDwvbm90aGluZz4KLTwvbWFpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtc3RhbmRhbG9uZS1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTExOTNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxtYWluPgotCTxub3RoaW5nPnRoaXMgaXMgbm90IGEgdGFyZ2V0LCBzdHJpcCBzcGFjZXMgYXMgeW91IHBsZWFzZTwvbm90aGluZz4KLQk8cHJlc2VydmUgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgYnV0LWF0dHItY2xlYW4tdXA9InRydWUiPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotIC4KLSAgLgotICAuCi0gIDwvcHJlc2VydmU+Ci0Jb2YgdGhlIGZvcm1hdHRlcgotCTxwcmVzZXJ2ZSB4bWw6c3BhY2U9InByZXNlcnZlIiBidXQtYXR0ci1jbGVhbi11cD0idHJ1ZSI+Ci0gIFRoaXMgaXMganVzdAotICAgICAKLSBhIHNpbXBsZSB0ZXN0Ci0gICAgPG5vdGhpbmc+Ci0JCXRoaXMgc3BhY2UgICBpcyBub3QgZm9yIHNhbGUJT1IgRk9STUFUVElORwotCQksIHBsZWFzZSA8L25vdGhpbmc+IDwhLS0gTk9URSBUSEUgU1BBQ0VTIC0tPiAgPHNwYWNlLWRlZmF1bHQKLQkJCXhtbDpzcGFjZT0iZGVmYXVsdCI+Ci0JCQlObyBtYW4KLQotCQkJaXMgYW4KLQotCQkJaXNsYW5kLCAuIC4gLiBidXQgdGhpcyBzZWN0aW9uIGlzLCByZWFsbHksIHNvIGNsZWFuIGl0IHVwCi0JCQlwbGVhc2UgLSB3YXN0ZSBvZiBzcGFjZQotICA8L3NwYWNlLWRlZmF1bHQ+Ci0gIC4KLSAgLiBUaGlzIHNob3VsZCBiZSBzcGFjZSAgIHByZXNlcnZlZAotICA8L3ByZXNlcnZlPgotCTxub3RoaW5nPnRoaXMgaXMgbm90IGEgdGFyZ2V0LCBzdHJpcCBzcGFjZXMgYXMgeW91IHBsZWFzZTwvbm90aGluZz4KLTwvbWFpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IxODc1Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtc3RhbmRhbG9uZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxtYWluPgotCTxub3RoaW5nPgotCQl0aGlzICBpcyBub3QgYSAgdGFyZ2V0LCBzdHJpcCBzcGFjZXMgYXMKLQkJeW91ICBwbGVhc2UgPC9ub3RoaW5nPgotPHByZXNlcnZlIHhtbDpzcGFjZT0icHJlc2VydmUiICAgIGJ1dC1hdHRyLWNsZWFuLXVwID0gInRydWUiPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotIC4KLSAgLgotICAuCi0gIDwvcHJlc2VydmU+Ci0gICBvZiB0aGUgZm9ybWF0dGVyCi08cHJlc2VydmUgIHhtbDpzcGFjZT0icHJlc2VydmUiICAgIGJ1dC1hdHRyLWNsZWFuLXVwID0gInRydWUiPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotICAgIDxub3RoaW5nPgotCQl0aGlzIHNwYWNlICAgaXMgbm90IGZvciBzYWxlCU9SIEZPUk1BVFRJTkcKLQkJLCBwbGVhc2UgPC9ub3RoaW5nPiA8IS0tIE5PVEUgVEhFIFNQQUNFUyAtLT4gIDxzcGFjZS1kZWZhdWx0IHhtbDpzcGFjZT0iZGVmYXVsdCI+Ci0gTm8gbWFuCi0gCi0gaXMgYW4KLSAKLSBpc2xhbmQsIC4KLSAgLgotICAuCi0gYnV0IHRoaXMgc2VjdGlvbiBpcywgcmVhbGx5LCBzbyBjbGVhbiBpdCB1cCBwbGVhc2UgLSB3YXN0ZSBvZiAgICAgICAgICAgc3BhY2UKLSAJPC9zcGFjZS1kZWZhdWx0PgotICAuCi0gIC4gVGhpcyBzaG91bGQgYmUgc3BhY2UgICBwcmVzZXJ2ZWQKLSAgPC9wcmVzZXJ2ZT4KLSAgPG5vdGhpbmc+Ci0JCXRoaXMgIGlzIG5vdCBhICB0YXJnZXQsIHN0cmlwIHNwYWNlcyBhcwotCQl5b3UgIHBsZWFzZSA8L25vdGhpbmc+Ci08L21haW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U1NjdiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgZW5jb2Rpbmc9IlVTLUFTQ0lJIj8+DQotDQotPCFFTEVNRU5UIG1haW4gKCNQQ0RBVEEgfCBub3RoaW5nIHwgcHJlc2VydmUgfCBwcmVzZXJ2ZTIpKiA+DQotDQotPCFFTEVNRU5UIHByZXNlcnZlICgjUENEQVRBIHwgbm90aGluZyB8IHNwYWNlLWRlZmF1bHQpKiA+DQotPCFBVFRMSVNUIHByZXNlcnZlIHhtbDpzcGFjZSAoZGVmYXVsdHxwcmVzZXJ2ZSkgJ3ByZXNlcnZlJz4NCi0NCi08IUVMRU1FTlQgcHJlc2VydmUyICgjUENEQVRBIHwgbm90aGluZyB8IHNwYWNlLWRlZmF1bHQpKiA+DQotPCFBVFRMSVNUIHByZXNlcnZlMiB4bWw6c3BhY2UgTk1UT0tFTiAjRklYRUQgInByZXNlcnZlIj4NCi0NCi08IUVMRU1FTlQgc3BhY2UtZGVmYXVsdCAoI1BDREFUQXwgbm90aGluZyB8IHByZXNlcnZlKSo+DQotPCFBVFRMSVNUIHNwYWNlLWRlZmF1bHQgeG1sOnNwYWNlIChkZWZhdWx0fHByZXNlcnZlKSAnZGVmYXVsdCc+DQotDQotPCFFTEVNRU5UIG5vdGhpbmcgKCNQQ0RBVEEpID4NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0RnJhZ0ZpbGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RGcmFnRmlsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGU4MzYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RGcmFnRmlsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ0J1ZmZlcklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotCi0KLQotcHVibGljIGNsYXNzIFRlc3RGcmFnRmlsZSBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RGcmFnKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCVN0cmluZyB0ZXN0U3RyaW5nMSA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz5cclxuIiArICI8IS0tVGhpcyBpcyBhbiBpbnRlcm5hbGx5IGdlbmVyYXRlZCBmaWxlIC0gbWFudWFsIGNoYW5nZXMgdG8gaXQgd2lsbCBiZSBpZ25vcmVkIGFuZCBvdmVyd3JpdHRlbi4tLT5cclxuIiArICI8RnJhZ21lbnQgcGFyZW50PVwiL2VqYi1qYXIvZW50ZXJwcmlzZS1iZWFucyZsdDtkZXNjcmlwdGlvbixkaXNwbGF5LW5hbWUsc21hbGwtaWNvbixsYXJnZS1pY29uXCIgZGVzdGluYXRpb249XCJlamItamFyLnhtbFwiIHR5cGU9XCJ4bWxcIiB4bWxpZD1cImlkLHhtaTppZFwiIHRhZ1NldD1cImVqYlwiPlxyXG4iICsgIjxzZXNzaW9uIGlkPVwiZWpicy5UZXN0QmVhblwiPlxyXG4iICsgIjxlamItbmFtZT5UZXN0PC9lamItbmFtZT5cclxuIiArICI8aG9tZT5lamJzLlRlc3RIb21lPC9ob21lPlxyXG4iICsgIjxyZW1vdGU+ZWpicy5UZXN0PC9yZW1vdGU+XHJcbiIgKyAiPGVqYi1jbGFzcz5lamJzLlRlc3RCZWFuPC9lamItY2xhc3M+XHJcbiIgKyAiPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT5cclxuIiArICI8dHJhbnNhY3Rpb24tdHlwZT5Db250YWluZXI8L3RyYW5zYWN0aW9uLXR5cGU+XHJcbiIgKyAiPC9zZXNzaW9uPlxyXG4iICsgIjwvRnJhZ21lbnQ+IjsKLQotCi0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHRlc3RTdHJpbmcxLmdldEJ5dGVzKCJ1dGY4IikpOwotCi0JCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yUmVhZCgidGVzdC5mcmFnIiwgaW5wdXRTdHJlYW0sIG51bGwpOyAvLyROT04tTkxTLTEkCi0KLQkJU3lzdGVtLm91dC5wcmludGxuKG1vZGVsKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RnJhZ1goKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0KLQkJU3RyaW5nIHRlc3RTdHJpbmcgPSAiPCEtLVRoaXMgaXMgYW4gaW50ZXJuYWxseSBnZW5lcmF0ZWQgZmlsZSAtIG1hbnVhbCBjaGFuZ2VzIHRvIGl0IHdpbGwgYmUgaWdub3JlZCBhbmQgb3ZlcndyaXR0ZW4uLS0+XHJcbiIgKyAiPEZyYWdtZW50IHBhcmVudD1cIi9lamItamFyL2VudGVycHJpc2UtYmVhbnMmbHQ7ZGVzY3JpcHRpb24sZGlzcGxheS1uYW1lLHNtYWxsLWljb24sbGFyZ2UtaWNvblwiIGRlc3RpbmF0aW9uPVwiZWpiLWphci54bWxcIiB0eXBlPVwieG1sXCIgeG1saWQ9XCJpZCx4bWk6aWRcIiB0YWdTZXQ9XCJlamJcIj5cclxuIiArICI8c2Vzc2lvbiBpZD1cImVqYnMuVGVzdEJlYW5cIj5cclxuIiArICI8ZWpiLW5hbWU+VGVzdDwvZWpiLW5hbWU+XHJcbiIgKyAiPGhvbWU+ZWpicy5UZXN0SG9tZTwvaG9tZT5cclxuIiArICI8cmVtb3RlPmVqYnMuVGVzdDwvcmVtb3RlPlxyXG4iICsgIjxlamItY2xhc3M+ZWpicy5UZXN0QmVhbjwvZWpiLWNsYXNzPlxyXG4iICsgIjxzZXNzaW9uLXR5cGU+U3RhdGVsZXNzPC9zZXNzaW9uLXR5cGU+XHJcbiIgKyAiPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPlxyXG4iICsgIjwvc2Vzc2lvbj5cclxuIiArICI8L0ZyYWdtZW50PiI7Ci0KLQotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBTdHJpbmdCdWZmZXJJbnB1dFN0cmVhbSh0ZXN0U3RyaW5nKTsKLQotCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoInRlc3QuZnJhZ3giLCBpbnB1dFN0cmVhbSwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQotCQlTeXN0ZW0ub3V0LnByaW50bG4obW9kZWwpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4obW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCkpOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbE1hbmFnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbE1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY5OTNjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjUgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZS5kYXRhbG9jYXRpb24uTG9jYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV4Y2VwdGlvbnMuUmVzb3VyY2VBbHJlYWR5RXhpc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlSW5Vc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotCi1wdWJsaWMgY2xhc3MgVGVzdE1vZGVsTWFuYWdlciBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmUHJvamVjdE5hbWUgPSAiRE9DVU1FTlQtTE9BREVSIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmWmlwRmlsZU5hbWUgPSAieG1sLWRvY3VtZW50LWxvYWRlci10ZXN0cy56aXAiOwotCi0JcHVibGljIFRlc3RNb2RlbE1hbmFnZXIoKSB7Ci0JCXN1cGVyKCJUZXN0TW9kZWxNYW5hZ2VyIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlzdXBlci5zZXRVcCgpOwotCQlpZiAoIXRoaXMuaXNTZXR1cCkgewotCQkJZG9TZXR1cCgpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBkb1NldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJLy8gcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCUxvY2F0aW9uIHBsYXRmb3JtTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCk7Ci0KLQkJUHJvamVjdFVuemlwVXRpbGl0eSB1bnppcFV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQlGaWxlIHppcEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIsIGZaaXBGaWxlTmFtZSwgUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSKTsKLQkJdW56aXBVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIHBsYXRmb3JtTG9jYXRpb24uZ2V0VVJMKCkuZ2V0RmlsZSgpKTsKLQkJdW56aXBVdGlsLmluaXRKYXZhUHJvamVjdChmUHJvamVjdE5hbWUpOwotCX0KLQotCS8qKgotCSAqIG11c3QgcmVsZWFzZSBhZnRlciB1c2UhCi0JICogCi0JICogQHJldHVybgotCSAqLwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JFZGl0KCkgewotCQkvLyBmcm9tIGEgZmlsZQotCQlJRmlsZSBmID0gZ2V0RmlsZSgpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JcHJpdmF0ZSBJRmlsZSBnZXRGaWxlKCkgewotCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZQcm9qZWN0TmFtZSArICIvZmlsZXMvc2ltcGxlLnhtbCIpKTsKLQl9Ci0JCi0JcHJpdmF0ZSBJTW9kZWxNYW5hZ2VyIGdldE1NKCkgewotCQlyZXR1cm4gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29weU1vZGVsKCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gZ2V0U3RydWN0dXJlZE1vZGVsRm9yRWRpdCgpOwotCQkJdHJ5IHsKLQkJCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsQ29weSA9IGdldE1NKCkuY29weU1vZGVsRm9yRWRpdChtb2RlbC5nZXRJZCgpLCAibmV3SWQiKTsKLQkJCQlhc3NlcnROb3ROdWxsKCJjb3BpZWQgbW9kZWwgd2FzIG51bGwiLCBtb2RlbENvcHkpOwotCQkJfQotCQkJY2F0Y2ggKFJlc291cmNlSW5Vc2UgZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQkKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZU5ld0luc3RhbmNlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCUlTdHJ1Y3R1cmVkTW9kZWwgbmV3SW5zdGFuY2UgPSBnZXRNTSgpLmNyZWF0ZU5ld0luc3RhbmNlKG1vZGVsKTsKLQkJCWFzc2VydFRydWUoImZhaWxlZCB0byBjcmVhdGUgbmV3IGluc3RhbmNlIG9mOiAiICsgbW9kZWwsIG1vZGVsICE9IG5ld0luc3RhbmNlKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudEZvcigpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJSUZpbGUgZmlsZSA9IGdldEZpbGUoKTsKLQkJCS8vIGVuc3VyZSBtb2RlbCBhbHJlYWR5IGV4aXN0cwotCQkJbW9kZWwgPSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JFZGl0KCk7Ci0JCQlib29sZWFuIHJlc291cmNlRXhpc3RzID0gZmFsc2U7Ci0JCQl0cnkgewotCQkJCWdldE1NKCkuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50Rm9yKGZpbGUpOwotCQkJfQotCQkJY2F0Y2goUmVzb3VyY2VBbHJlYWR5RXhpc3RzIGV4KSB7Ci0JCQkJcmVzb3VyY2VFeGlzdHMgPSB0cnVlOwotCQkJfQotCQkJYXNzZXJ0VHJ1ZSgic2hvdWxkIGhhdmUgZ290dGVuIFJlc291cmNlQWxyZWFkeUV4aXRzIGV4Y2VwdGlvbiIsIHJlc291cmNlRXhpc3RzKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcigpICB0aHJvd3MgSU9FeGNlcHRpb24sIFJlc291cmNlQWxyZWFkeUV4aXN0cywgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJSUZpbGUgZmlsZSA9IGdldEZpbGUoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IGdldE1NKCkuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKGZpbGUpOwotCQkJYXNzZXJ0Tm90TnVsbCgiZmFpbGVkIHRvIGNyZWF0ZSBzdHJ1Y3R1cmVkIGRvY3VtZW50Iiwgc0RvYyk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRFeGlzdGluZ01vZGVsRnJvbUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJRmlsZSBmID0gZ2V0RmlsZSgpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJSVN0cnVjdHVyZWRNb2RlbCBleGlzdGluZ01vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gZ2V0U3RydWN0dXJlZE1vZGVsRm9yRWRpdCgpOwotCQkJZXhpc3RpbmdNb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0RXhpc3RpbmdNb2RlbEZvckVkaXQoZik7Ci0JCQlhc3NlcnROb3ROdWxsKCJmYWlsZWQgdG8gZ2V0IGV4aXN0aW5nIG1vZGVsIiwgZXhpc3RpbmdNb2RlbCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCWlmIChleGlzdGluZ01vZGVsICE9IG51bGwpCi0JCQkJZXhpc3RpbmdNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCQkKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRFeGlzdGluZ01vZGVsRnJvbURvY3VtZW50KCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJSVN0cnVjdHVyZWRNb2RlbCBnb3R0ZW5Nb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlnb3R0ZW5Nb2RlbCA9IGdldE1NKCkuZ2V0RXhpc3RpbmdNb2RlbEZvckVkaXQoZG9jKTsKLQkJCWFzc2VydFRydWUoIm1vZGVscyBzaG91bGQgYmUgdGhlIHNhbWUgaW5zdGFuY2UiLCBtb2RlbCA9PSBnb3R0ZW5Nb2RlbCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCWlmIChnb3R0ZW5Nb2RlbCAhPSBudWxsKQotCQkJCWdvdHRlbk1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRNb2RlbEZyb21GaWxlKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSUZpbGUgZiA9IGdldEZpbGUoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGYpOwotCQkJYXNzZXJ0Tm90TnVsbCgiZmFpbGVkIHRvIGdldCBtb2RlbCIsIG1vZGVsKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldE1vZGVsRnJvbURvY3VtZW50KCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJSVN0cnVjdHVyZWRNb2RlbCBnb3R0ZW5Nb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCSAgICBnb3R0ZW5Nb2RlbCA9IGdldE1NKCkuZ2V0TW9kZWxGb3JFZGl0KGRvYyk7Ci0JCQlhc3NlcnRUcnVlKCJtb2RlbHMgc2hvdWxkIGJlIHRoZSBzYW1lIGluc3RhbmNlIiwgbW9kZWwgPT0gZ290dGVuTW9kZWwpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQlpZiAoZ290dGVuTW9kZWwgIT0gbnVsbCkKLQkJCQlnb3R0ZW5Nb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJc1NoYXJlZCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwyID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gZ2V0U3RydWN0dXJlZE1vZGVsRm9yRWRpdCgpOwotCQkJbW9kZWwyID0gZ2V0U3RydWN0dXJlZE1vZGVsRm9yRWRpdCgpOwotCQkJLy8gVE9ETzogd2lsbCBjaGFuZ2Ugd2hlbiBBUEkgYWRkZWQgdG8gTU0KLQkJCWJvb2xlYW4gaXNTaGFyZWQgPSBnZXRNTSgpLmlzU2hhcmVkKG1vZGVsLmdldElkKCkpOwotCQkJYXNzZXJ0VHJ1ZSgibW9kZWwgc2hvdWxkIGJlIHNoYXJlZCIsIGlzU2hhcmVkKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJaWYgKG1vZGVsMiAhPSBudWxsKQotCQkJCW1vZGVsMi5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZWluaXRpYWxpemUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gZ2V0U3RydWN0dXJlZE1vZGVsRm9yRWRpdCgpOwotCQkJZ2V0TU0oKS5yZWluaXRpYWxpemUobW9kZWwpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVsZWFzZU1vZGVsKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gVE9ETzogd2lsbCBuZWVkIHRvIGltcGxlbWVudCB3aGVuIE1NIGhhcyB0aGlzIGZ1bmN0aW9uCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNhdmVNb2RlbCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JFZGl0KCk7Ci0JCQkvLyBUT0RPOiB3aWxsIG5lZWQgdG8gY2hhbmdlIHdoZW4gTU0gaGFzIHRoaXMgZnVuY3Rpb24KLQkJCW1vZGVsLnNhdmUoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNhdmVNb2RlbElmTm90U2hhcmVkKCkgewotCQkvLyBUT0RPOiB3aWxsIG5lZWQgdG8gaW1wbGVtZW50IHdoZW4gTU0gaGFzIHRoaXMgZnVuY3Rpb24KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxzRnJvbUZpbGVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxzRnJvbUZpbGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYjQ4NGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsc0Zyb21GaWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nQnVmZmVySW5wdXRTdHJlYW07Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLkZpbGVCdWZmZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuSVRleHRGaWxlQnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuSVRleHRGaWxlQnVmZmVyTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV4Y2VwdGlvbnMuUmVzb3VyY2VBbHJlYWR5RXhpc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlSW5Vc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnRleHQucnVsZXMuU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQuVW56aXBwZWRQcm9qZWN0VGVzdGVyOwotCi0KLQotcHVibGljIGNsYXNzIFRlc3RNb2RlbHNGcm9tRmlsZXMgZXh0ZW5kcyBVbnppcHBlZFByb2plY3RUZXN0ZXIgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT05FWElTVEVOVF9GSUxFTkFNRTEgPSAidGVzdGZpbGVzL3htbC90ZXN0bm9uZXhpc3RlbnQxLnhtbCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PTkVYSVNURU5UX0ZJTEVOQU1FMiA9ICJ0ZXN0ZmlsZXMveG1sL3Rlc3Rub25leGlzdGVudDIueG1sIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ORVhJU1RFTlRfRklMRU5BTUUzID0gInRlc3RmaWxlcy94bWwvdGVzdG5vbmV4aXN0ZW50My54bWwiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWElTVEVOVF9GSUxFTkFNRTEgPSAidGVzdGZpbGVzL3htbC90ZXN0Tm9ybWFsQ2FzZS54bWwiOwotCXByaXZhdGUgZmluYWwgc3RhdGljIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudEZpbGVXaXRoQnVmZmVyKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGVCdWZmZXIoTk9ORVhJU1RFTlRfRklMRU5BTUUxLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbkV4aXN0ZW50WE1MKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoTk9ORVhJU1RFTlRfRklMRU5BTUUyLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbkV4aXN0ZW50WE1MSURzKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGVJRHMoTk9ORVhJU1RFTlRfRklMRU5BTUUzLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZUNhc2UoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZShFWElTVEVOVF9GSUxFTkFNRTEsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYWRkQ29udGVudHNBbmRDcmVhdGVGaWxlKElGaWxlIGZpbGUpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJU3RyaW5nQnVmZmVySW5wdXRTdHJlYW0gc3RyaW5nU3RyZWFtID0gbmV3IFN0cmluZ0J1ZmZlcklucHV0U3RyZWFtKCJ0ZXN0aW5nIHRlc3RpbmcgdGVzdGluZyIpOwotCQlmaWxlLmNyZWF0ZShzdHJpbmdTdHJlYW0sIGZhbHNlLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3RyaW5nCi0JICogQHBhcmFtIGNsYXNzMQotCSAqIEBwYXJhbSBjbGFzczIKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBSZXNvdXJjZUluVXNlCi0JICogQHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMKLQkgKi8KLQlwcml2YXRlIHZvaWQgZG9UZXN0Q3JlYXRlKFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgY2xhc3MxLCBDbGFzcyBjbGFzczIpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWlmIChmaWxlID09IG51bGwpIHsKLQkJCWZpbGUgPSBmVGVzdFByb2plY3QuZ2V0RmlsZShmaWxlUGF0aCk7Ci0JCX0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXROZXdNb2RlbEZvckVkaXQoZmlsZSwgdHJ1ZSk7Ci0JCXRyeSB7Ci0JCQkvLyBjb3VudCBhcyBzdWNjZXNzIGlmIGdldHMgdG8gaGVlciB3aXRob3V0IGV4Y2VwdGlvbgotCQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQkJCVN0cmluZyBmaWxlTG9jYXRpb24gPSBtb2RlbC5nZXRCYXNlTG9jYXRpb24oKTsKLQkJCVN0cmluZyBpZCA9IG1vZGVsLmdldElkKCk7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oImZpbGVMb2NhdGlvbjogIiArIGZpbGVMb2NhdGlvbik7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJpZDogIiArIGlkKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdENyZWF0ZUJ1ZmZlcihTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGNsYXNzMSwgQ2xhc3MgY2xhc3MyKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJaWYgKGZpbGUgPT0gbnVsbCkgewotCQkJZmlsZSA9IGZUZXN0UHJvamVjdC5nZXRGaWxlKGZpbGVQYXRoKTsKLQkJfQotCi0JCUlUZXh0RmlsZUJ1ZmZlciBmaWxlQnVmZmVyQmVmb3JlRXhpc3RzID0gZ2V0VGV4dEJ1ZmZlcihmaWxlKTsKLQotCQlhZGRDb250ZW50c0FuZENyZWF0ZUZpbGUoZmlsZSk7Ci0KLQkJSVRleHRGaWxlQnVmZmVyIGZpbGVCdWZmZXJBZnRlckV4aXN0cyA9IGdldFRleHRCdWZmZXIoZmlsZSk7Ci0KLQkJYm9vbGVhbiBidWZmZXJzSWRlbnRpY2FsID0gZmlsZUJ1ZmZlckJlZm9yZUV4aXN0cyA9PSBmaWxlQnVmZmVyQWZ0ZXJFeGlzdHM7Ci0JCWFzc2VydFRydWUoYnVmZmVyc0lkZW50aWNhbCk7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGZpbGVCdWZmZXJCZWZvcmVFeGlzdHMuZ2V0TG9jYXRpb24oKSk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZmlsZUJ1ZmZlckFmdGVyRXhpc3RzLmdldExvY2F0aW9uKCkpOwotCQl9Ci0JCQotCi0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0Q3JlYXRlSURzKFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgY2xhc3MxLCBDbGFzcyBjbGFzczIpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWlmIChmaWxlID09IG51bGwpIHsKLQkJCWZpbGUgPSBmVGVzdFByb2plY3QuZ2V0RmlsZShmaWxlUGF0aCk7Ci0JCX0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXROZXdNb2RlbEZvckVkaXQoZmlsZSwgdHJ1ZSk7Ci0KLQkJdHJ5IHsKLQkJCWFzc2VydE5vdE51bGwobW9kZWwpOwotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJJRDogIiArIG1vZGVsLmdldElkKCkpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQmFzZUxvY2F0aW9uIiArIG1vZGVsLmdldEJhc2VMb2NhdGlvbigpKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIElUZXh0RmlsZUJ1ZmZlciBnZXRUZXh0QnVmZmVyKElGaWxlIGZpbGUpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSVRleHRGaWxlQnVmZmVyTWFuYWdlciBmaWxlQnVmZmVyTWFuYWdlciA9IEZpbGVCdWZmZXJzLmdldFRleHRGaWxlQnVmZmVyTWFuYWdlcigpOwotCQlJUGF0aCBmaWxlSVBhdGggPSBmaWxlLmdldEZ1bGxQYXRoKCk7Ci0JCUlQYXRoIG5vcm1hbGl6ZWRQYXRoID0gRmlsZUJ1ZmZlcnMubm9ybWFsaXplTG9jYXRpb24oZmlsZUlQYXRoKTsKLQkJZmlsZUJ1ZmZlck1hbmFnZXIuY29ubmVjdChub3JtYWxpemVkUGF0aCwgbnVsbCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlciBidWZmZXIgPSBmaWxlQnVmZmVyTWFuYWdlci5nZXRUZXh0RmlsZUJ1ZmZlcihub3JtYWxpemVkUGF0aCk7Ci0JCXJldHVybiBidWZmZXI7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0U3RydWN0dXJlZE1vZGVsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0U3RydWN0dXJlZE1vZGVsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZWU1MDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdFN0cnVjdHVyZWRNb2RlbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIzICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZS5kYXRhbG9jYXRpb24uTG9jYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbFN0YXRlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotCi1wdWJsaWMgY2xhc3MgVGVzdFN0cnVjdHVyZWRNb2RlbCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0JCi0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmUHJvamVjdE5hbWUgPSAiRE9DVU1FTlQtTE9BREVSIjsKLQkvLyBpcyBpdCBhIHByb2JsZW0gdG8gdW56aXAgdGhlIHNhbWUgcHJvamVjdCBpbgotCS8vIGRpZmZlcmVudCB0ZXN0cz8KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmWmlwRmlsZU5hbWUgPSAieG1sLWRvY3VtZW50LWxvYWRlci10ZXN0cy56aXAiOwotCi0JcHVibGljIFRlc3RTdHJ1Y3R1cmVkTW9kZWwoKSB7Ci0JCXN1cGVyKCJUZXN0U3RydWN0dXJlZE1vZGVsIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlzdXBlci5zZXRVcCgpOwotCQlpZiAoIXRoaXMuaXNTZXR1cCkgewotCQkJCi0JCQlkb1NldHVwKCk7Ci0JCQl0aGlzLmlzU2V0dXAgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvU2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQkvLyByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJTG9jYXRpb24gcGxhdGZvcm1Mb2NhdGlvbiA9IFBsYXRmb3JtLmdldEluc3RhbmNlTG9jYXRpb24oKTsKLQotCQlQcm9qZWN0VW56aXBVdGlsaXR5IHVuemlwVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCUZpbGUgemlwRmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUiwgZlppcEZpbGVOYW1lLCBQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIpOwotCQl1bnppcFV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgcGxhdGZvcm1Mb2NhdGlvbi5nZXRVUkwoKS5nZXRGaWxlKCkpOwotCQl1bnppcFV0aWwuaW5pdEphdmFQcm9qZWN0KGZQcm9qZWN0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFib3V0VG9DaGFuZ2VNb2RlbCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCW1vZGVsLmFib3V0VG9DaGFuZ2VNb2RlbCgpOwotCQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QWRkUmVtb3ZlTW9kZWxTdGF0ZUxpc3RlbmVyKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSU1vZGVsU3RhdGVMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBJTW9kZWxTdGF0ZUxpc3RlbmVyKCkgewotCi0JCQkJcHVibGljIHZvaWQgbW9kZWxBYm91dFRvQmVDaGFuZ2VkKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwpIHsKLQkJCQkJLy8KLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBtb2RlbENoYW5nZWQoSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCkgewotCQkJCQkvLyAJCi0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgbW9kZWxEaXJ0eVN0YXRlQ2hhbmdlZChJU3RydWN0dXJlZE1vZGVsIG1vZGVsLCBib29sZWFuIGlzRGlydHkpIHsKLQkJCQkJLy8KLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBtb2RlbFJlc291cmNlRGVsZXRlZChJU3RydWN0dXJlZE1vZGVsIG1vZGVsKSB7Ci0JCQkJCS8vIAotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIG1vZGVsUmVzb3VyY2VNb3ZlZChJU3RydWN0dXJlZE1vZGVsIG9sZE1vZGVsLCBJU3RydWN0dXJlZE1vZGVsIG5ld01vZGVsKSB7Ci0JCQkJCS8vIAkJCi0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgbW9kZWxBYm91dFRvQmVSZWluaXRpYWxpemVkKElTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsKSB7Ci0JCQkJCS8vIAkKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBtb2RlbFJlaW5pdGlhbGl6ZWQoSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwpIHsKLQkJCQkJLy8gCi0JCQkJfQotCQkJfTsKLQotCQkJbW9kZWwuYWJvdXRUb0NoYW5nZU1vZGVsKCk7Ci0KLQkJCW1vZGVsLnJlbW92ZU1vZGVsU3RhdGVMaXN0ZW5lcihsaXN0ZW5lcik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0KLQkvKioKLQkgKiBUZXN0IGV4cGVjdGVzIGFuIGV4Y2VwdGlvbiBzaW5jZSBvbmx5IGEgY2hhbmdlZE1vZGVsIHNlbnQsIHdpdGhvdXQKLQkgKiBiZWdpbm5pbmcgJ2Fib3V0VG9DaGFuZ2VNb2RlbCcKLQkgKiAKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdENoYW5nZWRNb2RlbCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCXRyeSB7Ci0JCQkJbW9kZWwuY2hhbmdlZE1vZGVsKCk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQlhc3NlcnRUcnVlKGUgaW5zdGFuY2VvZiBJbGxlZ2FsU3RhdGVFeGNlcHRpb24pOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50VHlwZSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCVN0cmluZyBjdCA9IG1vZGVsLmdldENvbnRlbnRUeXBlSWRlbnRpZmllcigpOwotCQkJYXNzZXJ0VHJ1ZSgibW9kZWwgaGFzIHdyb25nIGNvbnRlbnQgdHlwZToiICsgY3QgKyAiICE9ICIgKyBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MLCBjdC5lcXVhbHMoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRCYXNlTG9jYXRpb24oKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlTdHJpbmcgbG9jYXRpb24gPSBtb2RlbC5nZXRCYXNlTG9jYXRpb24oKTsKLQkJCWFzc2VydFRydWUoIndyb25nIGJhc2UgbG9jYXRpb24iLCBsb2NhdGlvbi5lcXVhbHMoIi8iICsgZlByb2plY3ROYW1lICsgIi9maWxlcy9zaW1wbGUueG1sIikpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEdldEZhY3RvcnlSZWdpc3RyeSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCW1vZGVsLmdldEZhY3RvcnlSZWdpc3RyeSgpOwotCQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SW5kZXhlZFJlZ2lvbigpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCW1vZGVsLmdldEluZGV4ZWRSZWdpb24oMCk7Ci0JCQlhc3NlcnRUcnVlKHRydWUpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbmRleGVkUmVnaW9ucygpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCS8vIG5vdCBpbXBsZW1lbnRlZCB5ZXQuLi4KLQkJCS8vIG1vZGVsLmdldEluZGV4ZWRSZWdpb25zKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U3RydWN0dXJlZERvY3VtZW50KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCWFzc2VydE5vdE51bGwoImRvY3VtZW50IGlzIG51bGwiLCBkb2MpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJc0RpcnR5KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJYXNzZXJ0RmFsc2UoIm1vZGVsIHNob3VsZCBub3QgYmUgZGlydHkiLCBtb2RlbC5pc0RpcnR5KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJc01vZGVsU3RhdGVDaGFuZ2luZygpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJYXNzZXJ0RmFsc2UoIm1vZGVsIHNob3VsZCBub3QgYmUgY2hhbmdpbmciLCBtb2RlbC5pc01vZGVsU3RhdGVDaGFuZ2luZygpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SXNOZXcoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCS8vIHRoaXMgQVBJIHNlZW1zIHN0cmFuZ2UKLQkJLy8gYXNzZXJ0RmFsc2UoIm5ldyBtb2RlbCBjaGVjayBmYWlsZWQiLCBtb2RlbC5pc05ldygpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SXNSZWluaXRpYWxpemF0aW9uTmVlZGVkKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQlhc3NlcnRGYWxzZSgicmVpbml0aWFsaXphdGlvbiBzaG91bGQgbm90IGJlIG5lZWRlZCIsIG1vZGVsLmlzUmVpbml0aWFsaXphdGlvbk5lZWRlZCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RJc1NhdmVOZWVkZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlhc3NlcnRGYWxzZSgic2F2ZSBzaG91bGQgbm90IGJlIG5lZWRlZCIsIG1vZGVsLmlzU2F2ZU5lZWRlZCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TmV3SW5zdGFuY2UoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZE1vZGVsIG5ld0luc3RhbmNlID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJbmV3SW5zdGFuY2UgPSBtb2RlbC5uZXdJbnN0YW5jZSgpOwotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQlhc3NlcnRUcnVlKCJJT0V4Y2VwdGlvbiBkdXJpbmcgbW9kZWwgbmV3IGluc3RhbmNlIiwgZmFsc2UpOwotCQkJfQotCQkJYXNzZXJ0Tm90TnVsbCgibmV3IGluc3RhbmNlIGlzIG51bGwiLCBuZXdJbnN0YW5jZSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogQmUgc3VyZSB0byByZWxlYXNlIGFueSBtb2RlbHMgb2J0YWluZWQgZnJvbSB0aGlzIG1ldGhvZC4KLQkgKiAKLQkgKi8KLQlJU3RydWN0dXJlZE1vZGVsIGdldFRlc3RNb2RlbCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChmUHJvamVjdE5hbWUpOwotCQlJRmlsZSBpRmlsZSA9IChJRmlsZSkgcHJvamVjdC5maW5kTWVtYmVyKCIvZmlsZXMvc2ltcGxlLnhtbCIpOwotCQkvLyBmUHJvamVjdE5hbWUgKyAiL2ZpbGVzL3NpbXBsZS54bWwiCi0KLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChpRmlsZSk7Ci0KLQotCQlyZXR1cm4gbW9kZWw7Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0WE1MTW9kZWxMb2FkZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RYTUxNb2RlbExvYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDY4MzI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RYTUxNb2RlbExvYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZS5kYXRhbG9jYXRpb24uTG9jYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLlhNTE1vZGVsTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci0KLS8qKgotICoKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgVGVzdFhNTE1vZGVsTG9hZGVyIGV4dGVuZHMgVGVzdENhc2UgewotCQotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0JcHJpdmF0ZSBYTUxNb2RlbExvYWRlciBmTG9hZGVyID0gbnVsbDsKLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZQcm9qZWN0TmFtZSA9IkRPQ1VNRU5ULUxPQURFUiI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlppcEZpbGVOYW1lID0gInhtbC1kb2N1bWVudC1sb2FkZXItdGVzdHMuemlwIjsKLQkKLQkKLSAgICBwdWJsaWMgVGVzdFhNTE1vZGVsTG9hZGVyKCkgewotICAgICAgICBzdXBlcigiVGVzdE1vZGVsTG9hZGVyIik7Ci0gICAgfQotCQotICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotICAgIAlzdXBlci5zZXRVcCgpOwotCQlpZighdGhpcy5pc1NldHVwKXsKLQkJCWZMb2FkZXIgPSBuZXcgWE1MTW9kZWxMb2FkZXIoKTsKLQkJCWRvU2V0dXAoKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLSAgICB9Ci0JCi0JcHJpdmF0ZSB2b2lkIGRvU2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsJCi0JCi0JCS8vIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQlMb2NhdGlvbiBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpOwotCQkKLQkJUHJvamVjdFVuemlwVXRpbGl0eSB1bnppcFV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQlGaWxlIHppcEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIsIGZaaXBGaWxlTmFtZSwgUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSKTsKLQkJdW56aXBVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIHBsYXRmb3JtTG9jYXRpb24uZ2V0VVJMKCkuZ2V0RmlsZSgpKTsKLQkJdW56aXBVdGlsLmluaXRKYXZhUHJvamVjdChmUHJvamVjdE5hbWUpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlRW1wdHlNb2RlbCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGZMb2FkZXIuY3JlYXRlTW9kZWwoKTsKLQkJYXNzZXJ0Tm90TnVsbCgibW9kZWwgaXMgbnVsbCIsIG1vZGVsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZU1vZGVsV2l0aERvY3VtZW50KCkgewotCQlJU3RydWN0dXJlZE1vZGVsIGVtcHR5TW9kZWwgPSBmTG9hZGVyLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IGVtcHR5TW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXNEb2Muc2V0KCI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PlxuPHRlc3Q+XG48aXRlbSBhdHRyPVwidmFsXCIgLz48L3Rlc3Q+XG4iKTsKLQkJCi0JCS8vIG51bGwgaGFuZGxkZXIgaXMgbm9ybWFsbHkgbm90IHZhbGlkLCBpbmNsdWRpbmcgb25seSBmb3IgdGhpcyB0ZXN0LgotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsRnJvbURvYyA9IGZMb2FkZXIuY3JlYXRlTW9kZWwoc0RvYywgIi90ZXN0IiwgbnVsbCk7Ci0JCWFzc2VydE5vdE51bGwoIm1vZGVsIGZyb20gZG9jIGlzIG51bGwiLCBtb2RlbEZyb21Eb2MpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlTW9kZWxXaXRoTW9kZWwoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgZW1wdHlNb2RlbCA9IGZMb2FkZXIuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gZW1wdHlNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc0RvYy5zZXQoIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+XG48dGVzdD5cbjxpdGVtIGF0dHI9XCJ2YWxcIiAvPjwvdGVzdD5cbiIpOwotCQkvLyBUT0RPOiBuZWVkIGFuIGV4aXN0aW5nIGZ1bGwgbW9kZWwKLQkJLy9JU3RydWN0dXJlZE1vZGVsIG1vZGVsRnJvbU1vZGVsID0gZkxvYWRlci5jcmVhdGVNb2RlbChlbXB0eU1vZGVsKTsKLQkJLy9hc3NlcnROb3ROdWxsKCJtb2RlbCBmcm9tIG1vZGVsIGlzIG51bGwiLCBtb2RlbEZyb21Nb2RlbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRBZGFwdGVyRmFjdG9yaWVzKCkgewotCQlMaXN0IGZhY3RvcmllcyA9IGZMb2FkZXIuZ2V0QWRhcHRlckZhY3RvcmllcygpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSB3ZXJlIG5vIGFkYXB0ZXIgZmFjdG9yaWVzIGZvciBYTUwiLCBmYWN0b3JpZXMuc2l6ZSgpID4gMCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RMb2FkKCkgewotCQkvLyBmcm9tIGEgZmlsZQkKLQkJSUZpbGUgZiA9IGdldEZpbGUoKTsKLQkJCi0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZkxvYWRlci5jcmVhdGVNb2RlbCgpOwotCQkJZkxvYWRlci5sb2FkKGYsIG1vZGVsKTsKLQkJCVN0cmluZyB0ZXh0ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCQlhc3NlcnRUcnVlKCJmYWlsZWQgdG8gbG9hZCIsIHRleHQubGVuZ3RoKCkgPiAwKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RMb2FkRnJvbVN0cmVhbSgpIHsKLQkJLy8gbmVlZCB0byBmaXggdGhpcyB0ZXN0Ci0JCS8vIHVubGVzcyB0aGUgQVBJIGlzIGdvaW5nIGF3YXkuLi4KLS8vCQlJRmlsZSBmID0gZ2V0RmlsZSgpOwotLy8JCQotLy8JCXRyeSB7Ci0vLwkJCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBmTG9hZGVyLmNyZWF0ZU1vZGVsKCk7Ci0vLwkJCWZMb2FkZXIubG9hZChmLmdldENvbnRlbnRzKCksIG1vZGVsLCBFbmNvZGluZ1J1bGUuRk9SQ0VfREVGQVVMVCk7Ci0vLwkJCVN0cmluZyB0ZXh0ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0vLwkJCWFzc2VydFRydWUoImZhaWxlZCB0byBsb2FkIiwgdGV4dC5sZW5ndGgoKSA+IDApOwotLy8JCX0KLS8vCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotLy8JCQllLnByaW50U3RhY2tUcmFjZSgpOwotLy8JCX0KLS8vCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0vLwkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0vLwkJfQotCX0KLQkKLQkKLQlwcml2YXRlIElGaWxlIGdldEZpbGUoKSB7Ci0JCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZlByb2plY3ROYW1lICsgIi9maWxlcy9zaW1wbGUueG1sIikpOwkKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L051bGxTdHJlYW0uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvTnVsbFN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmUyMzVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvTnVsbFN0cmVhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy50ZXh0OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi0KLXB1YmxpYyBjbGFzcyBOdWxsU3RyZWFtIGV4dGVuZHMgSW5wdXRTdHJlYW0gewotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNyZWFkKCkKLQkgKi8KLQlwdWJsaWMgaW50IHJlYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlyZXR1cm4gLTE7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC9UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyWE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L1Rlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJYTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU3N2U1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L1Rlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJYTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy50ZXh0OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudEV4dGVuc2lvbjM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUeXBlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS51dGlscy5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGV4dC5JWE1MUGFydGl0aW9uczsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuRGVjaW1hbEZvcm1hdDsKLQotcHVibGljIGNsYXNzIFRlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJYTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JCi0JcHJpdmF0ZSBib29sZWFuIERFQlVHX1BSSU5UX1JFU1VMVCA9IGZhbHNlOwotCXByb3RlY3RlZCBJVHlwZWRSZWdpb25bXSBwYXJ0aXRpb25zID0gbnVsbDsKLQotCXByaXZhdGUgYm9vbGVhbiB1c2VGb3JtYXR0ZXIgPSB0cnVlOwotCXByb3RlY3RlZCBEZWNpbWFsRm9ybWF0IGZvcm1hdHRlcjsKLQotCXB1YmxpYyBUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyWE1MKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUICYmIHVzZUZvcm1hdHRlcikKLQkJCWZvcm1hdHRlciA9IG5ldyBEZWNpbWFsRm9ybWF0KCk7Ci0JfQotCQotCS8qKgotCSAqIG11c3QgcmVsZWFzZSBtb2RlbCAoZnJvbSBlZGl0KSBhZnRlcgotCSAqIEBwYXJhbSBmaWxlbmFtZSByZWxhdGl2ZSB0byB0aGlzIGNsYXNzIChUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyKQotCSAqLwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbEZvckVkaXQoU3RyaW5nIGZpbGVuYW1lKSB7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCQlpblN0cmVhbSA9IG5ldyBOdWxsU3RyZWFtKCk7Ci0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKLQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBtb2RlbDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdERpc2Nvbm5lY3RDb25uZWN0KCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID1nZXRNb2RlbEZvckVkaXQoInRlc3RmaWxlcy94bWwvZXhhbXBsZTAxLnhtbCIpOwotCQkJaWYobW9kZWwgIT0gbnVsbCkgewotCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJCWFzc2VydFRydWUoInNEb2MgaW1wbGVtZW50YXRpb24gbm90IGluc3RhbmNlIG9mIElEb2N1bWVudEV4dGVuc2lvbjMiLCBzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uMyk7Ci0JCQkKLQkJCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBwYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMylzRG9jKS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpOwotCQkJCWFzc2VydFRydWUoInBhcnRpdGlvbmVyIGRvZXNuJ3QgaW1wbGVtZW50IElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIiwgcGFydGl0aW9uZXIgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcik7Ci0JCQkJCi0JCQkJSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIgc3RwID0gKElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyKXBhcnRpdGlvbmVyOwotCQkJCWFzc2VydE5vdE51bGwoInBhcnRpdGlvbmVyIHdhcyBudWxsIGZvciBzRG9jOiIgKyBzRG9jLCBwYXJ0aXRpb25lcik7Ci0JCQkJdHJ5IHsKLQkJCQkJc3RwLmRpc2Nvbm5lY3QoKTsKLQkJCQl9Ci0JCQkJY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJCQkJYXNzZXJ0VHJ1ZSgicHJvYmxlbSBkaXNjb25uZWN0aW5nIHcvOiIgK3NEb2MgKyAiL24iICsgZSwgZmFsc2UpOwotCQkJCX0KLQkJCQl0cnkgewotCQkJCQlzdHAuY29ubmVjdChzRG9jKTsKLQkJCQl9Ci0JCQkJY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJCQkJYXNzZXJ0VHJ1ZSgicHJvYmxlbSBjb25uZWN0aW5nIHcvOiIgKyBzRG9jICsgIi9uIiArIGUsIGZhbHNlKTsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlhc3NlcnRUcnVlKCJjb3VsZCBub3QgcmV0cmlldmUgc3RydWN0dXJlZCBtb2RlbCIsIGZhbHNlKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5ICB7Ci0JCQlpZihtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9CQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RGVmYXVsdFBhcnRpdGlvblR5cGUoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPWdldE1vZGVsRm9yRWRpdCgidGVzdGZpbGVzL3htbC9leGFtcGxlMDEueG1sIik7Ci0JCQlpZihtb2RlbCAhPSBudWxsKSB7Ci0JCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgic0RvYyBpbXBsZW1lbnRhdGlvbiBub3QgaW5zdGFuY2Ugb2YgSURvY3VtZW50RXh0ZW5zaW9uMyIsIHNEb2MgaW5zdGFuY2VvZiBJRG9jdW1lbnRFeHRlbnNpb24zKTsKLQkJCQotCQkJCUlEb2N1bWVudFBhcnRpdGlvbmVyIHBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKXNEb2MpLmdldERvY3VtZW50UGFydGl0aW9uZXIoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORyk7Ci0JCQkJYXNzZXJ0VHJ1ZSgicGFydGl0aW9uZXIgZG9lc24ndCBpbXBsZW1lbnQgSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIiLCBwYXJ0aXRpb25lciBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyKTsKLQkJCQkKLQkJCQlJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lciBzdHAgPSAoSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIpcGFydGl0aW9uZXI7Ci0JCQkJU3RyaW5nIGRlZmF1bHRQYXJ0aXRpb25UeXBlID0gc3RwLmdldERlZmF1bHRQYXJ0aXRpb25UeXBlKCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgZGVmYXVsdCBwYXJ0aXRpb24gdHlwZSB3YXM6IFsiICsgZGVmYXVsdFBhcnRpdGlvblR5cGUgKyAiXSBzaG91bGQgYmU6IFsiICsgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQgKyAiXSIsIGRlZmF1bHRQYXJ0aXRpb25UeXBlLmVxdWFscyhJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCkpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwiLCBmYWxzZSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSAgewotCQkJaWYobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldFBhcnRpdGlvblR5cGUoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPWdldE1vZGVsRm9yRWRpdCgidGVzdGZpbGVzL3htbC9leGFtcGxlMDEueG1sIik7Ci0JCQlpZihtb2RlbCAhPSBudWxsKSB7Ci0JCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgic0RvYyBpbXBsZW1lbnRhdGlvbiBub3QgaW5zdGFuY2Ugb2YgSURvY3VtZW50RXh0ZW5zaW9uMyIsIHNEb2MgaW5zdGFuY2VvZiBJRG9jdW1lbnRFeHRlbnNpb24zKTsKLQkJCQotCQkJCUlEb2N1bWVudFBhcnRpdGlvbmVyIHBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKXNEb2MpLmdldERvY3VtZW50UGFydGl0aW9uZXIoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORyk7Ci0JCQkJYXNzZXJ0VHJ1ZSgicGFyaXRpb25lciBkb2Vzbid0IGltcGxlbWVudCBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lciIsIHBhcnRpdGlvbmVyIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIpOwotCQkJCQotCQkJCUlTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIHN0cCA9IChJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcilwYXJ0aXRpb25lcjsKLQkJCQlTdHJpbmcgZGVmYXVsdFBhcnRpdGlvblR5cGUgPSBzdHAuZ2V0RGVmYXVsdFBhcnRpdGlvblR5cGUoKTsKLQkJCQlhc3NlcnRUcnVlKCJ3cm9uZyBkZWZhdWx0IHBhcnRpdGlvbiB0eXBlIHdhczogWyIgKyBkZWZhdWx0UGFydGl0aW9uVHlwZSArICJdIHNob3VsZCBiZTogWyIgKyBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCArICJdIiwgZGVmYXVsdFBhcnRpdGlvblR5cGUuZXF1YWxzKElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUKSk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlhc3NlcnRUcnVlKCJjb3VsZCBub3QgcmV0cmlldmUgc3RydWN0dXJlZCBtb2RlbCIsIGZhbHNlKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5ICB7Ci0JCQlpZihtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9CQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0WE1MMSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gNjsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL3htbC9leGFtcGxlMDEueG1sIik7Ci0JCWFzc2VydFRydWUoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgblBhcnRpdGlvbnMgPT0gZXhwZWN0ZWRQYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SVhNTFBhcnRpdGlvbnMuWE1MX1BJLCBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFQ0xBUkFUSU9OLCBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCwgSVhNTFBhcnRpdGlvbnMuWE1MX0NPTU1FTlQsIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUfSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gMTsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL3htbC9lbXB0eS54bWwiKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBuUGFydGl0aW9ucyA9PSBleHBlY3RlZFBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVH0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQZXJmWE1MKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWludCBleHBlY3RlZFBhcnRpdGlvbnMgPSA2OwotCQlpbnQgblBhcnRpdGlvbnMgPSBkb1RpbWVkQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy94bWwvY29tcGFueTMwMGsueG1sIik7Ci0JCWFzc2VydFRydWUoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgblBhcnRpdGlvbnMgPT0gZXhwZWN0ZWRQYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SVhNTFBhcnRpdGlvbnMuWE1MX1BJLCBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFQ0xBUkFUSU9OLCBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCwgSVhNTFBhcnRpdGlvbnMuWE1MX0NPTU1FTlQsIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUfSk7Ci0JfQotCQotCS8qKgotCSAqIEVuc3VyZSB0aGF0IHRoZSBjdXJyZW50IGxpc3Qgb2YgcGFydGl0aW9ucyBhcmUgYWxsIGFkamFjZW50IHRvIG9uZSBhbm90aGVyCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgY2hlY2tTZWFtcygpIHsKLQkJaWYgKHBhcnRpdGlvbnMgPT0gbnVsbCkKLQkJCXJldHVybjsKLQkJaW50IG9mZnNldCA9IDA7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKCJwYXJ0aXRpb25zIGFyZSBub3QgY29udGlndW91cyEiLCBwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpLCBvZmZzZXQpOwotCQkJb2Zmc2V0ID0gcGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSArIHBhcnRpdGlvbnNbaV0uZ2V0TGVuZ3RoKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDb21wdXRlIHRoZSBwYXJ0aXRpb25zIGZvciB0aGUgZ2l2ZW4gZmlsZW5hbWUgdXNpbmcgdGhlIGRlZmF1bHQgcGFydGl0aW9uZXIKLQkgKiBmb3IgdGhhdCBmaWxlIHR5cGUuCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogQHJldHVybiBpbnQKLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBpbnQgZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdChTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCWluU3RyZWFtID0gbmV3IE51bGxTdHJlYW0oKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUICYmIHVzZUZvcm1hdHRlcikgewotCQkJZG91YmxlIGJhc2VUZW4gPSBNYXRoLmxvZygxMCk7Ci0JCQlmb3JtYXR0ZXIuc2V0TWluaW11bUludGVnZXJEaWdpdHMoKGludCkgKE1hdGgubG9nKHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSkgLyBiYXNlVGVuKSArIDEpOwotCQkJZm9ybWF0dGVyLnNldEdyb3VwaW5nVXNlZChmYWxzZSk7Ci0JCX0KLQotCQlwYXJ0aXRpb25zID0gc3RydWN0dXJlZERvY3VtZW50LmNvbXB1dGVQYXJ0aXRpb25pbmcoMCwgc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCkgewotCQkJU3RyaW5nIGNvbnRlbnRzID0gbnVsbDsKLQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJcbmZpbGVuYW1lOiAiICsgZmlsZW5hbWUpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0aXRpb25zLmxlbmd0aDsgaSsrKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJY29udGVudHMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCksIHBhcnRpdGlvbnNbaV0uZ2V0TGVuZ3RoKCkpOwotCQkJCX0KLQkJCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJCQljb250ZW50cyA9ICIqZXJyb3IqIjsKLQkJCQl9Ci0JCQkJaWYgKHVzZUZvcm1hdHRlcikKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKGZvcm1hdHRlci5mb3JtYXQocGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSkgKyAiOiIgKyBmb3JtYXR0ZXIuZm9ybWF0KHBhcnRpdGlvbnNbaV0uZ2V0TGVuZ3RoKCkpICsgIiAtICIgKyBwYXJ0aXRpb25zW2ldLmdldFR5cGUoKSArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJCQllbHNlCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihwYXJ0aXRpb25zW2ldICsgIiBbIiArIFN0cmluZ1V0aWxzLmVzY2FwZShjb250ZW50cykgKyAiXSIpOwotCQkJfQotCQl9Ci0JCWNoZWNrU2VhbXMoKTsKLQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCWluU3RyZWFtLmNsb3NlKCk7Ci0KLQkJaWYgKHBhcnRpdGlvbnMgPT0gbnVsbCkKLQkJCXJldHVybiAtMTsKLQkJcmV0dXJuIHBhcnRpdGlvbnMubGVuZ3RoOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgc2luZ2xlIHBhcnRpdGlvbiBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGZvciB0aGUgZ2l2ZW4gZmlsZSwgdXNpbmcgdGhlCi0JICogZGVmYXVsdCBwYXJ0aXRpb25lciBmb3IgdGhhdCBmaWxlIHR5cGUuICBUaGlzIHRlc3QgYWxsb3dzIGZvciB2ZXJpZnlpbmcgdGhlIHplcm8tbGVuZ3RoCi0JICogcGFydGl0aW9uaW5nIGJlaGF2aW9yLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEBwYXJhbSBvZmZzZXQKLQkgKiBAcmV0dXJuIElUeXBlZFJlZ2lvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIElUeXBlZFJlZ2lvbiBnZXRQYXJ0aXRpb25UZXN0KFN0cmluZyBmaWxlbmFtZSwgaW50IG9mZnNldCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChmaWxlbmFtZSwgaW5TdHJlYW0sIG51bGwpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJcGFydGl0aW9ucyA9IG51bGw7Ci0JCUlUeXBlZFJlZ2lvbiBwYXJ0aXRpb24gPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UGFydGl0aW9uKG9mZnNldCk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQpIHsKLQkJCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5maWxlbmFtZTogIiArIGZpbGVuYW1lKTsKLQkJCXRyeSB7Ci0JCQkJY29udGVudHMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KHBhcnRpdGlvbi5nZXRPZmZzZXQoKSwgcGFydGl0aW9uLmdldExlbmd0aCgpKTsKLQkJCX0KLQkJCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJY29udGVudHMgPSAiKmVycm9yKiI7Ci0JCQl9Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4ocGFydGl0aW9uICsgIiBbIiArIFN0cmluZ1V0aWxzLmVzY2FwZShjb250ZW50cykgKyAiXSIpOwotCQl9Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQlpblN0cmVhbS5jbG9zZSgpOwotCi0JCXJldHVybiBwYXJ0aXRpb247Ci0JfQotCi0JLyoqCi0JICogVmVyaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gcGFydGl0aW9ucyBhcmUgb2YgdGhlIGdpdmVuIHBhcnRpdGlvbiB0eXBlcwotCSAqIEBwYXJhbSB0eXBlZFJlZ2lvbnMKLQkgKiBAcGFyYW0gdHlwZXMKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCB2ZXJpZnlQYXJ0aXRpb25UeXBlcyhJVHlwZWRSZWdpb24gYWN0dWFsVHlwZWRSZWdpb25zW10sIFN0cmluZyBleHBlY3RlZFR5cGVzW10pIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBleHBlY3RlZFR5cGVzLmxlbmd0aDsgaSsrKQotCQkJYXNzZXJ0RXF1YWxzKCJwYXJ0aXRpb24gdHlwZSBtaXNtYXRjaGVkIiwgZXhwZWN0ZWRUeXBlc1tpXSwgYWN0dWFsVHlwZWRSZWdpb25zW2ldLmdldFR5cGUoKSk7Ci0JfQotCi0JLyoqCi0JICogVmVyaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gcGFydGl0aW9ucyBiZWdpbiBhdCB0aGUgZ2l2ZW4gb2Zmc2V0cwotCSAqIEBwYXJhbSB0eXBlZFJlZ2lvbnMKLQkgKiBAcGFyYW0gdHlwZXMKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCB2ZXJpZnlQYXJ0aXRpb25SZWdpb25zKElUeXBlZFJlZ2lvbiB0eXBlZFJlZ2lvbnNbXSwgaW50IG9mZnNldHNbXSkgewotCQlmb3IgKGludCBpID0gMDsgaSA8IG9mZnNldHMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscygib2Zmc2V0IG1pc21hdGNoZWQiLCB0eXBlZFJlZ2lvbnNbaV0uZ2V0T2Zmc2V0KCksIG9mZnNldHNbaV0pOwotCQkJaWYgKGkgPiAwKSB7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJsZW5ndGhzIG1pc2FsaWduZWQiLCB0eXBlZFJlZ2lvbnNbaV0uZ2V0T2Zmc2V0KCksIHR5cGVkUmVnaW9uc1tpIC0gMV0uZ2V0T2Zmc2V0KCkgKyB0eXBlZFJlZ2lvbnNbaSAtIDFdLmdldExlbmd0aCgpKTsKLQkJCX0KLQkJfQotCX0KLQkKLQkvKioKLQkgKiBDb21wdXRlIHRoZSBwYXJ0aXRpb25zIGZvciB0aGUgZ2l2ZW4gZmlsZW5hbWUgdXNpbmcgdGhlIGRlZmF1bHQgcGFydGl0aW9uZXIKLQkgKiBmb3IgdGhhdCBmaWxlIHR5cGUuCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogQHJldHVybiBpbnQKLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBpbnQgZG9UaW1lZENvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCWluU3RyZWFtID0gbmV3IE51bGxTdHJlYW0oKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQkKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCAmJiB1c2VGb3JtYXR0ZXIpIHsKLQkJCWRvdWJsZSBiYXNlVGVuID0gTWF0aC5sb2coMTApOwotCQkJZm9ybWF0dGVyLnNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKChpbnQpIChNYXRoLmxvZyhzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCkpIC8gYmFzZVRlbikgKyAxKTsKLQkJCWZvcm1hdHRlci5zZXRHcm91cGluZ1VzZWQoZmFsc2UpOwotCQl9Ci0JCWxvbmcgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCXBhcnRpdGlvbnMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuY29tcHV0ZVBhcnRpdGlvbmluZygwLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCkpOwotCQlsb25nIGVuZFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCkgewotCQkJCi0JCQlTdHJpbmcgY29udGVudHMgPSBudWxsOwotCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJcbmZpbGVuYW1lOiAiICsgZmlsZW5hbWUpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJUaW1lIHRvIGNvbXB1dGUgIiArIHBhcnRpdGlvbnMubGVuZ3RoICsgIjogIiArIChlbmRUaW1lLXN0YXJ0VGltZSkgKyAiIChtc2VjcykiKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJCXRyeSB7Ci0JCQkJCWNvbnRlbnRzID0gc3RydWN0dXJlZERvY3VtZW50LmdldChwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpLCBwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCQkJY29udGVudHMgPSAiKmVycm9yKiI7Ci0JCQkJfQotCQkJCWlmICh1c2VGb3JtYXR0ZXIpCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihmb3JtYXR0ZXIuZm9ybWF0KHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCkpICsgIjoiICsgZm9ybWF0dGVyLmZvcm1hdChwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKSArICIgLSAiICsgcGFydGl0aW9uc1tpXS5nZXRUeXBlKCkgKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCQkJZWxzZQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4ocGFydGl0aW9uc1tpXSArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJCX0KLQkJfQotCQljaGVja1NlYW1zKCk7Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQlpblN0cmVhbS5jbG9zZSgpOwotCQotCQlpZiAocGFydGl0aW9ucyA9PSBudWxsKQotCQkJcmV0dXJuIC0xOwotCQlyZXR1cm4gcGFydGl0aW9ucy5sZW5ndGg7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC9jb21wYW55MzAway54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy94bWwvY29tcGFueTMwMGsueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmJhNTU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC9jb21wYW55MzAway54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MTAwICswLDAgQEAKLTw/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+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL0NvbW1vblhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9Db21tb25YTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE3NzlkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL0NvbW1vblhNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbDsKLQotCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLk91dHB1dEtleXM7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5Q29uZmlndXJhdGlvbkVycm9yOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLkRPTVNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuTG9nZ2VyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0KLQotLyoqCi0gKi8KLXB1YmxpYyBjbGFzcyBDb21tb25YTUwgewotCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgRG9jdW1lbnRCdWlsZGVyIGdldERvY3VtZW50QnVpbGRlcigpIHsKLQkJRG9jdW1lbnRCdWlsZGVyIHJlc3VsdCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlyZXN1bHQgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCX0KLQkJY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJTG9nZ2VyLmxvZ0V4Y2VwdGlvbihlKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIERvY3VtZW50QnVpbGRlciBnZXREb2N1bWVudEJ1aWxkZXIoYm9vbGVhbiB2YWxpZGF0aW5nKSB7Ci0JCURvY3VtZW50QnVpbGRlciByZXN1bHQgPSBudWxsOwotCQl0cnkgewotCQkJRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBpbnN0YW5jZSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQkJCWluc3RhbmNlLnNldFZhbGlkYXRpbmcodmFsaWRhdGluZyk7Ci0JCQlyZXN1bHQgPSBpbnN0YW5jZS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQkJfQotCQljYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlMb2dnZXIubG9nRXhjZXB0aW9uKGUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZShEb2N1bWVudCBkb2N1bWVudCwgT3V0cHV0U3RyZWFtIG9zdHJlYW0pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVNvdXJjZSBkb21Tb3VyY2UgPSBuZXcgRE9NU291cmNlKGRvY3VtZW50KTsKLQkJdHJ5IHsKLQkJCVRyYW5zZm9ybWVyIHNlcmlhbGl6ZXIgPSBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdUcmFuc2Zvcm1lcigpOwotCQkJdHJ5IHsKLQkJCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuSU5ERU5ULCAieWVzIik7Ci0JCQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eSgie2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0fWluZGVudC1hbW91bnQiLCAiNCIpOwotCQkJCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5FTkNPRElORywgIlVURi0xNiIpOwotCQkJfQotCQkJY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gdW5zdXBwb3J0ZWQgcHJvcGVydGllcwotCQkJfQotCQkJc2VyaWFsaXplci50cmFuc2Zvcm0oZG9tU291cmNlLCBuZXcgU3RyZWFtUmVzdWx0KG9zdHJlYW0pKTsKLQkJfQotCQljYXRjaCAoVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQkJY2F0Y2ggKFRyYW5zZm9ybWVyRmFjdG9yeUNvbmZpZ3VyYXRpb25FcnJvciBlKSB7Ci0JCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JCWNhdGNoIChUcmFuc2Zvcm1lckV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvRGF0ZVV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvRGF0ZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNkOGNkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL0RhdGVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5EYXRlRm9ybWF0OwotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICoKLSAqIFRvIGNoYW5nZSB0aGlzIGdlbmVyYXRlZCBjb21tZW50IGVkaXQgdGhlIHRlbXBsYXRlIHZhcmlhYmxlICJ0eXBlY29tbWVudCI6Ci0gKiBXaW5kb3c+UHJlZmVyZW5jZXM+SmF2YT5UZW1wbGF0ZXMuCi0gKiBUbyBlbmFibGUgYW5kIGRpc2FibGUgdGhlIGNyZWF0aW9uIG9mIHR5cGUgY29tbWVudHMgZ28gdG8KLSAqIFdpbmRvdz5QcmVmZXJlbmNlcz5KYXZhPkNvZGUgR2VuZXJhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIERhdGVVdGlsIHsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBBbGxUZXN0cy4KLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXByaXZhdGUgc3RhdGljIFN0cmluZyBub3cgPSBudWxsOwotCi0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBub3coKSB7Ci0JCS8vIGp1c3QgY2FsY3VsYXRlIG9uY2UsIHNvIHdob2xlIHJ1biBhcyBzYW1lIHRpbWVzdGFtcAotCQlpZiAoRGF0ZVV0aWwubm93ID09IG51bGwpIHsKLQkJCURhdGVGb3JtYXQgZm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXknLSdNTSctJ2RkJy0na2snLSdtbSctJ3NzIik7Ci0JCQlDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7Ci0JCQlEYXRlIHRvZGF5ID0gY2FsZW5kYXIuZ2V0VGltZSgpOwotCQkJRGF0ZVV0aWwubm93ID0gZm9ybWF0LmZvcm1hdCh0b2RheSk7Ci0JCX0KLQkJcmV0dXJuIERhdGVVdGlsLm5vdzsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL0ZpbGVVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL0ZpbGVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNDZlZDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9GaWxlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlbmFtZUZpbHRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICoKLSAqLwotcHVibGljIGNsYXNzIEZpbGVVdGlsIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmTGluZVNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmUGF0aFNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgicGF0aC5zZXBhcmF0b3IiKTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmRmlsZVNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiZmlsZS5zZXBhcmF0b3IiKTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYTUxfQ09SRV9URVNUU19QTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzIjsKLQotCXN0YXRpYyBGaWxlIHByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSA9IG51bGw7Ci0Jc3RhdGljIHByaXZhdGUgU3RyaW5nIGxvZ1N1YkRpcmVjdG9yeVBhdGg7Ci0KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIG5vdFRyaWVkWWV0ID0gdHJ1ZTsKLQotCXB1YmxpYyBzdGF0aWMgY2xhc3MgRGlyRmlsZW5hbWVGaWx0ZXIgaW1wbGVtZW50cyBGaWxlbmFtZUZpbHRlciB7Ci0JCVN0cmluZyBzdGFydE9mQWNjZXB0YWJsZU5hbWVzOwotCi0JCXB1YmxpYyBEaXJGaWxlbmFtZUZpbHRlcihTdHJpbmcgc3RhcnRPZkRpck5hbWUpIHsKLQkJCXN0YXJ0T2ZBY2NlcHRhYmxlTmFtZXMgPSBzdGFydE9mRGlyTmFtZTsKLQkJfQotCi0JCS8qKgotCQkgKiBAc2VlIGphdmEuaW8uRmlsZUZpbHRlciNhY2NlcHQoRmlsZSkKLQkJICovCi0JCXB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIHBhdGhuYW1lLCBTdHJpbmcgZmlsZW5hbWUpIHsKLQkJCS8vIHdlJ2xsIGp1c3QgYXNzdW1lIGlmIGl0IHN0YXJ0cyB3aXRoIHJpZ2h0IGtleSwgaXQgaXMgYSBkaXJlY3RvcnkgLi4uIGZvciBub3cKLQkJCXJldHVybiBmaWxlbmFtZS5zdGFydHNXaXRoKHN0YXJ0T2ZBY2NlcHRhYmxlTmFtZXMpOwotCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgZ2V0UHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5KFN0cmluZyBkaXJlY3RvcnlSb290TmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKHByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSA9PSBudWxsICYmIG5vdFRyaWVkWWV0KSB7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFhNTF9DT1JFX1RFU1RTX1BMVUdJTl9JRCk7Ci0JCQlVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KCIvIik7Ci0JCQkvL1N0cmluZyBpbnN0YWxsUGF0aCA9IHVybC5nZXRQYXRoKCk7Ci0JCQkvLyBhZGQga25vd24gZmlsZSBzbyBVUkwgbWV0aG9kIGJlbG93IGNhbiBiZSB1c2VkCi0JCQkvLyAoZG9lc24ndCBzZWVtIHRvIHdvcmsgZm9yIGRpcmVjdG9yeT8pCi0JCQlVUkwgdG90YWxVUkwgPSBuZXcgVVJMKHVybCwgInBsdWdpbi54bWwiKTsKLQkJCVVSTCBmaW5hbHVybCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTCh0b3RhbFVSTCk7Ci0JCQlTdHJpbmcgZmluYWxGaWxlID0gZmluYWx1cmwuZ2V0RmlsZSgpOwotCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmluYWxGaWxlKTsKLQkJCVN0cmluZyBmaW5hbFBhdGggPSBmaWxlLmdldFBhcmVudCgpOwotCQkJRmlsZSBwbHVnaW5Ib21lRGlyID0gbmV3IEZpbGUoZmluYWxQYXRoKTsKLQkJCUZpbGVuYW1lRmlsdGVyIGRpckZpbHRlciA9IG5ldyBEaXJGaWxlbmFtZUZpbHRlcihkaXJlY3RvcnlSb290TmFtZSk7Ci0JCQlGaWxlW10gYWxsRGlycyA9IHBsdWdpbkhvbWVEaXIubGlzdEZpbGVzKGRpckZpbHRlcik7Ci0KLQkJCS8vIGFzc3VtZSBmaXJzdCBpbiBsaXN0IGlzIG5ld2VzdCwgdGhlbiBzdGFydCBsb29raW5nIHdpdGggdGhlIAotCQkJLy8gc2Vjb25kIGl0ZW0gLi4uIGp1c3QgdG8gYXZvaWQgIm51bGwiIGNhc2UgY2hlY2tpbmcKLQkJCWlmIChhbGxEaXJzLmxlbmd0aCA+IDApIHsKLQkJCQlGaWxlIGN1cnJlbnROZXdlc3QgPSBhbGxEaXJzWzBdOwotCQkJCWZvciAoaW50IGkgPSAxOyBpIDwgYWxsRGlycy5sZW5ndGg7IGkrKykgewotCQkJCQlGaWxlIGN1cnJlbnQgPSBhbGxEaXJzW2ldOwotCQkJCQkvLyBOT1RFOiB3ZSBnbyBieSBtb2RpZmllZCBkYXRlLCBub3QgYnkgdGhlIGFjdHVhbCB0aW1lIHN0YW1wIGluIG5hbWUuCi0JCQkJCS8vIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGFsbCBub3JtYWwgY2FzZXMsIGJ1dCBtYXkgbm90IGlmIHNvbWVvbmUgZG9lcyBzb21lCi0JCQkJCS8vICJmdW5ueSIgY29weWluZywgb3IgdXBkYXRpbmcgZnJvbSByZXBvc2l0b3J5LgotCQkJCQlpZiAoY3VycmVudC5sYXN0TW9kaWZpZWQoKSA+IGN1cnJlbnROZXdlc3QubGFzdE1vZGlmaWVkKCkpIHsKLQkJCQkJCWN1cnJlbnROZXdlc3QgPSBjdXJyZW50OwotCQkJCQl9Ci0JCQkJfQotCQkJCXByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSA9IGN1cnJlbnROZXdlc3Q7Ci0JCQl9Ci0JCQlub3RUcmllZFlldCA9IGZhbHNlOwotCQl9Ci0JCXJldHVybiBwcmV2aW91c1Jlc3VsdHNEaXJlY3Rvcnk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBGaWxlIG1ha2VGaWxlRm9yKFN0cmluZyBkaXJlY3RvcnksIFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFhNTF9DT1JFX1RFU1RTX1BMVUdJTl9JRCk7Ci0JCVVSTCB1cmwgPSBidW5kbGUuZ2V0RW50cnkoIi8iKTsKLQkJVVJMIGxvY2FsVVJMID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHVybCk7Ci0JCVN0cmluZyBpbnN0YWxsUGF0aCA9IGxvY2FsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIHRvdGFsRGlyZWN0b3J5ID0gaW5zdGFsbFBhdGggKyBkaXJlY3Rvcnk7Ci0JCVN0cmluZyB0b3RhbFBhdGggPSB0b3RhbERpcmVjdG9yeSArICIvIiArIGZpbGVuYW1lOwotCQlVUkwgdG90YWxVUkwgPSBuZXcgVVJMKHVybCwgdG90YWxQYXRoKTsKLQkJLy9VUkwgZmluYWx1cmwgPSBQbGF0Zm9ybS5hc0xvY2FsVVJMKHRvdGFsVVJMKTsKLQkJU3RyaW5nIGZpbmFsRmlsZSA9IHRvdGFsVVJMLmdldEZpbGUoKTsKLQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmluYWxGaWxlKTsKLQkJU3RyaW5nIGZpbmFsUGF0aCA9IGZpbGUuZ2V0UGFyZW50KCk7Ci0JCUZpbGUgZGlyID0gbmV3IEZpbGUoZmluYWxQYXRoKTsKLQkJaWYgKCFkaXIuZXhpc3RzKCkpIHsKLQkJCS8vIGEgbGl0dGxlIHNhZmV0eSBuZXQsIGJlIHN1cmUgdGhlIHByZXZpb3VzIG5ld2VzdCBkaXJlY3RvcnkKLQkJCS8vIGlzIGluaXRpYWxpemVkLCBqdXN0IGluIGNhc2Ugbm8gb25lIGVsc2UgaGFzIGRvbmUgc28KLQkJCWlmICh0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCAhPSBudWxsICYmIHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4Lmxlbmd0aCgpID4gMCkgewotCQkJCUZpbGVVdGlsLmdldFByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSh0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCk7Ci0JCQl9Ci0JCQkvLyBub3cgaXRzICJzYWZlIiB0byBtYWtlIHRoZSBuZXcgb25lCi0JCQlkaXIubWtkaXJzKCk7Ci0JCX0KLQkJcmV0dXJuIGZpbGU7Ci0JfQotCi0JLyoqCi0JICogSnVzdCBhIGdlbmVyYWwgdXRpbGl0eSBtZXRob2QKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiBAcmV0dXJuIFN0cmluZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEV4dGVuc2lvbihTdHJpbmcgZmlsZW5hbWUpIHsKLQkJU3RyaW5nIGV4dGVuc2lvbiA9IG51bGw7Ci0JCWludCBkb3RQb3N0aW9uID0gZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKTsKLQkJaWYgKGRvdFBvc3Rpb24gPiAtMSkgewotCQkJZXh0ZW5zaW9uID0gZmlsZW5hbWUuc3Vic3RyaW5nKGRvdFBvc3Rpb24gKyAxKTsKLQkJfQotCQllbHNlIHsKLQkJCWV4dGVuc2lvbiA9IG5ldyBTdHJpbmcoKTsKLQkJfQotCQlyZXR1cm4gZXh0ZW5zaW9uOwotCX0KLQotCS8qKgotCSAqIEdlbmVyYWwgcHVycG9zZSB1dGlsaXR5IG1ldGhvZCB0byBlbnN1cmUgdGhlIGxvZwotCSAqIGRpcmVjdG9yeSBleGlzdHMsIGFuZCByZXR1cm5zIHRoZSBuYW1lLiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRMb2dEaXJlY3RvcnkoKSB7Ci0JCWlmIChsb2dTdWJEaXJlY3RvcnlQYXRoID09IG51bGwpIHsKLQkJCVN0cmluZyBtYWluRGlyZWN0b3J5ID0gIi9sb2dzIjsKLQkJCUZpbGUgZGlyID0gbmV3IEZpbGUobWFpbkRpcmVjdG9yeSk7Ci0JCQllbnN1cmVFeGlzdHMoZGlyKTsKLQkJCVN0cmluZyBzdWJEaXJlY3RvcnkgPSBUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcCgpOwotCQkJbG9nU3ViRGlyZWN0b3J5UGF0aCA9IG1haW5EaXJlY3RvcnkgKyAiLyIgKyBzdWJEaXJlY3Rvcnk7Ci0JCQlGaWxlIHN1YmRpciA9IG5ldyBGaWxlKGxvZ1N1YkRpcmVjdG9yeVBhdGgpOwotCQkJZW5zdXJlRXhpc3RzKHN1YmRpcik7Ci0JCX0KLQkJcmV0dXJuIGxvZ1N1YkRpcmVjdG9yeVBhdGg7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGVuc3VyZUV4aXN0cyhGaWxlIGRpcikgewotCQlpZiAoIWRpci5leGlzdHMoKSkgewotCQkJZGlyLm1rZGlycygpOwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGVyZm9ybWFuY2VPdXRwdXRMb2dOYW1lKCkgewotCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQkJU3RyaW5nIGRpcmVjdG9yeU5hbWUgPSBGaWxlVXRpbC5nZXRMb2dEaXJlY3RvcnkoKTsKLQkJU3RyaW5nIGV4dGVuc2lvbiA9ICIub3V0IjsKLQkJU3RyaW5nIGJhc2VOYW1lID0gInNlZFRlc3RzIjsKLQkJbG9uZyBub3cgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJU3RyaW5nIG5vd1N0ciA9IFN0cmluZy52YWx1ZU9mKG5vdyk7Ci0JCXJlc3VsdCA9IGRpcmVjdG9yeU5hbWUgKyBGaWxlVXRpbC5mRmlsZVNlcGFyYXRvciArIGJhc2VOYW1lICsgbm93U3RyICsgZXh0ZW5zaW9uOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvUHJvamVjdFVuemlwVXRpbGl0eS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9Qcm9qZWN0VW56aXBVdGlsaXR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNjgxNDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9Qcm9qZWN0VW56aXBVdGlsaXR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcEZpbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLklPdmVyd3JpdGVRdWVyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS53aXphcmRzLmRhdGF0cmFuc2Zlci5GaWxlU3lzdGVtU3RydWN0dXJlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkud2l6YXJkcy5kYXRhdHJhbnNmZXIuSUltcG9ydFN0cnVjdHVyZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLndpemFyZHMuZGF0YXRyYW5zZmVyLkltcG9ydE9wZXJhdGlvbjsKLQotLyoqCi0gKiBJbXBvcnRzIHppcHBlZCBmaWxlcyBpbnRvIHRoZSB0ZXN0IHdvcmtzcGFjZS4gRGVsZXRlcyBhbGwgcHJvamVjdHMgaW4KLSAqIHdvcmtzcGFjZS4KLSAqIAotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIFByb2plY3RVbnppcFV0aWxpdHkgewotCWNsYXNzIFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBpbXBsZW1lbnRzIElQcm9ncmVzc01vbml0b3IgewotCQlwcml2YXRlIGJvb2xlYW4gZmluaXNoZWQgPSBmYWxzZTsKLQotCQlwdWJsaWMgdm9pZCBiZWdpblRhc2soU3RyaW5nIG5hbWUsIGludCB0b3RhbFdvcmspIHsKLQkJCS8vIG5vb3AKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGRvbmUoKSB7Ci0JCQlmaW5pc2hlZCA9IHRydWU7Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBpc0ZpbmlzaGVkKCkgewotCQkJcmV0dXJuIGZpbmlzaGVkOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgaW50ZXJuYWxXb3JrZWQoZG91YmxlIHdvcmspIHsKLQkJCS8vIG5vb3AKLQkJfQotCi0JCXB1YmxpYyBib29sZWFuIGlzQ2FuY2VsZWQoKSB7Ci0JCQlyZXR1cm4gZmluaXNoZWQ7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzZXRDYW5jZWxlZChib29sZWFuIHZhbHVlKSB7Ci0JCQlpZiAodmFsdWUgPT0gdHJ1ZSkKLQkJCQlmaW5pc2hlZCA9IHRydWU7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzZXRUYXNrTmFtZShTdHJpbmcgbmFtZSkgewotCQkJLy8gbm9vcAotCQl9Ci0KLQkJcHVibGljIHZvaWQgc3ViVGFzayhTdHJpbmcgbmFtZSkgewotCQkJLy8gbm9vcAotCQl9Ci0KLQkJcHVibGljIHZvaWQgd29ya2VkKGludCB3b3JrKSB7Ci0JCQkvLyBub29wCi0JCX0KLQl9Ci0KLQljbGFzcyBNeU92ZXJ3cml0ZVF1ZXJ5IGltcGxlbWVudHMgSU92ZXJ3cml0ZVF1ZXJ5IHsKLQkJcHVibGljIFN0cmluZyBxdWVyeU92ZXJ3cml0ZShTdHJpbmcgcGF0aFN0cmluZykgewotCQkJcmV0dXJuIEFMTDsKLQkJfQotCX0KLQotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST0pFQ1RfWklQU19GT0xERVIgPSAicHJvamVjdHRlc3RmaWxlcyI7Ci0JcHJpdmF0ZSBMaXN0IGZDcmVhdGVkUHJvamVjdHMgPSBudWxsOwotCi0JcHVibGljIFByb2plY3RVbnppcFV0aWxpdHkoKSB7Ci0JCS8vIGZvciBkZWxldGlvbiBsYXRlcgotCQlmQ3JlYXRlZFByb2plY3RzID0gbmV3IEFycmF5TGlzdCgpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBmaWxlVG9JbXBvcnQKLQkgKiAgICAgICAgICAgIHRoZSBmaWxlIHlvdSB3aXNoIHRvIGltcG9ydAotCSAqIEBwYXJhbSBmb2xkZXJQYXRoCi0JICogICAgICAgICAgICB0aGUgY29udGFpbmVyIHBhdGggd2l0aGluIHRoZSB3b3Jrc3BhY2UKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbXBvcnRGaWxlKEZpbGUgZmlsZVRvSW1wb3J0LCBTdHJpbmcgZm9sZGVyUGF0aCkgewotCQlXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgaW1wb3J0UHJvZ3Jlc3MgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCXRyeSB7Ci0JCQlpZiAoZmlsZVRvSW1wb3J0LmV4aXN0cygpKSB7Ci0JCQkJSVBhdGggY29udGFpbmVyUGF0aCA9IG5ldyBQYXRoKGZvbGRlclBhdGgpOwotCQkJCS8vZkNyZWF0ZWRQcm9qZWN0cy5hZGQoZm9sZGVyUGF0aCk7Ci0JCQkJSUltcG9ydFN0cnVjdHVyZVByb3ZpZGVyIHByb3ZpZGVyID0gRmlsZVN5c3RlbVN0cnVjdHVyZVByb3ZpZGVyLklOU1RBTkNFOwotCQkJCUlPdmVyd3JpdGVRdWVyeSBvdmVyd3JpdGVJbXBsZW1lbnRvciA9IG5ldyBNeU92ZXJ3cml0ZVF1ZXJ5KCk7Ci0JCQkJRmlsZVtdIGZpbGVzVG9JbXBvcnQgPSB7ZmlsZVRvSW1wb3J0fTsKLQkJCQlJbXBvcnRPcGVyYXRpb24gaW1wb3J0T3AgPSBuZXcgSW1wb3J0T3BlcmF0aW9uKGNvbnRhaW5lclBhdGgsIG51bGwsIHByb3ZpZGVyLCBvdmVyd3JpdGVJbXBsZW1lbnRvciwgQXJyYXlzLmFzTGlzdChmaWxlc1RvSW1wb3J0KSk7Ci0JCQkJaW1wb3J0T3Auc2V0Q3JlYXRlQ29udGFpbmVyU3RydWN0dXJlKGZhbHNlKTsKLQkJCQlpbXBvcnRPcC5zZXRPdmVyd3JpdGVSZXNvdXJjZXModHJ1ZSk7Ci0JCQkJaW1wb3J0T3AucnVuKGltcG9ydFByb2dyZXNzKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiaGFuZGxlIHNvdXJjZSBkb2Vzbid0IGV4aXN0Iik7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpbXBvcnRQcm9ncmVzcy5kb25lKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiB0aGUgZm9sbG93aW5nIGlzIGxvZ2ljIGZyb20KLQkgKiBodHRwOi8vd3d3LmRldnNoZWQuY29tL2MvYS9KYXZhL1ppcC1NZWV0cy1KYXZhLzIvCi0JICovCi0JLy8gc3BlY2lmeSBidWZmZXIgc2l6ZSBmb3IgZXh0cmFjdGlvbgotCXN0YXRpYyBmaW5hbCBpbnQgQlVGRkVSID0gMjA0ODsKLQotCXB1YmxpYyB2b2lkIHVuemlwQW5kSW1wb3J0KEZpbGUgaW5GaWxlLCBTdHJpbmcgZGVzdGluYXRpb25EaXJlY3RvcnkpIHsKLQkJdHJ5IHsKLQkJCS8vIFNwZWNpZnkgZmlsZSB0byBkZWNvbXByZXNzCi0JCQlTdHJpbmcgaW5GaWxlTmFtZSA9IGluRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsgLy8iYzovZXhhbXBsZS56aXAiOwotCQkJLy8gU3BlY2lmeSBkZXN0aW5hdGlvbiB3aGVyZSBmaWxlIHdpbGwgYmUgdW56aXBwZWQKLQkJCS8vU3RyaW5nIGRlc3RpbmF0aW9uRGlyZWN0b3J5ID0KLQkJCS8vICJkOi9lY2xpcHNlZGV2L001X1NTRV9URVNUU19XT1JLU1BBQ0UvIjsgLy8iYzovdGVtcC8iOwotCQkJRmlsZSBzb3VyY2VaaXBGaWxlID0gbmV3IEZpbGUoaW5GaWxlTmFtZSk7Ci0JCQlGaWxlIHVuemlwRGVzdGluYXRpb25EaXJlY3RvcnkgPSBuZXcgRmlsZShkZXN0aW5hdGlvbkRpcmVjdG9yeSk7Ci0JCQkvLyBPcGVuIFppcCBmaWxlIGZvciByZWFkaW5nCi0JCQlaaXBGaWxlIHppcEZpbGUgPSBuZXcgWmlwRmlsZShzb3VyY2VaaXBGaWxlLCBaaXBGaWxlLk9QRU5fUkVBRCk7Ci0JCQkvLyBDcmVhdGUgYW4gZW51bWVyYXRpb24gb2YgdGhlIGVudHJpZXMgaW4gdGhlIHppcCBmaWxlCi0JCQlFbnVtZXJhdGlvbiB6aXBGaWxlRW50cmllcyA9IHppcEZpbGUuZW50cmllcygpOwotCQkJU3RyaW5nIHByb2plY3RGb2xkZXJOYW1lID0gbnVsbDsKLQkJCUlQcm9qZWN0IGN1cnJlbnRQcm9qZWN0ID0gbnVsbDsKLQkJCS8vIFByb2Nlc3MgZWFjaCBlbnRyeQotCQkJd2hpbGUgKHppcEZpbGVFbnRyaWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JCQkJLy8gZ3JhYiBhIHppcCBmaWxlIGVudHJ5Ci0JCQkJWmlwRW50cnkgZW50cnkgPSAoWmlwRW50cnkpIHppcEZpbGVFbnRyaWVzLm5leHRFbGVtZW50KCk7Ci0JCQkJU3RyaW5nIGN1cnJlbnRFbnRyeSA9IGVudHJ5LmdldE5hbWUoKTsKLQkJCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiRXh0cmFjdGluZzogIiArIGVudHJ5KTsKLQkJCQlGaWxlIGRlc3RGaWxlID0gbmV3IEZpbGUodW56aXBEZXN0aW5hdGlvbkRpcmVjdG9yeSwgY3VycmVudEVudHJ5KTsKLQkJCQkvLyBncmFiIGZpbGUncyBwYXJlbnQgZGlyZWN0b3J5IHN0cnVjdHVyZQotCQkJCUZpbGUgZGVzdGluYXRpb25QYXJlbnQgPSBkZXN0RmlsZS5nZXRQYXJlbnRGaWxlKCk7Ci0JCQkJLy8gY3JlYXRlIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHN0cnVjdHVyZSBpZiBuZWVkZWQKLQkJCQlkZXN0aW5hdGlvblBhcmVudC5ta2RpcnMoKTsKLQkJCQkvLyBleHRyYWN0IGZpbGUgaWYgbm90IGEgZGlyZWN0b3J5Ci0JCQkJaWYgKCFlbnRyeS5pc0RpcmVjdG9yeSgpKSB7Ci0JCQkJCUJ1ZmZlcmVkSW5wdXRTdHJlYW0gaXMgPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSh6aXBGaWxlLmdldElucHV0U3RyZWFtKGVudHJ5KSk7Ci0JCQkJCWludCBjdXJyZW50Qnl0ZTsKLQkJCQkJLy8gZXN0YWJsaXNoIGJ1ZmZlciBmb3Igd3JpdGluZyBmaWxlCi0JCQkJCWJ5dGUgZGF0YVtdID0gbmV3IGJ5dGVbQlVGRkVSXTsKLQkJCQkJLy8gd3JpdGUgdGhlIGN1cnJlbnQgZmlsZSB0byBkaXNrCi0JCQkJCUZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZGVzdEZpbGUpOwotCQkJCQlCdWZmZXJlZE91dHB1dFN0cmVhbSBkZXN0ID0gbmV3IEJ1ZmZlcmVkT3V0cHV0U3RyZWFtKGZvcywgQlVGRkVSKTsKLQkJCQkJLy8gcmVhZCBhbmQgd3JpdGUgdW50aWwgbGFzdCBieXRlIGlzIGVuY291bnRlcmVkCi0JCQkJCXdoaWxlICgoY3VycmVudEJ5dGUgPSBpcy5yZWFkKGRhdGEsIDAsIEJVRkZFUikpICE9IC0xKSB7Ci0JCQkJCQlkZXN0LndyaXRlKGRhdGEsIDAsIGN1cnJlbnRCeXRlKTsKLQkJCQkJfQotCQkJCQlkZXN0LmZsdXNoKCk7Ci0JCQkJCWRlc3QuY2xvc2UoKTsKLQkJCQkJaXMuY2xvc2UoKTsKLQkJCQkJaWYgKHByb2plY3RGb2xkZXJOYW1lICE9IG51bGwpCi0JCQkJCQlpbXBvcnRGaWxlKGRlc3RGaWxlLCBwcm9qZWN0Rm9sZGVyTmFtZSk7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQkvLyBuZWVkIGhhbmRsZSB0byB0aGUgbWFpbiBwcm9qZWN0IGZvbGRlciB0byBjcmVhdGUKLQkJCQkJLy8gY29udGFpbmVyUGF0aAotCQkJCQkvLyB1bmxpa2UgdmVyc2lvbiBpbiBzc2UudGVzdHMsIHdlIGRvbid0IGNyZWF0ZSBwcm9qZWN0Ci0JCQkJCS8vIGZvcgotCQkJCQkvLyBldmVyeSBkaXJlY3RvcnkKLQkJCQkJLy8JCQkJCWlmKHByb2plY3RGb2xkZXJOYW1lID09IG51bGwpIHsKLQkJCQkJLy8JCQkJCQlwcm9qZWN0Rm9sZGVyTmFtZSA9IGRlc3RGaWxlLmdldE5hbWUoKTsKLQkJCQkJLy8JCQkJCQlmQ3JlYXRlZFByb2plY3RzLmFkZChwcm9qZWN0Rm9sZGVyTmFtZSk7Ci0JCQkJCS8vCQkJCQkJCi0JCQkJCS8vCQkJCQkJY3VycmVudFByb2plY3QgPQotCQkJCQkvLyBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdEZvbGRlck5hbWUpOwotCQkJCQkvLwkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCXppcEZpbGUuY2xvc2UoKTsKLQkJCS8vIGZpeGVzIHdvcmtzcGFjZSBtZXRhZGF0YSBmb3IgdGhlIHByb2plY3QKLQkJCS8vIGZvciBjbGVhbiBzdGFydHVwIG5leHQgcnVuCi0JCQlpZiAoY3VycmVudFByb2plY3QgIT0gbnVsbCkgewotCQkJCXRyeSB7Ci0JCQkJCVBhdGggcHJvamVjdExvY2F0aW9uID0gbmV3IFBhdGgoUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCkpOwotCQkJCQljcmVhdGVQcm9qZWN0KGN1cnJlbnRQcm9qZWN0LCBwcm9qZWN0TG9jYXRpb24sIG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJfQotCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGNleCkgewotCQkJCQljZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKLQkJCWlvZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqICAKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWZyZXNoV29ya3NwYWNlKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQlJUHJvamVjdFtdIHByb2plY3RzID0gd3NSb290LmdldFByb2plY3RzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLQkJCXByb2plY3RzW2ldLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQl9Ci0JCXdzUm9vdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBEZWxldGUgcHJvamVjdHMgY3JlYXRlZCAodW56aXBwZWQgYW5kIGltcG9ydGVkKSBieSB0aGlzIHV0aWxpdHkKLQkgKiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIGRlbGV0ZVByb2plY3RzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElQcm9qZWN0W10gcHJvamVjdHMgPSBnZXRDcmVhdGVkUHJvamVjdHMoKTsKLQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIGRlbGV0ZU9wID0gbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKLQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotCQkJCQlwcm9qZWN0c1tpXS5jbGVhckhpc3RvcnkobnVsbCk7Ci0JCQkJCXByb2plY3RzW2ldLmNsb3NlKG51bGwpOwotCQkJCQlwcm9qZWN0c1tpXS5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJfQotCQkJCXJlZnJlc2hXb3Jrc3BhY2UoKTsKLQkJCX0KLQkJfTsKLQkJV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQlkZWxldGVPcC5ydW4ocHJvZ3Jlc3MpOwotCQkvLyBzYXZlcyB0aGUgbmV3IHdvcmtzcGFjZSBtZXRhZGF0YQotCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuc2F2ZSh0cnVlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkZWxldGVQcm9qZWN0KFN0cmluZyBwcm9qZWN0TmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIFN0cmluZyBuYW1lID0gcHJvamVjdE5hbWU7Ci0JCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCWZpbmFsIElQcm9qZWN0IHByb2ogPSB3c1Jvb3QuZ2V0UHJvamVjdChuYW1lKTsKLQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIGRlbGV0ZU9wID0gbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbihwcm9qKSB7Ci0JCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCS8vCQkJCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9Ci0JCQkJLy8gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJCQkvLwkJCQlJUHJvamVjdCBwcm9qID0gd3NSb290LmdldFByb2plY3QobmFtZSk7Ci0JCQkJaWYgKHByb2ogIT0gbnVsbCAmJiBwcm9qLmV4aXN0cygpKSB7Ci0JCQkJCXByb2ouY2xlYXJIaXN0b3J5KG51bGwpOwotCQkJCQkvL3Byb2ouY2xvc2UobnVsbCk7Ci0JCQkJCXByb2oucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkJCXRyeSB7Ci0JCQkJCQlwcm9qLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQkJfQotCQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkJCS8vIGp1c3QgdHJ5IGFnYWluIChub3Qgc3VyZSB3aHkgdGhleSBhcmUgbm90IGJlaW5nCi0JCQkJCQkvLyBkZWxldGVkKQotCQkJCQkJcHJvai5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQkJCXByb2ouZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCQl9Ci0JCQkJCS8vcHJvaiA9IG51bGw7Ci0JCQkJfQotCQkJCXJlZnJlc2hXb3Jrc3BhY2UoKTsKLQkJCX0KLQkJfTsKLQkJV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQlkZWxldGVPcC5ydW4ocHJvZ3Jlc3MpOwotCQkvLyBzYXZlcyB0aGUgbmV3IHdvcmtzcGFjZSBtZXRhZGF0YQotCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuc2F2ZSh0cnVlLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIElQcm9qZWN0cyB0aGF0IHdlcmUgdW56aXBwZWQgYW5kIGltcG9ydGVkIGludG8gdGhlIHdvcmtzcGFjZSBieQotCSAqICAgICAgICAgdGhpcyB1dGlsaXR5Ci0JICovCi0JcHVibGljIElQcm9qZWN0W10gZ2V0Q3JlYXRlZFByb2plY3RzKCkgewotCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQlTdHJpbmdbXSBwcm9qZWN0TmFtZXMgPSAoU3RyaW5nW10pIGZDcmVhdGVkUHJvamVjdHMudG9BcnJheShuZXcgU3RyaW5nW2ZDcmVhdGVkUHJvamVjdHMuc2l6ZSgpXSk7Ci0JCUlQcm9qZWN0W10gcHJvamVjdHMgPSBuZXcgSVByb2plY3RbcHJvamVjdE5hbWVzLmxlbmd0aF07Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdE5hbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlwcm9qZWN0c1tpXSA9IHdzUm9vdC5nZXRQcm9qZWN0KHByb2plY3ROYW1lc1tpXSk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3RzOwotCX0KLQotCXB1YmxpYyB2b2lkIGluaXRKYXZhUHJvamVjdChTdHJpbmcgcHJvak5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gcmVzeW5jaAotCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCS8vY2hhbmdlIHByZXJlcXMgdG8gZ2V0IHRoaXMgZnVuY3Rpb25hbGl0eSBiYWNrIGluCi0JCUlQcm9qZWN0IHByb2ogPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvak5hbWUpOwotCQlpZiAoIXByb2ouZXhpc3RzKCkpIHsKLQkJCXByb2ouY3JlYXRlKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCS8vIG5lZWQgdG8gYWRkIGphdmEgbmF0dXJlLCBvciBlbHNlIHByb2plY3Qgd29uJ3QgImV4aXN0KCkiIGluIHRoZQotCQkvLyBqYXZhCi0JCS8vIGVsZW1lbnQgc2Vuc2UKLQkJU3RyaW5nW10gbmF0dXJlSWRzID0geyJvcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlIn07Ci0JCWlmICghcHJvai5pc09wZW4oKSkgewotCQkJcHJvai5vcGVuKG51bGwpOwotCQl9Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzYyA9IHByb2ouZ2V0RGVzY3JpcHRpb24oKTsKLQkJZGVzYy5zZXROYXR1cmVJZHMobmF0dXJlSWRzKTsKLQkJcHJvai5zZXREZXNjcmlwdGlvbihkZXNjLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY3JlYXRlUHJvamVjdChJUHJvamVjdCBwcm9qZWN0LCBJUGF0aCBsb2NhdGlvblBhdGgsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlpZiAobW9uaXRvciA9PSBudWxsKSB7Ci0JCQltb25pdG9yID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIGRlbGV0ZVByb2plY3QoSVByb2plY3QgZlByb2plY3QpIHRocm93cyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElQcm9qZWN0IHByb2ogPSBmUHJvamVjdDsKLQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIGRlbGV0ZU9wID0gbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbihwcm9qKSB7Ci0JCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCS8vCQkJCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9Ci0JCQkJLy8gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJCQkvLwkJCQlJUHJvamVjdCBwcm9qID0gd3NSb290LmdldFByb2plY3QobmFtZSk7Ci0JCQkJaWYgKHByb2ogIT0gbnVsbCAmJiBwcm9qLmV4aXN0cygpKSB7Ci0JCQkJCXByb2ouY2xlYXJIaXN0b3J5KG51bGwpOwotCQkJCQkvL3Byb2ouY2xvc2UobnVsbCk7Ci0JCQkJCXByb2oucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkJCXByb2ouZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCQkvL3Byb2ogPSBudWxsOwotCQkJCX0KLQkJCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCQl9Ci0JCX07Ci0JCS8vV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQlkZWxldGVPcC5ydW4obnVsbCk7Ci0JCS8vIHNhdmVzIHRoZSBuZXcgd29ya3NwYWNlIG1ldGFkYXRhCi0JCS8vUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnNhdmUodHJ1ZSwgbnVsbCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvVGltZXN0YW1wVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9UaW1lc3RhbXBVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMjAxZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9UaW1lc3RhbXBVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5EYXRlRm9ybWF0OwotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICoKLSAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgb25lIHRpbWVzdGFtcCBwZXIgVk0gcnVuLgotICogKFRlY2huaWNhbGx5LCBwZXIgY2xhc3MgbG9hZGluZy4pCi0gKi8KLXB1YmxpYyBjbGFzcyBUaW1lc3RhbXBVdGlsIHsKLQotCXByaXZhdGUgc3RhdGljIERhdGUgdGltZXN0YW1wID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBEYXRlRm9ybWF0IHNob3J0Rm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXknLSdNTSctJ2RkIik7Ci0JLy8JcHJpdmF0ZSBzdGF0aWMgRGF0ZUZvcm1hdCBsb25nRm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXknLSdNTSctJ2RkJy0na2snLSdtbSctJ3NzIik7Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgbm93U2hvcnQgPSBudWxsOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgdGltZXN0YW1wKCkgewotCi0JCWlmIChUaW1lc3RhbXBVdGlsLm5vd1Nob3J0ID09IG51bGwpIHsKLQkJCVRpbWVzdGFtcFV0aWwubm93U2hvcnQgPSBzaG9ydEZvcm1hdC5mb3JtYXQoZW5zdXJlVGltZXN0YW1wKCkpOwotCQl9Ci0JCXJldHVybiBUaW1lc3RhbXBVdGlsLm5vd1Nob3J0OwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgRGF0ZSBlbnN1cmVUaW1lc3RhbXAoKSB7Ci0JCS8vIGp1c3QgY2FsY3VsYXRlICd0aW1lc3RhbXAnIG9uY2UgcGVyIGNsYXNzIGxvYWRpbmcsIAotCQkvLyBzbyB0aGlzICd0aW1lc3RhbXAnIHJlbWFpbnMgdGhlIHNhbWUgZHVyaW5nIAotCQkvLyBlbnRpcmUgcnVuLiAKLQkJaWYgKFRpbWVzdGFtcFV0aWwudGltZXN0YW1wID09IG51bGwpIHsKLQkJCUNhbGVuZGFyIGNhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKLQkJCVRpbWVzdGFtcFV0aWwudGltZXN0YW1wID0gY2FsZW5kYXIuZ2V0VGltZSgpOwotCQl9Ci0JCXJldHVybiBUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcDsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZDllOWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgotCi0JPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLQk8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotCTwhLS0gPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iIC8+IC0tPgotCTxlY2hvIG1lc3NhZ2U9ImJhc2VkaXIgJHtiYXNlZGlyfSIgLz4KLQk8ZWNobyBtZXNzYWdlPSJlY2xpcHNlIHBsYWNlICR7ZWNsaXBzZS1ob21lfSIgLz4KLQotCTwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLQk8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMiIC8+Ci0JPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0JPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLQk8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLQk8dGFyZ2V0IG5hbWU9ImluaXQiPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQgZGlyPSIke2VjbGlwc2UtaG9tZX0iIGluY2x1ZGVzPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuKnhtbCIgLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotCTx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCQk8cHJvcGVydHkgbmFtZT0id3N0LWZvbGRlciIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93c3RfZm9sZGVyIiAvPgotCQk8ZGVsZXRlIGRpcj0iJHt3c3QtZm9sZGVyfSIgcXVpZXQ9InRydWUiIC8+Ci0JCTxhbnQgdGFyZ2V0PSJjb3JlLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3c3QtZm9sZGVyfSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotCQkJPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5TU0VNb2RlbFhNTFRlc3RTdWl0ZSIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tcGF0aCIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLQk8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLQkJPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0JPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotCTx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotCQk8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuKnhtbCIgLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLQkJPC9hbnQ+Ci0JCTwhLS0JCTxlbWFpbFJlc3VsdHMgcmVzdWx0c0ZpbGU9IiR7YnVpbGQtcmVzdWx0cy1ob21lfS8ke3BsdWdpbi1uYW1lfS54bWwiIGFkZHJlc3NsaXN0PSJkYXZpZF93aWxsaWFtc0B1cy5pYm0uY29tIiAvPiAtLT4KLQk8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy90ZXN0ZmlsZXMuemlwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy56aXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4NGYzMzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy56aXAKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMDEwNTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMvIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc3NjNlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotdGVzdHMuamFyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFjMzcwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZzwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPjwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGQ4YjVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6Mzc6MjEgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyYWM2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTM2OGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzI0OTU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjA1OjI5IEVEVCAyMDA2Ci1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvTGFyZ2VOb0VuY29kaW5nLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL0xhcmdlTm9FbmNvZGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvTGFyZ2VOb0VuY29kaW5nLmh0bWwKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9MYXJnZU5vbkRlZmF1bHQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvTGFyZ2VOb25EZWZhdWx0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9MYXJnZU5vbkRlZmF1bHQuaHRtbAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFmYTU2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMAotQnVuZGxlLUNsYXNzUGF0aDogdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLlRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLAotIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucHJlZiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnByb3BlcnRpZXMsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkLAotIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcudXRpbCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLndyaXRlLAotIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcueG1sCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmp1bml0LAotIG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaCwKLSBvcmcuZWNsaXBzZS51aS5pZGUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlYzU5ODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+TWF5IDIsIDIwMDY8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDFjMmZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSB0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdGZpbGVzLyxcCi0gICAgICAgICAgICAgICB0ZXN0ZmlsZXMuemlwLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCi1zb3VyY2UudGVzdHMuamFyID0gc3JjLwotb3V0cHV0LnRlc3RzLmphciA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvb3V0cHV0RnJvbUxpc3RDaGFyc2V0cy9JQk0xNF8wMTI4LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvb3V0cHV0RnJvbUxpc3RDaGFyc2V0cy9JQk0xNF8wMTI4LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRmYjFkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL291dHB1dEZyb21MaXN0Q2hhcnNldHMvSUJNMTRfMDEyOC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw4NTcgKzAsMCBAQAotCi1DdXJyZW50IExvY2FsZTogZW5fVVMKLQotSlJFIHZlcnNpb246IEoyUkUgMS40LjIgSUJNIFdpbmRvd3MgMzIgYnVpbGQgY25kZXYtMjAwNDAxMjggKEpJVCBlbmFibGVkOiBqaXRjKQotLS0gbGlzdGluZyBwcm9wZXJ0aWVzIC0tCi1qYXZhLmFzc2lzdGl2ZT1PTgotamF2YS5ydW50aW1lLm5hbWU9SmF2YShUTSkgMiBSdW50aW1lIEVudmlyb25tZW50LCBTdGFuZC4uLgotc3VuLmJvb3QubGlicmFyeS5wYXRoPUQ6XGJ1aWxkc1xEYWlseVx3c3diLVNESy1JMjAwNDAyMjYtd2kuLi4KLWphdmEudm0udmVyc2lvbj0xLjQuMgotamF2YS52bS52ZW5kb3I9SUJNIENvcnBvcmF0aW9uCi1qYXZhLnZlbmRvci51cmw9aHR0cDovL3d3dy5pYm0uY29tLwotcGF0aC5zZXBhcmF0b3I9OwotamF2YS52bS5uYW1lPUNsYXNzaWMgVk0KLWZpbGUuZW5jb2RpbmcucGtnPXN1bi5pbwotdXNlci5jb3VudHJ5PVVTCi1zdW4ub3MucGF0Y2gubGV2ZWw9U2VydmljZSBQYWNrIDEKLWphdmEudm0uc3BlY2lmaWNhdGlvbi5uYW1lPUphdmEgVmlydHVhbCBNYWNoaW5lIFNwZWNpZmljYXRpb24KLXVzZXIuZGlyPUQ6XGJ1aWxkc1xEYWlseVxlY2xpcHNlLVNESy1JMjAwNDAzMDQuLi4KLWphdmEucnVudGltZS52ZXJzaW9uPTEuNC4yCi1qYXZhLmZ1bGx2ZXJzaW9uPUoyUkUgMS40LjIgSUJNIFdpbmRvd3MgMzIgYnVpbGQgY25kZXYuLi4KLWphdmEuYXd0LmdyYXBoaWNzZW52PXN1bi5hd3QuV2luMzJHcmFwaGljc0Vudmlyb25tZW50Ci1qYXZhLmVuZG9yc2VkLmRpcnM9RDpcYnVpbGRzXERhaWx5XHdzd2ItU0RLLUkyMDA0MDIyNi13aS4uLgotb3MuYXJjaD14ODYKLWphdmEuaW8udG1wZGlyPUM6XERPQ1VNRX4xXERBVklEV34xLkRNV1xMT0NBTFN+MVxUZW1wXAotbGluZS5zZXBhcmF0b3I9Ci0KLWphdmEudm0uc3BlY2lmaWNhdGlvbi52ZW5kb3I9U3VuIE1pY3Jvc3lzdGVtcyBJbmMuCi11c2VyLnZhcmlhbnQ9Ci1qYXZhLmF3dC5mb250cz0KLW9zLm5hbWU9V2luZG93cyBYUAotc3VuLmphdmEyZC5mb250cGF0aD0KLWphdmEubGlicmFyeS5wYXRoPUQ6XGJ1aWxkc1xEYWlseVx3c3diLVNESy1JMjAwNDAyMjYtd2kuLi4KLWphdmEuc3BlY2lmaWNhdGlvbi5uYW1lPUphdmEgUGxhdGZvcm0gQVBJIFNwZWNpZmljYXRpb24KLWphdmEuY2xhc3MudmVyc2lvbj00OC4wCi1pYm0uc3lzdGVtLmVuY29kaW5nPUNwMTI1MgotamF2YS51dGlsLnByZWZzLlByZWZlcmVuY2VzRmFjdG9yeT1qYXZhLnV0aWwucHJlZnMuV2luZG93c1ByZWZlcmVuY2VzRmFjLi4uCi1pbnZva2VkdmlhamF2YT0KLW9zLnZlcnNpb249NS4xCi11c2VyLmhvbWU9QzpcRG9jdW1lbnRzIGFuZCBTZXR0aW5nc1xkYXZpZHcuRE1XMlQyMwotdXNlci50aW1lem9uZT0KLWphdmEuYXd0LnByaW50ZXJqb2I9c3VuLmF3dC53aW5kb3dzLldQcmludGVySm9iCi1qYXZhLnNwZWNpZmljYXRpb24udmVyc2lvbj0xLjQKLWZpbGUuZW5jb2Rpbmc9Q3AxMjUyCi11c2VyLm5hbWU9ZGF2aWR3Ci1qYXZhLmNsYXNzLnBhdGg9RDpcYnVpbGRzXERhaWx5XGVjbGlwc2UtU0RLLUkyMDA0MDMwNC4uLgotamF2YS52bS5zcGVjaWZpY2F0aW9uLnZlcnNpb249MS4wCi1zdW4uYXJjaC5kYXRhLm1vZGVsPTMyCi1qYXZhLmhvbWU9RDpcYnVpbGRzXERhaWx5XHdzd2ItU0RLLUkyMDA0MDIyNi13aS4uLgotamF2YS5zcGVjaWZpY2F0aW9uLnZlbmRvcj1TdW4gTWljcm9zeXN0ZW1zIEluYy4KLXVzZXIubGFuZ3VhZ2U9ZW4KLWF3dC50b29sa2l0PXN1bi5hd3Qud2luZG93cy5XVG9vbGtpdAotamF2YS52bS5pbmZvPUoyUkUgMS40LjIgSUJNIFdpbmRvd3MgMzIgYnVpbGQgY25kZXYuLi4KLWphdmEudmVyc2lvbj0xLjQuMgotamF2YS5leHQuZGlycz1EOlxidWlsZHNcRGFpbHlcd3N3Yi1TREstSTIwMDQwMjI2LXdpLi4uCi1zdW4uYm9vdC5jbGFzcy5wYXRoPUQ6XGJ1aWxkc1xEYWlseVx3c3diLVNESy1JMjAwNDAyMjYtd2kuLi4KLWphdmEudmVuZG9yPUlCTSBDb3Jwb3JhdGlvbgotZmlsZS5zZXBhcmF0b3I9XAotamF2YS52ZW5kb3IudXJsLmJ1Zz0KLWphdmEuY29tcGlsZXI9aml0Ywotc3VuLmlvLnVuaWNvZGUuZW5jb2Rpbmc9VW5pY29kZUxpdHRsZQotQXZhaWxhYmxlIExvY2FsZXMKLWFyCi1hcl9BRQotYXJfQkgKLWFyX0RaCi1hcl9FRwotYXJfSVEKLWFyX0pPCi1hcl9LVwotYXJfTEIKLWFyX0xZCi1hcl9NQQotYXJfT00KLWFyX1FBCi1hcl9TQQotYXJfU0QKLWFyX1NZCi1hcl9UTgotYXJfWUUKLWJlCi1iZV9CWQotYmcKLWJnX0JHCi1ibl9JTgotY2EKLWNhX0VTCi1jYV9FU19QUkVFVVJPCi1jcwotY3NfQ1oKLWRhCi1kYV9ESwotZGFfREtfRVVSTwotZGUKLWRlX0FUCi1kZV9BVF9QUkVFVVJPCi1kZV9DSAotZGVfREUKLWRlX0RFX1BSRUVVUk8KLWRlX0xVCi1kZV9MVV9QUkVFVVJPCi1lbAotZWxfR1IKLWVsX0dSX1BSRUVVUk8KLWVuCi1lbl9BVQotZW5fQkUKLWVuX0JFX1BSRUVVUk8KLWVuX0NBCi1lbl9HQgotZW5fR0JfRVVSTwotZW5fSEsKLWVuX0lFCi1lbl9JRV9QUkVFVVJPCi1lbl9JTgotZW5fTloKLWVuX1BICi1lbl9TRwotZW5fVVMKLWVuX1pBCi1lcwotZXNfQVIKLWVzX0JPCi1lc19DTAotZXNfQ08KLWVzX0NSCi1lc19ETwotZXNfRUMKLWVzX0VTCi1lc19FU19QUkVFVVJPCi1lc19HVAotZXNfSE4KLWVzX01YCi1lc19OSQotZXNfUEEKLWVzX1BFCi1lc19QUgotZXNfUFkKLWVzX1NWCi1lc19VUwotZXNfVVkKLWVzX1ZFCi1ldAotZXRfRUUKLWZpCi1maV9GSQotZmlfRklfUFJFRVVSTwotZnIKLWZyX0JFCi1mcl9CRV9QUkVFVVJPCi1mcl9DQQotZnJfQ0gKLWZyX0ZSCi1mcl9GUl9QUkVFVVJPCi1mcl9MVQotZnJfTFVfUFJFRVVSTwotZ3UKLWd1X0lOCi1oaQotaGlfSU4KLWhyCi1ocl9IUgotaHUKLWh1X0hVCi1pbgotaW5fSUQKLWlzCi1pc19JUwotaXQKLWl0X0NICi1pdF9JVAotaXRfSVRfUFJFRVVSTwotaXcKLWl3X0lMCi1qYQotamFfSlAKLWtrCi1ra19LWgota24KLWtuX0lOCi1rbwota29rX0lOCi1rb19LUgotbHQKLWx0X0xUCi1sdgotbHZfTFYKLW1rCi1ta19NSwotbWxfSU4KLW1yCi1tcl9JTgotbXMKLW1zX01ZCi1uYl9OTwotbmwKLW5sX0JFCi1ubF9CRV9QUkVFVVJPCi1ubF9OTAotbmxfTkxfUFJFRVVSTwotbm8KLW5vX05PCi1ub19OT19OWQotb3JfSU4KLXBhCi1wYV9JTgotcGwKLXBsX1BMCi1wdAotcHRfQlIKLXB0X1BUCi1wdF9QVF9QUkVFVVJPCi1ybwotcm9fUk8KLXJ1Ci1ydV9SVQotc2EKLXNhX0lOCi1zaAotc2hfWVUKLXNrCi1za19TSwotc2wKLXNsX1NJCi1zcQotc3FfQUwKLXNyCi1zcl9ZVQotc3YKLXN2X1NFCi1zdl9TRV9FVVJPCi10YQotdGFfSU4KLXRlCi10ZV9JTgotdGgKLXRoX1RICi10aF9USF9USAotdHIKLXRyX1RSCi11awotdWtfVUEKLXZpCi12aV9WTgotemgKLXpoX0NOCi16aF9DTl9ISwotemhfSEsKLXpoX1NHCi16aF9UVwotZmlsZS5lbmNvZGluZy5wa2c6IHN1bi5pbwotZmlsZS5lbmNvZGluZzogQ3AxMjUyCi0KLQotQXZhaWxhYmxlIENoYXJzZXRzCi0xLiAgQ2hhcnNldG5hbWU6IEJpZzUKLQlkaXNwbGF5TmFtZTogQmlnNTogUEMgVGFpd2FuIEJpZyA1Ci0JYWxpYXNlczogW2JpZzUsIEJpZzUtSEtTQ1NdCi0yLiAgQ2hhcnNldG5hbWU6IENFU1UtOAotCWRpc3BsYXlOYW1lOiBDRVNVLTg6IFVuaWNvZGUgVVRGLTggKHdpdGhvdXQgc3Vycm9nYXRlcykKLQlhbGlhc2VzOiBbQ0VTVThdCi0zLiAgQ2hhcnNldG5hbWU6IENPTVBPVU5EX1RFWFQKLQlkaXNwbGF5TmFtZTogQ09NUE9VTkRfVEVYVDogWDExIENvbXBvdW5kIFRleHQKLQlhbGlhc2VzOiBbeC1jb21wb3VuZC10ZXh0LCB4MTEtY29tcG91bmQtdGV4dF0KLTQuICBDaGFyc2V0bmFtZTogRVVDLUNOCi0JZGlzcGxheU5hbWU6IEVVQy1DTjogRVVDIENoaW5hCi0JYWxpYXNlczogW2V1Y19jbiwgZXVjY24sIGlibS1ldWNjbl0KLTUuICBDaGFyc2V0bmFtZTogRVVDLUpQCi0JZGlzcGxheU5hbWU6IEVVQy1KUDogRVVDIEphcGFuCi0JYWxpYXNlczogW2V1Yy1qcC1saW51eCwgeC1ldWMtanAsIHgtZXVjanAsIGV1Y19qcF9saW51eCwgZXVjanAsIGV1Y19qcF0KLTYuICBDaGFyc2V0bmFtZTogRVVDLUtSCi0JZGlzcGxheU5hbWU6IEVVQy1LUjogRVVDIEtvcmVhCi0JYWxpYXNlczogWzU2MDEsIGtzYzU2MDFfMTk4Nywga3NjXzU2MDEsIGlibS1ldWNrciwga3NjNTYwMS0xOTg3LCBpYm0tOTcwLCBldWNfa3IsIENwOTcwLCBrc19jXzU2MDEtMTk4NywgZXVja3JdCi03LiAgQ2hhcnNldG5hbWU6IEVVQy1UVwotCWRpc3BsYXlOYW1lOiBFVUMtVFc6IEVVQyBUYWl3YW4KLQlhbGlhc2VzOiBbZXVjX3R3LCBjbnMxMTY0MywgZXVjdHddCi04LiAgQ2hhcnNldG5hbWU6IEdCMTgwMzAKLQlkaXNwbGF5TmFtZTogR0IxODAzMDogUEMgQ2hpbmEgR0IxODAzMAotCWFsaWFzZXM6IFt3aW5kb3dzLTU0OTM2LCBpYm0tMTM5MiwgZ2IxODAzMC0yMDAwXQotOS4gIENoYXJzZXRuYW1lOiBHQjIzMTIKLQlkaXNwbGF5TmFtZTogR0IyMzEyCi0JYWxpYXNlczogW2diMjMxMi04MCwgZ2IyMzEyLTE5ODBdCi0xMC4gIENoYXJzZXRuYW1lOiBHQksKLQlkaXNwbGF5TmFtZTogR0JLOiBQQyBDaGluYSBHQksKLQlhbGlhc2VzOiBbR0JLXQotMTEuICBDaGFyc2V0bmFtZTogaHAtcm9tYW44Ci0JZGlzcGxheU5hbWU6IGhwLXJvbWFuODogSFAgUm9tYW4gOAotCWFsaWFzZXM6IFtDcDEwNTEsIGlibS0xMDUxLCByb21hbjgsIHI4XQotMTIuICBDaGFyc2V0bmFtZTogSUJNLTAzNwotCWRpc3BsYXlOYW1lOiBJQk0tMDM3OiBFQkNESUMgVW5pdGVkIFN0YXRlcwotCWFsaWFzZXM6IFtpYm0tMzddCi0xMy4gIENoYXJzZXRuYW1lOiBJQk0tMTAwNgotCWRpc3BsYXlOYW1lOiBJQk0tMTAwNjogSVNPIFVyZHUKLQlhbGlhc2VzOiBbaWJtMTAwNiwgQ3AxMDA2XQotMTQuICBDaGFyc2V0bmFtZTogSUJNLTEwMjUKLQlkaXNwbGF5TmFtZTogSUJNLTEwMjU6IEVCQ0RJQyBDeXJpbGxpYwotCWFsaWFzZXM6IFtpYm0xMDI1LCBDcDEwMjVdCi0xNS4gIENoYXJzZXRuYW1lOiBJQk0tMTAyNgotCWRpc3BsYXlOYW1lOiBJQk0tMTAyNjogRUJDRElDIExhdGluIDUgKFR1cmtleSkKLQlhbGlhc2VzOiBbQ3AxMDI2LCBpYm0xMDI2XQotMTYuICBDaGFyc2V0bmFtZTogSUJNLTEwMjcKLQlkaXNwbGF5TmFtZTogSUJNLTEwMjc6IEVCQ0RJQyBTQkNTIEphcGFuCi0JYWxpYXNlczogW2libTEwMjcsIENwMTAyN10KLTE3LiAgQ2hhcnNldG5hbWU6IElCTS0xMDQxCi0JZGlzcGxheU5hbWU6IElCTS0xMDQxOiBQQyBTQkNTLW9ubHkgSmFwYW4KLQlhbGlhc2VzOiBbQ3AxMDQxLCBpYm0xMDQxXQotMTguICBDaGFyc2V0bmFtZTogSUJNLTEwNDMKLQlkaXNwbGF5TmFtZTogSUJNLTEwNDM6IFBDIFNCQ1Mtb25seSBUYWl3YW4KLQlhbGlhc2VzOiBbQ3AxMDQzLCBpYm0xMDQzXQotMTkuICBDaGFyc2V0bmFtZTogSUJNLTEwNDYKLQlkaXNwbGF5TmFtZTogSUJNLTEwNDY6IEVCQ0RJQyBBcmFiaWMKLQlhbGlhc2VzOiBbaWJtMTA0NiwgQ3AxMDQ2XQotMjAuICBDaGFyc2V0bmFtZTogSUJNLTEwNDZTCi0JZGlzcGxheU5hbWU6IElCTS0xMDQ2UzogRUJDRElDIEFyYWJpYyAoc2hhcGVkKQotCWFsaWFzZXM6IFtDcDEwNDZTLCBpYm0xMDQ2U10KLTIxLiAgQ2hhcnNldG5hbWU6IElCTS0xMDQ3Ci0JZGlzcGxheU5hbWU6IElCTS0xMDQ3OiBFQkNESUMgT3BlbiBFZGl0aW9uCi0JYWxpYXNlczogW0NwMTA0NywgaWJtMTA0N10KLTIyLiAgQ2hhcnNldG5hbWU6IElCTS0xMDg4Ci0JZGlzcGxheU5hbWU6IElCTS0xMDg4OiBQQyBTQkNTLW9ubHkgS29yZWFuIEtTCi0JYWxpYXNlczogW0NwMTA4OCwgaWJtMTA4OF0KLTIzLiAgQ2hhcnNldG5hbWU6IElCTS0xMDk3Ci0JZGlzcGxheU5hbWU6IElCTS0xMDk3OiBFQkNESUMgRmFyc2kKLQlhbGlhc2VzOiBbQ3AxMDk3LCBpYm0xMDk3XQotMjQuICBDaGFyc2V0bmFtZTogSUJNLTEwOTgKLQlkaXNwbGF5TmFtZTogSUJNLTEwOTg6IElTTyBGYXJzaQotCWFsaWFzZXM6IFtDcDEwOTgsIGlibTEwOThdCi0yNS4gIENoYXJzZXRuYW1lOiBJQk0tMTExMgotCWRpc3BsYXlOYW1lOiBJQk0tMTExMjogRUJDRElDIEJhbHRpYwotCWFsaWFzZXM6IFtDcDExMTIsIGlibTExMTJdCi0yNi4gIENoYXJzZXRuYW1lOiBJQk0tMTExNAotCWRpc3BsYXlOYW1lOiBJQk0tMTExNDogUEMgU0JDUy1vbmx5IFRhaXdhbgotCWFsaWFzZXM6IFtDcDExMTQsIGlibTExMTRdCi0yNy4gIENoYXJzZXRuYW1lOiBJQk0tMTExNQotCWRpc3BsYXlOYW1lOiBJQk0tMTExNTogUEMgU0JDUy1vbmx5IENoaW5hCi0JYWxpYXNlczogW0NwMTExNSwgaWJtMTExNV0KLTI4LiAgQ2hhcnNldG5hbWU6IElCTS0xMTIyCi0JZGlzcGxheU5hbWU6IElCTS0xMTIyOiBFQkNESUMgRXN0b25pYQotCWFsaWFzZXM6IFtDcDExMjIsIGlibTExMjJdCi0yOS4gIENoYXJzZXRuYW1lOiBJQk0tMTEyMwotCWRpc3BsYXlOYW1lOiBJQk0tMTEyMzogRUJDRElDIFVrcmFpbmUKLQlhbGlhc2VzOiBbQ3AxMTIzLCBpYm0xMTIzXQotMzAuICBDaGFyc2V0bmFtZTogSUJNLTExMjQKLQlkaXNwbGF5TmFtZTogSUJNLTExMjQ6IFBDIFVrcmFpbmUKLQlhbGlhc2VzOiBbQ3AxMTI0LCBpYm0xMTI0XQotMzEuICBDaGFyc2V0bmFtZTogSUJNLTExNDAKLQlkaXNwbGF5TmFtZTogSUJNLTExNDA6IEVCQ0RJQyBVbml0ZWQgU3RhdGVzIChldXJvKQotCWFsaWFzZXM6IFtDcDExNDAsIGlibTExNDBdCi0zMi4gIENoYXJzZXRuYW1lOiBJQk0tMTE0MQotCWRpc3BsYXlOYW1lOiBJQk0tMTE0MTogRUJDRElDIEdlcm1hbnkgKGV1cm8pCi0JYWxpYXNlczogW0NwMTE0MSwgaWJtMTE0MV0KLTMzLiAgQ2hhcnNldG5hbWU6IElCTS0xMTQyCi0JZGlzcGxheU5hbWU6IElCTS0xMTQyOiBFQkNESUMgRGVubWFyaywgTm9yd2F5IChldXJvKQotCWFsaWFzZXM6IFtDcDExNDIsIGlibTExNDJdCi0zNC4gIENoYXJzZXRuYW1lOiBJQk0tMTE0MwotCWRpc3BsYXlOYW1lOiBJQk0tMTE0MzogRUJDRElDIEZpbmxhbmQsIFN3ZWRlbiAoZXVybykKLQlhbGlhc2VzOiBbaWJtMTE0MywgQ3AxMTQzXQotMzUuICBDaGFyc2V0bmFtZTogSUJNLTExNDQKLQlkaXNwbGF5TmFtZTogSUJNLTExNDQ6IEVCQ0RJQyBJdGFseSAoZXVybykKLQlhbGlhc2VzOiBbQ3AxMTQ0LCBpYm0xMTQ0XQotMzYuICBDaGFyc2V0bmFtZTogSUJNLTExNDUKLQlkaXNwbGF5TmFtZTogSUJNLTExNDU6IEVCQ0RJQyBTcGFpbiAoZXVybykKLQlhbGlhc2VzOiBbaWJtMTE0NSwgQ3AxMTQ1XQotMzcuICBDaGFyc2V0bmFtZTogSUJNLTExNDYKLQlkaXNwbGF5TmFtZTogSUJNLTExNDY6IEVCQ0RJQyBVSywgSXJlbGFuZCAoZXVybykKLQlhbGlhc2VzOiBbQ3AxMTQ2LCBpYm0xMTQ2XQotMzguICBDaGFyc2V0bmFtZTogSUJNLTExNDcKLQlkaXNwbGF5TmFtZTogSUJNLTExNDc6IEVCQ0RJQyBGcmFuY2UgKGV1cm8pCi0JYWxpYXNlczogW0NwMTE0NywgaWJtMTE0N10KLTM5LiAgQ2hhcnNldG5hbWU6IElCTS0xMTQ4Ci0JZGlzcGxheU5hbWU6IElCTS0xMTQ4OiBFQkNESUMgTXVsdGlsaW5ndWFsIChldXJvKQotCWFsaWFzZXM6IFtDcDExNDgsIGlibTExNDhdCi00MC4gIENoYXJzZXRuYW1lOiBJQk0tMTE0OQotCWRpc3BsYXlOYW1lOiBJQk0tMTE0OTogRUJDRElDIEljZWxhbmQKLQlhbGlhc2VzOiBbQ3AxMTQ5LCBpYm0xMTQ5XQotNDEuICBDaGFyc2V0bmFtZTogSUJNLTEzNTEKLQlkaXNwbGF5TmFtZTogSUJNLTEzNTE6IFBDIERCQ1Mtb25seSBKYXBhbgotCWFsaWFzZXM6IFtDcDEzNTEsIGlibTEzNTFdCi00Mi4gIENoYXJzZXRuYW1lOiBJQk0tMTM2MgotCWRpc3BsYXlOYW1lOiBJQk0tMTM2MjogUEMgREJDUy1vbmx5IEtvcmVhIEtTIGV4dGVuZGVkCi0JYWxpYXNlczogW0NwMTM2MiwgaWJtMTM2Ml0KLTQzLiAgQ2hhcnNldG5hbWU6IElCTS0xMzYzCi0JZGlzcGxheU5hbWU6IElCTS0xMzYzOiBQQyBLb3JlYSBLUyBleHRlbmRlZAotCWFsaWFzZXM6IFtDcDEzNjMsIGlibTEzNjNdCi00NC4gIENoYXJzZXRuYW1lOiBJQk0tMTM2M0MKLQlkaXNwbGF5TmFtZTogSUJNLTEzNjNDOiBQQyBLb3JlYSBLUyBleHRlbmRlZCAoc3ludGF4KQotCWFsaWFzZXM6IFtpYm0xMzYzQywgQ3AxMzYzQ10KLTQ1LiAgQ2hhcnNldG5hbWU6IElCTS0xMzY0Ci0JZGlzcGxheU5hbWU6IElCTS0xMzY0OiBFQkNESUMgS29yZWEgS1MgZXh0ZW5kZWQKLQlhbGlhc2VzOiBbaWJtMTM2NCwgQ3AxMzY0XQotNDYuICBDaGFyc2V0bmFtZTogSUJNLTEzNzAKLQlkaXNwbGF5TmFtZTogSUJNLTEzNzA6IFBDIFRhaXdhbiAoZXVybykKLQlhbGlhc2VzOiBbQ3AxMzcwLCBpYm0xMzcwXQotNDcuICBDaGFyc2V0bmFtZTogSUJNLTEzNzEKLQlkaXNwbGF5TmFtZTogSUJNLTEzNzE6IEVCQ0RJQyBUYWl3YW4gKGV1cm8pCi0JYWxpYXNlczogW0NwMTM3MSwgaWJtMTM3MV0KLTQ4LiAgQ2hhcnNldG5hbWU6IElCTS0xMzgwCi0JZGlzcGxheU5hbWU6IElCTS0xMzgwOiBQQyBEQkNTLW9ubHkgQ2hpbmEgR0IKLQlhbGlhc2VzOiBbaWJtMTM4MCwgQ3AxMzgwXQotNDkuICBDaGFyc2V0bmFtZTogSUJNLTEzODEKLQlkaXNwbGF5TmFtZTogSUJNLTEzODE6IFBDIENoaW5hIEdCCi0JYWxpYXNlczogW0NwMTM4MSwgaWJtMTM4MV0KLTUwLiAgQ2hhcnNldG5hbWU6IElCTS0xMzgyCi0JZGlzcGxheU5hbWU6IElCTS0xMzgyOiBFVUMgREJDUy1vbmx5IENoaW5hIEdCCi0JYWxpYXNlczogW2libTEzODIsIENwMTM4Ml0KLTUxLiAgQ2hhcnNldG5hbWU6IElCTS0xMzgzCi0JZGlzcGxheU5hbWU6IElCTS0xMzgzOiBFVUMgQ2hpbmEKLQlhbGlhc2VzOiBbQ3AxMzgzLCBpYm0xMzgzXQotNTIuICBDaGFyc2V0bmFtZTogSUJNLTEzODUKLQlkaXNwbGF5TmFtZTogSUJNLTEzODU6IFBDIERCQ1Mtb25seSBDaGluYSBHQksKLQlhbGlhc2VzOiBbQ3AxMzg1LCBpYm0xMzg1XQotNTMuICBDaGFyc2V0bmFtZTogSUJNLTEzODYKLQlkaXNwbGF5TmFtZTogSUJNLTEzODY6IFBDIENoaW5hIEdCSwotCWFsaWFzZXM6IFtDcDEzODYsIGlibTEzODZdCi01NC4gIENoYXJzZXRuYW1lOiBJQk0tMTM4OAotCWRpc3BsYXlOYW1lOiBJQk0tMTM4ODogRUJDRElDIENoaW5hIEdCSwotCWFsaWFzZXM6IFtpYm0xMzg4LCBDcDEzODhdCi01NS4gIENoYXJzZXRuYW1lOiBJQk0tMTM5MAotCWRpc3BsYXlOYW1lOiBJQk0tMTM5MDogRUJDRElDIEphcGFuIEthdGFrYW5hIChldXJvKQotCWFsaWFzZXM6IFtDcDEzOTAsIGlibTEzOTBdCi01Ni4gIENoYXJzZXRuYW1lOiBJQk0tMTM5OQotCWRpc3BsYXlOYW1lOiBJQk0tMTM5OTogRUJDRElDIEphcGFuIExhdGluIChldXJvKQotCWFsaWFzZXM6IFtDcDEzOTksIGlibTEzOTldCi01Ny4gIENoYXJzZXRuYW1lOiBJQk0tMjczCi0JZGlzcGxheU5hbWU6IElCTS0yNzM6IEVCQ0RJQyBHZXJtYW55Ci0JYWxpYXNlczogW2libTI3MywgQ3AyNzNdCi01OC4gIENoYXJzZXRuYW1lOiBJQk0tMjc3Ci0JZGlzcGxheU5hbWU6IElCTS0yNzc6IEVCQ0RJQyBEZW5tYXJrLCBOb3J3YXkKLQlhbGlhc2VzOiBbQ3AyNzcsIGlibTI3N10KLTU5LiAgQ2hhcnNldG5hbWU6IElCTS0yNzgKLQlkaXNwbGF5TmFtZTogSUJNLTI3ODogRUJDRElDIEZpbmxhbmQsIFN3ZWRlbgotCWFsaWFzZXM6IFtpYm0yNzgsIENwMjc4XQotNjAuICBDaGFyc2V0bmFtZTogSUJNLTI4MAotCWRpc3BsYXlOYW1lOiBJQk0tMjgwOiBFQkNESUMgSXRhbHkgCi0JYWxpYXNlczogW2libTI4MCwgQ3AyODBdCi02MS4gIENoYXJzZXRuYW1lOiBJQk0tMjg0Ci0JZGlzcGxheU5hbWU6IElCTS0yODQ6IEVCQ0RJQyBTcGFpbiwgTGF0aW4gQW1lcmljYQotCWFsaWFzZXM6IFtDcDI4NCwgaWJtMjg0XQotNjIuICBDaGFyc2V0bmFtZTogSUJNLTI4NQotCWRpc3BsYXlOYW1lOiBJQk0tMjg1OiBFQkNESUMgVUssIElyZWxhbmQKLQlhbGlhc2VzOiBbQ3AyODUsIGlibTI4NV0KLTYzLiAgQ2hhcnNldG5hbWU6IElCTS0yOTAKLQlkaXNwbGF5TmFtZTogSUJNLTI5MDogRUJDRElDIFNCQ1MgSmFwYW4gS2F0YWthbmEKLQlhbGlhc2VzOiBbQ3AyOTAsIGlibTI5MF0KLTY0LiAgQ2hhcnNldG5hbWU6IElCTS0yOTcKLQlkaXNwbGF5TmFtZTogSUJNLTI5NzogRUJDRElDIEZyYW5jZQotCWFsaWFzZXM6IFtDcDI5NywgaWJtMjk3XQotNjUuICBDaGFyc2V0bmFtZTogSUJNLTMwMAotCWRpc3BsYXlOYW1lOiBJQk0tMzAwOiBFQkNESUMgREJDUy1vbmx5IEphcGFuCi0JYWxpYXNlczogW0NwMzAwLCBpYm0zMDBdCi02Ni4gIENoYXJzZXRuYW1lOiBJQk0tMzAxCi0JZGlzcGxheU5hbWU6IElCTS0zMDE6IFBDIERCQ1Mtb25seSBKYXBhbgotCWFsaWFzZXM6IFtpYm0zMDEsIENwMzAxXQotNjcuICBDaGFyc2V0bmFtZTogSUJNLTMzNzIyCi0JZGlzcGxheU5hbWU6IElCTS0zMzcyMjogRVVDIEphcGFuCi0JYWxpYXNlczogW0NwMzM3MjIsIGlibTMzNzIyXQotNjguICBDaGFyc2V0bmFtZTogSUJNLTMzNzIyQwotCWRpc3BsYXlOYW1lOiBJQk0tMzM3MjJDOiBFVUMgSmFwYW4gc3ludGF4Ci0JYWxpYXNlczogW2libTMzNzIyQywgQ3AzMzcyMkNdCi02OS4gIENoYXJzZXRuYW1lOiBJQk0tNDIwCi0JZGlzcGxheU5hbWU6IElCTS00MjA6IEVCQ0RJQyBBcmFiaWMKLQlhbGlhc2VzOiBbQ3A0MjAsIGlibTQyMF0KLTcwLiAgQ2hhcnNldG5hbWU6IElCTS00MjBTCi0JZGlzcGxheU5hbWU6IElCTS00MjBTOiBFQkNESUMgQXJhYmljIHNoYXBlZAotCWFsaWFzZXM6IFtDcDQyMFMsIGlibTQyMFNdCi03MS4gIENoYXJzZXRuYW1lOiBJQk0tNDI0Ci0JZGlzcGxheU5hbWU6IElCTS00MjQ6IEVCQ0RJQyBIZWJyZXcKLQlhbGlhc2VzOiBbaWJtNDI0LCBDcDQyNF0KLTcyLiAgQ2hhcnNldG5hbWU6IElCTS00MzcKLQlkaXNwbGF5TmFtZTogSUJNLTQzNzogUEMgVW5pdGVkIFN0YXRlcwotCWFsaWFzZXM6IFtDcDQzNywgY3NwYzhjb2RlcGFnZTQzNywgaWJtNDM3XQotNzMuICBDaGFyc2V0bmFtZTogSUJNLTUwMAotCWRpc3BsYXlOYW1lOiBJQk0tNTAwOiBFQkNESUMgTGF0aW4gMQotCWFsaWFzZXM6IFtpYm01MDAsIENwNTAwXQotNzQuICBDaGFyc2V0bmFtZTogSUJNLTczNwotCWRpc3BsYXlOYW1lOiBJQk0tNzM3OiBNUy1ET1MgR3JlZWsKLQlhbGlhc2VzOiBbaWJtNzM3LCBDcDczN10KLTc1LiAgQ2hhcnNldG5hbWU6IElCTS03NzUKLQlkaXNwbGF5TmFtZTogSUJNLTc3NTogTVMtRE9TIEJhbHRpYyBSaW0KLQlhbGlhc2VzOiBbaWJtNzc1LCBDcDc3NV0KLTc2LiAgQ2hhcnNldG5hbWU6IElCTS04MDgKLQlkaXNwbGF5TmFtZTogSUJNLTgwODogUEMgUnVzc2lhbiAoZXVybykKLQlhbGlhc2VzOiBbaWJtODA4LCBDcDgwOF0KLTc3LiAgQ2hhcnNldG5hbWU6IElCTS04MzMKLQlkaXNwbGF5TmFtZTogSUJNLTgzMzogRUJDRElDIFNCQ1MgS29yZWFuCi0JYWxpYXNlczogW2libTgzMywgQ3A4MzNdCi03OC4gIENoYXJzZXRuYW1lOiBJQk0tODM0Ci0JZGlzcGxheU5hbWU6IElCTS04MzQ6IEVCQ0RJQyBEQkNTLW9ubHkgS29yZWFuCi0JYWxpYXNlczogW0NwODM0LCBpYm04MzRdCi03OS4gIENoYXJzZXRuYW1lOiBJQk0tODM1Ci0JZGlzcGxheU5hbWU6IElCTS04MzU6IEVCQ0RJQyBEQkNTLW9ubHkgVGFpd2FuCi0JYWxpYXNlczogW0NwODM1LCBpYm04MzVdCi04MC4gIENoYXJzZXRuYW1lOiBJQk0tODM2Ci0JZGlzcGxheU5hbWU6IElCTS04MzY6IEVCQ0RJQyBTQkNTIENoaW5hCi0JYWxpYXNlczogW0NwODM2LCBpYm04MzZdCi04MS4gIENoYXJzZXRuYW1lOiBJQk0tODM3Ci0JZGlzcGxheU5hbWU6IElCTS04Mzc6IEVCQ0RJQyBEQkNTLW9ubHkgQ2hpbmEKLQlhbGlhc2VzOiBbQ3A4MzcsIGlibTgzN10KLTgyLiAgQ2hhcnNldG5hbWU6IElCTS04MzgKLQlkaXNwbGF5TmFtZTogSUJNLTgzODogRUJDRElDIFRoYWkKLQlhbGlhc2VzOiBbQ3A4MzgsIGlibTgzOF0KLTgzLiAgQ2hhcnNldG5hbWU6IElCTS04NTAKLQlkaXNwbGF5TmFtZTogSUJNLTg1MDogUEMgTGF0aW4gMQotCWFsaWFzZXM6IFtjc3BjODUwbXVsdGlsaW5ndWFsLCBDcDg1MCwgaWJtODUwXQotODQuICBDaGFyc2V0bmFtZTogSUJNLTg1MgotCWRpc3BsYXlOYW1lOiBJQk0tODUyOiBQQyBMYXRpbiAyCi0JYWxpYXNlczogW0NwODUyLCBjc3BjcDg1MiwgaWJtODUyXQotODUuICBDaGFyc2V0bmFtZTogSUJNLTg1NQotCWRpc3BsYXlOYW1lOiBJQk0tODU1OiBQQyBDeXJpbGxpYwotCWFsaWFzZXM6IFtDcDg1NSwgaWJtODU1XQotODYuICBDaGFyc2V0bmFtZTogSUJNLTg1NgotCWRpc3BsYXlOYW1lOiBJQk0tODU2OiBQQyBIZWJyZXcgKG9sZCkKLQlhbGlhc2VzOiBbQ3A4NTYsIGlibTg1Nl0KLTg3LiAgQ2hhcnNldG5hbWU6IElCTS04NTcKLQlkaXNwbGF5TmFtZTogSUJNLTg1NzogUEMgTGF0aW4gNQotCWFsaWFzZXM6IFtjc2libTg1NywgaWJtODU3LCBDcDg1N10KLTg4LiAgQ2hhcnNldG5hbWU6IElCTS04NTgKLQlkaXNwbGF5TmFtZTogSUJNLTg1ODogUEMgTGF0aW4gMSAoZXVybykKLQlhbGlhc2VzOiBbQ3A4NTgsIGlibTg1OF0KLTg5LiAgQ2hhcnNldG5hbWU6IElCTS04NTkKLQlkaXNwbGF5TmFtZTogSUJNLTg1OTogUEMgTGF0aW4gOQotCWFsaWFzZXM6IFtDcDg1OSwgaWJtODU5XQotOTAuICBDaGFyc2V0bmFtZTogSUJNLTg2MAotCWRpc3BsYXlOYW1lOiBJQk0tODYwOiBQQyBQb3J0dWdhbAotCWFsaWFzZXM6IFtpYm04NjAsIENwODYwXQotOTEuICBDaGFyc2V0bmFtZTogSUJNLTg2MQotCWRpc3BsYXlOYW1lOiBJQk0tODYxOiBQQyBJY2VsYW5kCi0JYWxpYXNlczogW0NwODYxLCBpYm04NjFdCi05Mi4gIENoYXJzZXRuYW1lOiBJQk0tODYyCi0JZGlzcGxheU5hbWU6IElCTS04NjI6IFBDIElzcmFlbAotCWFsaWFzZXM6IFtDcDg2MiwgaWJtODYyXQotOTMuICBDaGFyc2V0bmFtZTogSUJNLTg2MwotCWRpc3BsYXlOYW1lOiBJQk0tODYzOiBQQyBDYW5hZGlhbiBGcmVuY2ggCi0JYWxpYXNlczogW2libTg2MywgQ3A4NjNdCi05NC4gIENoYXJzZXRuYW1lOiBJQk0tODY0Ci0JZGlzcGxheU5hbWU6IElCTS04NjQ6IFBDIEFyYWJpYwotCWFsaWFzZXM6IFtpYm04NjQsIENwODY0XQotOTUuICBDaGFyc2V0bmFtZTogSUJNLTg2NFMKLQlkaXNwbGF5TmFtZTogSUJNLTg2NFM6IFBDIEFyYWJpYyAoc2hhcGVkKQotCWFsaWFzZXM6IFtpYm04NjRTLCBDcDg2NFNdCi05Ni4gIENoYXJzZXRuYW1lOiBJQk0tODY1Ci0JZGlzcGxheU5hbWU6IElCTS04NjU6IFBDIE5vcmRpYwotCWFsaWFzZXM6IFtDcDg2NSwgaWJtODY1XQotOTcuICBDaGFyc2V0bmFtZTogSUJNLTg2NgotCWRpc3BsYXlOYW1lOiBJQk0tODY2OiBQQyBSdXNzaWEKLQlhbGlhc2VzOiBbQ3A4NjYsIGlibTg2Nl0KLTk4LiAgQ2hhcnNldG5hbWU6IElCTS04NjcKLQlkaXNwbGF5TmFtZTogSUJNLTg2NzogUEMgSXNyYWVsCi0JYWxpYXNlczogW0NwODY3LCBpYm04NjddCi05OS4gIENoYXJzZXRuYW1lOiBJQk0tODY4Ci0JZGlzcGxheU5hbWU6IElCTS04Njg6IFBDIFVyZHUKLQlhbGlhc2VzOiBbQ3A4NjgsIGlibTg2OF0KLTEwMC4gIENoYXJzZXRuYW1lOiBJQk0tODY5Ci0JZGlzcGxheU5hbWU6IElCTS04Njk6IFBDIEdyZWVjZQotCWFsaWFzZXM6IFtDcDg2OSwgaWJtODY5XQotMTAxLiAgQ2hhcnNldG5hbWU6IElCTS04NzAKLQlkaXNwbGF5TmFtZTogSUJNLTg3MDogRUJDRElDIExhdGluIDIKLQlhbGlhc2VzOiBbQ3A4NzAsIGlibTg3MF0KLTEwMi4gIENoYXJzZXRuYW1lOiBJQk0tODcxCi0JZGlzcGxheU5hbWU6IElCTS04NzE6IEVCQ0RJQyBJY2VsYW5kCi0JYWxpYXNlczogW0NwODcxLCBpYm04NzFdCi0xMDMuICBDaGFyc2V0bmFtZTogSUJNLTg3NAotCWRpc3BsYXlOYW1lOiBJQk0tODc0OiBQQyBUaGFpCi0JYWxpYXNlczogW2libTg3NCwgQ3A4NzRdCi0xMDQuICBDaGFyc2V0bmFtZTogSUJNLTg3NQotCWRpc3BsYXlOYW1lOiBJQk0tODc1OiBFQkNESUMgR3JlZWsKLQlhbGlhc2VzOiBbQ3A4NzUsIGlibTg3NV0KLTEwNS4gIENoYXJzZXRuYW1lOiBJQk0tODk3Ci0JZGlzcGxheU5hbWU6IElCTS04OTc6IFBDIFNCQ1Mtb25seSBKYXBhbgotCWFsaWFzZXM6IFtDcDg5NywgaWJtODk3XQotMTA2LiAgQ2hhcnNldG5hbWU6IElCTS05MTgKLQlkaXNwbGF5TmFtZTogSUJNLTkxODogRUJDRElDIFVyZHUKLQlhbGlhc2VzOiBbaWJtOTE4LCBDcDkxOF0KLTEwNy4gIENoYXJzZXRuYW1lOiBJQk0tOTIxCi0JZGlzcGxheU5hbWU6IElCTS05MjE6IFBDIEJhbHRpYwotCWFsaWFzZXM6IFtpYm05MjEsIENwOTIxXQotMTA4LiAgQ2hhcnNldG5hbWU6IElCTS05MjIKLQlkaXNwbGF5TmFtZTogSUJNLTkyMjogUEMgRXN0b25pYW4KLQlhbGlhc2VzOiBbQ3A5MjIsIGlibTkyMl0KLTEwOS4gIENoYXJzZXRuYW1lOiBJQk0tOTI0Ci0JZGlzcGxheU5hbWU6IElCTS05MjQ6IEVCQ0RJQyBMYXRpbiA5Ci0JYWxpYXNlczogW2libTkyNCwgQ3A5MjRdCi0xMTAuICBDaGFyc2V0bmFtZTogSUJNLTkyNwotCWRpc3BsYXlOYW1lOiBJQk0tOTI3OiBQQyBEQkNTLW9ubHkgVGFpd2FuCi0JYWxpYXNlczogW2libTkyNywgQ3A5MjddCi0xMTEuICBDaGFyc2V0bmFtZTogSUJNLTkzMAotCWRpc3BsYXlOYW1lOiBJQk0tOTMwOiBFQkNESUMgSmFwYW4gREJDUwotCWFsaWFzZXM6IFtDcDkzMCwgaWJtOTMwXQotMTEyLiAgQ2hhcnNldG5hbWU6IElCTS05MzIKLQlkaXNwbGF5TmFtZTogSUJNLTkzMjogUEMgSmFwYW4gU0pJUy03OCBzeW50YXgKLQlhbGlhc2VzOiBbQ3A5MzIsIGlibTkzMl0KLTExMy4gIENoYXJzZXRuYW1lOiBJQk0tOTMzCi0JZGlzcGxheU5hbWU6IElCTS05MzM6IEVCQ0RJQyBLb3JlYSBEQkNTCi0JYWxpYXNlczogW0NwOTMzLCBpYm05MzNdCi0xMTQuICBDaGFyc2V0bmFtZTogSUJNLTkzNQotCWRpc3BsYXlOYW1lOiBJQk0tOTM1OiBFQkNESUMgQ2hpbmEgREJDUwotCWFsaWFzZXM6IFtDcDkzNSwgaWJtOTM1XQotMTE1LiAgQ2hhcnNldG5hbWU6IElCTS05MzcKLQlkaXNwbGF5TmFtZTogSUJNLTkzNzogRUJDRElDIFRhaXdhbiBEQkNTCi0JYWxpYXNlczogW0NwOTM3LCBpYm05MzddCi0xMTYuICBDaGFyc2V0bmFtZTogSUJNLTkzOQotCWRpc3BsYXlOYW1lOiBJQk0tOTM5OiBFQkNESUMgSmFwYW4gRXh0ZW5kZWQgREJDUwotCWFsaWFzZXM6IFtDcDkzOSwgaWJtOTM5XQotMTE3LiAgQ2hhcnNldG5hbWU6IElCTS05NDIKLQlkaXNwbGF5TmFtZTogSUJNLTk0MjogUEMgSmFwYW4gU0pJUy03OAotCWFsaWFzZXM6IFtpYm05NDIsIENwOTQyXQotMTE4LiAgQ2hhcnNldG5hbWU6IElCTS05NDJDCi0JZGlzcGxheU5hbWU6IElCTS05NDJDOiBQQyBKYXBhbiBTSklTLTc4IHN5bnRheAotCWFsaWFzZXM6IFtpYm05NDJDLCBDcDk0MkNdCi0xMTkuICBDaGFyc2V0bmFtZTogSUJNLTk0MwotCWRpc3BsYXlOYW1lOiBJQk0tOTQzOiBQQyBKYXBhbiBTSklTLTkwCi0JYWxpYXNlczogW2libTk0MywgQ3A5NDNdCi0xMjAuICBDaGFyc2V0bmFtZTogSUJNLTk0M0MKLQlkaXNwbGF5TmFtZTogSUJNLTk0M0M6IFBDIEphcGFuIFNKSVMtOTAgc3ludGF4Ci0JYWxpYXNlczogW0NwOTQzQywgaWJtOTQzQ10KLTEyMS4gIENoYXJzZXRuYW1lOiBJQk0tOTQ3Ci0JZGlzcGxheU5hbWU6IElCTS05NDc6IFBDIERCQ1Mtb25seSBUYWl3YW4KLQlhbGlhc2VzOiBbaWJtOTQ3LCBDcDk0N10KLTEyMi4gIENoYXJzZXRuYW1lOiBJQk0tOTQ4Ci0JZGlzcGxheU5hbWU6IElCTS05NDg6IFBDIFRhaXdhbiBTQUEKLQlhbGlhc2VzOiBbaWJtOTQ4LCBDcDk0OF0KLTEyMy4gIENoYXJzZXRuYW1lOiBJQk0tOTQ5Ci0JZGlzcGxheU5hbWU6IElCTS05NDk6IFBDIEtvcmVhIChLUykKLQlhbGlhc2VzOiBbQ3A5NDksIGlibTk0OV0KLTEyNC4gIENoYXJzZXRuYW1lOiBJQk0tOTQ5QwotCWRpc3BsYXlOYW1lOiBJQk0tOTQ5QzogUEMgS29yZWEgKEtTKQotCWFsaWFzZXM6IFtDcDk0OUMsIGlibTk0OUNdCi0xMjUuICBDaGFyc2V0bmFtZTogSUJNLTk1MAotCWRpc3BsYXlOYW1lOiBJQk0tOTUwOiBQQyBUYWl3YW4KLQlhbGlhc2VzOiBbaWJtOTUwLCBDcDk1MF0KLTEyNi4gIENoYXJzZXRuYW1lOiBJQk0tOTUxCi0JZGlzcGxheU5hbWU6IElCTS05NTE6IFBDIERCQ1Mtb25seSBLb3JlYW4KLQlhbGlhc2VzOiBbQ3A5NTEsIGlibTk1MV0KLTEyNy4gIENoYXJzZXRuYW1lOiBJQk0tOTU0Ci0JZGlzcGxheU5hbWU6IElCTS05NTQ6IEVVQyBKYXBhbiAoZnVsbCkKLQlhbGlhc2VzOiBbQ3A5NTQsIGlibTk1NF0KLTEyOC4gIENoYXJzZXRuYW1lOiBJQk0tOTU0QwotCWRpc3BsYXlOYW1lOiBJQk0tOTU0QzogRVVDIEphcGFuIChmdWxsKSB3aXRoIHN5bnRheAotCWFsaWFzZXM6IFtDcDk1NGMsIGlibS1ldWNqcF0KLTEyOS4gIENoYXJzZXRuYW1lOiBJQk0tOTY0Ci0JZGlzcGxheU5hbWU6IElCTS05NjQ6IEVVQyBUYWl3YW4KLQlhbGlhc2VzOiBbQ3A5NjQsIGlibS1ldWN0d10KLTEzMC4gIENoYXJzZXRuYW1lOiBJQk0tOTcxCi0JZGlzcGxheU5hbWU6IElCTS05NzE6IEVVQyBEQkNTLW9ubHkgS29yZWFuCi0JYWxpYXNlczogW0NwOTcxLCBpYm05NzFdCi0xMzEuICBDaGFyc2V0bmFtZTogSVNDSUk5MQotCWRpc3BsYXlOYW1lOiBJU0NJSTkxOiBJU0NJSSBEZXZlbmFnYXJpIDkxCi0JYWxpYXNlczogW2lzY2lpXQotMTMyLiAgQ2hhcnNldG5hbWU6IElTTy0yMDIyLUNOCi0JZGlzcGxheU5hbWU6IElTTy0yMDIyLUNOOiBJU08gMjAyMiBUcmFkaXRpb25hbCBDaGluZXNlCi0JYWxpYXNlczogW2lzbzIwMjItY24tY25zLCBpc28tMjAyMi1jbi1jbnMsIGlzbzIwMjJjbi1jbnMsIGlzbzIwMjJjbiwgaXNvMjAyMi1jbl0KLTEzMy4gIENoYXJzZXRuYW1lOiBJU08tMjAyMi1DTi1HQgotCWRpc3BsYXlOYW1lOiBJU08tMjAyMi1DTi1HQjogSVNPIDIwMjIgU2ltcGxpZmllZCBDaGluZXNlCi0JYWxpYXNlczogW2lzbzIwMjJjbi1nYiwgaXNvMjAyMi1jbi1nYl0KLTEzNC4gIENoYXJzZXRuYW1lOiBJU08tMjAyMi1KUAotCWRpc3BsYXlOYW1lOiBJU08tMjAyMi1KUDogSVNPIDIwMjIgSmFwYW4KLQlhbGlhc2VzOiBbamlzLCBjc2lzbzIwMjJqcDIsIGlzbzIwMjItanAsIGNzamlzZW5jb2RpbmcsIGppcy1lbmNvZGluZywgaXNvLTIwMjItanAyLCBpc28yMDIyanBdCi0xMzUuICBDaGFyc2V0bmFtZTogSVNPLTIwMjItS1IKLQlkaXNwbGF5TmFtZTogSVNPLTIwMjItS1I6IElTTyAyMDIyIEtvcmVhCi0JYWxpYXNlczogW2lzbzIwMjIta3IsIGNzaXNvMjAyMmtyLCBpc28yMDIya3JdCi0xMzYuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktMQotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0xOiBJU08gTGF0aW4gMSAtIFdlc3Rlcm4gRXVyb3BlCi0JYWxpYXNlczogW2NzaXNvbGF0aW4xLCBpc28taXItMTAwLCBpc284ODU5LTEsIGlibS04MTksIGlzbzg4NTlfMSwgbGF0aW4xLCA4ODU5LTEsIGlibTgxOSwgaXNvLTg4NTktMToxOTg3LCBDcDgxOSwgbDFdCi0xMzcuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktMTAKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMTA6IElTTyBMYXRpbiA2IC0gTm9yZGljCi0JYWxpYXNlczogW2lzbzg4NTktMTAsIElTT184ODU5LTEwOjE5OTIsIGxhdGluNiwgaWJtLTkxOSwgODg1OS0xMCwgaXNvLWlyLTE1NywgbDYsIGlzbzg4NTlfMTAsIGNzaXNvbGF0aW42XQotMTM4LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTEzCi0JZGlzcGxheU5hbWU6IElTTy04ODU5LTEzOiBJU08gTGF0aW4gNyAtIEJhbHRpYyBSaW0KLQlhbGlhc2VzOiBbaXNvODg1OS0xMywgaXNvODg1OV8xMywgODg1OS0xM10KLTEzOS4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0xNAotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0xNDogSVNPIExhdGluIDggLSBDZWx0aWMKLQlhbGlhc2VzOiBbODg1OS0xNCwgaXNvODg1OV8xNCwgaXNvLWlyLTE5OSwgSVNPXzg4NTktMTQ6MTk5OCwgbGF0aW44LCBpc284ODU5LTE0LCBpc29jZWx0aWMsIGw4XQotMTQwLiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTE1Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTE1OiBJU08gTGF0aW4gOSAtIEV1cm8KLQlhbGlhc2VzOiBbbDksIGlibTkyMywgY3Npc29sYXRpbjksIDg4NTktOSwgaXNvODg1OS0xNSwgaWJtLTkyMywgbGF0aW45LCBpc284ODU5XzE1LCBDcDkyMywgaXNvODg1OV8xNV9mZGlzLCBsYXRpbjBdCi0xNDEuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktMTYKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMTY6IElTTyBSb21hbmlhbgotCWFsaWFzZXM6IFtpc284ODU5XzE2LCBpc284ODU5LTE2LCA4ODU5LTE2XQotMTQyLiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTIKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMjogSVNPIExhdGluIDIgLSBDZW50cmFsIEV1cm9wZQotCWFsaWFzZXM6IFtpYm05MTIsIGwyLCBpYm0tOTEyLCBpc28taXItMTAxLCBjc2lzb2xhdGluMiwgaXNvLTg4NTktMjoxOTg3LCBsYXRpbjIsIGlzbzg4NTlfMiwgQ3A5MTIsIGlzbzg4NTktMiwgODg1OS0yXQotMTQzLiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTMKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMzogSVNPIExhdGluIDMgLSBMYXRpbi9Fc3BlcmFudG8KLQlhbGlhc2VzOiBbaXNvLTg4NTktMzoxOTg4LCBjc2lzb2xhdGluMywgaXNvODg1OV8zLCA4ODU5LTMsIGlzbzg4NTktMywgQ3A5MTMsIGlzby1pci0xMDksIGlibS05MTMsIGwzLCBsYXRpbjNdCi0xNDQuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNAotCWRpc3BsYXlOYW1lOiBJU08tODg1OS00OiBJU08gTGF0aW4gNCAtIEJhbHRpYwotCWFsaWFzZXM6IFtpc28taXItMTEwLCBDcDkxNCwgbDQsIGlibS05MTQsIGxhdGluNCwgaXNvODg1OV80LCBpc28tODg1OS00OjE5ODgsIGlzbzg4NTktNCwgODg1OS00LCBjc2lzb2xhdGluNF0KLTE0NS4gIENoYXJzZXRuYW1lOiBJU08tODg1OS01Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTU6IElTTyBDeXJpbGxpYwotCWFsaWFzZXM6IFtpc284ODU5XzUsIDg4NTktNSwgaWJtOTE1LCBpc28tODg1OS01OjE5ODgsIGNzaXNvbGF0aW5jeXJpbGxpYywgY3lyaWxsaWMsIENwOTE1LCBpc28taXItMTQ0LCBpc284ODU5LTUsIGlibS05MTVdCi0xNDYuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNgotCWRpc3BsYXlOYW1lOiBJU08tODg1OS02OiBJU08gQXJhYmljCi0JYWxpYXNlczogW2lzby1pci0xMjcsIGNzaXNvbGF0aW5hcmFiaWMsIGlzbzg4NTktNiwgaWJtMTA4OSwgZWNtYS0xMTQsIGFzbW8tNzA4LCBhcmFiaWMsIGlibS0xMDg5LCBpc284ODU5XzYsIDg4NTktNiwgQ3AxMDg5LCBpc28tODg1OS02OjE5ODddCi0xNDcuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNlMKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktNlM6IElTTyBBcmFiaWMgKHNoYXBlZCkKLQlhbGlhc2VzOiBbaXNvODg1OS02UywgaXNvODg1OV82U10KLTE0OC4gIENoYXJzZXRuYW1lOiBJU08tODg1OS03Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTc6IElTTyBHcmVlawotCWFsaWFzZXM6IFtpc28tODg1OS03OjE5ODcsIENwODEzLCA4ODU5LTcsIGlzby1pci0xMjYsIGlibS04MTMsIGlzbzg4NTlfNywgZWNtYS0xMTgsIGdyZWVrOCwgaWJtODEzLCBlbG90LTkyOCwgY3Npc29sYXRpbmdyZWVrLCBpc284ODU5LTcsIGdyZWVrXQotMTQ5LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTgKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktODogSVNPIEhlYnJldwotCWFsaWFzZXM6IFtpc28taXItMTM4LCBpc284ODU5LTgsIGlibS05MTYsIGlzbzg4NTlfOCwgY3Npc29sYXRpbmhlYnJldywgaGVicmV3LCBpc28tODg1OS04OjE5ODgsIGlibTkxNiwgQ3A5MTYsIDg4NTktOF0KLTE1MC4gIENoYXJzZXRuYW1lOiBJU08tODg1OS05Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTk6IElTTyBMYXRpbiA1IC0gVHVya2V5Ci0JYWxpYXNlczogW0NwOTIwLCBsYXRpbjUsIGlzby1pci0xNDgsIDg4NTktOSwgbDUsIGNzaXNvbGF0aW41LCBpYm0tOTIwLCBpYm05MjAsIGlzbzg4NTlfOSwgaXNvODg1OS05XQotMTUxLiAgQ2hhcnNldG5hbWU6IEpJUzAyMDEKLQlkaXNwbGF5TmFtZTogSklTMDIwMTogSmFwYW4gSklTIDAyMDEgKGthdGFrYW5hKQotCWFsaWFzZXM6IFtdCi0xNTIuICBDaGFyc2V0bmFtZTogSklTMDIwOAotCWRpc3BsYXlOYW1lOiBKSVMwMjA4OiBKYXBhbiBKSVMgMDIwOAotCWFsaWFzZXM6IFtdCi0xNTMuICBDaGFyc2V0bmFtZTogSklTMDIxMgotCWRpc3BsYXlOYW1lOiBKSVMwMjEyOiBKYXBhbiBKSVMgMDIxMiAoZXh0ZW5kZWQpCi0JYWxpYXNlczogW10KLTE1NC4gIENoYXJzZXRuYW1lOiBKb2hhYgotCWRpc3BsYXlOYW1lOiBKb2hhYjogUEMgS29yZWFuIEpvaGFiCi0JYWxpYXNlczogW10KLTE1NS4gIENoYXJzZXRuYW1lOiBLT0k4LVIKLQlkaXNwbGF5TmFtZTogS09JOC1SOiBJbnRlcm5ldCBSdXNzaWEKLQlhbGlhc2VzOiBbaWJtLTg3OCwgY3Nrb2k4ciwga29pOCwga29pOF9yXQotMTU2LiAgQ2hhcnNldG5hbWU6IEtPSTgtUlUKLQlkaXNwbGF5TmFtZTogS09JOC1SVTogSW50ZXJuZXQgQmVsYXJ1cwotCWFsaWFzZXM6IFtpYm0tMTE2OCwga29pOF9ydV0KLTE1Ny4gIENoYXJzZXRuYW1lOiBLT0k4LVUKLQlkaXNwbGF5TmFtZTogS09JOC1VOiBJbnRlcm5ldCBVa3JhaW5lCi0JYWxpYXNlczogW2libS0xMTY3LCBrb2k4X3VdCi0xNTguICBDaGFyc2V0bmFtZTogS1NDNTYwMQotCWRpc3BsYXlOYW1lOiBLU0M1NjAxOiBLb3JlYSBLU0MKLQlhbGlhc2VzOiBbXQotMTU5LiAgQ2hhcnNldG5hbWU6IE1hY0FyYWJpYwotCWRpc3BsYXlOYW1lOiBNYWNBcmFiaWM6IEFwcGxlIEFyYWJpYwotCWFsaWFzZXM6IFtdCi0xNjAuICBDaGFyc2V0bmFtZTogTWFjQ2VudHJhbEV1cm9wZQotCWRpc3BsYXlOYW1lOiBNYWNDZW50cmFsRXVyb3BlOiBBcHBsZSBDZW50cmFsIEV1cm9wZQotCWFsaWFzZXM6IFtpYm0tMTI4Ml0KLTE2MS4gIENoYXJzZXRuYW1lOiBNYWNDcm9hdGlhbgotCWRpc3BsYXlOYW1lOiBNYWNDcm9hdGlhbjogQXBwbGUgQ3JvYXRpYW4gCi0JYWxpYXNlczogW2libS0xMjg0XQotMTYyLiAgQ2hhcnNldG5hbWU6IE1hY0N5cmlsbGljCi0JZGlzcGxheU5hbWU6IE1hY0N5cmlsbGljOiBBcHBsZSBDeXJpbGxpYwotCWFsaWFzZXM6IFtpYm0tMTI4M10KLTE2My4gIENoYXJzZXRuYW1lOiBNYWNEaW5nYmF0Ci0JZGlzcGxheU5hbWU6IE1hY0RpbmdiYXQ6IEFwcGxlIERpbmdiYXQKLQlhbGlhc2VzOiBbXQotMTY0LiAgQ2hhcnNldG5hbWU6IE1hY0dyZWVrCi0JZGlzcGxheU5hbWU6IE1hY0dyZWVrOiBBcHBsZSBHcmVlawotCWFsaWFzZXM6IFtpYm0tMTI4MF0KLTE2NS4gIENoYXJzZXRuYW1lOiBNYWNIZWJyZXcKLQlkaXNwbGF5TmFtZTogTWFjSGVicmV3OiBBcHBsZSBIZWJyZXcgCi0JYWxpYXNlczogW10KLTE2Ni4gIENoYXJzZXRuYW1lOiBNYWNJY2VsYW5kCi0JZGlzcGxheU5hbWU6IE1hY0ljZWxhbmQ6IEFwcGxlIEljZWxhbmQKLQlhbGlhc2VzOiBbaWJtLTEyODZdCi0xNjcuICBDaGFyc2V0bmFtZTogTWFjUm9tYW4KLQlkaXNwbGF5TmFtZTogTWFjUm9tYW46IEFwcGxlIFJvbWFuCi0JYWxpYXNlczogW2libS0xMjc1XQotMTY4LiAgQ2hhcnNldG5hbWU6IE1hY1JvbWFuaWEKLQlkaXNwbGF5TmFtZTogTWFjUm9tYW5pYTogQXBwbGUgUm9tYW5pYQotCWFsaWFzZXM6IFtpYm0tMTI4NV0KLTE2OS4gIENoYXJzZXRuYW1lOiBNYWNTeW1ib2wKLQlkaXNwbGF5TmFtZTogTWFjU3ltYm9sOiBBcHBsZSBQb3N0U2NyaXB0IFN5bWJvbAotCWFsaWFzZXM6IFtBZG9iZS1TeW1ib2wtRW5jb2RpbmcsIGlibS0xMDM4XQotMTcwLiAgQ2hhcnNldG5hbWU6IE1hY1RoYWkKLQlkaXNwbGF5TmFtZTogTWFjVGhhaTogQXBwbGUgVGhhaQotCWFsaWFzZXM6IFtdCi0xNzEuICBDaGFyc2V0bmFtZTogTWFjVHVya2lzaAotCWRpc3BsYXlOYW1lOiBNYWNUdXJraXNoOiBBcHBsZSBUdXJraXNoCi0JYWxpYXNlczogW2libS0xMjgxXQotMTcyLiAgQ2hhcnNldG5hbWU6IE1hY1VrcmFpbmUKLQlkaXNwbGF5TmFtZTogTWFjVWtyYWluZTogQXBwbGUgVWtyYWluZQotCWFsaWFzZXM6IFtdCi0xNzMuICBDaGFyc2V0bmFtZTogUFRDUDE1NAotCWRpc3BsYXlOYW1lOiBQVENQMTU0OiBXaW5kb3dzIEN5cmlsbGljIEFzaWFuCi0JYWxpYXNlczogW0lCTS0xMTY5LCBjc1BUQ1AxNTQsIEN5cmlsbGljLUFzaWFuLCBQVDE1NF0KLTE3NC4gIENoYXJzZXRuYW1lOiBTaGlmdF9KSVMKLQlkaXNwbGF5TmFtZTogU2hpZnRfSklTOiBTaGlmdCBKSVMgSmFwYW4KLQlhbGlhc2VzOiBbXQotMTc1LiAgQ2hhcnNldG5hbWU6IFRJUy02MjAKLQlkaXNwbGF5TmFtZTogVElTLTYyMDogUEMgVGhhaWxhbmQKLQlhbGlhc2VzOiBbdGlzNjIwLjI1MzMsIHRpczYyMF0KLTE3Ni4gIENoYXJzZXRuYW1lOiBVUy1BU0NJSQotCWRpc3BsYXlOYW1lOiBVUy1BU0NJSTogQVNDSUkgNyBiaXQKLQlhbGlhc2VzOiBbaXNvLTY0Ni5pcnY6MTk4MywgSVNPNjQ2LVVTLCBBU0NJSSwgZGVmYXVsdCwgSVNPLTY0Ni5pcnY6MTk5MSwgZGlyZWN0LCBhc2NpaTcsIEFOU0lfWDMuNC0xOTg2LCBpc28taXItNiwgdXMsIGlibS0zNjcsIDY0NiwgY3NBU0NJSSwgQU5TSV9YMy40LTE5NjgsIENwMzY3XQotMTc3LiAgQ2hhcnNldG5hbWU6IFVURi0xNgotCWRpc3BsYXlOYW1lOiBVVEYtMTYKLQlhbGlhc2VzOiBbVW5pY29kZSwgVVRGMTYsIFVURl8xNiwgVUNTLTJdCi0xNzguICBDaGFyc2V0bmFtZTogVVRGLTE2QkUKLQlkaXNwbGF5TmFtZTogVVRGLTE2QkU6IFVuaWNvZGUgVVRGLTE2IEJpZy1lbmRpYW4KLQlhbGlhc2VzOiBbWC1VVEYtMTZCRSwgVW5pY29kZUJpZ1VubWFya2VkLCBVVEYxNkJFLCBVVEZfMTZCRSwgSVNPLTEwNjQ2LVVDUy0yXQotMTc5LiAgQ2hhcnNldG5hbWU6IFVURi0xNkxFCi0JZGlzcGxheU5hbWU6IFVURi0xNkxFOiBVbmljb2RlIFVURi0xNiBMaXR0bGUtZW5kaWFuCi0JYWxpYXNlczogW1VURl8xNkxFLCBVVEYxNkxFLCBVbmljb2RlTGl0dGxlVW5tYXJrZWQsIFgtVVRGLTE2TEVdCi0xODAuICBDaGFyc2V0bmFtZTogVVRGLTMyCi0JZGlzcGxheU5hbWU6IFVURi0zMjogVW5pY29kZSBVVEYtMzIKLQlhbGlhc2VzOiBbSVNPLTEwNjQ2LVVDUy00LCBVVEYzMiwgVUNTLTQsIFVURl8zMkJFXQotMTgxLiAgQ2hhcnNldG5hbWU6IFVURi0zMkJFCi0JZGlzcGxheU5hbWU6IFVURi0zMkJFOiBVbmljb2RlIFVURi0zMiBCaWctZW5kaWFuCi0JYWxpYXNlczogW1VURjMyQkUsIFgtVVRGLTMyQkUsIFVURl8zMkJFXQotMTgyLiAgQ2hhcnNldG5hbWU6IFVURi0zMkxFCi0JZGlzcGxheU5hbWU6IFVURi0zMkxFOiBVbmljb2RlIFVURi0zMiBMaXR0bGUtZW5kaWFuCi0JYWxpYXNlczogW1VURl8zMkxFLCBVVEYzMkxFLCBYLVVURi0zMkxFXQotMTgzLiAgQ2hhcnNldG5hbWU6IFVURi04Ci0JZGlzcGxheU5hbWU6IFVURi04OiBVbmljb2RlIFVURi04Ci0JYWxpYXNlczogW1VURl84LCBVVEY4XQotMTg0LiAgQ2hhcnNldG5hbWU6IFVURi04SgotCWRpc3BsYXlOYW1lOiBVVEYtOEo6IFVuaWNvZGUgVVRGLTggKEphdmEpCi0JYWxpYXNlczogW1VURjhKXQotMTg1LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1MAotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTA6IFdpbmRvd3MgTGF0aW4gMgotCWFsaWFzZXM6IFtpYm0tMTI1MCwgQ3AxMjUwXQotMTg2LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1MQotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTE6IFdpbmRvd3MgQ3lyaWxsaWMKLQlhbGlhc2VzOiBbaWJtLTEyNTEsIENwMTI1MV0KLTE4Ny4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTIKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjUyOiBXaW5kb3dzIExhdGluIDEgCi0JYWxpYXNlczogW0NwMTI1MiwgaWJtLTEyNTJdCi0xODguICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjUzCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1MzogV2luZG93cyBHcmVlawotCWFsaWFzZXM6IFtDcDEyNTMsIGlibS0xMjUzXQotMTg5LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1NAotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTQ6IFdpbmRvd3MgTGF0aW4gNSAoVHVya2V5KQotCWFsaWFzZXM6IFtDcDEyNTQsIGlibS0xMjU0XQotMTkwLiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1NQotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTU6IFdpbmRvd3MgSGVicmV3Ci0JYWxpYXNlczogW0NwMTI1NSwgaWJtLTEyNTVdCi0xOTEuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU2Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1NjogV2luZG93cyBBcmFiaWMKLQlhbGlhc2VzOiBbQ3AxMjU2LCBpYm0tMTI1Nl0KLTE5Mi4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTZTCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1NlM6IFdpbmRvd3MgQXJhYmljIChzaGFwZWQpCi0JYWxpYXNlczogW2libS0xMjU2cywgQ3AxMjU2c10KLTE5My4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTcKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjU3OiBXaW5kb3dzIExhdGluIDQgKEJhbHR0aWMpCi0JYWxpYXNlczogW0NwMTI1NywgaWJtLTEyNTddCi0xOTQuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU4Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1ODogV2luZG93cyBWaWV0bmFtZXNlCi0JYWxpYXNlczogW2libS0xMTI5LCBpYm0tMTI1OCwgQ3AxMjU4XQotMTk1LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtODc0Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtODc0OiBXaW5kb3dzIFRoYWkKLQlhbGlhc2VzOiBbTVM4NzRdCi0xOTYuICBDaGFyc2V0bmFtZTogd2luZG93cy05MzIKLQlkaXNwbGF5TmFtZTogd2luZG93cy05MzI6IFdpbmRvd3MgSmFwYW4KLQlhbGlhc2VzOiBbbXNfa2FuamksIGNzd2luZG93czMxaiwgTVM5MzIsIHdpbmRvd3MtMzFqXQotMTk3LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtOTM2Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtOTM2OiBXaW5kb3dzIENoaW5hCi0JYWxpYXNlczogW01TOTM2LCA5MzZdCi0xOTguICBDaGFyc2V0bmFtZTogd2luZG93cy05NDkKLQlkaXNwbGF5TmFtZTogd2luZG93cy05NDk6IFdpbmRvd3MgS29yZWEKLQlhbGlhc2VzOiBbaWJtLTEzNjEsIENwMTM2MSwgaWJtMTM2MSwgTVM5NDksIG1zMTM2MSwga3NjNTYwMS0xOTkyXQotMTk5LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtOTUwCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtOTUwOiBXaW5kb3dzIFRhaXdhbgotCWFsaWFzZXM6IFtNUzk1MF0KLTIwMC4gIENoYXJzZXRuYW1lOiBYLVVuaWNvZGVCaWcKLQlkaXNwbGF5TmFtZTogWC1Vbmljb2RlQmlnOiBVbmljb2RlIFVURi0xNiBCaWctZW5kaWFuIHdpdGggbWFyawotCWFsaWFzZXM6IFtVbmljb2RlQmlnXQotMjAxLiAgQ2hhcnNldG5hbWU6IFgtVW5pY29kZUxpdHRsZQotCWRpc3BsYXlOYW1lOiBYLVVuaWNvZGVMaXR0bGU6IFVuaWNvZGUgVVRGLTE2IExpdHRsZS1lbmRpYW4gd2l0aCBtYXJrCi0JYWxpYXNlczogW1VuaWNvZGVMaXR0bGVdCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL291dHB1dEZyb21MaXN0Q2hhcnNldHMvU3VuMS40LjNfMDIudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9vdXRwdXRGcm9tTGlzdENoYXJzZXRzL1N1bjEuNC4zXzAyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc5MjJhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL291dHB1dEZyb21MaXN0Q2hhcnNldHMvU3VuMS40LjNfMDIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzQzICswLDAgQEAKLQotQ3VycmVudCBMb2NhbGU6IGVuX1VTCi0KLUpSRSB2ZXJzaW9uOiAxLjQuMl8wMyAoMS40LjJfMDMtYjAyKQotLS0gbGlzdGluZyBwcm9wZXJ0aWVzIC0tCi1qYXZhLnJ1bnRpbWUubmFtZT1KYXZhKFRNKSAyIFJ1bnRpbWUgRW52aXJvbm1lbnQsIFN0YW5kLi4uCi1zdW4uYm9vdC5saWJyYXJ5LnBhdGg9RDpcSkRLc1xqMnNkazEuNC4yXzAzXGpyZVxiaW4KLWphdmEudm0udmVyc2lvbj0xLjQuMl8wMy1iMDIKLWphdmEudm0udmVuZG9yPVN1biBNaWNyb3N5c3RlbXMgSW5jLgotamF2YS52ZW5kb3IudXJsPWh0dHA6Ly9qYXZhLnN1bi5jb20vCi1wYXRoLnNlcGFyYXRvcj07Ci1qYXZhLnZtLm5hbWU9SmF2YSBIb3RTcG90KFRNKSBDbGllbnQgVk0KLWZpbGUuZW5jb2RpbmcucGtnPXN1bi5pbwotdXNlci5jb3VudHJ5PVVTCi1zdW4ub3MucGF0Y2gubGV2ZWw9U2VydmljZSBQYWNrIDEKLWphdmEudm0uc3BlY2lmaWNhdGlvbi5uYW1lPUphdmEgVmlydHVhbCBNYWNoaW5lIFNwZWNpZmljYXRpb24KLXVzZXIuZGlyPUQ6XGJ1aWxkc1xEYWlseVxlY2xpcHNlLVNESy1JMjAwNDAzMDQuLi4KLWphdmEucnVudGltZS52ZXJzaW9uPTEuNC4yXzAzLWIwMgotamF2YS5hd3QuZ3JhcGhpY3NlbnY9c3VuLmF3dC5XaW4zMkdyYXBoaWNzRW52aXJvbm1lbnQKLWphdmEuZW5kb3JzZWQuZGlycz1EOlxKREtzXGoyc2RrMS40LjJfMDNcanJlXGxpYlxlbmRvcnNlZAotb3MuYXJjaD14ODYKLWphdmEuaW8udG1wZGlyPUM6XERPQ1VNRX4xXERBVklEV34xLkRNV1xMT0NBTFN+MVxUZW1wXAotbGluZS5zZXBhcmF0b3I9Ci0KLWphdmEudm0uc3BlY2lmaWNhdGlvbi52ZW5kb3I9U3VuIE1pY3Jvc3lzdGVtcyBJbmMuCi11c2VyLnZhcmlhbnQ9Ci1vcy5uYW1lPVdpbmRvd3MgWFAKLXN1bi5qYXZhMmQuZm9udHBhdGg9Ci1qYXZhLmxpYnJhcnkucGF0aD1EOlxKREtzXGoyc2RrMS40LjJfMDNcYmluOy47QzpcV0lORE9XLi4uCi1qYXZhLnNwZWNpZmljYXRpb24ubmFtZT1KYXZhIFBsYXRmb3JtIEFQSSBTcGVjaWZpY2F0aW9uCi1qYXZhLmNsYXNzLnZlcnNpb249NDguMAotamF2YS51dGlsLnByZWZzLlByZWZlcmVuY2VzRmFjdG9yeT1qYXZhLnV0aWwucHJlZnMuV2luZG93c1ByZWZlcmVuY2VzRmFjLi4uCi1vcy52ZXJzaW9uPTUuMQotdXNlci5ob21lPUM6XERvY3VtZW50cyBhbmQgU2V0dGluZ3NcZGF2aWR3LkRNVzJUMjMKLXVzZXIudGltZXpvbmU9Ci1qYXZhLmF3dC5wcmludGVyam9iPXN1bi5hd3Qud2luZG93cy5XUHJpbnRlckpvYgotZmlsZS5lbmNvZGluZz1DcDEyNTIKLWphdmEuc3BlY2lmaWNhdGlvbi52ZXJzaW9uPTEuNAotdXNlci5uYW1lPWRhdmlkdwotamF2YS5jbGFzcy5wYXRoPUQ6XGJ1aWxkc1xEYWlseVxlY2xpcHNlLVNESy1JMjAwNDAzMDQuLi4KLWphdmEudm0uc3BlY2lmaWNhdGlvbi52ZXJzaW9uPTEuMAotc3VuLmFyY2guZGF0YS5tb2RlbD0zMgotamF2YS5ob21lPUQ6XEpES3NcajJzZGsxLjQuMl8wM1xqcmUKLWphdmEuc3BlY2lmaWNhdGlvbi52ZW5kb3I9U3VuIE1pY3Jvc3lzdGVtcyBJbmMuCi11c2VyLmxhbmd1YWdlPWVuCi1hd3QudG9vbGtpdD1zdW4uYXd0LndpbmRvd3MuV1Rvb2xraXQKLWphdmEudm0uaW5mbz1taXhlZCBtb2RlCi1qYXZhLnZlcnNpb249MS40LjJfMDMKLWphdmEuZXh0LmRpcnM9RDpcSkRLc1xqMnNkazEuNC4yXzAzXGpyZVxsaWJcZXh0Ci1zdW4uYm9vdC5jbGFzcy5wYXRoPUQ6XEpES3NcajJzZGsxLjQuMl8wM1xqcmVcbGliXHJ0LmphcjsuLi4KLWphdmEudmVuZG9yPVN1biBNaWNyb3N5c3RlbXMgSW5jLgotZmlsZS5zZXBhcmF0b3I9XAotamF2YS52ZW5kb3IudXJsLmJ1Zz1odHRwOi8vamF2YS5zdW4uY29tL2NnaS1iaW4vYnVncmVwb3J0Li4uCi1zdW4uY3B1LmVuZGlhbj1saXR0bGUKLXN1bi5pby51bmljb2RlLmVuY29kaW5nPVVuaWNvZGVMaXR0bGUKLXN1bi5jcHUuaXNhbGlzdD1wZW50aXVtIGk0ODYgaTM4NgotQXZhaWxhYmxlIExvY2FsZXMKLWFyCi1hcl9BRQotYXJfQkgKLWFyX0RaCi1hcl9FRwotYXJfSVEKLWFyX0pPCi1hcl9LVwotYXJfTEIKLWFyX0xZCi1hcl9NQQotYXJfT00KLWFyX1FBCi1hcl9TQQotYXJfU0QKLWFyX1NZCi1hcl9UTgotYXJfWUUKLWhpX0lOCi1pdwotaXdfSUwKLWphCi1qYV9KUAota28KLWtvX0tSCi10aAotdGhfVEgKLXRoX1RIX1RICi16aAotemhfQ04KLXpoX0hLCi16aF9UVwotYmUKLWJlX0JZCi1iZwotYmdfQkcKLWNhCi1jYV9FUwotY3MKLWNzX0NaCi1kYQotZGFfREsKLWRlCi1kZV9BVAotZGVfQ0gKLWRlX0RFCi1kZV9MVQotZWwKLWVsX0dSCi1lbl9BVQotZW5fQ0EKLWVuX0dCCi1lbl9JRQotZW5fSU4KLWVuX05aCi1lbl9aQQotZXMKLWVzX0FSCi1lc19CTwotZXNfQ0wKLWVzX0NPCi1lc19DUgotZXNfRE8KLWVzX0VDCi1lc19FUwotZXNfR1QKLWVzX0hOCi1lc19NWAotZXNfTkkKLWVzX1BBCi1lc19QRQotZXNfUFIKLWVzX1BZCi1lc19TVgotZXNfVVkKLWVzX1ZFCi1ldAotZXRfRUUKLWZpCi1maV9GSQotZnIKLWZyX0JFCi1mcl9DQQotZnJfQ0gKLWZyX0ZSCi1mcl9MVQotaHIKLWhyX0hSCi1odQotaHVfSFUKLWlzCi1pc19JUwotaXQKLWl0X0NICi1pdF9JVAotbHQKLWx0X0xUCi1sdgotbHZfTFYKLW1rCi1ta19NSwotbmwKLW5sX0JFCi1ubF9OTAotbm8KLW5vX05PCi1ub19OT19OWQotcGwKLXBsX1BMCi1wdAotcHRfQlIKLXB0X1BUCi1ybwotcm9fUk8KLXJ1Ci1ydV9SVQotc2gKLXNoX1lVCi1zawotc2tfU0sKLXNsCi1zbF9TSQotc3EKLXNxX0FMCi1zcgotc3JfWVUKLXN2Ci1zdl9TRQotdHIKLXRyX1RSCi11awotdWtfVUEKLWVuCi1lbl9VUwotZmlsZS5lbmNvZGluZy5wa2c6IHN1bi5pbwotZmlsZS5lbmNvZGluZzogQ3AxMjUyCi0KLQotQXZhaWxhYmxlIENoYXJzZXRzCi0xLiAgQ2hhcnNldG5hbWU6IEJpZzUKLQlkaXNwbGF5TmFtZTogQmlnNQotCWFsaWFzZXM6IFtjc0JpZzVdCi0yLiAgQ2hhcnNldG5hbWU6IEJpZzUtSEtTQ1MKLQlkaXNwbGF5TmFtZTogQmlnNS1IS1NDUwotCWFsaWFzZXM6IFtiaWc1LWhrc2NzLCBCaWc1X0hLU0NTLCBiaWc1aGtzY3NdCi0zLiAgQ2hhcnNldG5hbWU6IEVVQy1KUAotCWRpc3BsYXlOYW1lOiBFVUMtSlAKLQlhbGlhc2VzOiBbZXVjamlzLCB4LWV1Y2pwLCBjc0VVQ1BrZEZtdGphcGFuZXNlLCBldWNqcCwgRXh0ZW5kZWRfVU5JWF9Db2RlX1BhY2tlZF9Gb3JtYXRfZm9yX0phcGFuZXNlLCB4LWV1Yy1qcCwgZXVjX2pwXQotNC4gIENoYXJzZXRuYW1lOiBFVUMtS1IKLQlkaXNwbGF5TmFtZTogRVVDLUtSCi0JYWxpYXNlczogW2tzYzU2MDEsIDU2MDEsIGtzYzU2MDFfMTk4Nywga3NjXzU2MDEsIGtzYzU2MDEtMTk4NywgZXVjX2tyLCBrc19jXzU2MDEtMTk4NywgZXVja3IsIGNzRVVDS1JdCi01LiAgQ2hhcnNldG5hbWU6IEdCMTgwMzAKLQlkaXNwbGF5TmFtZTogR0IxODAzMAotCWFsaWFzZXM6IFtnYjE4MDMwLTIwMDBdCi02LiAgQ2hhcnNldG5hbWU6IEdCSwotCWRpc3BsYXlOYW1lOiBHQksKLQlhbGlhc2VzOiBbd2luZG93cy05MzYsIENQOTM2XQotNy4gIENoYXJzZXRuYW1lOiBJU08tMjAyMi1KUAotCWRpc3BsYXlOYW1lOiBJU08tMjAyMi1KUAotCWFsaWFzZXM6IFtqaXMsIGppc19lbmNvZGluZywgY3NqaXNlbmNvZGluZywgY3NJU08yMDIySlAsIGlzbzIwMjJqcF0KLTguICBDaGFyc2V0bmFtZTogSVNPLTIwMjItS1IKLQlkaXNwbGF5TmFtZTogSVNPLTIwMjItS1IKLQlhbGlhc2VzOiBbSVNPMjAyMktSLCBjc0lTTzIwMjJLUl0KLTkuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktMQotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0xCi0JYWxpYXNlczogW2lzby1pci0xMDAsIDg4NTlfMSwgSVNPXzg4NTktMSwgSVNPODg1OV8xLCA4MTksIGNzSVNPTGF0aW4xLCBJQk0tODE5LCBJU09fODg1OS0xOjE5ODcsIGxhdGluMSwgY3A4MTksIElTTzg4NTktMSwgSUJNODE5LCBJU09fODg1OV8xLCBsMV0KLTEwLiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTEzCi0JZGlzcGxheU5hbWU6IElTTy04ODU5LTEzCi0JYWxpYXNlczogW2lzbzg4NTlfMTNdCi0xMS4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0xNQotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0xNQotCWFsaWFzZXM6IFs4ODU5XzE1LCBjc0lTT2xhdGluOSwgSUJNOTIzLCBjcDkyMywgOTIzLCBMOSwgSUJNLTkyMywgSVNPODg1OS0xNSwgTEFUSU45LCBJU09fODg1OS0xNSwgTEFUSU4wLCBjc0lTT2xhdGluMCwgSVNPODg1OV8xNV9GRElTLCBJU08tODg1OS0xNV0KLTEyLiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTIKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMgotCWFsaWFzZXM6IFtsMiwgaXNvLWlyLTEwMSwgSVNPXzg4NTktMjoxOTg3LCBJU09fODg1OS0yLCBsYXRpbjIsIGNzSVNPTGF0aW4yLCBpc284ODU5XzJdCi0xMy4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0zCi0JZGlzcGxheU5hbWU6IElTTy04ODU5LTMKLQlhbGlhc2VzOiBbXQotMTQuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNAotCWRpc3BsYXlOYW1lOiBJU08tODg1OS00Ci0JYWxpYXNlczogW2lzby1pci0xMTAsIGw0LCBsYXRpbjQsIGNzSVNPTGF0aW40LCBpc284ODU5XzQsIElTT184ODU5LTQ6MTk4OCwgSVNPXzg4NTktNF0KLTE1LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTUKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktNQotCWFsaWFzZXM6IFtjeXJpbGxpYywgaXNvODg1OV81LCBJU09fODg1OS01LCBpc28taXItMTQ0LCBjc0lTT0xhdGluQ3lyaWxsaWNdCi0xNi4gIENoYXJzZXRuYW1lOiBJU08tODg1OS02Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTYKLQlhbGlhc2VzOiBbXQotMTcuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNwotCWRpc3BsYXlOYW1lOiBJU08tODg1OS03Ci0JYWxpYXNlczogW2dyZWVrOCwgRUNNQS0xMTgsIHN1bl9ldV9ncmVlaywgRUxPVF85MjgsIElTT184ODU5LTc6MTk4NywgaXNvLWlyLTEyNiwgSVNPXzg4NTktNywgaXNvODg1OV83LCBncmVlaywgY3NJU09MYXRpbkdyZWVrXQotMTguICBDaGFyc2V0bmFtZTogSVNPLTg4NTktOAotCWRpc3BsYXlOYW1lOiBJU08tODg1OS04Ci0JYWxpYXNlczogW10KLTE5LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTkKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktOQotCWFsaWFzZXM6IFtpc28taXItMTQ4LCBsYXRpbjUsIGw1LCBJU09fODg1OS05LCBJU09fODg1OS05OjE5ODksIGNzSVNPTGF0aW41LCBpc284ODU5XzldCi0yMC4gIENoYXJzZXRuYW1lOiBKSVNfWDAyMDEKLQlkaXNwbGF5TmFtZTogSklTX1gwMjAxCi0JYWxpYXNlczogW0pJU19YMDIwMSwgWDAyMDEsIEpJUzAyMDEsIGNzSGFsZldpZHRoS2F0YWthbmFdCi0yMS4gIENoYXJzZXRuYW1lOiBKSVNfWDAyMTItMTk5MAotCWRpc3BsYXlOYW1lOiBKSVNfWDAyMTItMTk5MAotCWFsaWFzZXM6IFtqaXNfeDAyMTItMTk5MCwgaXNvLWlyLTE1OSwgeDAyMTIsIEpJUzAyMTIsIGNzSVNPMTU5SklTWDAyMTIxOTkwXQotMjIuICBDaGFyc2V0bmFtZTogS09JOC1SCi0JZGlzcGxheU5hbWU6IEtPSTgtUgotCWFsaWFzZXM6IFtrb2k4LCBjc2tvaThyXQotMjMuICBDaGFyc2V0bmFtZTogU2hpZnRfSklTCi0JZGlzcGxheU5hbWU6IFNoaWZ0X0pJUwotCWFsaWFzZXM6IFtzaGlmdC1qaXMsIHgtc2ppcywgbXNfa2FuamksIHNoaWZ0X2ppcywgY3NTaGlmdEpJUywgc2ppcywgcGNrXQotMjQuICBDaGFyc2V0bmFtZTogVElTLTYyMAotCWRpc3BsYXlOYW1lOiBUSVMtNjIwCi0JYWxpYXNlczogW10KLTI1LiAgQ2hhcnNldG5hbWU6IFVTLUFTQ0lJCi0JZGlzcGxheU5hbWU6IFVTLUFTQ0lJCi0JYWxpYXNlczogW0lTTzY0Ni1VUywgSUJNMzY3LCBBU0NJSSwgY3AzNjcsIGFzY2lpNywgQU5TSV9YMy40LTE5ODYsIGlzby1pci02LCB1cywgNjQ2LCBpc29fNjQ2LmlydjoxOTgzLCBjc0FTQ0lJLCBBTlNJX1gzLjQtMTk2OCwgSVNPXzY0Ni5pcnY6MTk5MV0KLTI2LiAgQ2hhcnNldG5hbWU6IFVURi0xNgotCWRpc3BsYXlOYW1lOiBVVEYtMTYKLQlhbGlhc2VzOiBbVVRGXzE2XQotMjcuICBDaGFyc2V0bmFtZTogVVRGLTE2QkUKLQlkaXNwbGF5TmFtZTogVVRGLTE2QkUKLQlhbGlhc2VzOiBbWC1VVEYtMTZCRSwgVVRGXzE2QkUsIElTTy0xMDY0Ni1VQ1MtMl0KLTI4LiAgQ2hhcnNldG5hbWU6IFVURi0xNkxFCi0JZGlzcGxheU5hbWU6IFVURi0xNkxFCi0JYWxpYXNlczogW1VURl8xNkxFLCBYLVVURi0xNkxFXQotMjkuICBDaGFyc2V0bmFtZTogVVRGLTgKLQlkaXNwbGF5TmFtZTogVVRGLTgKLQlhbGlhc2VzOiBbVVRGOF0KLTMwLiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1MAotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTAKLQlhbGlhc2VzOiBbY3AxMjUwXQotMzEuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjUxCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1MQotCWFsaWFzZXM6IFtjcDEyNTFdCi0zMi4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTIKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjUyCi0JYWxpYXNlczogW2NwMTI1Ml0KLTMzLiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1MwotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTMKLQlhbGlhc2VzOiBbY3AxMjUzXQotMzQuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU0Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1NAotCWFsaWFzZXM6IFtjcDEyNTRdCi0zNS4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTUKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjU1Ci0JYWxpYXNlczogW10KLTM2LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1NgotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTYKLQlhbGlhc2VzOiBbXQotMzcuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU3Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1NwotCWFsaWFzZXM6IFtjcDEyNTddCi0zOC4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTgKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjU4Ci0JYWxpYXNlczogW10KLTM5LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMzFqCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMzFqCi0JYWxpYXNlczogW2NzV2luZG93czMxSiwgd2luZG93cy05MzIsIE1TOTMyXQotNDAuICBDaGFyc2V0bmFtZTogeC1FVUMtQ04KLQlkaXNwbGF5TmFtZTogeC1FVUMtQ04KLQlhbGlhc2VzOiBbZ2IyMzEyLCBFVUNfQ04sIGV1Y2NuLCBldWMtY24sIGdiMjMxMi04MCwgZ2IyMzEyLTE5ODBdCi00MS4gIENoYXJzZXRuYW1lOiB4LWV1Yy1qcC1saW51eAotCWRpc3BsYXlOYW1lOiB4LWV1Yy1qcC1saW51eAotCWFsaWFzZXM6IFtldWNfanBfbGludXgsIGV1Yy1qcC1saW51eF0KLTQyLiAgQ2hhcnNldG5hbWU6IHgtRVVDLVRXCi0JZGlzcGxheU5hbWU6IHgtRVVDLVRXCi0JYWxpYXNlczogW2NuczExNjQzLCBldWNfdHcsIEVVQy1UVywgZXVjdHddCi00My4gIENoYXJzZXRuYW1lOiB4LUlTQ0lJOTEKLQlkaXNwbGF5TmFtZTogeC1JU0NJSTkxCi0JYWxpYXNlczogW2lzY2lpLCBTVF9TRVZfMzU4LTg4LCBpc28taXItMTUzLCBjc0lTTzE1M0dPU1QxOTc2ODc0LCBJU0NJSTkxXQotNDQuICBDaGFyc2V0bmFtZTogeC1KSVMwMjA4Ci0JZGlzcGxheU5hbWU6IHgtSklTMDIwOAotCWFsaWFzZXM6IFtKSVNfQzY2MjYtMTk4MywgSklTMDIwOCwgY3NJU084N0pJU1gwMjA4LCB4MDIwOCwgSklTX1gwMjA4LTE5ODMsIGlzby1pci04N10KLTQ1LiAgQ2hhcnNldG5hbWU6IHgtSm9oYWIKLQlkaXNwbGF5TmFtZTogeC1Kb2hhYgotCWFsaWFzZXM6IFtqb2hhYiwgbXMxMzYxLCBrc2M1NjAxLTE5OTIsIGtzYzU2MDFfMTk5Ml0KLTQ2LiAgQ2hhcnNldG5hbWU6IHgtTVM5NTAtSEtTQ1MKLQlkaXNwbGF5TmFtZTogeC1NUzk1MC1IS1NDUwotCWFsaWFzZXM6IFtNUzk1MF9IS1NDU10KLTQ3LiAgQ2hhcnNldG5hbWU6IHgtbXN3aW4tOTM2Ci0JZGlzcGxheU5hbWU6IHgtbXN3aW4tOTM2Ci0JYWxpYXNlczogW21zOTM2LCBtc185MzZdCi00OC4gIENoYXJzZXRuYW1lOiB4LXdpbmRvd3MtOTQ5Ci0JZGlzcGxheU5hbWU6IHgtd2luZG93cy05NDkKLQlhbGlhc2VzOiBbd2luZG93czk0OSwgbXNfOTQ5LCBtczk0OV0KLTQ5LiAgQ2hhcnNldG5hbWU6IHgtd2luZG93cy05NTAKLQlkaXNwbGF5TmFtZTogeC13aW5kb3dzLTk1MAotCWFsaWFzZXM6IFt3aW5kb3dzLTk1MCwgbXM5NTBdCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk2ZjNmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZS5vcmcKLUJ1bmRsZS1OYW1lLjAgPSBFbmNvZGluZyBUZXN0cyBQbHVnLWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9DcmVhdGVDb2RlZFJlYWRlclRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9DcmVhdGVDb2RlZFJlYWRlclRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjFhNzc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvQ3JlYXRlQ29kZWRSZWFkZXJUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5JbGxlZ2FsQ2hhcnNldE5hbWVFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5NYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcE91dHB1dFN0cmVhbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29kZWRSZWFkZXJDcmVhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Ob25Db250ZW50QmFzZWRFbmNvZGluZ1J1bGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyBpbnRlbmRlZCB0byBiZSBleGVjdXRlZCBvbmx5IGF0IGRldmVsb3BtZW50IHRpbWUsIGFuZCBpdAotICogY3JlYXRlcyB0aGUgY2xhc3MgdG8gSlVuaXQgdGVzdCBhbGwgdGhlIGZpbGVzIGZvdW5kIGluIHRoZSB0ZXN0ZmlsZXMKLSAqIGRpcmVjdG9yeS4KLSAqLwotcHVibGljIGNsYXNzIENyZWF0ZUNvZGVkUmVhZGVyVGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAiaHRtbC8iOwotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVSb290ID0KLQkvLyAiL2J1aWxkcy9Xb3Jrc3BhY2VzL0hlYWRXb3Jrc3BhY2Uvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8iOwotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVSb290ICsgZmlsZURpcjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVEZJTEVTX1pJUEZJTEVfTkFNRSA9ICJ0ZXN0ZmlsZXMuemlwIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9GSUxFX0RJUiA9ICJ0ZXN0ZmlsZXMiOyAvLyROT04tTkxTLTEkCi0JLy8gbmVlZHMgdG8gYmUgc3RhdGljLCBzaW5jZSBKVW5pdCBjcmVhdGVzIGRpZmZlcmVuY2UgaW5zdGFuY2VzIGZvciBlYWNoCi0JLy8gdGVzdAotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQ7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUFJPSkVDVF9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmciOyAvLyROT04tTkxTLTEkCi0Jc3RhdGljIElQcm9qZWN0IGZUZXN0UHJvamVjdDsKLQlwcml2YXRlIHN0YXRpYyBpbnQgblNldHVwcyA9IDA7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQgPSBnZXRQbGF0Zm9ybURlZmF1bHQoKTsKLQlwcml2YXRlIGJvb2xlYW4gUkVDUkVBVEVfRklMRVMgPSBmYWxzZTsKLQotCS8qKgotCSAqICAKLQkgKi8KLQlwdWJsaWMgQ3JlYXRlQ29kZWRSZWFkZXJUZXN0ZXIoKSB7Ci0JCXN1cGVyKCk7Ci0JCS8vU3lzdGVtLm91dC5wcmludGxuKGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQpOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0UGxhdGZvcm1EZWZhdWx0KCkgewotCQlTdHJpbmcgcGxhdGZvcm1EZWZhdWx0ID0gTm9uQ29udGVudEJhc2VkRW5jb2RpbmdSdWxlcy51c2VEZWZhdWx0TmFtZVJ1bGVzKG51bGwpOwotCQlyZXR1cm4gcGxhdGZvcm1EZWZhdWx0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkJLy8JCQkJdHJ5IHsKLQkJLy8JCQkJCW5ldyBDcmVhdGVDb2RlZFJlYWRlclRlc3RlcigpLmRvQ3JlYXRlQWxsRmlsZXMoKTsKLQkJLy8JCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCS8vCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkvLwkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCS8vCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkvLwkJCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgZ2V0QW5kQ3JlYXRlUHJvamVjdCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy9UZXN0c1BsdWdpbiB0ZXN0c1BsdWdpbiA9IChUZXN0c1BsdWdpbikKLQkJLy8gUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nIik7Ci0JCUlXb3Jrc3BhY2Ugd29ya3NwYWNlID0gVGVzdHNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JCUlXb3Jrc3BhY2VSb290IHJvb3QgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpOwotCQlmVGVzdFByb2plY3QgPSByb290LmdldFByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkvLyB0aGlzIGZvcm0gY3JlYXRlcyBwcm9qZWN0IGFzICJsaW5rZWQiIGJhY2sgdG8gJ2ZpbGVSb290JwotCQkvL2NyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlRlc3RQcm9qZWN0LCBudWxsLCBudWxsKTsKLQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQlhc3NlcnRUcnVlKGZUZXN0UHJvamVjdC5leGlzdHMoKSk7Ci0JCS8vCQlJQ29udGFpbmVyIHRlc3RGaWxlcyA9IHRlc3RQcm9qZWN0LmdldEZvbGRlcigidGVzdGZpbGVzIik7Ci0JCS8vCQlhc3NlcnRUcnVlKHRlc3RGaWxlcy5leGlzdHMoKSk7Ci0JCS8vCQlJUmVzb3VyY2VbXSBhbGxGb2xkZXJzID0gdGVzdEZpbGVzLm1lbWJlcnMoKTsKLQkJLy8JCWFzc2VydE5vdE51bGwoYWxsRm9sZGVycyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVRlc3RNZXRob2RTb3VyY2UoaW50IGNvdW50LCBTdHJpbmcgZmlsZVBhdGhBbmROYW1lLCBTdHJpbmcgZGV0ZWN0ZWRDaGFyc2V0TmFtZSwgU3RyaW5nIGphdmFDaGFyc2V0TmFtZSwgU3RyaW5nIGV4cGVjdGVkRXhjZXB0aW9uKSB7Ci0JCVN0cmluZyBqYXZhQ2hhcnNldE5hbWVPcktleSA9IGphdmFDaGFyc2V0TmFtZTsKLQkJaWYgKG51bGwgIT0gamF2YUNoYXJzZXROYW1lT3JLZXkgJiYgamF2YUNoYXJzZXROYW1lT3JLZXkuZXF1YWxzKGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQpKQotCQkJamF2YUNoYXJzZXROYW1lT3JLZXkgPSAiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IjsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJwdWJsaWMgdm9pZCB0ZXN0RmlsZSIgKyBjb3VudCArICIgKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsiICsgIiBkb1Rlc3QoIFwiIiArIGphdmFDaGFyc2V0TmFtZU9yS2V5ICsgIlwiLCBcIiIgKyBkZXRlY3RlZENoYXJzZXROYW1lICsgIlwiLCAgXCIiICsgZmlsZVBhdGhBbmROYW1lICsgIlwiLCAiICsgZXhwZWN0ZWRFeGNlcHRpb24gKyAiKTsgfSIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCW5TZXR1cHMrKzsKLQkJaWYgKCFmVGVzdFByb2plY3RJbml0aWFsaXplZCkgewotCQkJZ2V0QW5kQ3JlYXRlUHJvamVjdCgpOwotCQkJLy8gdW56aXAgZmlsZXMgdG8gdGhlIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQkJU3RyaW5nIGRlc3RpbmF0aW9uUHJvamVjdFN0cmluZyA9IGZUZXN0UHJvamVjdC5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKTsKLQkJCVN0cmluZyBkZXN0aW5hdGlvbkZvbGRlciA9IGRlc3RpbmF0aW9uUHJvamVjdFN0cmluZyArICIvIjsKLQkJCS8vIHRoaXMgemlwIGZpbGUgaXMgc2l0dGluZyBpbiB0aGUgInJvb3QiIG9mIHRlc3QgcGx1Z2luCi0JCQlGaWxlIHppcEZpbGUgPSBUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZSgidGVzdGZpbGVzLnppcCIpOwotCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQlwcm9qVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBkZXN0aW5hdGlvbkZvbGRlcik7Ci0JCQlwcm9qVXRpbC5pbml0SmF2YVByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJblNldHVwcy0tOwotCQlpZiAoblNldHVwcyA9PSAwKSB7Ci0JCQlpZiAoIURFQlVHKSB7Ci0JCQkJLy8JCQkJRGlzcGxheSBkaXNwbGF5ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCk7Ci0JCQkJLy8JCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotCQkJCS8vCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJLy8JCQkJCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCQkvLwkJCQkJCUlQcm9qZWN0IHByb2ogPSBmVGVzdFByb2plY3Q7Ci0JCQkJLy8JCQkJCQlmVGVzdFByb2plY3QgPSBudWxsOwotCQkJCS8vCQkJCQkJdHJ5IHsKLQkJCQkvLwkJCQkJCQlwcm9qVXRpbC5kZWxldGVQcm9qZWN0KHByb2opOwotCQkJCS8vCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkvLwkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCS8vCQkJCQkJfQotCQkJCS8vCQkJCQl9Ci0JCQkJLy8JCQkJfSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlQWxsRmlsZXMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlpZiAoUkVDUkVBVEVfRklMRVMpIHsKLQkJCUxpc3QgYWxsRmlsZXMgPSBUZXN0c1BsdWdpbi5nZXRBbGxUZXN0RmlsZXMoVEVTVF9GSUxFX0RJUik7Ci0JCQlVUkwgb3V0cHV0RGlyVVJMID0gVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCQlGaWxlIHppcG91dEZpbGUgPSBuZXcgRmlsZShvdXRwdXREaXJVUkwuZ2V0UGF0aCgpLCBURVNURklMRVNfWklQRklMRV9OQU1FKTsKLQkJCWphdmEuaW8uRmlsZU91dHB1dFN0cmVhbSB6aXBPdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSh6aXBvdXRGaWxlKTsKLQkJCVppcE91dHB1dFN0cmVhbSB6aXBPdXRwdXRTdHJlYW0gPSBuZXcgWmlwT3V0cHV0U3RyZWFtKHppcE91dCk7Ci0JCQlpbnQgY291bnQgPSAxOwotCQkJZm9yIChJdGVyYXRvciBpdGVyID0gYWxsRmlsZXMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KSB7Ci0JCQkJRmlsZSBmaWxlID0gKEZpbGUpIGl0ZXIubmV4dCgpOwotCQkJCWNyZWF0ZVppcEVudHJ5KHppcE91dHB1dFN0cmVhbSwgZmlsZSk7Ci0JCQkJQ29kZWRSZWFkZXJDcmVhdG9yIGNvZGVkUmVhZGVyQ3JlYXRvciA9IG5ldyBDb2RlZFJlYWRlckNyZWF0b3IoKTsKLQkJCQljb2RlZFJlYWRlckNyZWF0b3Iuc2V0KGZpbGUuZ2V0TmFtZSgpLCBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpKTsKLQkJCQlTdHJpbmcgZGV0ZWN0ZWRDaGFyc2V0TmFtZSA9IG51bGw7Ci0JCQkJU3RyaW5nIGphdmFDaGFyc2V0TmFtZSA9IG51bGw7Ci0JCQkJU3RyaW5nIGV4cGVjdGVkRXhjZXB0aW9uID0gbnVsbDsKLQkJCQl0cnkgewotCQkJCQkvLyBqdXN0IHVzZWQgZm9yIGRlYnVnIGluZm8sIGJ1dCBjYW4gdGhyb3cgZXhjZXB0aW9uCi0JCQkJCWphdmFDaGFyc2V0TmFtZSA9IGNvZGVkUmVhZGVyQ3JlYXRvci5nZXRFbmNvZGluZ01lbWVudG8oKS5nZXRKYXZhQ2hhcnNldE5hbWUoKTsKLQkJCQkJZGV0ZWN0ZWRDaGFyc2V0TmFtZSA9IGNvZGVkUmVhZGVyQ3JlYXRvci5nZXRFbmNvZGluZ01lbWVudG8oKS5nZXREZXRlY3RlZENoYXJzZXROYW1lKCk7Ci0JCQkJfQotCQkJCWNhdGNoIChVbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsIGUpIHsKLQkJCQkJLy8gaWdub3JlIGZvciBzaW1wbHkgY3JlYXRpbmcgdGVzdHMKLQkJCQkJZXhwZWN0ZWRFeGNlcHRpb24gPSBlLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIi5jbGFzcyI7Ci0JCQkJfQotCQkJCWNhdGNoIChNYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCS8vIGlnbm9yZSBmb3Igc2ltcGx5IGNyZWF0aW5nIHRlc3RzCi0JCQkJCWV4cGVjdGVkRXhjZXB0aW9uID0gZS5nZXRDbGFzcygpLmdldE5hbWUoKSArICIuY2xhc3MiOwotCQkJCX0KLQkJCQljYXRjaCAoSWxsZWdhbENoYXJzZXROYW1lRXhjZXB0aW9uIGUpIHsKLQkJCQkJLy8gaWdub3JlIGZvciBzaW1wbHkgY3JlYXRpbmcgdGVzdHMKLQkJCQkJZXhwZWN0ZWRFeGNlcHRpb24gPSBlLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIi5jbGFzcyI7Ci0JCQkJfQotCQkJCVN0cmluZyBzdWJwYXRoID0gZ2V0U3ViUGF0aE5hbWUoZmlsZSk7Ci0JCQkJY3JlYXRlVGVzdE1ldGhvZFNvdXJjZShjb3VudCwgc3VicGF0aCwgZGV0ZWN0ZWRDaGFyc2V0TmFtZSwgamF2YUNoYXJzZXROYW1lLCBleHBlY3RlZEV4Y2VwdGlvbik7Ci0JCQkJY291bnQrKzsKLQkJCX0KLQkJCXppcE91dHB1dFN0cmVhbS5jbG9zZSgpOwotCQkJemlwT3V0LmNsb3NlKCk7Ci0JCQlhc3NlcnRUcnVlKHRydWUpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0U3ViUGF0aE5hbWUoRmlsZSBmaWxlKSB7Ci0JCVN0cmluZyBwYXRoID0gZmlsZS5nZXRQYXRoKCk7Ci0JCWludCBsYXN0SW5kZXggPSBwYXRoLmxhc3RJbmRleE9mKFRFU1RfRklMRV9ESVIpOwotCQlTdHJpbmcgc3VicGF0aCA9IHBhdGguc3Vic3RyaW5nKGxhc3RJbmRleCk7Ci0JCXN1YnBhdGggPSBzdWJwYXRoLnJlcGxhY2UoJ1xcJywgJy8nKTsKLQkJcmV0dXJuIHN1YnBhdGg7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHppcE91dHB1dFN0cmVhbQotCSAqIEBwYXJhbSBlbGVtZW50Ci0JICovCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVppcEVudHJ5KFppcE91dHB1dFN0cmVhbSB6aXBPdXRwdXRTdHJlYW0sIEZpbGUgZmlsZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHN1YlBhdGhOYW1lID0gZ2V0U3ViUGF0aE5hbWUoZmlsZSk7Ci0JCVppcEVudHJ5IHppcEVudHJ5ID0gbmV3IFppcEVudHJ5KHN1YlBhdGhOYW1lKTsKLQkJemlwT3V0cHV0U3RyZWFtLnB1dE5leHRFbnRyeSh6aXBFbnRyeSk7Ci0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLQkJaW50IG5SZWFkID0gMDsKLQkJYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlWzEwMjQgKiA4XTsKLQkJd2hpbGUgKG5SZWFkICE9IC0xKSB7Ci0JCQluUmVhZCA9IGlucHV0U3RyZWFtLnJlYWQoYnVmZmVyKTsKLQkJCWlmIChuUmVhZCA+IDApIHsKLQkJCQl6aXBPdXRwdXRTdHJlYW0ud3JpdGUoYnVmZmVyLCAwLCBuUmVhZCk7Ci0JCQl9Ci0JCX0KLQkJemlwT3V0cHV0U3RyZWFtLmZsdXNoKCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvRW5jb2RpbmdUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvRW5jb2RpbmdUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU4NTZmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0VuY29kaW5nVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5wcm9wZXJ0aWVzLlRlc3RDb21tb25OYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnByb3BlcnRpZXMuVGVzdE92ZXJyaWRlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQuVGVzdENvZGVkUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucmVhZC5UZXN0Q29kZWRSZWFkZXJPbkdlbm5lZEZpbGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucmVhZC5UZXN0Q29udGVudERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucmVhZC5UZXN0Q29udGVudFR5cGVEZXNjcmlwdGlvbk9uR2VubmVkRmlsZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkLlRlc3RDb250ZW50VHlwZURldGVjdGlvbkZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQuVGVzdENvbnRlbnRUeXBlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLndyaXRlLlRlc3RDb2RlZFdyaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcueG1sLlhNTEVuY29kaW5nVGVzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy54bWwuWE1MSGVhZFRva2VuaXplclRlc3RlcjsKLQotCi1wdWJsaWMgY2xhc3MgRW5jb2RpbmdUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCi0JLy8gRklYTUU6IGNvbW1lbnRlZCBvdXQgbGFuZy4gc3BlYy4gdGVzdHMsIHVudGlsIGFsbCBtaWdyYXRlZCB0byBvcmcuZWNsaXBzZSAKLQlwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGNsYXNzZXMgPSBuZXcgQ2xhc3NbXXtUZXN0T3ZlcnJpZGVzLmNsYXNzLCBUZXN0Q29kZWRSZWFkZXIuY2xhc3MsIFRlc3RDb2RlZFdyaXRlLmNsYXNzLCBYTUxFbmNvZGluZ1Rlc3RzLmNsYXNzLCBYTUxIZWFkVG9rZW5pemVyVGVzdGVyLmNsYXNzLCBUZXN0Q29udGVudFR5cGVEZXNjcmlwdGlvbk9uR2VubmVkRmlsZXMuY2xhc3MsIFRlc3RDb2RlZFJlYWRlck9uR2VubmVkRmlsZXMuY2xhc3MsIFRlc3RDb250ZW50RGVzY3JpcHRpb24uY2xhc3MsIFRlc3RDb250ZW50VHlwZXMuY2xhc3MsIFRlc3RDb21tb25OYW1lcy5jbGFzcywgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yWE1MLmNsYXNzfTsKLQkvL3ByaXZhdGUgc3RhdGljIENsYXNzW10gY2xhc3NlcyA9IG5ldyBDbGFzc1tde1Rlc3RPdmVycmlkZXMuY2xhc3MsIENTU0VuY29kaW5nVGVzdGVyLmNsYXNzLCBDU1NIZWFkVG9rZW5pemVyVGVzdGVyLmNsYXNzLCBIVE1MRW5jb2RpbmdUZXN0cy5jbGFzcywgSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIEpTUEVuY29kaW5nVGVzdHMuY2xhc3MsIEpTUEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIFRlc3RDb2RlZFJlYWRlci5jbGFzcywgVGVzdENvZGVkV3JpdGUuY2xhc3MsIFhNTEVuY29kaW5nVGVzdHMuY2xhc3MsIFhNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIFhNTE1hbGZvcm1lZElucHV0VGVzdHMuY2xhc3MsIFRlc3RDb250ZW50VHlwZURlc2NyaXB0aW9uT25HZW5uZWRGaWxlcy5jbGFzcywgVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlcy5jbGFzcywgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uLmNsYXNzLCBUZXN0Q29udGVudERlc2NyaXB0aW9uLmNsYXNzLCBUZXN0Q29udGVudFR5cGVzLmNsYXNzLCBUZXN0Q29tbW9uTmFtZXMuY2xhc3N9OwotCXB1YmxpYyBFbmNvZGluZ1Rlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIkVuY29kaW5nIFRlc3QgU3VpdGUiKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoY2xhc3Nlc1tpXSwgY2xhc3Nlc1tpXS5nZXROYW1lKCkpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVuY29kaW5nVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzLCBTdHJpbmcgbmFtZSkgewotCQlzdXBlcih0aGVDbGFzcywgbmFtZSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRoZUNsYXNzCi0JICovCi0JcHVibGljIEVuY29kaW5nVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzKSB7Ci0JCXN1cGVyKHRoZUNsYXNzKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbmNvZGluZ1Rlc3RTdWl0ZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgRW5jb2RpbmdUZXN0U3VpdGUoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9GaWxlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9GaWxlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWZjNGViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvRmlsZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICogCi0gKiBUbyBjaGFuZ2UgdGhpcyBnZW5lcmF0ZWQgY29tbWVudCBlZGl0IHRoZSB0ZW1wbGF0ZSB2YXJpYWJsZSAidHlwZWNvbW1lbnQiOgotICogV2luZG93PlByZWZlcmVuY2VzPkphdmE+VGVtcGxhdGVzLiBUbyBlbmFibGUgYW5kIGRpc2FibGUgdGhlIGNyZWF0aW9uIG9mCi0gKiB0eXBlIGNvbW1lbnRzIGdvIHRvIFdpbmRvdz5QcmVmZXJlbmNlcz5KYXZhPkNvZGUgR2VuZXJhdGlvbi4KLSAqLwotY2xhc3MgRmlsZVV0aWwgewotCXByaXZhdGUgc3RhdGljIFN0cmluZyBjdXJyZW50V29ya3NwYWNlID0gImRldjA3MjUiOwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gcHJpbnRlZE9uY2UgPSBmYWxzZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmTGluZVNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmUGF0aFNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgicGF0aC5zZXBhcmF0b3IiKTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmRmlsZVNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiZmlsZS5zZXBhcmF0b3IiKTsKLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBtYWtlRmlsZUZvcihTdHJpbmcgZGlyZWN0b3J5LCBTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyB0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGluc3RhbGxQYXRoID0gIi9idWlsZHMvV29ya3NwYWNlcy8iICsgY3VycmVudFdvcmtzcGFjZSArICIvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8iOwotCQlVUkwgdXJsID0gbmV3IFVSTCgiZmlsZTovLyIgKyBpbnN0YWxsUGF0aCk7Ci0JCVN0cmluZyB0b3RhbERpcmVjdG9yeSA9IGluc3RhbGxQYXRoICsgZGlyZWN0b3J5OwotCQlTdHJpbmcgdG90YWxQYXRoID0gdG90YWxEaXJlY3RvcnkgKyAiLyIgKyBmaWxlbmFtZTsKLQkJVVJMIHRvdGFsVVJMID0gbmV3IFVSTCh1cmwsIHRvdGFsUGF0aCk7Ci0JCVVSTCBmaW5hbHVybCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTCh0b3RhbFVSTCk7Ci0JCVN0cmluZyBmaW5hbEZpbGUgPSBmaW5hbHVybC5nZXRGaWxlKCk7Ci0JCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbmFsRmlsZSk7Ci0JCVN0cmluZyBmaW5hbFBhdGggPSBmaWxlLmdldFBhcmVudCgpOwotCQlGaWxlIGRpciA9IG5ldyBGaWxlKGZpbmFsUGF0aCk7Ci0JCWlmICghcHJpbnRlZE9uY2UpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiT3V0cHV0IHdyaXR0ZW4gdG8gIiArIGRpci5nZXRBYnNvbHV0ZVBhdGgoKSk7Ci0JCQlwcmludGVkT25jZSA9IHRydWU7Ci0JCX0KLQotCQlpZiAoIWRpci5leGlzdHMoKSkgewotCQkJZGlyLm1rZGlycygpOwotCQl9Ci0JCXJldHVybiBmaWxlOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvR2VuZXJhdGVGaWxlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9HZW5lcmF0ZUZpbGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyN2Y0ZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9HZW5lcmF0ZUZpbGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZzsKLQotCi1wdWJsaWMgY2xhc3MgR2VuZXJhdGVGaWxlcyB7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRNYWluRGlyZWN0b3J5QmFzZWRPblZNTmFtZSgpIHsKLQkJU3RyaW5nIG1haW5EaXJlY3RvcnkgPSAidGVzdGZpbGVzL2dlbmVkRmlsZXMtIiArIGdldEphdmFWZXJzaW9uKCk7Ci0JCXJldHVybiBtYWluRGlyZWN0b3J5OwotCX0KLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRKYXZhVmVyc2lvbigpIHsKLQkJU3RyaW5nIG5hbWUgPSBudWxsOyAvL1N5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5mdWxsdmVyc2lvbiIpOwotCQlpZiAobmFtZSA9PSBudWxsKSB7Ci0JCQluYW1lID0gU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLnZlcnNpb24iKSArICIgKCIgKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEucnVudGltZS52ZXJzaW9uIikgKyAiKSI7Ci0JCX0KLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0dlbmVyYXRlWE1MRmlsZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvR2VuZXJhdGVYTUxGaWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjFmOTYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvR2VuZXJhdGVYTUxGaWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0RW5jb2RlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNvZGluZ0Vycm9yQWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50RGVzY3JpcHRpb247Ci0KLS8qKgotICogVGhlIHB1cnBvc2UgYW5kIGxvZ2ljIG9mIHRoaXMgY2xhc3MgaXMgdG8gY3JlYXRlIHNtYWxsICJYTUwgZmlsZXMiIG9mCi0gKiB2YXJpb3VzLCBrbm93biBlbmNvZGluZ3MsIHdyaXRlIHRoZW0gdG8gZmlsZXMsIGFuZCBpbiBsYXRlciB0ZXN0cywgYmUgc3VyZQotICogYXBwcm9wcmlhdGUgZW5jb2RpbmcgY2FuIGJlIGRldGVjdGVkLCBhbmQgcmVhZCBpbiBhbmQgaW50YWN0IGNoYXJhY3RlcnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBHZW5lcmF0ZVhNTEZpbGVzIGV4dGVuZHMgR2VuZXJhdGVGaWxlcyB7Ci0JcHJpdmF0ZSBTdHJpbmcgTEYgPSAiXG4iOwotCXByaXZhdGUgU3RyaW5nIENSID0gIlxyIjsKLQlwcml2YXRlIFN0cmluZyBDUkxGID0gQ1IgKyBMRjsKLQkvLyBkaWZmZXJlbnQgdGV4dCBzdHJpbmdzIGZvciBjb21wYXJpc29ucwotCXByaXZhdGUgU3RyaW5nIHRleHRVU19BU0NJSV9MRiA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elxuMTIzNDU2Nzg5MFxuQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiOwotCXByaXZhdGUgU3RyaW5nIHRleHRVU19BU0NJSV9DUkxGID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XHJcbjEyMzQ1Njc4OTBcclxuQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiOwotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IHRydWU7Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHQ1JMRiA9IGZhbHNlOwotCXByaXZhdGUgYm9vbGVhbiBERUJVR0lORk8gPSB0cnVlOwotCi0KLQlwdWJsaWMgR2VuZXJhdGVYTUxGaWxlcygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JCS8vanVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKEdlbmVyYXRlWE1MRmlsZXMuY2xhc3MpOwotCQlHZW5lcmF0ZVhNTEZpbGVzIHRoaXNBcHAgPSBuZXcgR2VuZXJhdGVYTUxGaWxlcygpOwotCQl0cnkgewotCQkJLy90aGlzQXBwLmdlbmVyYXRlT3JpZ2luYWxGaWxlcygpOwotCQkJdGhpc0FwcC5nZW5lcmF0ZUFsbEZpbGVzRm9yQ3VycmVudFZNKCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBnZW5lcmF0ZUFsbEZpbGVzRm9yQ3VycmVudFZNKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJTWFwIGFsbENoYXJzZXRNYXAgPSBDaGFyc2V0LmF2YWlsYWJsZUNoYXJzZXRzKCk7Ci0JCVNldCBhbGxLZXlzID0gYWxsQ2hhcnNldE1hcC5rZXlTZXQoKTsKLQkJT2JqZWN0W10gYWxsY2hhcnNldHMgPSBhbGxLZXlzLnRvQXJyYXkoKTsKLQkJU3RyaW5nW10gYWxsY2hhcnNldE5hbWVzID0gbmV3IFN0cmluZ1thbGxjaGFyc2V0cy5sZW5ndGhdOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGFsbGNoYXJzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhbGxjaGFyc2V0TmFtZXNbaV0gPSBhbGxjaGFyc2V0c1tpXS50b1N0cmluZygpOwotCi0JCX0KLQkJLy9jcmVhdGVGaWxlcyhhbGxjaGFyc2V0TmFtZXMsIGZhbHNlKTsKLQkJY3JlYXRlRmlsZXMoYWxsY2hhcnNldE5hbWVzLCB0cnVlKTsKLQotCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVGaWxlcyhTdHJpbmdbXSBjaGFyc2V0bmFtZXMsIGJvb2xlYW4gdXNlQ1JMRikgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9IG51bGw7Ci0JCVdyaXRlciBvdXQgPSBudWxsOwotCQlTdHJpbmcgbWFpbkRpcmVjdG9yeSA9IGdldE1haW5EaXJlY3RvcnlCYXNlZE9uVk1OYW1lQW5kRmlsZUV4dGVuc2lvbigpOwotCQlMaXN0IGNoYXJzZXRGaWxlc1dyaXR0ZW4gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2hhcnNldG5hbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQl0cnkgewotCi0KLQkJCQljaGFyc2V0TmFtZSA9IGNoYXJzZXRuYW1lc1tpXTsKLQotCQkJCUNoYXJzZXQgY2hhcnNldCA9IENoYXJzZXQuZm9yTmFtZShjaGFyc2V0TmFtZSk7Ci0JCQkJQ2hhcnNldEVuY29kZXIgY2hhcnNldEVuY29kZXIgPSBjaGFyc2V0Lm5ld0VuY29kZXIoKTsKLQkJCQljaGFyc2V0RW5jb2Rlci5vbk1hbGZvcm1lZElucHV0KENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0JCQkJY2hhcnNldEVuY29kZXIub25Vbm1hcHBhYmxlQ2hhcmFjdGVyKENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0KLQkJCQlTdHJpbmcgaGVhZGVyID0gZ2V0SGVhZGVyU3RhcnQoKSArIGNoYXJzZXROYW1lICsgZ2V0SGVhZGVyRW5kKCk7Ci0JCQkJU3RyaW5nIGZ1bGx0ZXh0ID0gbnVsbDsKLQkJCQlpZiAodXNlQ1JMRikgewotCQkJCQlmdWxsdGV4dCA9IGhlYWRlciArIHRleHRVU19BU0NJSV9DUkxGOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJZnVsbHRleHQgPSBoZWFkZXIgKyB0ZXh0VVNfQVNDSUlfTEY7Ci0JCQkJfQotCi0JCQkJaWYgKCFpc0ViY2lkaWMoY2hhcnNldE5hbWUsIGNoYXJzZXRFbmNvZGVyKSkgewotCQkJCQlpZiAoY2hhcnNldEVuY29kZXIuY2FuRW5jb2RlKGZ1bGx0ZXh0KSkgewotCQkJCQkJLy8JCQkJCQlpZiAoY2FuRW5jb2RlQ1JMRihjaGFyc2V0TmFtZSwgY2hhcnNldEVuY29kZXIpCi0JCQkJCQkvLyAmJgotCQkJCQkJLy8gY2FuRW5jb2RlU2ltcGxlU3RyaW5nKGNoYXJzZXROYW1lLAotCQkJCQkJLy8gY2hhcnNldEVuY29kZXIsICI8PyIpICYmCi0JCQkJCQkvLyBjaGFyc2V0RW5jb2Rlci5jYW5FbmNvZGUoZnVsbHRleHQpKSB7Ci0JCQkJCQlTdHJpbmcgb3V0cHV0ZmlsZW5hbWUgPSAidGVzdC0iICsgY2hhcnNldE5hbWUgKyAiLnhtbCI7Ci0JCQkJCQlGaWxlIG91dEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihtYWluRGlyZWN0b3J5LCBvdXRwdXRmaWxlbmFtZSwgbnVsbCk7Ci0JCQkJCQkvL1N5c3RlbS5vdXQucHJpbnRsbihvdXRGaWxlLmdldEFic29sdXRlUGF0aCgpKTsKLQkJCQkJCU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbShvdXRGaWxlKTsKLQkJCQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBieXRlc291dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQotCQkJCQkJV3JpdGVyIGZpbGVXcml0ZXIgPSBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKG91dHB1dFN0cmVhbSwgY2hhcnNldEVuY29kZXIpOwotCQkJCQkJLy8gdGhpcyBieXRlIHdyaXRlciBpcyBjcmVhdGVkIGp1c3QgdG8gYmUgYWJsZSB0bwotCQkJCQkJLy8gY291bnQgcHJlY2lzZSBieXRlcy4KLQkJCQkJCVdyaXRlciBieXRlV3JpdGVyID0gbmV3IE91dHB1dFN0cmVhbVdyaXRlcihieXRlc291dCwgY2hhcnNldEVuY29kZXIpOwotCi0JCQkJCQlzdXBwbHlCT01zKGNoYXJzZXROYW1lLCBvdXRwdXRTdHJlYW0sIGJ5dGVzb3V0KTsKLQotCQkJCQkJb3V0ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKGZpbGVXcml0ZXIpOwotCi0KLQkJCQkJCW91dC53cml0ZShmdWxsdGV4dCk7Ci0JCQkJCQlieXRlV3JpdGVyLndyaXRlKGZ1bGx0ZXh0KTsKLQkJCQkJCW91dC5jbG9zZSgpOwotCQkJCQkJYnl0ZVdyaXRlci5mbHVzaCgpOwotCQkJCQkJLy8gaWYgd2UgbWFkZSBpcyB0aGlzIGZhciwgd2l0aCBubyBleGNlcHRpb25zLAotCQkJCQkJLy8gZXRjLiwKLQkJCQkJCS8vIHRoZW4KLQkJCQkJCS8vIG11c3QgaGF2ZSBiZWVuCi0JCQkJCQkvLyByZWFsbHkgd3JpdHRlbi4KLQkJCQkJCVN0cmluZyB3cml0dGVuUmVjb3JkID0gY2hhcnNldE5hbWU7Ci0JCQkJCQljaGFyc2V0RmlsZXNXcml0dGVuLmFkZCh3cml0dGVuUmVjb3JkKTsKLQkJCQkJCWlmIChERUJVRykgewotCQkJCQkJCXByaW50RGVidWdJbmZvKHVzZUNSTEYsIGhlYWRlciwgb3V0cHV0ZmlsZW5hbWUsIGJ5dGVzb3V0KTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCWlmIChERUJVR0lORk8pIHsKLQkJCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAqKiogY291bGQgbm90IGNvbnZlcnQgc2FtcGxlIGFzY2lpIHRleHQgZm9yICIgKyBjaGFyc2V0TmFtZSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJaWYgKERFQlVHSU5GTykgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAqKioqKiBjb3VsZCBub3QgZ2VuZXJhdGUgZm9yICIgKyBjaGFyc2V0TmFtZSk7Ci0JCQkJCVN0cmluZyBtc2cgPSBlLmdldE1lc3NhZ2UoKTsKLQkJCQkJaWYgKG1zZyA9PSBudWxsKQotCQkJCQkJbXNnID0gIiI7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICAgIGR1ZSB0byAiICsgZS5nZXRDbGFzcygpLmdldE5hbWUoKSArICIgICIgKyBtc2cpOwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWlmIChERUJVR0lORk8pIHsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCIgKioqKiogY291bGQgbm90IGdlbmVyYXRlIGZvciAiICsgY2hhcnNldE5hbWUpOwotCQkJCQlTdHJpbmcgbXNnID0gZS5nZXRNZXNzYWdlKCk7Ci0JCQkJCWlmIChtc2cgPT0gbnVsbCkKLQkJCQkJCW1zZyA9ICIiOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAgICBkdWUgdG8gIiArIGUuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiICAiICsgbXNnKTsKLQkJCQl9Ci0JCQl9Ci0JCQlmaW5hbGx5IHsKLQkJCQlpZiAob3V0ICE9IG51bGwpIHsKLQkJCQkJb3V0LmNsb3NlKCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQotCQkvLyBub3cgY3JlYXRlIGZpbGUgdGhhdCBzdW1tYXJpemVzIHdoYXQgd2FzIHdyaXR0ZW4KLQkJLy8gc3VpdGFibGUgdG8gcGFzdGUgYXMgbWV0aG9kIGluIHRlc3QgY2xhc3MKLQkJRmlsZSBvdXRGaWxlID0gRmlsZVV0aWwubWFrZUZpbGVGb3IobWFpbkRpcmVjdG9yeSwgInRlc3RNZXRob2RzLnRleHQiLCBudWxsKTsKLQkJRmlsZVdyaXRlciBvdXRwcm9wZXJ0aWVzID0gbmV3IEZpbGVXcml0ZXIob3V0RmlsZSk7Ci0JCW91dHByb3BlcnRpZXMud3JpdGUoY2hhcnNldEZpbGVzV3JpdHRlbi5zaXplKCkgKyBDUkxGKTsKLQkJSXRlcmF0b3IgaXRlbXMgPSBjaGFyc2V0RmlsZXNXcml0dGVuLml0ZXJhdG9yKCk7Ci0JCWludCBuID0gMDsKLQkJd2hpbGUgKGl0ZW1zLmhhc05leHQoKSkgewotCQkJU3RyaW5nIGl0ZW1DcmVhdGVkID0gKFN0cmluZykgaXRlbXMubmV4dCgpOwotCQkJU3RyaW5nIHRlc3RNZXRob2QgPSBjcmVhdGVNZXRob2QobisrLCBpdGVtQ3JlYXRlZCk7Ci0JCQlvdXRwcm9wZXJ0aWVzLndyaXRlKHRlc3RNZXRob2QgKyBDUkxGKTsKLQkJfQotCQlvdXRwcm9wZXJ0aWVzLmNsb3NlKCk7Ci0KLQl9Ci0KLQkvKioKLQkgKiBJIHRob3VnaHQgdGhpcyB1c2VkIHRvIGJlIGF1dG9tYXRpYywgYnV0IGRvZXNuJ3Qgc2VlbSB0byBiZSBub3c/IQotCSAqLwotCXByaXZhdGUgdm9pZCBzdXBwbHlCT01zKFN0cmluZyBjaGFyc2V0TmFtZSwgT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSwgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJ5dGVzb3V0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlieXRlW10gbnVsbEJ5dGVzID0gbmV3IGJ5dGVbXXsweDAwLCAweDAwfTsKLQkJaWYgKGNoYXJzZXROYW1lLmVxdWFscygiVVRGLTE2IikpIHsKLQkJCW91dHB1dFN0cmVhbS53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZMRSk7Ci0JCQlieXRlc291dC53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZMRSk7Ci0JCX0KLQkJaWYgKGNoYXJzZXROYW1lLmVxdWFscygiVVRGLTE2TEUiKSkgewotCQkJb3V0cHV0U3RyZWFtLndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJCWJ5dGVzb3V0LndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJfQotCQlpZiAoY2hhcnNldE5hbWUuZXF1YWxzKCJYLVVuaWNvZGVMaXR0bGUiKSkgewotCQkJb3V0cHV0U3RyZWFtLndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJCWJ5dGVzb3V0LndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJfQotCQlpZiAoY2hhcnNldE5hbWUuZXF1YWxzKCJVVEYtMTZCRSIpKSB7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2QkUpOwotCQkJYnl0ZXNvdXQud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2QkUpOwotCQl9Ci0JCWlmIChjaGFyc2V0TmFtZS5lcXVhbHMoIlgtVW5pY29kZUJpZyIpKSB7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2QkUpOwotCQkJYnl0ZXNvdXQud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2QkUpOwotCQl9Ci0JCWlmIChjaGFyc2V0TmFtZS5lcXVhbHMoIlVURi0zMiIpKSB7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUobnVsbEJ5dGVzKTsKLQkJCW91dHB1dFN0cmVhbS53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZMRSk7Ci0JCQlieXRlc291dC53cml0ZShudWxsQnl0ZXMpOwotCQkJYnl0ZXNvdXQud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2TEUpOwotCQl9Ci0JCWlmIChjaGFyc2V0TmFtZS5lcXVhbHMoIlVURi0zMkxFIikpIHsKLQkJCW91dHB1dFN0cmVhbS53cml0ZShudWxsQnl0ZXMpOwotCQkJb3V0cHV0U3RyZWFtLndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJCWJ5dGVzb3V0LndyaXRlKG51bGxCeXRlcyk7Ci0JCQlieXRlc291dC53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZMRSk7Ci0JCX0KLQkJaWYgKGNoYXJzZXROYW1lLmVxdWFscygiVVRGLTMyQkUiKSkgewotCQkJb3V0cHV0U3RyZWFtLndyaXRlKG51bGxCeXRlcyk7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2QkUpOwotCQkJYnl0ZXNvdXQud3JpdGUobnVsbEJ5dGVzKTsKLQkJCWJ5dGVzb3V0LndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkJFKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBpCi0JICogQHBhcmFtIGl0ZW1DcmVhdGVkCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgY3JlYXRlTWV0aG9kKGludCBpLCBTdHJpbmcgaXRlbUNyZWF0ZWQpIHsKLQkJU3RyaW5nIHRlbXBsYXRlID0gIglwdWJsaWMgdm9pZCB0ZXN0RmlsZSIgKyBpICsgIigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAge1xyXG4iICsgIgkJU3RyaW5nIGNoYXJzZXROYW1lID0gXCIiICsgaXRlbUNyZWF0ZWQgKyAiXCI7XHJcbiIgKyAiCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpO1xyXG4iICsgIgl9IjsKLQkJcmV0dXJuIHRlbXBsYXRlOwotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludERlYnVnSW5mbyhib29sZWFuIHVzZUNSTEYsIFN0cmluZyBoZWFkZXIsIFN0cmluZyBvdXRwdXRmaWxlbmFtZSwgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJ5dGVzb3V0KSB7Ci0JCWJ5dGVbXSBieXRlcyA9IGJ5dGVzb3V0LnRvQnl0ZUFycmF5KCk7Ci0JCWludCBuQnl0ZXMgPSBieXRlcy5sZW5ndGg7Ci0JCWludCBuQ2hhcnMgPSAwOwotCQlpZiAodXNlQ1JMRikgewotCQkJbkNoYXJzID0gaGVhZGVyLmxlbmd0aCgpICsgdGV4dFVTX0FTQ0lJX0NSTEYubGVuZ3RoKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQluQ2hhcnMgPSBoZWFkZXIubGVuZ3RoKCkgKyB0ZXh0VVNfQVNDSUlfTEYubGVuZ3RoKCk7Ci0JCX0KLQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIldyb3RlICIgKyBuQ2hhcnMgKyAiIGNoYXJhY3RlcnMgYW5kICIgKyBuQnl0ZXMgKyAiIGJ5dGVzIHRvICIgKyBvdXRwdXRmaWxlbmFtZSk7Ci0JfQotCi0JLy8gVE9ETzogbmV2ZXIgdXNlZAotCSBib29sZWFuIGNhbkVuY29kZVNpbXBsZVN0cmluZyhTdHJpbmcgY2hhcnNldE5hbWUsIENoYXJzZXRFbmNvZGVyIGNoYXJzZXRFbmNvY2RlciwgU3RyaW5nIHNpbXBsZVN0cmluZykgewotCQkvLyB0aGlzIG1ldGhvZCBhZGRlZCBzaW5jZSBzb21lIGVuY29kZXJzIGRvbid0IHJlcG9ydCB0aGF0IHRoZXkgY2FuJ3QKLQkJLy8gZW5jb2RlIHNvbWV0aGluZywgYnV0IHRoZXkgb2J2aW91c2x5Ci0JCS8vIGNhbid0LCBhdCBsZWFzdCBpbiB0aGUgbm9ybWFsIG1lYW5pbmcgb2YgdGhlIHdvcmQuCi0JCS8vIFRoaXMgc2VlbXMgdG8gbW9zdGx5IGFwcGx5IHRvIHNvbWUgSUJNIHZhcmlldGllcyB3aGVyZSwgYXBwYXJlbnRseSwKLQkJLy8gdGhlIGlucHV0IGNhbid0IGJlIGludGVycHJldGVkIGF0IGFsbCB3aXRob3V0IGtub3dpbmcgZW5jb2RpbmcKLQkJLy8gKHRoYXQgaXMKLQkJLy8gY291bGQgbm90IGJlIHVzZWQgZm9yIGNvbnRlbnQgYmFzZWQgZW5jb2RpbmcpLgotCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCi0JCVN0cmluZyBuZXdBc2NpaVN0cmluZyA9IG51bGw7Ci0JCWJ5dGVbXSB0cmFuc2xhdGVkQnl0ZXMgPSBudWxsOwotCQl0cnkgewotCQkJdHJhbnNsYXRlZEJ5dGVzID0gc2ltcGxlU3RyaW5nLmdldEJ5dGVzKGNoYXJzZXROYW1lKTsKLQkJCW5ld0FzY2lpU3RyaW5nID0gbmV3IFN0cmluZyh0cmFuc2xhdGVkQnl0ZXMsICJhc2NpaSIpOwotCQl9Ci0JCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUsIHNpbmNlIGNoZWNrZWQgYWxyZWFkeQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCXJlc3VsdCA9IHNpbXBsZVN0cmluZy5lcXVhbHMobmV3QXNjaWlTdHJpbmcpOwotCQlpZiAoIXJlc3VsdCkgewotCQkJaWYgKGNoYXJzZXRFbmNvY2Rlci5tYXhCeXRlc1BlckNoYXIoKSAhPSAxKSB7Ci0JCQkJLy8gZG9uJ3QgY2hlY2sgbXVsaXRieXRlIGVuY29kZXJzLCBqdXN0IGFzc3VtZSB0cnVlIChmb3Igbm93KS4KLQkJCQlyZXN1bHQgPSB0cnVlOwotCQkJCWlmIChjaGFyc2V0RW5jb2NkZXIubWF4Qnl0ZXNQZXJDaGFyKCkgPT0gNCkgewotCQkJCQkvL2V4Y2VwdCwgbGV0J3MganVzdCBleGNsdWRlIGZvdXIgYnl0ZSBzdHJlYW1zLCBmb3Igbm93LgotCQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCQkJaWYgKGNoYXJzZXRFbmNvY2Rlci5hdmVyYWdlQnl0ZXNQZXJDaGFyKCkgPT0gMikgewotCQkJCQkJLy8gZXhjZXB0LCBmb3Igc29tZSByZWFzb24gVVRGIGhhcyBtYXggYnl0ZXMgb2YgNAotCQkJCQkJLy8gKGF2ZXJhZ2UgYnl0ZXMgb2YgMikuCi0JCQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogQSB2ZXJ5IGhldXJpc3RpYyBtZXRob2QuIFNob3VsZCBoYXZlIHRhYmxlLCBzb21lZGF5LgotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBpc0ViY2lkaWMoU3RyaW5nIGNoYXJzZXROYW1lLCBDaGFyc2V0RW5jb2RlciBjaGFyc2V0RW5jb2NkZXIpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkJU3RyaW5nIHNpbXBsZVN0cmluZyA9ICI8PyI7Ci0JCVN0cmluZyBuZXdBc2NpaVN0cmluZyA9IG51bGw7Ci0JCWJ5dGVbXSB0cmFuc2xhdGVkQnl0ZXMgPSBudWxsOwotCQl0cnkgewotCQkJdHJhbnNsYXRlZEJ5dGVzID0gc2ltcGxlU3RyaW5nLmdldEJ5dGVzKGNoYXJzZXROYW1lKTsKLQkJCW5ld0FzY2lpU3RyaW5nID0gbmV3IFN0cmluZyh0cmFuc2xhdGVkQnl0ZXMsICJhc2NpaSIpOwotCQl9Ci0JCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUsIHNpbmNlIGNoZWNrZWQgYWxyZWFkeQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCS8vIGV4cGVyaW1lbnRpbmcvZGVidWdnaW5nIHNob3dlZCB0aGUga25vd24gZWJjaWRpYyBvbmNlcyBhbHdheXMKLQkJLy8gIm1pcyIgdHJhbmxhdGVkIHRvIGNoYXJhY3RlcnMgTCBhbmQgby4KLQkJcmVzdWx0ID0gIkxvIi5lcXVhbHMobmV3QXNjaWlTdHJpbmcpOwotCQlpZiAocmVzdWx0KSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oY2hhcnNldE5hbWUgKyAiIGFzc3VtZWQgdG8gYmUgRWRjaWRpYyIpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGNoYXJzZXQKLQkgKi8KLQkgYm9vbGVhbiBjYW5FbmNvZGVDUkxGKFN0cmluZyBjaGFyc2V0TmFtZSwgQ2hhcnNldEVuY29kZXIgY2hhcnNldEVuY29kZXIpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCQkvL1N0cmluZyBjaGFyc2V0Q29ub25pY2FsTmFtZSA9IGNoYXJzZXRFbmNvZGVyLmNoYXJzZXQoKS5uYW1lKCk7Ci0JCWlmICghY2hhcnNldEVuY29kZXIuY2FuRW5jb2RlKExGKSkgewotCQkJaWYgKERFQlVHQ1JMRikgewotCQkJCVN0cmluZyBzdHJpbmdOYW1lID0gIkxGIjsKLQkJCQlTdHJpbmcgdGVzdFN0cmluZyA9IExGOwotCQkJCWV4cGxvcmVDb252ZXJzaW9uKGNoYXJzZXROYW1lLCBzdHJpbmdOYW1lLCB0ZXN0U3RyaW5nKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oImNhbiBub3QgZW5jb2RlIExGIGZvciAiICsgY2hhcnNldEVuY29kZXIuY2hhcnNldCgpLm5hbWUoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSBmYWxzZTsKLQkJfQotCQlpZiAoIWNoYXJzZXRFbmNvZGVyLmNhbkVuY29kZShDUikpIHsKLQkJCWlmIChERUJVR0NSTEYpIHsKLQkJCQlTdHJpbmcgc3RyaW5nTmFtZSA9ICJDUiI7Ci0JCQkJU3RyaW5nIHRlc3RTdHJpbmcgPSBDUjsKLQkJCQlleHBsb3JlQ29udmVyc2lvbihjaGFyc2V0TmFtZSwgc3RyaW5nTmFtZSwgdGVzdFN0cmluZyk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJjYW4gbm90IGVuY29kZSBDUiBmb3IgIiArIGNoYXJzZXRFbmNvZGVyLmNoYXJzZXQoKS5uYW1lKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCX0KLQkJaWYgKCFjaGFyc2V0RW5jb2Rlci5jYW5FbmNvZGUoQ1JMRikpIHsKLQkJCWlmIChERUJVR0NSTEYpIHsKLQkJCQlTdHJpbmcgc3RyaW5nTmFtZSA9ICJDUkxGIjsKLQkJCQlTdHJpbmcgdGVzdFN0cmluZyA9IENSTEY7Ci0JCQkJZXhwbG9yZUNvbnZlcnNpb24oY2hhcnNldE5hbWUsIHN0cmluZ05hbWUsIHRlc3RTdHJpbmcpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiY2FuIG5vdCBlbmNvZGUgQ1JMRiBmb3IgIiArIGNoYXJzZXRFbmNvZGVyLmNoYXJzZXQoKS5uYW1lKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQotCX0KLQotCXByaXZhdGUgdm9pZCBleHBsb3JlQ29udmVyc2lvbihTdHJpbmcgY2hhcnNldE5hbWUsIFN0cmluZyBzdHJpbmdOYW1lLCBTdHJpbmcgdGVzdFN0cmluZykgdGhyb3dzIEVycm9yIHsKLQkJdHJ5IHsKLQkJCVN0cmluZyBuZXdMRiA9IG5ldyBTdHJpbmcodGVzdFN0cmluZy5nZXRCeXRlcyhjaGFyc2V0TmFtZSkpOwotCQkJU3lzdGVtLm91dC5wcmludCgib2xkICIgKyBzdHJpbmdOYW1lICsgIiAoZGVjKTogIik7Ci0JCQlkdW1wU3RyaW5nKFN5c3RlbS5vdXQsIHRlc3RTdHJpbmcpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50KCJuZXcgIiArIHN0cmluZ05hbWUgKyAiIChkZWMpOiAiKTsKLQkJCWR1bXBTdHJpbmcoU3lzdGVtLm91dCwgbmV3TEYpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCX0KLQkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgewotCQkJLy9zaG91bGQgbmV2ZXIgaGFwcGVuLCBhbHJlYWR5IGNoZWNrZWQKLQkJCXRocm93IG5ldyBFcnJvcihlKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBvdXQKLQkgKiBAcGFyYW0gbGYyCi0JICovCi0JcHJpdmF0ZSB2b2lkIGR1bXBTdHJpbmcoUHJpbnRTdHJlYW0gb3V0LCBTdHJpbmcgbGYyKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbGYyLmxlbmd0aCgpOyBpKyspIHsKLQkJCW91dC5wcmludCgoaW50KSBsZjIuY2hhckF0KGkpICsgIiAiKTsKLQkJfQotCi0JfQotCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgZ2V0TWFpbkRpcmVjdG9yeUJhc2VkT25WTU5hbWVBbmRGaWxlRXh0ZW5zaW9uKCkgewotCQlTdHJpbmcgbWFpbkRpcmVjdG9yeSA9IGdldE1haW5EaXJlY3RvcnlCYXNlZE9uVk1OYW1lKCkgKyAiL3htbCI7Ci0JCXJldHVybiBtYWluRGlyZWN0b3J5OwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGdldEhlYWRlclN0YXJ0KCkgewotCQlyZXR1cm4gIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIiI7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0SGVhZGVyRW5kKCkgewotCQlyZXR1cm4gIlwiPz4iOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvTGlzdENoYXJzZXRzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0xpc3RDaGFyc2V0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWYwZWRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvTGlzdENoYXJzZXRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi0vKioKLSAqIFNtYWxsIGNsYXNzIHRvIGxpc3QgY2hhcnNldCBkZXRlY3RlZCBmb3IgYSBwYXJ0aWN1bGFyIFZNLiBTaW1wbGUgcnVuIGFzIEphdmEKLSAqIEFwcGxpY2F0aW9ucyB0byBnZXQgb3V0cHV0IHRvIHN0YW5kYXJkIG91dC4KLSAqLwotcHVibGljIGNsYXNzIExpc3RDaGFyc2V0cyB7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdGFiID0gIlx0IjsKLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQotCQlMaXN0Q2hhcnNldHMgdGhpc0FwcCA9IG5ldyBMaXN0Q2hhcnNldHMoKTsKLQotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkN1cnJlbnQgTG9jYWxlOiAiICsgTG9jYWxlLmdldERlZmF1bHQoKSk7Ci0KLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0KLQkJU3RyaW5nIG5hbWUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEuZnVsbHZlcnNpb24iKTsKLQkJaWYgKG5hbWUgPT0gbnVsbCkgewotCQkJbmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS52ZXJzaW9uIikgKyAiICgiICsgU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLnJ1bnRpbWUudmVyc2lvbiIpICsgIikiOwotCQl9Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSlJFIHZlcnNpb246ICIgKyBuYW1lKTsKLQotCQlTeXN0ZW0uZ2V0UHJvcGVydGllcygpLmxpc3QoU3lzdGVtLm91dCk7Ci0KLQkJdGhpc0FwcC5saXN0T2ZMb2NhbGVzKCk7Ci0KLQkJU3lzdGVtLm91dC5wcmludGxuKCJmaWxlLmVuY29kaW5nLnBrZzogIiArIFN5c3RlbS5nZXRQcm9wZXJ0eSgiZmlsZS5lbmNvZGluZy5wa2ciKSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiZmlsZS5lbmNvZGluZzogIiArIFN5c3RlbS5nZXRQcm9wZXJ0eSgiZmlsZS5lbmNvZGluZyIpKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oYXJnc1tpXSk7Ci0JCX0KLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCXRoaXNBcHAubGlzdE9mQ2hhcnNldHMoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgbGlzdE9mTG9jYWxlcygpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJBdmFpbGFibGUgTG9jYWxlcyIpOwotCQlMb2NhbGVbXSBsb2NhbGVzID0gTG9jYWxlLmdldEF2YWlsYWJsZUxvY2FsZXMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsb2NhbGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4obG9jYWxlc1tpXSk7Ci0KLQkJfQotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIGxpc3RPZkNoYXJzZXRzKCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkF2YWlsYWJsZSBDaGFyc2V0cyIpOwotCQlpbnQgY291bnQgPSAwOwotCQlNYXAgbWFwID0gQ2hhcnNldC5hdmFpbGFibGVDaGFyc2V0cygpOwotCQlJdGVyYXRvciBpdCA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQljb3VudCsrOwotCQkJLy8gR2V0IGNoYXJzZXQgbmFtZQotCQkJU3RyaW5nIGNoYXJzZXROYW1lID0gKFN0cmluZykgaXQubmV4dCgpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGNvdW50ICsgIi4gIiArICIgQ2hhcnNldG5hbWU6ICIgKyBjaGFyc2V0TmFtZSk7Ci0JCQkvLyBHZXQgY2hhcnNldAotCQkJQ2hhcnNldCBjaGFyc2V0ID0gQ2hhcnNldC5mb3JOYW1lKGNoYXJzZXROYW1lKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbih0YWIgKyAiZGlzcGxheU5hbWU6ICIgKyBjaGFyc2V0LmRpc3BsYXlOYW1lKExvY2FsZS5nZXREZWZhdWx0KCkpKTsKLQkJCVNldCBzZXQgPSBjaGFyc2V0LmFsaWFzZXMoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbih0YWIgKyAiYWxpYXNlczogIiArIHNldCk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9UZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9UZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjM1NjZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuQnl0ZVJlYWRlcjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIFRlc3RzUGx1Z2luIHBsdWdpbjsKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB3b3Jrc3BhY2UgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBJV29ya3NwYWNlIGdldFdvcmtzcGFjZSgpIHsKLQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLCBvciAna2V5JyBpZiBub3QKLQkgKiBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCXJldHVybiBrZXk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBVUkwgZ2V0SW5zdGFsbExvY2F0aW9uKCkgewotCQlVUkwgaW5zdGFsbExvY2F0aW9uID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nIikuZ2V0RW50cnkoIi8iKTsKLQkJVVJMIHJlc29sdmVkTG9jYXRpb24gPSBudWxsOwotCQl0cnkgewotCQkJcmVzb2x2ZWRMb2NhdGlvbiA9IEZpbGVMb2NhdG9yLnJlc29sdmUoaW5zdGFsbExvY2F0aW9uKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gaW1wb3NzaWJsZQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCXJldHVybiByZXNvbHZlZExvY2F0aW9uOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBnZXRUZXN0RmlsZShTdHJpbmcgZmlsZXBhdGgpIHsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIGZpbGVwYXRoOwotCQlGaWxlIHJlc3VsdCA9IG5ldyBGaWxlKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIExpc3QgZ2V0QWxsVGVzdEZpbGVzKFN0cmluZyB0b3BEaXJOYW1lKSB7Ci0JCUxpc3QgcmVzdWx0ID0gbnVsbDsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIHRvcERpck5hbWU7Ci0JCUZpbGUgdG9wRGlyID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlpZiAoIXRvcERpci5pc0RpcmVjdG9yeSgpKSB7Ci0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKHRvcERpck5hbWUgKyAiIGlzIG5vdCBhIGRpcmVjdG9yeSIpOwotCQl9Ci0JCXJlc3VsdCA9IGdldEZpbGVzSW5EaXIodG9wRGlyKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdG9wRGlyCi0JICogQHJldHVybgotCSAqLwotCXByaXZhdGUgc3RhdGljIExpc3QgZ2V0RmlsZXNJbkRpcihGaWxlIHRvcERpcikgewotCQlMaXN0IGZpbGVzID0gbmV3IEFycmF5TGlzdCgpOwotCQlGaWxlW10gdG9wRmlsZXMgPSB0b3BEaXIubGlzdEZpbGVzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdG9wRmlsZXMubGVuZ3RoOyBpKyspIHsKLQkJCUZpbGUgZmlsZSA9IHRvcEZpbGVzW2ldOwotCQkJaWYgKGZpbGUuaXNGaWxlKCkpIHsKLQkJCQlmaWxlcy5hZGQoZmlsZSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChmaWxlLmlzRGlyZWN0b3J5KCkgJiYgIWZpbGUuZ2V0TmFtZSgpLmVuZHNXaXRoKCJDVlMiKSkgewotCQkJCUxpc3QgaW5uZXJGaWxlcyA9IGdldEZpbGVzSW5EaXIoZmlsZSk7Ci0JCQkJZmlsZXMuYWRkQWxsKGlubmVyRmlsZXMpOwotCQkJfQotCQl9Ci0JCXJldHVybiBmaWxlczsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFJlYWRlciBnZXRUZXN0UmVhZGVyKFN0cmluZyBmaWxlcGF0aCkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJUmVhZGVyIHJlc3VsdCA9IG5ldyBGaWxlUmVhZGVyKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFJlYWRlciBnZXRCeXRlUmVhZGVyKFN0cmluZyBmaWxlcGF0aCkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJUmVhZGVyIHJlc3VsdCA9IG5ldyBCeXRlUmVhZGVyKG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG5ldyBGaWxlSW5wdXRTdHJlYW0obG9jYXRpb24pKSk7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9wcmVmL1Rlc3RQcmVmZXJlbmNlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9wcmVmL1Rlc3RQcmVmZXJlbmNlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmRjNWJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJlZi9UZXN0UHJlZmVyZW5jZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucHJlZjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5OwotaW1wb3J0IG9yZy5vc2dpLnNlcnZpY2UucHJlZnMuQmFja2luZ1N0b3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5vc2dpLnNlcnZpY2UucHJlZnMuUHJlZmVyZW5jZXM7Ci0KLQotcHVibGljIGNsYXNzIFRlc3RQcmVmZXJlbmNlcyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKgotCSAqIEBwYXJhbSBwcmVmZXJlbmNlcwotCSAqIEB0aHJvd3MgQmFja2luZ1N0b3JlRXhjZXB0aW9uCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcmludENoaWxkcmVuKFByZWZlcmVuY2VzIHByZWZlcmVuY2VzKSB0aHJvd3MgQmFja2luZ1N0b3JlRXhjZXB0aW9uIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJcdCIgKyBwcmVmZXJlbmNlcy5hYnNvbHV0ZVBhdGgoKSk7Ci0JCVN0cmluZyBbXSBrZXlzID0gcHJlZmVyZW5jZXMua2V5cygpOwotCQlwcmludEtleXMoa2V5cyk7Ci0JCVN0cmluZ1tdIGNoaWxkcmVuID0gcHJlZmVyZW5jZXMuY2hpbGRyZW5OYW1lcygpOwotCQlwcmludENoaWxkcmVuKGNoaWxkcmVuKTsgCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLQkJCVN0cmluZyBjaGlsZCA9IGNoaWxkcmVuW2ldOwotCQkJUHJlZmVyZW5jZXMgc3ViUHJlZmVyZW5jZXMgPSBwcmVmZXJlbmNlcy5ub2RlKGNoaWxkKTsKLQkJCVN0cmluZyBbXSBzdWJrZXlzID0gc3ViUHJlZmVyZW5jZXMua2V5cygpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oY2hpbGQpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlwcmludEtleXMoc3Via2V5cyk7Ci0JCX0KLQl9Ci0Jc3RhdGljIHByaXZhdGUgdm9pZCBwcmludENoaWxkcmVuKFN0cmluZ1tdIGNoaWxkcmVuKSB7Ci0JCXByaW50U3RyaW5nQXJyYXkoY2hpbGRyZW4sICJcdCIpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBrZXlzCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcmludEtleXMoU3RyaW5nW10ga2V5cykgewotCQlwcmludFN0cmluZ0FycmF5KGtleXMsICJcdFx0Iik7Ci0JCQotCX0KLQotCXN0YXRpYyBwcml2YXRlIHZvaWQgcHJpbnRTdHJpbmdBcnJheShTdHJpbmdbXSBhcnJheSwgU3RyaW5nIHRhYkNoYXJzKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKLQkJCVN0cmluZyBzdHJpbmcgPSBhcnJheVtpXTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbih0YWJDaGFycyArIHN0cmluZyk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gREVCVUcgPSB0cnVlOwotCi0JcHJpdmF0ZSB2b2lkIGRpc3BsYXlQcmVmZXJlbmNlVHJlZSgpIHsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBlY2xpcHNlUHJlZmVyZW5jZXMgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKS5nZXRSb290Tm9kZSgpOwotCi0KLQkJdHJ5IHsKLQkJCVN0cmluZ1tdIGNoaWxkcmVuID0gZWNsaXBzZVByZWZlcmVuY2VzLmNoaWxkcmVuTmFtZXMoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihlY2xpcHNlUHJlZmVyZW5jZXMuYWJzb2x1dGVQYXRoKCkpOwotCQkJcHJpbnRDaGlsZHJlbihjaGlsZHJlbik7Ci0KLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLQkJCQlTdHJpbmcgc3RyaW5nID0gY2hpbGRyZW5baV07Ci0JCQkJUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBlY2xpcHNlUHJlZmVyZW5jZXMubm9kZShzdHJpbmcpOwotCQkJCXByaW50Q2hpbGRyZW4ocHJlZmVyZW5jZXMpOwotCi0KLQkJCX0KLQotCQl9Ci0JCWNhdGNoIChCYWNraW5nU3RvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFjY2VzcygpIHsKLQkJaWYgKERFQlVHKSB7IAotCQkJZGlzcGxheVByZWZlcmVuY2VUcmVlKCk7Ci0JCX0KLQkJLy8gYWx3YXlzIG9rIGlmIG5vIGV4Y2VwdGlvbnMgdGhyb3duCi0JCWFzc2VydFRydWUodHJ1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbnRlbnRCYXNlZFByZWZIVE1MKCkgewotCQlJQ29udGVudFR5cGUgY29udGVudFR5cGUgPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKS5maW5kQ29udGVudFR5cGVGb3IoInRlc3QuaHRtbCIpOwotCQlQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IENvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5LmdldFByZWZlcmVuY2VzKGNvbnRlbnRUeXBlKTsKLQkJYXNzZXJ0Tm90TnVsbChwcmVmZXJlbmNlcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbnRlbnRCYXNlZFByZWZYTUwoKSB7Ci0JCUlDb250ZW50VHlwZSBjb250ZW50VHlwZSA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpLmZpbmRDb250ZW50VHlwZUZvcigidGVzdC54bWwiKTsKLQkJUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBDb250ZW50QmFzZWRQcmVmZXJlbmNlR2F0ZXdheS5nZXRQcmVmZXJlbmNlcyhjb250ZW50VHlwZSk7Ci0JCWFzc2VydE5vdE51bGwocHJlZmVyZW5jZXMpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3Byb3BlcnRpZXMvVGVzdENvbW1vbk5hbWVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3Byb3BlcnRpZXMvVGVzdENvbW1vbk5hbWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5MWZmMGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9wcm9wZXJ0aWVzL1Rlc3RDb21tb25OYW1lcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnByb3BlcnRpZXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29tbW9uQ2hhcnNldE5hbWVzOwotCi1wdWJsaWMgY2xhc3MgVGVzdENvbW1vbk5hbWVzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0JcHVibGljIHZvaWQgdGVzdENvbW1vbk5hbWVzKCkgewotCQlTdHJpbmdbXSBuYW1lcyA9IENvbW1vbkNoYXJzZXROYW1lcy5nZXRDb21tb25DaGFyc2V0TmFtZXMoKTsKLQkJYXNzZXJ0VHJ1ZSgiY29tbW9uIGNoYXJzZXQgbmFtZXMgY291bGQgbm90IGJlIGxvYWRlZCIsIG5hbWVzICE9IG51bGwgJiYgbmFtZXMubGVuZ3RoID4gMCk7Ci0JCWlmIChERUJVRykgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykgewotCQkJCVN0cmluZyBuYW1lID0gbmFtZXNbaV07Ci0JCQkJU3RyaW5nIGRpc3BsYXlOYW1lID0gQ29tbW9uQ2hhcnNldE5hbWVzLmdldERpc3BsYXlTdHJpbmcobmFtZSk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCBuYW1lICsgIiAgICAiICsgZGlzcGxheU5hbWUpOwotCQkJfQotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIGRvVGVzdERlZmF1bHRJYW5hTmFtZXMoU3RyaW5nIHN0cmluZ1RvQ2hlY2ssIFN0cmluZyBkZWZhdWx0TmFtZSwgU3RyaW5nIGV4cGVjdGVkKSB7Ci0JCVN0cmluZyBhY3R1YWwgPSBDb21tb25DaGFyc2V0TmFtZXMuZ2V0UHJlZmVycmVkRGVmYXVsdElhbmFOYW1lKHN0cmluZ1RvQ2hlY2ssIGRlZmF1bHROYW1lKTsKLQkJYXNzZXJ0RXF1YWxzKCJkZWZhdWx0IElBTkEgbmFtZSB0ZXN0IGZhaWxlZCBmb3IgIiArIHN0cmluZ1RvQ2hlY2ssIGV4cGVjdGVkLCBhY3R1YWwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBU0NJSSgpIHsKLQkJZG9UZXN0RGVmYXVsdElhbmFOYW1lcygiQVNDSUkiLCAiVVRGLTgiLCAiVVMtQVNDSUkiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENwMTI1MigpIHsKLQkJZG9UZXN0RGVmYXVsdElhbmFOYW1lcygiQ3AxMjUyIiwgIlVURi04IiwgIklTTy04ODU5LTEiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdE1TOTUwKCkgewotCQlkb1Rlc3REZWZhdWx0SWFuYU5hbWVzKCJNUzk1MCIsICJVVEYtOCIsICJCSUc1Iik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDcDEyNTYoKSB7Ci0JCWRvVGVzdERlZmF1bHRJYW5hTmFtZXMoIkNwMTI1NiIsICJVVEYtOCIsICJ3aW5kb3dzLTEyNTYiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdE1TOTQ5KCkgewotCQlkb1Rlc3REZWZhdWx0SWFuYU5hbWVzKCJNUzk0OSIsICJVVEYtOCIsICJFVUMtS1IiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEVVQ19KUCgpIHsKLQkJZG9UZXN0RGVmYXVsdElhbmFOYW1lcygiRVVDLUpQIiwgIlVURi04IiwgIkVVQy1KUCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VG90YWxseUZha2UoKSB7Ci0JCWRvVGVzdERlZmF1bHRJYW5hTmFtZXMoInRvdGFsbHlGYWtlIiwgIlVURi04IiwgIlVURi04Iik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTeXN0ZW1FbmNvZGluZygpIHsKLQkJU3RyaW5nIHN5c3RlbUVuYyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiZmlsZS5lbmNvZGluZyIpOwotCQlpZiAoc3lzdGVtRW5jICE9IG51bGwpIHsKLQkJCVN0cmluZyBhY3R1YWwgPSBDb21tb25DaGFyc2V0TmFtZXMuZ2V0UHJlZmVycmVkRGVmYXVsdElhbmFOYW1lKHN5c3RlbUVuYywgIlVURi04Iik7Ci0JCQlhc3NlcnROb3ROdWxsKCJkZWZhdWx0IElBTkEgbmFtZSB0ZXN0IGZhaWxlZCBmb3Igc3lzdGVtIGVuY29kaW5nICIgKyBzeXN0ZW1FbmMsIGFjdHVhbCk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9wcm9wZXJ0aWVzL1Rlc3REaXNwbGF5TmFtZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJvcGVydGllcy9UZXN0RGlzcGxheU5hbWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMTQ1YzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9wcm9wZXJ0aWVzL1Rlc3REaXNwbGF5TmFtZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5wcm9wZXJ0aWVzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbW1vbkNoYXJzZXROYW1lczsKLQotCi1wdWJsaWMgY2xhc3MgVGVzdERpc3BsYXlOYW1lcyBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tbW9uTmFtZSgpIHsKLQkJU3RyaW5nIGRpc3BsYXlOYW1lID0gQ29tbW9uQ2hhcnNldE5hbWVzLmdldERpc3BsYXlTdHJpbmcoIklTTy04ODU5LTIiKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZGlzcGxheSBuYW1lIGZvciBjaGFyc2V0IGNvdWxkIG5vdCBiZSByZXRyaWV2ZWQiLCBkaXNwbGF5TmFtZSk7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGRpc3BsYXlOYW1lKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3Byb3BlcnRpZXMvVGVzdE92ZXJyaWRlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9wcm9wZXJ0aWVzL1Rlc3RPdmVycmlkZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEyZjZkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3Byb3BlcnRpZXMvVGVzdE92ZXJyaWRlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnByb3BlcnRpZXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29kZWRJTzsKLQotcHVibGljIGNsYXNzIFRlc3RPdmVycmlkZXMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwdWJsaWMgU3RyaW5nIGRvVGVzdE92ZXJyaWRlKFN0cmluZyBzdHJpbmdUb0NoZWNrKSB7Ci0KLQkJU3RyaW5nIGNoYXJzZXQgPSBDb2RlZElPLmdldEFwcHJvcHJpYXRlSmF2YUNoYXJzZXQoc3RyaW5nVG9DaGVjayk7Ci0JCWFzc2VydE5vdE51bGwoIm92ZXJyaWRlIHRlc3QgZmFpbGVkIGZvciAiICsgc3RyaW5nVG9DaGVjaywgY2hhcnNldCk7Ci0JCXJldHVybiBjaGFyc2V0OwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJU084ODU5OEkoKSB7Ci0JCVN0cmluZyByZXN1bHQgPSBkb1Rlc3RPdmVycmlkZSgiSVNPLTg4NTktOC1JIik7Ci0JCWFzc2VydEVxdWFscygibWFwcGluZyBvdmVycmlkZSBub3QgY29ycmVjdCBmb3IgSVNPLTg4NTktOC1JIiwgIklTTy04ODU5LTgiLCByZXN1bHQpOwotCQlpZiAoREVCVUcpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihyZXN1bHQpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhTSklTKCkgewotCQlTdHJpbmcgcmVzdWx0ID0gZG9UZXN0T3ZlcnJpZGUoIlgtU0pJUyIpOwotCQlhc3NlcnRFcXVhbHMoIm1hcHBpbmcgb3ZlcnJpZGUgbm90IGNvcnJlY3QgZm9yIFgtU0pJUyIsICJTaGlmdF9KSVMiLCByZXN1bHQpOwotCQlpZiAoREVCVUcpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihyZXN1bHQpOwotCQl9Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb2RlZFJlYWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb2RlZFJlYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzZhZmIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29kZWRSZWFkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucmVhZDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvZGVkUmVhZGVyQ3JlYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuSUNvbnRlbnREZXNjcmlwdGlvbkV4dGVuZGVkOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Ob25Db250ZW50QmFzZWRFbmNvZGluZ1J1bGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcuVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci0KLQotcHVibGljIGNsYXNzIFRlc3RDb2RlZFJlYWRlciBleHRlbmRzIFRlc3RDYXNlIHsKLQkvLyBwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlRGlyID0gImh0bWwvIjsKLQkvLyBwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlUm9vdCA9Ci0JLy8gIi9idWlsZHMvV29ya3NwYWNlcy9IZWFkV29ya3NwYWNlL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvIjsKLQkvLyBwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlTG9jYXRpb24gPSBmaWxlUm9vdCArIGZpbGVEaXI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfVEVTVF9ERVRBSUwgPSBmYWxzZTsKLQkvLyBuZWVkcyB0byBiZSBzdGF0aWMsIHNpbmNlIEpVbml0IGNyZWF0ZXMgZGlmZmVyZW5jZSBpbnN0YW5jZXMgZm9yIGVhY2gKLQkvLyB0ZXN0Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmVGVzdFByb2plY3RJbml0aWFsaXplZDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9QUk9KRUNUX05BTUUgPSAib3JnLmVjbGlwc2UuZW5jb2RpbmcucmVzb3VyY2UubmV3dGVzdHMiOwotCXN0YXRpYyBJUHJvamVjdCBmVGVzdFByb2plY3Q7Ci0JcHJvdGVjdGVkIHN0YXRpYyBpbnQgblNldHVwcyA9IDA7Ci0KLQlwcml2YXRlIFN0cmluZyBtYXNzYWdlQ2hhcnNldChTdHJpbmcgZm91bmRDaGFyc2V0KSB7Ci0JCVN0cmluZyByZXN1bHQgPSBmb3VuZENoYXJzZXQ7Ci0JCWlmICgiVVRGLTE2TEUiLmVxdWFscyhmb3VuZENoYXJzZXQpKSB7Ci0JCQlyZXN1bHQgPSAiVVRGLTE2IjsKLQkJfSBlbHNlIGlmICgiWC1Vbmljb2RlTGl0dGxlIi5lcXVhbHMoZm91bmRDaGFyc2V0KSkgewotCQkJcmVzdWx0ID0gIlVURi0xNiI7Ci0JCX0gZWxzZSBpZiAoIlgtVW5pY29kZUJpZyIuZXF1YWxzKGZvdW5kQ2hhcnNldCkpIHsKLQkJCXJlc3VsdCA9ICJVVEYtMTZCRSI7Ci0JCX0KLQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIAotCSAqLwotCXB1YmxpYyBUZXN0Q29kZWRSZWFkZXIoKSB7Ci0JCXN1cGVyKCk7Ci0JCS8vIFN5c3RlbS5vdXQucHJpbnRsbihjdXJyZW50UGxhdGZvcm1DaGFyc2V0KTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JCS8vIHRyeSB7Ci0JCS8vIG5ldyBUZXN0Q29kZWRSZWFkZXIoKS5kb0FsbEZpbGVzKCk7Ci0JCS8vIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkvLyBlLnByaW50U3RhY2tUcmFjZSgpOwotCQkvLyB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCS8vIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCS8vIH0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGNyZWF0ZVByb2plY3QoSVByb2plY3QgcHJvamVjdCwgSVBhdGggbG9jYXRpb25QYXRoLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKG1vbml0b3IgPT0gbnVsbCkgewotCQkJbW9uaXRvciA9IG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCX0KLQkJbW9uaXRvci5iZWdpblRhc2soImNyZWF0aW5nIHRlc3QgcHJvamVjdCIsIDEwKTsKLQkJLy8gY3JlYXRlIHRoZSBwcm9qZWN0Ci0JCXRyeSB7Ci0JCQlpZiAoIXByb2plY3QuZXhpc3RzKCkpIHsKLQkJCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2MgPSBwcm9qZWN0LmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qZWN0LmdldE5hbWUoKSk7Ci0JCQkJaWYgKFBsYXRmb3JtLmdldExvY2F0aW9uKCkuZXF1YWxzKGxvY2F0aW9uUGF0aCkpIHsKLQkJCQkJbG9jYXRpb25QYXRoID0gbnVsbDsKLQkJCQl9Ci0JCQkJZGVzYy5zZXRMb2NhdGlvbihsb2NhdGlvblBhdGgpOwotCQkJCXByb2plY3QuY3JlYXRlKGRlc2MsIG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQkJaWYgKCFwcm9qZWN0LmlzT3BlbigpKSB7Ci0JCQkJcHJvamVjdC5vcGVuKG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQl9IGZpbmFsbHkgewotCQkJaWYgKG1vbml0b3IgIT0gbnVsbCkgewotCQkJCW1vbml0b3IuZG9uZSgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBnZXRBbmRDcmVhdGVQcm9qZWN0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkvLyBUZXN0c1BsdWdpbiB0ZXN0c1BsdWdpbiA9IChUZXN0c1BsdWdpbikKLQkJLy8gUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nIik7Ci0JCUlXb3Jrc3BhY2Ugd29ya3NwYWNlID0gVGVzdHNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JCUlXb3Jrc3BhY2VSb290IHJvb3QgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpOwotCQlmVGVzdFByb2plY3QgPSByb290LmdldFByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkvLyB0aGlzIGZvcm0gY3JlYXRlcyBwcm9qZWN0IGFzICJsaW5rZWQiIGJhY2sgdG8gJ2ZpbGVSb290JwotCQkvLyBjcmVhdGVQcm9qZWN0KHRlc3RQcm9qZWN0LCBuZXcgUGF0aChmaWxlUm9vdCksIG51bGwpOwotCQljcmVhdGVQcm9qZWN0KGZUZXN0UHJvamVjdCwgbnVsbCwgbnVsbCk7Ci0JCWZUZXN0UHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZShmVGVzdFByb2plY3QuZXhpc3RzKCkpOwotCQkvLyBJQ29udGFpbmVyIGRvdGVzdEZpbGVzID0gdGVzdFByb2plY3QuZ2V0Rm9sZGVyKCJkb3Rlc3RGaWxlcyIpOwotCQkvLyBhc3NlcnRUcnVlKGRvdGVzdEZpbGVzLmV4aXN0cygpKTsKLQkJLy8gSVJlc291cmNlW10gYWxsRm9sZGVycyA9IGRvdGVzdEZpbGVzLm1lbWJlcnMoKTsKLQkJLy8gYXNzZXJ0Tm90TnVsbChhbGxGb2xkZXJzKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZ0J1ZmZlciByZWFkSW5wdXRTdHJlYW0oUmVhZGVyIHJlYWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJaW50IG51bVJlYWQgPSAwOwotCQljaGFyIHRCdWZmW10gPSBuZXcgY2hhcls0MDAwXTsKLQkJd2hpbGUgKChudW1SZWFkID0gcmVhZGVyLnJlYWQodEJ1ZmYsIDAsIHRCdWZmLmxlbmd0aCkpICE9IC0xKSB7Ci0JCQlidWZmZXIuYXBwZW5kKHRCdWZmLCAwLCBudW1SZWFkKTsKLQkJfQotCQlyZXR1cm4gYnVmZmVyOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCW5TZXR1cHMrKzsKLQkJaWYgKCFmVGVzdFByb2plY3RJbml0aWFsaXplZCkgewotCQkJZ2V0QW5kQ3JlYXRlUHJvamVjdCgpOwotCQkJLy8gdW56aXAgZmlsZXMgdG8gdGhlIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQkJU3RyaW5nIGRlc3RpbmF0aW9uUHJvamVjdFN0cmluZyA9IGZUZXN0UHJvamVjdC5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKTsKLQkJCVN0cmluZyBkZXN0aW5hdGlvbkZvbGRlciA9IGRlc3RpbmF0aW9uUHJvamVjdFN0cmluZyArICIvIjsKLQkJCS8vIHRoaXMgemlwIGZpbGUgaXMgc2l0dGluZyBpbiB0aGUgInJvb3QiIG9mIHRlc3QgcGx1Z2luCi0JCQlGaWxlIHppcEZpbGUgPSBUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZSgidGVzdGZpbGVzLnppcCIpOwotCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQlwcm9qVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBkZXN0aW5hdGlvbkZvbGRlcik7Ci0JCQlwcm9qVXRpbC5pbml0SmF2YVByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJblNldHVwcy0tOwotCQlpZiAoblNldHVwcyA9PSAwKSB7Ci0JCQlpZiAoIURFQlVHKSB7Ci0JCQkJLy8gRGlzcGxheSBkaXNwbGF5ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCk7Ci0JCQkJLy8gZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotCQkJCS8vIHB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkvLyBQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCQkvLyBJUHJvamVjdCBwcm9qID0gZlRlc3RQcm9qZWN0OwotCQkJCS8vIGZUZXN0UHJvamVjdCA9IG51bGw7Ci0JCQkJLy8gdHJ5IHsKLQkJCQkvLyBwcm9qVXRpbC5kZWxldGVQcm9qZWN0KHByb2opOwotCQkJCS8vIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkvLyB9Ci0JCQkJLy8gfQotCQkJCS8vIH0pOwotCQkJfQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZG9UZXN0KFN0cmluZyBleHBlY3RlZEphdmFDaGFyc2V0LCBTdHJpbmcgZXhwZWN0ZWREZXRlY3RlZENoYXJzZXQsIFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWRFeGNlcHRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVJlYWRlciByZWFkZXIgPSBudWxsOwotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoZmlsZSk7Ci0JCWV4cGVjdGVkSmF2YUNoYXJzZXQgPSBtYXNzYWdlQ2hhcnNldChleHBlY3RlZEphdmFDaGFyc2V0KTsKLQkJZXhwZWN0ZWREZXRlY3RlZENoYXJzZXQgPSBtYXNzYWdlQ2hhcnNldChleHBlY3RlZERldGVjdGVkQ2hhcnNldCk7Ci0KLQkJLy8gbm90ZTogZXZlbnR1YWxseSwgSSBzaG91bGQgY2hhbmdlIGNhbGxpbmcgbWV0aG9kcyBzbyBpZiBkZXRlY3RlZAotCQkvLyBjaGFyc2V0IGlzIGV4cGVjdGVkIHRvIGJlIHNhbWUKLQkJLy8gYXMgdGhlICd1c2VkJyBqYXZhIGNoYXJzZXQsIHRoZW4gc2ltcGx5IHBhc3MgaW4gbnVsbCwgYnV0IGZvciBub3csCi0JCS8vIHdlJ2xsICJmb3JjZSIgdGhhdCBoZXJlIGluIHRoaXMKLQkJLy8gbWV0aG9kLgotCQlpZiAoZXhwZWN0ZWRKYXZhQ2hhcnNldC5lcXVhbHMoZXhwZWN0ZWREZXRlY3RlZENoYXJzZXQpKSB7Ci0JCQlleHBlY3RlZERldGVjdGVkQ2hhcnNldCA9IG51bGw7Ci0JCX0KLQotCQl0cnkgewotCQkJcmVhZGVyID0gZG9Db3JlVGVzdChleHBlY3RlZEphdmFDaGFyc2V0LCBleHBlY3RlZERldGVjdGVkQ2hhcnNldCwgZmlsZSk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlpZiAoZXhwZWN0ZWRFeGNlcHRpb24gIT0gbnVsbCkgewotCQkJCWJvb2xlYW4gcmVzdWx0ID0gZXhwZWN0ZWRFeGNlcHRpb24uaXNJbnN0YW5jZShlKTsKLQkJCQlhc3NlcnRUcnVlKCJVbmV4cGVjdGVkIEV4Y2VwdGlvbjogIiArIGdldEdvb2RGdWxsTXNnKGUpLCByZXN1bHQpOwotCQkJfSBlbHNlIHsKLQkJCQkvLyB3aWxsIGFsd2F5IGFzc2VydCBpZiBnZXRzIHRvIGhlcmUKLQkJCQlTdHJpbmcgbXNnID0gZ2V0R29vZEZ1bGxNc2coZSk7Ci0JCQkJYXNzZXJ0TnVsbCgiVW5leHBlY3RlZCBFeGNlcHRpb246ICIgKyBtc2csIGUpOwotCQkJfQotCQl9IGZpbmFsbHkgewotCQkJaWYgKHJlYWRlciAhPSBudWxsKSB7Ci0JCQkJcmVhZGVyLmNsb3NlKCk7Ci0JCQl9Ci0KLQkJfQotCX0KLQotCXByb3RlY3RlZCBSZWFkZXIgZG9Db3JlVGVzdChTdHJpbmcgZXhwZWN0ZWRKYXZhQ2hhcnNldCwgU3RyaW5nIGV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0LCBJRmlsZSBmaWxlKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlSZWFkZXIgcmVhZGVyOwotCQkvLyBjcmVhdGUgdGhlc2UgZmlyc3QsIHRvIHRlc3QgZXhjZXB0aW9uIGJlaW5nIHRocm93biBjb3JyZWN0bHkKLQkJQ29kZWRSZWFkZXJDcmVhdG9yIGNvZGVkUmVhZGVyQ3JlYXRvciA9IG5ldyBDb2RlZFJlYWRlckNyZWF0b3IoKTsKLQkJY29kZWRSZWFkZXJDcmVhdG9yLnNldChmaWxlKTsKLQkJcmVhZGVyID0gY29kZWRSZWFkZXJDcmVhdG9yLmdldENvZGVkUmVhZGVyKCk7Ci0KLQkJU3RyaW5nIGphdmFDaGFyc2V0TmFtZSA9IGZpbGUuZ2V0Q2hhcnNldCgpOwotCQlJQ29udGVudERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gZmlsZS5nZXRDb250ZW50RGVzY3JpcHRpb24oKTsKLQkJamF2YUNoYXJzZXROYW1lID0gbWFzc2FnZUNoYXJzZXQoamF2YUNoYXJzZXROYW1lKTsKLQkJLy8gY29kZWRSZWFkZXJDcmVhdG9yLmdldEVuY29kaW5nTWVtZW50bygpLmdldEphdmFDaGFyc2V0TmFtZSgpOwotCQlpZiAoZXhwZWN0ZWRKYXZhQ2hhcnNldC5lcXVhbHMoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIpKSB7Ci0JCQlTdHJpbmcgcGxhdGZvcm1EZWZhdWx0ID0gTm9uQ29udGVudEJhc2VkRW5jb2RpbmdSdWxlcy51c2VEZWZhdWx0TmFtZVJ1bGVzKG51bGwpOwotCQkJYXNzZXJ0VHJ1ZShqYXZhQ2hhcnNldE5hbWUuZXF1YWxzKHBsYXRmb3JtRGVmYXVsdCkpOwotCQl9IGVsc2UgewotCQkJYm9vbGVhbiBhc0V4cGVjdGVkID0gamF2YUNoYXJzZXROYW1lLmVxdWFscyhleHBlY3RlZEphdmFDaGFyc2V0KTsKLQkJCWFzc2VydFRydWUoamF2YUNoYXJzZXROYW1lICsgIiBkaWQgbm90IGVxdWFsIHRoZSBleHBlY3RlZCAiICsgZXhwZWN0ZWRKYXZhQ2hhcnNldCArICIgKHRoaXMgaXMgYSBWTSBkZXBlbmRlbnQgdGVzdCkiLCBhc0V4cGVjdGVkKTsKLQkJfQotCQlTdHJpbmcgamF2YUNoYXJzZXROYW1lUHJvcGVydHkgPSAoU3RyaW5nKSBkZXNjcmlwdGlvbi5nZXRQcm9wZXJ0eShJQ29udGVudERlc2NyaXB0aW9uLkNIQVJTRVQpOwotCQlTdHJpbmcgZGV0ZWN0ZWRDaGFyc2V0TmFtZVByb3BlcnR5ID0gZ2V0RGV0ZWN0ZWRDaGFyc2V0TmFtZShkZXNjcmlwdGlvbik7Ci0JCWRldGVjdGVkQ2hhcnNldE5hbWVQcm9wZXJ0eSA9IG1hc3NhZ2VDaGFyc2V0KGRldGVjdGVkQ2hhcnNldE5hbWVQcm9wZXJ0eSk7Ci0JCS8vIGlmIChkZXRlY3RlZENoYXJzZXROYW1lID09IG51bGwpIHsKLQkJLy8gZGV0ZWN0ZWRDaGFyc2V0TmFtZSA9IGphdmFDaGFyc2V0TmFtZVByb3BlcnR5OwotCQkvLyB9Ci0JCWlmICghZXhwZWN0ZWRKYXZhQ2hhcnNldC5lcXVhbHMoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIpKSB7Ci0JCQlib29sZWFuIGV4cGVjZWRSZXN1bHQgPSBleHBlY3RlZEphdmFDaGFyc2V0LmVxdWFscyhqYXZhQ2hhcnNldE5hbWVQcm9wZXJ0eSk7Ci0JCQlhc3NlcnRUcnVlKCJqYXZhIGJhc2VkIGNoYXJzZXQgbmFtZSB3YXMgbm90IGFzIGV4cGVjdGVkIiwgZXhwZWNlZFJlc3VsdCk7Ci0JCX0gZWxzZSB7Ci0JCQlTdHJpbmcgZXhwZWN0ZWREZWZhdWx0ID0gTm9uQ29udGVudEJhc2VkRW5jb2RpbmdSdWxlcy51c2VEZWZhdWx0TmFtZVJ1bGVzKG51bGwpOwotCQkJYm9vbGVhbiBFeHBlY3RlZFJlc3VsdCA9IGV4cGVjdGVkRGVmYXVsdC5lcXVhbHMoamF2YUNoYXJzZXROYW1lUHJvcGVydHkpOwotCQkJYXNzZXJ0VHJ1ZSgiamF2YSBiYXNlZCBjaGFyc2V0IG5hbWUgbm90IGFzIGV4cGVjdGVkIHdoZW4gcGxhdGZvcm0gZGVmYXVsdCBleHBlY3RlZCIsIEV4cGVjdGVkUmVzdWx0KTsKLQkJfQotCi0JCWlmIChleHBlY3RlZERldGVjdGVkQ2hhcnNldCAhPSBudWxsKSB7Ci0JCQlib29sZWFuIGV4cGVjdGVkUmVzdWx0ID0gZXhwZWN0ZWREZXRlY3RlZENoYXJzZXQuZXF1YWxzKGRldGVjdGVkQ2hhcnNldE5hbWVQcm9wZXJ0eSk7Ci0JCQlhc3NlcnRUcnVlKCJkZXRlY3RlZCBjaGFyc2V0IG5hbWUgd2FzIG5vdCBhcyBleHBlY3RlZCIsIGV4cGVjdGVkUmVzdWx0KTsKLQkJfQotCQkvLyB0ZXN0IGlmIGNhbiByZWFkL3dyaXRlIGZpbGUKLQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IHJlYWRJbnB1dFN0cmVhbShyZWFkZXIpOwotCQlpZiAoREVCVUdfVEVTVF9ERVRBSUwpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnQoYnVmZmVyKTsKLQkJfQotCQlyZXR1cm4gcmVhZGVyOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGp1c3QgdG8gaGVscCBoYW5kbGUgdHJhbnNpdGlvbiBmcm9tIHVzaW5nCi0JICogRW5jb2RpbmdNZW10ZW50byB0byBub3QgdXNpbmcgZW5jb2RpbmdNZW1lbnRvLgotCSAqLwotCXByaXZhdGUgU3RyaW5nIGdldERldGVjdGVkQ2hhcnNldE5hbWUoSUNvbnRlbnREZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewotCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQkJcmVzdWx0ID0gKFN0cmluZykgZGVzY3JpcHRpb24uZ2V0UHJvcGVydHkoSUNvbnRlbnREZXNjcmlwdGlvbkV4dGVuZGVkLkRFVEVDVEVEX0NIQVJTRVQpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBlCi0JICogQHJldHVybgotCSAqLwotCXByaXZhdGUgU3RyaW5nIGdldEdvb2RGdWxsTXNnKEV4Y2VwdGlvbiBlKSB7Ci0JCVN0cmluZyBtc2cgPSBlLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIjogIiArIGUuZ2V0TWVzc2FnZSgpOwotCQlyZXR1cm4gbXNnOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IiwgbnVsbCwgInRlc3RmaWxlcy9jc3MvZW1wdHlGaWxlLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiRVVDLUpQIiwgIkVVQy1KUCIsICJ0ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfZXVjanAuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tMjAyMi1KUCIsICJJU08tMjAyMi1KUCIsICJ0ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfamlzLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgIlNISUZUX0pJUyIsICJ0ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIsIG51bGwsICJ0ZXN0ZmlsZXMvY3NzL25vRW5jb2RpbmcuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS02IiwgIklTTy04ODU5LTYiLCAidGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZC5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTYiLCAiSVNPLTg4NTktNiIsICJ0ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktNiIsICJJU08tODg1OS02IiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcyIsIG51bGwpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IiwgbnVsbCwgInRlc3RmaWxlcy9odG1sL0VtcHR5RmlsZS5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL2h0bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IiwgbnVsbCwgInRlc3RmaWxlcy9odG1sL0xhcmdlTm9FbmNvZGluZy5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJpc28tODg1OS0xIiwgInRlc3RmaWxlcy9odG1sL0xhcmdlTm9uRGVmYXVsdC5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktNiIsICJJU08tODg1OS02IiwgInRlc3RmaWxlcy9odG1sL011bHRpTm9uRGVmYXVsdC5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IiwgbnVsbCwgInRlc3RmaWxlcy9odG1sL05vRW5jb2RpbmcuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy9odG1sL25vcXVvdGVzLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMvaHRtbC9Ob3JtYWxOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC9FbXB0eUZpbGUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktOCIsIG51bGwsICJ0ZXN0ZmlsZXMvanNwL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgibnVsbCIsICJudWxsIiwgInRlc3RmaWxlcy9qc3AvaW5WYWxpZEVuY29kaW5nVmFsdWUuanNwIiwgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmV4Y2VwdGlvbnMuVW5zdXBwb3J0ZWRDaGFyc2V0RXhjZXB0aW9uV2l0aERldGFpbC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgid2luZG93cy0xMjUyIiwgIkNwMTI1MiIsICJ0ZXN0ZmlsZXMvanNwL2phdmFFbmNvZGluZ1ZhbHVlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC9ub0VuY29kaW5nLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL05vRW5jb2RpbmdpblhNTERlY2wuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMiIsICJJU08tODg1OS0yIiwgInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMyIsICJJU08tODg1OS0zIiwgInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTIiLCAiSVNPLTg4NTktMiIsICJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTgiLCBudWxsLCAidGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTgiLCAiSVNPLTg4NTktOCIsICJ0ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHRXaXRoWE1MRGVjbC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS03IiwgIklTTy04ODU5LTciLCAidGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgIlNISUZUX0pJUyIsICJ0ZXN0ZmlsZXMvanNwL1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTMiLCAiSVNPLTg4NTktMyIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RCcm9rZW5MaW5lLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm51bGwiLCAibnVsbCIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmcuanNwIiwgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmV4Y2VwdGlvbnMuVW5zdXBwb3J0ZWRDaGFyc2V0RXhjZXB0aW9uV2l0aERldGFpbC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgibnVsbCIsICJudWxsIiwgInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZ1dpdGhKdW5rLmpzcCIsIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYUp1bmsuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFWYWxpZFN0dWZmLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCBudWxsLCAidGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZDIuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vRW5jb2RpbmdWYWx1ZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTIiLCAiSVNPLTg4NTktMiIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb3JtYWxDYXNlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNkJFIiwgIlVURi0xNkJFIiwgInRlc3RmaWxlcy9qc3AvdGVzdFVURjE2LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNkxFIiwgIlVURi0xNkxFIiwgInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTE2QkUiLCAiVVRGLTE2QkUiLCAidGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTE2QkUiLCAiVVRGLTE2QkUiLCAidGVzdGZpbGVzL2pzcC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS04IiwgIklTTy04ODU5LTgiLCAidGVzdGZpbGVzL2pzcC9XZWxsRm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAiU0hJRlRfSklTIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgIlNISUZUX0pJUyIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm1CLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAiU0hJRlRfSklTIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyNDI5My90ZXN0c2hpZnRqaXNYbWxTeW50YXguanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJTaGlmdF9KSVMiLCAidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI5NjY3L2F1ZGkuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvRW1wdHlGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJFVUMtSlAiLCAiRVVDLUpQIiwgInRlc3RmaWxlcy94bWwvZXVjanAueG1sIiwgbnVsbCk7Ci0JfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdEZpbGUxMDUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCS8vIGRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwKLQkvLyAidGVzdGZpbGVzL3htbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LnhtbCIsIG51bGwpOwotCS8vIH0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RGaWxlMTA2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyBkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54bWwiLAotCS8vIENoYXJhY3RlckNvZGluZ0V4Y2VwdGlvbi5jbGFzcyk7Ci0JLy8gfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdEZpbGUxMDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCS8vIGRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhzbCIsCi0JLy8gQ2hhcmFjdGVyQ29kaW5nRXhjZXB0aW9uLmNsYXNzKTsKLQkvLyB9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC9Ob0VuY29kaW5nLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL3htbC9Ob3JtYWxOb25EZWZhdWx0LnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAiU2hpZnRfSklTIiwgInRlc3RmaWxlcy94bWwvc2hpZnRqaXMueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYUp1bmsueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhVmFsaWRTdHVmZi54bWwiLCBudWxsKTsKLQl9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JLy8gZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQueG1sIiwgbnVsbCk7Ci0JLy8gfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDIueG1sIiwgbnVsbCk7Ci0JfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdEZpbGUxMTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCS8vIGRvVGVzdCgibnVsbCIsICJudWxsIiwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDMueG1sIiwKLQkvLyBVbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzKTsKLQkvLyB9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkNC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy94bWwvdGVzdE11bHRpTGluZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEF0Rmlyc3QueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEluTGFyZ2VGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RGaWxlMTIzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyBkb1Rlc3QoIlVURi0xNkJFIiwgIlVURi0xNkJFIiwgInRlc3RmaWxlcy94bWwvdGVzdFVURjE2LnhtbCIsCi0JLy8gQ2hhcmFjdGVyQ29kaW5nRXhjZXB0aW9uLmNsYXNzKTsKLQkvLyB9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JLy8gZG9UZXN0KCJVVEYtMTZMRSIsICJVVEYtMTZMRSIsCi0JLy8gInRlc3RmaWxlcy94bWwvVVRGMTZMRUF0U3RhcnRPZkxhcmdlRmlsZS54bWwiLCBudWxsKTsKLQkvLyB9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JLy8gZG9UZXN0KCJVVEYtMTZMRSIsICJVVEYtMTZMRSIsCi0JLy8gInRlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIiwgbnVsbCk7Ci0JLy8gfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdEZpbGUxMjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCS8vIGRvVGVzdCgiVVRGLTE2QkUiLCAiVVRGLTE2QkUiLAotCS8vICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwiLAotCS8vIENoYXJhY3RlckNvZGluZ0V4Y2VwdGlvbi5jbGFzcyk7Ci0JLy8gfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdEZpbGUxMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCS8vIGRvVGVzdCgiVVRGLTE2QkUiLCAiVVRGLTE2QkUiLAotCS8vICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMueG1sIiwgbnVsbCk7Ci0JLy8gfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvVVRGOFdpdGgzQnl0ZUJPTS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RG9jdW1lbnRTdHJlYW1DYXNlSFRNTCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgIlNISUZUX0pJUyIsICJ0ZXN0ZmlsZXMvRG9jdW1lbnRTdHJlYW1UZXN0Q2FzZS9rYWVydTUuaHRtIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERvY3VtZW50U3RyZWFtQ2FzZUpTUCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgIlNISUZUX0pJUyIsICJ0ZXN0ZmlsZXMvRG9jdW1lbnRTdHJlYW1UZXN0Q2FzZS9rYWVydTUuanNwIiwgbnVsbCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29kZWRSZWFkZXJPbkdlbm5lZEZpbGVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmIxMTAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29kZWRSZWFkZXJPbkdlbm5lZEZpbGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQ7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5HZW5lcmF0ZUZpbGVzOwotCi0KLS8qKgotICogVGhpcyBjbGFzcyBzaG91bGQgY29udGFpbiBhICJtYXN0ZXIgbGlzdCIgb2YgYWxsIGZpbGVuYW1lcyBnZW5lcmF0ZWQgYnkKLSAqIHZhcmlvdXMgVk0ncyAuLi4gdGhlbiB0aGUgdGVzdCBpbmdvcmVzIGl0IGlmIHRoZSBmaWxlbmFtZSdzIG5vdCBmb3VuZCBkdWUKLSAqIHRvIHRoZSBWTSBub3Qgc3VwcG9ydGluZyBpdC4KLSAqICAKLSAqLwotcHVibGljIGNsYXNzIFRlc3RDb2RlZFJlYWRlck9uR2VubmVkRmlsZXMgZXh0ZW5kcyBUZXN0Q29kZWRSZWFkZXIgewotCXByaXZhdGUgc3RhdGljIGludCBub3RSYW4gPSAwOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCXByb3RlY3RlZCB2b2lkIGRvR2VuVGVzdChTdHJpbmcgY2hhcnNldE5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChjaGFyc2V0TmFtZSwgY2hhcnNldE5hbWUsIEdlbmVyYXRlRmlsZXMuZ2V0TWFpbkRpcmVjdG9yeUJhc2VkT25WTU5hbWUoKSArICIveG1sL3Rlc3QtIiArIGNoYXJzZXROYW1lICsgIi54bWwiLCBudWxsKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkb1Rlc3QoU3RyaW5nIGV4cGVjdGVkSmF2YUNoYXJzZXQsIFN0cmluZyBleHBlY3RlZERldGVjdGVkQ2hhcnNldCwgU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZEV4Y2VwdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJaWYgKGV4cGVjdGVkSmF2YUNoYXJzZXQgIT0gbnVsbCAmJiBleHBlY3RlZEphdmFDaGFyc2V0LmluZGV4T2YoIlVURi0zMiIpID4gLTEpIHsKLQkJCXJldHVybjsgLy93b24ndCB0cnkgMzIgYml0IHJpZ2h0IG5vdwotCQl9Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQotCQkvLyBpZiB0aGVyZSBubyBmaWxlLCBqdXN0IGFzc3VtZSB0aGF0IGl0cyBkdWUgdG8gd2hpY2ggVk0gaXMKLQkJLy8gYnJpbmcgdXNlZC4gKENvdWxkIGJlIGltcHJvdmVkIGluIGZ1dHVyZSB0byBhdm9pZCBjb3VudGluZyBhcyBhCi0JCS8vIHRlc3QpIC0gdGhpcyBjaGVjayBpbiBoZXJlIGZvciBpbml0aWFsIGRlYnVnZ2luZyBvbmx5Ci0JCWlmIChmaWxlID09IG51bGwpIHsKLQkJCW5vdFJhbisrOwotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0IG5vdCByYW4gc2luY2UgY2hhcnNldCBub3Qgc3VwcG9ydGVkIGJ5IFZNOiAiICsgZmlsZVBhdGgpOwotCQkJfQotCQkJcmV0dXJuOwotCQl9Ci0JCXN1cGVyLmRvVGVzdChleHBlY3RlZEphdmFDaGFyc2V0LCBleHBlY3RlZERldGVjdGVkQ2hhcnNldCwgZmlsZVBhdGgsIGV4cGVjdGVkRXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQmlnNSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkNFU1UtOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkNPTVBPVU5EX1RFWFQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtQ04iOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtSlAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtS1IiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQjE4MDMwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0IyMzEyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0JLIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiaHAtcm9tYW44IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDA2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQ2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQ2UyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA4OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA5OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTExNCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTExNSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTEyNCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM2MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM2M0MiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzNzAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzODEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzODMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzODYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTMzNzIyQyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tNDM3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS03MzciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTc3NSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODA4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1MiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1NyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTkiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjRTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2OSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODc0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04OTciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTkyMSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTIyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05MzIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0MiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQyQyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDNDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0OSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQ5QyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTUwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NTRDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUNOIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUNOLUdCIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUpQIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUtSIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0zIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS02IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTZTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS05IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJUzAyMDEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTMDIwOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVMwMjEyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpvaGFiIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktPSTgtUiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLT0k4LVJVIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktPSTgtVSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLU0M1NjAxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0FyYWJpYyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNDZW50cmFsRXVyb3BlIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0Nyb2F0aWFuIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0N5cmlsbGljIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0dyZWVrIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0hlYnJldyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNJY2VsYW5kIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1JvbWFuIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1JvbWFuaWEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjVGhhaSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjVHVya2lzaCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjVWtyYWluZSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiUFRDUDE1NCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiU2hpZnRfSklTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJUSVMtNjIwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVUy1BU0NJSSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNiI7Ci0vLwkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLS8vCX0KLQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTZCRSI7Ci0vLwkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLS8vCX0KLQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMDgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTZMRSI7Ci0vLwkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0zMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTMyQkUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0zMkxFIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLThKIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NlMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTg3NCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy05MzIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTM2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTk0OSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy05NTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotLyogCi1yZW1vdmVkIGZvciBQUEMgbWFjaGluZSB3aXRoIElCTSBWTSAKLWh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMjY1MDMKLSovIAotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJYLVVuaWNvZGVCaWciOwotLy8JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0vLwl9Ci0KLS8qIAotcmVtb3ZlZCBmb3IgUFBDIG1hY2hpbmUgd2l0aCBJQk0gVk0gCi1odHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTI2NTAzCi0qLyAKLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiWC1Vbmljb2RlTGl0dGxlIjsKLS8vCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotLy8JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29udGVudERlc2NyaXB0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnREZXNjcmlwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzhkNGM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29udGVudERlc2NyaXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Ob25Db250ZW50QmFzZWRFbmNvZGluZ1J1bGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcuVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci0KLQotcHVibGljIGNsYXNzIFRlc3RDb250ZW50RGVzY3JpcHRpb24gZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLy8JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZURpciA9ICJodG1sLyI7Ci0JLy8JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZVJvb3QgPQotCS8vICIvYnVpbGRzL1dvcmtzcGFjZXMvSGVhZFdvcmtzcGFjZS9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLyI7Ci0JLy8JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gZmlsZVJvb3QgKyBmaWxlRGlyOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSB0cnVlOwotCS8vcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19URVNUX0RFVEFJTCA9IGZhbHNlOwotCS8vIG5lZWRzIHRvIGJlIHN0YXRpYywgc2luY2UgSlVuaXQgY3JlYXRlcyBkaWZmZXJlbmNlIGluc3RhbmNlcyBmb3IgZWFjaAotCS8vIHRlc3QKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGZUZXN0UHJvamVjdEluaXRpYWxpemVkOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BST0pFQ1RfTkFNRSA9ICJvcmcuZWNsaXBzZS5lbmNvZGluZy5yZXNvdXJjZS5uZXd0ZXN0cyI7Ci0Jc3RhdGljIElQcm9qZWN0IGZUZXN0UHJvamVjdDsKLQlwcml2YXRlIHN0YXRpYyBpbnQgblNldHVwcyA9IDA7Ci0KLQkvKioKLQkgKiAgCi0JICovCi0JcHVibGljIFRlc3RDb250ZW50RGVzY3JpcHRpb24oKSB7Ci0JCXN1cGVyKCk7Ci0JCS8vU3lzdGVtLm91dC5wcmludGxuKGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkJLy8JCXRyeSB7Ci0JCS8vCQkJbmV3IFRlc3RDb2RlZFJlYWRlcigpLmRvQWxsRmlsZXMoKTsKLQkJLy8JCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkvLwkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCS8vCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCS8vCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJLy8JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGNyZWF0ZVByb2plY3QoSVByb2plY3QgcHJvamVjdCwgSVBhdGggbG9jYXRpb25QYXRoLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKG1vbml0b3IgPT0gbnVsbCkgewotCQkJbW9uaXRvciA9IG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCX0KLQkJbW9uaXRvci5iZWdpblRhc2soImNyZWF0aW5nIHRlc3QgcHJvamVjdCIsIDEwKTsKLQkJLy8gY3JlYXRlIHRoZSBwcm9qZWN0Ci0JCXRyeSB7Ci0JCQlpZiAoIXByb2plY3QuZXhpc3RzKCkpIHsKLQkJCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2MgPSBwcm9qZWN0LmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qZWN0LmdldE5hbWUoKSk7Ci0JCQkJaWYgKFBsYXRmb3JtLmdldExvY2F0aW9uKCkuZXF1YWxzKGxvY2F0aW9uUGF0aCkpIHsKLQkJCQkJbG9jYXRpb25QYXRoID0gbnVsbDsKLQkJCQl9Ci0JCQkJZGVzYy5zZXRMb2NhdGlvbihsb2NhdGlvblBhdGgpOwotCQkJCXByb2plY3QuY3JlYXRlKGRlc2MsIG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQkJaWYgKCFwcm9qZWN0LmlzT3BlbigpKSB7Ci0JCQkJcHJvamVjdC5vcGVuKG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vbml0b3IgIT0gbnVsbCkgewotCQkJCW1vbml0b3IuZG9uZSgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBnZXRBbmRDcmVhdGVQcm9qZWN0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkvL1Rlc3RzUGx1Z2luIHRlc3RzUGx1Z2luID0gKFRlc3RzUGx1Z2luKQotCQkvLyBQbGF0Zm9ybS5nZXRQbHVnaW4oIm9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmciKTsKLQkJSVdvcmtzcGFjZSB3b3Jrc3BhY2UgPSBUZXN0c1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQkJSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IHdvcmtzcGFjZS5nZXRSb290KCk7Ci0JCWZUZXN0UHJvamVjdCA9IHJvb3QuZ2V0UHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCS8vIHRoaXMgZm9ybSBjcmVhdGVzIHByb2plY3QgYXMgImxpbmtlZCIgYmFjayB0byAnZmlsZVJvb3QnCi0JCS8vY3JlYXRlUHJvamVjdCh0ZXN0UHJvamVjdCwgbmV3IFBhdGgoZmlsZVJvb3QpLCBudWxsKTsKLQkJY3JlYXRlUHJvamVjdChmVGVzdFByb2plY3QsIG51bGwsIG51bGwpOwotCQlmVGVzdFByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCWFzc2VydFRydWUoZlRlc3RQcm9qZWN0LmV4aXN0cygpKTsKLQkJLy8JCUlDb250YWluZXIgZG90ZXN0RmlsZXMgPSB0ZXN0UHJvamVjdC5nZXRGb2xkZXIoImRvdGVzdEZpbGVzIik7Ci0JCS8vCQlhc3NlcnRUcnVlKGRvdGVzdEZpbGVzLmV4aXN0cygpKTsKLQkJLy8JCUlSZXNvdXJjZVtdIGFsbEZvbGRlcnMgPSBkb3Rlc3RGaWxlcy5tZW1iZXJzKCk7Ci0JCS8vCQlhc3NlcnROb3ROdWxsKGFsbEZvbGRlcnMpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCW5TZXR1cHMrKzsKLQkJaWYgKCFmVGVzdFByb2plY3RJbml0aWFsaXplZCkgewotCQkJZ2V0QW5kQ3JlYXRlUHJvamVjdCgpOwotCQkJLy8gdW56aXAgZmlsZXMgdG8gdGhlIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQkJU3RyaW5nIGRlc3RpbmF0aW9uUHJvamVjdFN0cmluZyA9IGZUZXN0UHJvamVjdC5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKTsKLQkJCVN0cmluZyBkZXN0aW5hdGlvbkZvbGRlciA9IGRlc3RpbmF0aW9uUHJvamVjdFN0cmluZyArICIvIjsKLQkJCS8vIHRoaXMgemlwIGZpbGUgaXMgc2l0dGluZyBpbiB0aGUgInJvb3QiIG9mIHRlc3QgcGx1Z2luCi0JCQlGaWxlIHppcEZpbGUgPSBUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZSgidGVzdGZpbGVzLnppcCIpOwotCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQlwcm9qVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBkZXN0aW5hdGlvbkZvbGRlcik7Ci0JCQlwcm9qVXRpbC5pbml0SmF2YVByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJblNldHVwcy0tOwotCQlpZiAoblNldHVwcyA9PSAwKSB7Ci0JCQlpZiAoIURFQlVHKSB7Ci0JCQkJLy8JCQkJRGlzcGxheSBkaXNwbGF5ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCk7Ci0JCQkJLy8JCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotCQkJCS8vCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJLy8JCQkJCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCQkvLwkJCQkJCUlQcm9qZWN0IHByb2ogPSBmVGVzdFByb2plY3Q7Ci0JCQkJLy8JCQkJCQlmVGVzdFByb2plY3QgPSBudWxsOwotCQkJCS8vCQkJCQkJdHJ5IHsKLQkJCQkvLwkJCQkJCQlwcm9qVXRpbC5kZWxldGVQcm9qZWN0KHByb2opOwotCQkJCS8vCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkvLwkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCS8vCQkJCQkJfQotCQkJCS8vCQkJCQl9Ci0JCQkJLy8JCQkJfSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkb1Rlc3QoU3RyaW5nIGV4cGVjdGVkSmF2YUNoYXJzZXQsIFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWRFeGNlcHRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChleHBlY3RlZEphdmFDaGFyc2V0ICE9IG51bGwgJiYgZXhwZWN0ZWRKYXZhQ2hhcnNldC5pbmRleE9mKCJVVEYtMzIiKSA+IC0xKSB7Ci0JCQlyZXR1cm47IC8vd29uJ3QgdHJ5IDMyIGJpdCByaWdodCBub3cKLQkJfQotCQlleHBlY3RlZEphdmFDaGFyc2V0ID0gbWFzc2FnZUNoYXJzZXQoZXhwZWN0ZWRKYXZhQ2hhcnNldCk7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiRXJyb3IgaW4gdGVzdCBjYXNlOiBmaWxlIG5vdCBmb3VuZDogIiArIGZpbGVQYXRoLCBmaWxlKTsKLQotCQlJQ29udGVudERlc2NyaXB0aW9uIGZpbGVDb250ZW50RGVzY3JpcHRpb24gPSBmaWxlLmdldENvbnRlbnREZXNjcmlwdGlvbigpOwotCS8vCUlDb250ZW50RGVzY3JpcHRpb24gc3RyZWFtQ29udGVudERlc2NyaXB0aW9uID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCkuZ2V0RGVzY3JpcHRpb25Gb3IoZmlsZS5nZXRDb250ZW50cygpLCBmaWxlLmdldE5hbWUoKSwgSUNvbnRlbnREZXNjcmlwdGlvbi5BTEwpOwotCS8vCWFzc2VydEVxdWFscygiY29tcGFyaW5nIGZpbGUgYW5kIHN0cmVhbSBjb250ZW50RGVzY3JpcHRpb24iLCBmaWxlQ29udGVudERlc2NyaXB0aW9uLCBzdHJlYW1Db250ZW50RGVzY3JpcHRpb24pOwotCi0JCWFzc2VydE5vdE51bGwoIk51bGwgY29udGVudCBkZXNjcmlwdGlvbiIsIGZpbGVDb250ZW50RGVzY3JpcHRpb24pOwotCQlTdHJpbmcgZm91bmRDaGFyc2V0ID0gZmlsZUNvbnRlbnREZXNjcmlwdGlvbi5nZXRDaGFyc2V0KCk7Ci0JCWZvdW5kQ2hhcnNldCA9IG1hc3NhZ2VDaGFyc2V0KGZvdW5kQ2hhcnNldCk7Ci0KLQkJaWYgKGV4cGVjdGVkSmF2YUNoYXJzZXQgPT0gbnVsbCB8fCBleHBlY3RlZEphdmFDaGFyc2V0LmVxdWFscygiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IikpIHsKLQkJCVN0cmluZyBwbGF0Zm9ybURlZmF1bHQgPSBOb25Db250ZW50QmFzZWRFbmNvZGluZ1J1bGVzLnVzZURlZmF1bHROYW1lUnVsZXMobnVsbCk7Ci0JCQlhc3NlcnRUcnVlKGZvdW5kQ2hhcnNldC5lcXVhbHMocGxhdGZvcm1EZWZhdWx0KSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlib29sZWFuIGFzRXhwZWN0ZWQgPSBmb3VuZENoYXJzZXQuZXF1YWxzKGV4cGVjdGVkSmF2YUNoYXJzZXQpOwotCQkJYXNzZXJ0VHJ1ZShmb3VuZENoYXJzZXQgKyAiIGRpZCBub3QgZXF1YWwgdGhlIGV4cGVjdGVkICIgKyBleHBlY3RlZEphdmFDaGFyc2V0ICsgIiAodGhpcyBpcyBhIFZNIGRlcGVuZGVudCB0ZXN0KSIsIGFzRXhwZWN0ZWQpOwotCQl9Ci0KLQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBmb3VuZENoYXJzZXQKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgbWFzc2FnZUNoYXJzZXQoU3RyaW5nIGZvdW5kQ2hhcnNldCkgewotCQlTdHJpbmcgcmVzdWx0ID0gZm91bmRDaGFyc2V0OwotCQlpZiAoIlVURi0xNkxFIi5lcXVhbHMoZm91bmRDaGFyc2V0KSkgewotCQkJcmVzdWx0ID0gIlVURi0xNiI7Ci0JCX0KLQkJZWxzZSBpZiAoIlgtVW5pY29kZUxpdHRsZSIuZXF1YWxzKGZvdW5kQ2hhcnNldCkpIHsKLQkJCXJlc3VsdCA9ICJVVEYtMTYiOwotCQl9Ci0JCWVsc2UgaWYgKCJYLVVuaWNvZGVCaWciLmVxdWFscyhmb3VuZENoYXJzZXQpKSB7Ci0JCQlyZXN1bHQgPSAiVVRGLTE2QkUiOwotCQl9Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIsICJ0ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIkVVQy1KUCIsICJ0ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfZXVjanAuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tMjAyMi1KUCIsICJ0ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfamlzLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgInRlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9zamlzLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IiwgInRlc3RmaWxlcy9jc3Mvbm9FbmNvZGluZy5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTYiLCAidGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZC5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTYiLCAidGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZC5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTYiLCAidGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZDIuY3NzIiwgbnVsbCk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCAidGVzdGZpbGVzL2h0bWwvRW1wdHlGaWxlLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMvaHRtbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCAidGVzdGZpbGVzL2h0bWwvTGFyZ2VOb0VuY29kaW5nLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9odG1sL0xhcmdlTm9uRGVmYXVsdC5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktNiIsICJ0ZXN0ZmlsZXMvaHRtbC9NdWx0aU5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIsICJ0ZXN0ZmlsZXMvaHRtbC9Ob0VuY29kaW5nLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlcy5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL2h0bWwvTm9ybWFsTm9uRGVmYXVsdC5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL0VtcHR5RmlsZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS04IiwgInRlc3RmaWxlcy9qc3AvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJhYmMiLCAidGVzdGZpbGVzL2pzcC9pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJ3aW5kb3dzLTEyNTIiLCAidGVzdGZpbGVzL2pzcC9qYXZhRW5jb2RpbmdWYWx1ZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZy5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3Avbm9FbmNvZGluZy5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvTm9FbmNvZGluZ2luWE1MRGVjbC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTczKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0yIiwgInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTMiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMiIsICJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTgiLCAidGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTgiLCAidGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0V2l0aFhNTERlY2wuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktNyIsICJ0ZXN0ZmlsZXMvanNwL05vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAidGVzdGZpbGVzL2pzcC9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0zIiwgInRlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgidGVzdGp1bmsiLCAidGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nLmpzcCIsIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoInRlc3RqdW5rIiwgInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZ1dpdGhKdW5rLmpzcCIsIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFKdW5rLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTIiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vcm1hbENhc2UuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTE2QkUiLCAidGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTE2TEUiLCAidGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZCRSIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZCRSIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL2pzcC9VVEY4V2l0aDNCeXRlQk9NLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTgiLCAidGVzdGZpbGVzL2pzcC9XZWxsRm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtQi5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyNDI5My90ZXN0c2hpZnRqaXNYbWxTeW50YXguanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC9FbXB0eUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIkVVQy1KUCIsICJ0ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbCIsIG51bGwpOwotCX0KLQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMDUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMveG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQueG1sIiwgbnVsbCk7Ci0vLwl9Ci0vLwotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMDYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhtbCIsIG51bGwpOwotLy8JfQotLy8KLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54c2wiLCBudWxsKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL05vRW5jb2RpbmcueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL3htbC9Ob3JtYWxOb25EZWZhdWx0LnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAidGVzdGZpbGVzL3htbC9zaGlmdGppcy54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYUp1bmsueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhVmFsaWRTdHVmZi54bWwiLCBudWxsKTsKLQl9Ci0KLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZC54bWwiLCBudWxsKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQyLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCBzdGFuZGFsb25lPSIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQzLnhtbCIsIGphdmEubmlvLmNoYXJzZXQuSWxsZWdhbENoYXJzZXROYW1lRXhjZXB0aW9uLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkNC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RNdWx0aUxpbmUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdE5vRW5jb2RpbmdWYWx1ZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9ybWFsQ2FzZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xBdEZpcnN0LnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xJbkxhcmdlRmlsZS54bWwiLCBudWxsKTsKLQl9Ci0KLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoIlVURi0xNkJFIiwgInRlc3RmaWxlcy94bWwvdGVzdFVURjE2LnhtbCIsIG51bGwpOwotLy8JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNkxFIiwgInRlc3RmaWxlcy94bWwvVVRGMTZMRUF0U3RhcnRPZkxhcmdlRmlsZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTE2TEUiLCAidGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi54bWwiLCBudWxsKTsKLQl9Ci0KLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoIlVURi0xNkJFIiwgInRlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLnhtbCIsIG51bGwpOwotLy8JfQotCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KCJVVEYtMTZCRSIsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMueG1sIiwgbnVsbCk7Ci0vLwl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC9VVEY4V2l0aDNCeXRlQk9NLnhtbCIsIG51bGwpOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29udGVudFR5cGVEZXNjcmlwdGlvbk9uR2VubmVkRmlsZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29udGVudFR5cGVEZXNjcmlwdGlvbk9uR2VubmVkRmlsZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNlOTVjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlRGVzY3JpcHRpb25Pbkdlbm5lZEZpbGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQ7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5HZW5lcmF0ZUZpbGVzOwotCi0KLQotcHVibGljIGNsYXNzIFRlc3RDb250ZW50VHlwZURlc2NyaXB0aW9uT25HZW5uZWRGaWxlcyBleHRlbmRzIFRlc3RDb250ZW50RGVzY3JpcHRpb24gewotCXByaXZhdGUgc3RhdGljIGludCBub3RSYW4gPSAwOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCXByb3RlY3RlZCB2b2lkIGRvR2VuVGVzdChTdHJpbmcgY2hhcnNldE5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IEdlbmVyYXRlRmlsZXMuZ2V0TWFpbkRpcmVjdG9yeUJhc2VkT25WTU5hbWUoKSArICIveG1sL3Rlc3QtIiArIGNoYXJzZXROYW1lICsgIi54bWwiOwotCQlkb1Rlc3QoY2hhcnNldE5hbWUsIGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkb1Rlc3QoU3RyaW5nIGV4cGVjdGVkSmF2YUNoYXJzZXQsIFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWRFeGNlcHRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChleHBlY3RlZEphdmFDaGFyc2V0ICE9IG51bGwgJiYgZXhwZWN0ZWRKYXZhQ2hhcnNldC5pbmRleE9mKCJVVEYtMzIiKSA+IC0xKSB7Ci0JCQlyZXR1cm47IC8vd29uJ3QgdHJ5IDMyIGJpdCByaWdodCBub3cKLQkJfQotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0KLQkJLy8gaWYgdGhlcmUgbm8gZmlsZSwganVzdCBhc3N1bWUgdGhhdCBpdHMgZHVlIHRvIHdoaWNoIFZNIGlzCi0JCS8vIGJyaW5nIHVzZWQuIChDb3VsZCBiZSBpbXByb3ZlZCBpbiBmdXR1cmUgdG8gYXZvaWQgY291bnRpbmcgYXMgYQotCQkvLyB0ZXN0KSAtIHRoaXMgY2hlY2sgaW4gaGVyZSBmb3IgaW5pdGlhbCBkZWJ1Z2dpbmcgb25seQotCQlpZiAoZmlsZSA9PSBudWxsKSB7Ci0JCQlub3RSYW4rKzsKLQkJCWlmIChERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigidGVzdCBub3QgcmFuIHNpbmNlIGNoYXJzZXQgbm90IHN1cHBvcnRlZCBieSBWTTogIiArIGZpbGVQYXRoKTsKLQkJCX0KLQkJCXJldHVybjsKLQkJfQotCQlzdXBlci5kb1Rlc3QoZXhwZWN0ZWRKYXZhQ2hhcnNldCwgZmlsZVBhdGgsIGV4cGVjdGVkRXhjZXB0aW9uKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJCaWc1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQ0VTVS04IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQ09NUE9VTkRfVEVYVCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1DTiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1KUCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1LUiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkdCMTgwMzAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQjIzMTIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQksiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJocC1yb21hbjgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwMDYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDZTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDg4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDk4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMTE0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMTE1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMTI0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzYzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzYzQyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM3MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM4MSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM4MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM4NiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMzM3MjJDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS00MzciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTczNyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tNzc1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04MDgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODUyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1NiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1OSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NFMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY5IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NzQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg5NyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTIxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05MjIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTkzMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDJDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0M0MiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQ5IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDlDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk1NEMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItQ04iOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItQ04tR0IiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItSlAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItS1IiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xMCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xMyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0yIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS01IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNlMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS04IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTkiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTMDIwMSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVMwMjA4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJUzAyMTIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSm9oYWIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS09JOC1SIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktPSTgtUlUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS09JOC1VIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktTQzU2MDEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQXJhYmljIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0NlbnRyYWxFdXJvcGUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQ3JvYXRpYW4iOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQ3lyaWxsaWMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjR3JlZWsiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjSGVicmV3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0ljZWxhbmQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjUm9tYW4iOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjUm9tYW5pYSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNUaGFpIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNUdXJraXNoIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNVa3JhaW5lIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJQVENQMTU0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJTaGlmdF9KSVMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlRJUy02MjAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVTLUFTQ0lJIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTZCRSI7Ci0vLwkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNkxFIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMzIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0zMkJFIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMzJMRSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi04SiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTZTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy04NzQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTMyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTkzNiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy05NDkiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTUwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0vKiAKLXJlbW92ZWQgZm9yIFBQQyBtYWNoaW5lIHdpdGggSUJNIFZNIAotaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTEyNjUwMwotKi8gCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlgtVW5pY29kZUJpZyI7Ci0vLwkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlgtVW5pY29kZUxpdHRsZSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhlZjY0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcuVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci0KLQotcHVibGljIGNsYXNzIFRlc3RDb250ZW50VHlwZURldGVjdGlvbiBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0Jc3RhdGljIElQcm9qZWN0IGZUZXN0UHJvamVjdDsKLQkvLyBuZWVkcyB0byBiZSBzdGF0aWMsIHNpbmNlIEpVbml0IGNyZWF0ZXMgZGlmZmVyZW5jZSBpbnN0YW5jZXMgZm9yIGVhY2gKLQkvLyB0ZXN0Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmVGVzdFByb2plY3RJbml0aWFsaXplZDsKLQlwcml2YXRlIHN0YXRpYyBpbnQgblNldHVwcyA9IDA7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUFJPSkVDVF9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC54bWwudGVtcC50ZXN0cy5lbmNvZGluZy5yZXNvdXJjZS5uZXd0ZXN0cyI7Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGNyZWF0ZVByb2plY3QoSVByb2plY3QgcHJvamVjdCwgSVBhdGggbG9jYXRpb25QYXRoLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKG1vbml0b3IgPT0gbnVsbCkgewotCQkJbW9uaXRvciA9IG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCX0KLQkJbW9uaXRvci5iZWdpblRhc2soImNyZWF0aW5nIHRlc3QgcHJvamVjdCIsIDEwKTsKLQkJLy8gY3JlYXRlIHRoZSBwcm9qZWN0Ci0JCXRyeSB7Ci0JCQlpZiAoIXByb2plY3QuZXhpc3RzKCkpIHsKLQkJCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2MgPSBwcm9qZWN0LmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qZWN0LmdldE5hbWUoKSk7Ci0JCQkJaWYgKFBsYXRmb3JtLmdldExvY2F0aW9uKCkuZXF1YWxzKGxvY2F0aW9uUGF0aCkpIHsKLQkJCQkJbG9jYXRpb25QYXRoID0gbnVsbDsKLQkJCQl9Ci0JCQkJZGVzYy5zZXRMb2NhdGlvbihsb2NhdGlvblBhdGgpOwotCQkJCXByb2plY3QuY3JlYXRlKGRlc2MsIG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQkJaWYgKCFwcm9qZWN0LmlzT3BlbigpKSB7Ci0JCQkJcHJvamVjdC5vcGVuKG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vbml0b3IgIT0gbnVsbCkgewotCQkJCW1vbml0b3IuZG9uZSgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBnZXRBbmRDcmVhdGVQcm9qZWN0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFRlc3RzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCQlJV29ya3NwYWNlUm9vdCByb290ID0gd29ya3NwYWNlLmdldFJvb3QoKTsKLQkJZlRlc3RQcm9qZWN0ID0gcm9vdC5nZXRQcm9qZWN0KFRFU1RfUFJPSkVDVF9OQU1FKTsKLQkJLy8gdGhpcyBmb3JtIGNyZWF0ZXMgcHJvamVjdCBhcyAibGlua2VkIiBiYWNrIHRvICdmaWxlUm9vdCcKLQkJLy8gY3JlYXRlUHJvamVjdCh0ZXN0UHJvamVjdCwgbmV3IFBhdGgoZmlsZVJvb3QpLCBudWxsKTsKLQkJY3JlYXRlUHJvamVjdChmVGVzdFByb2plY3QsIG51bGwsIG51bGwpOwotCQlmVGVzdFByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCWFzc2VydFRydWUoZlRlc3RQcm9qZWN0LmV4aXN0cygpKTsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwdWJsaWMgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uKCkgewotCQlzdXBlcigpOwotCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oY3VycmVudFBsYXRmb3JtQ2hhcnNldCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZG9UZXN0KFN0cmluZyBleHBlY3RlZENvbnRlbnRUeXBlLCBTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRXhjZXB0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoIkVycm9yIGluIHRlc3QgY2FzZTogZmlsZSBub3QgZm91bmQ6ICIgKyBmaWxlUGF0aCwgZmlsZSk7Ci0KLQotCQlJQ29udGVudERlc2NyaXB0aW9uIHN0cmVhbUNvbnRlbnREZXNjcmlwdGlvbiA9IGRvR2V0Q29udGVudFR5cGVCYXNlZE9uU3RyZWFtKGZpbGUpOwotCQlJQ29udGVudERlc2NyaXB0aW9uIGZpbGVDb250ZW50RGVzY3JpcHRpb24gPSBkb0dldENvbnRlbnRUeXBlQmFzZWRPbkZpbGUoZmlsZSk7Ci0KLQkJSUNvbnRlbnRUeXBlIGZpbGVDb250ZW50VHlwZSA9IGZpbGVDb250ZW50RGVzY3JpcHRpb24uZ2V0Q29udGVudFR5cGUoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZmlsZSBjb250ZW50IHR5cGUgd2FzIG51bGwiLCBmaWxlQ29udGVudFR5cGUpOwotCi0JCUlDb250ZW50VHlwZSBzdHJlYW1Db250ZW50VHlwZSA9IHN0cmVhbUNvbnRlbnREZXNjcmlwdGlvbi5nZXRDb250ZW50VHlwZSgpOwotCQlhc3NlcnROb3ROdWxsKCJzdHJlYW0gY29udGVudCB0eXBlIHdhcyBudWxsIiwgc3RyZWFtQ29udGVudFR5cGUpOwotCi0JCWFzc2VydEVxdWFscygiY29tcGFyaW5nIGNvbnRlbnQgdHlwZSBiYXNlZCBvbiBmaWxlIGFuZCBzdHJlYW06ICIsIGZpbGVDb250ZW50VHlwZSwgc3RyZWFtQ29udGVudFR5cGUpOwotCi0JCS8vIGlmIGVxdWFsLCBhYm92ZSwgYXMgZXhwZWN0ZWQsIHRoZW4gb25seSBuZWVkIHRvIGNoZWNrIG9uZS4KLQkJYXNzZXJ0RXF1YWxzKCJjb21wYXJlaW5nIHdpdGggZXhwZWN0ZWQgY29udGVudCB0eXBlIGlkIiwgZXhwZWN0ZWRDb250ZW50VHlwZSwgZmlsZUNvbnRlbnRUeXBlLmdldElkKCkpOwotCi0JfQotCi0JcHJvdGVjdGVkIElDb250ZW50RGVzY3JpcHRpb24gZG9HZXRDb250ZW50VHlwZUJhc2VkT25TdHJlYW0oSUZpbGUgZmlsZSkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBzdHJlYW1Db250ZW50RGVzY3JpcHRpb24gPSBudWxsOwotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlpbnB1dFN0cmVhbSA9IGZpbGUuZ2V0Q29udGVudHMoKTsKLQkJCXN0cmVhbUNvbnRlbnREZXNjcmlwdGlvbiA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpLmdldERlc2NyaXB0aW9uRm9yKGlucHV0U3RyZWFtLCBmaWxlLmdldE5hbWUoKSwgSUNvbnRlbnREZXNjcmlwdGlvbi5BTEwpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGlucHV0U3RyZWFtICE9IG51bGwpIHsKLQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQl9Ci0JCWFzc2VydE5vdE51bGwoImNvbnRlbnQgZGVzY3JpcHRpb24gd2FzIG51bGwiLCBzdHJlYW1Db250ZW50RGVzY3JpcHRpb24pOwotCQlyZXR1cm4gc3RyZWFtQ29udGVudERlc2NyaXB0aW9uOwotCX0KLQotCXByb3RlY3RlZCBJQ29udGVudERlc2NyaXB0aW9uIGRvR2V0Q29udGVudFR5cGVCYXNlZE9uRmlsZShJRmlsZSBmaWxlKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlDb250ZW50RGVzY3JpcHRpb24gZmlsZUNvbnRlbnREZXNjcmlwdGlvbiA9IGZpbGUuZ2V0Q29udGVudERlc2NyaXB0aW9uKCk7Ci0JCWFzc2VydE5vdE51bGwoImZpbGUgY29udGVudCBkZXNjcmlwdGlvbiB3YXMgbnVsbCIsIGZpbGVDb250ZW50RGVzY3JpcHRpb24pOwotCQlyZXR1cm4gZmlsZUNvbnRlbnREZXNjcmlwdGlvbjsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkb1Rlc3RGb3JQYXJlbnQoU3RyaW5nIGV4cGVjdGVkQ29udGVudFR5cGUsIFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWRFeGNlcHRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiRXJyb3IgaW4gdGVzdCBjYXNlOiBmaWxlIG5vdCBmb3VuZDogIiArIGZpbGVQYXRoLCBmaWxlKTsKLQotCQlJQ29udGVudERlc2NyaXB0aW9uIGNvbnRlbnREZXNjcmlwdGlvbiA9IGZpbGUuZ2V0Q29udGVudERlc2NyaXB0aW9uKCk7Ci0JCWlmIChjb250ZW50RGVzY3JpcHRpb24gPT0gbnVsbCkgewotCQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBudWxsOwotCQkJdHJ5IHsKLQkJCQlpbnB1dFN0cmVhbSA9IGZpbGUuZ2V0Q29udGVudHMoKTsKLQkJCQljb250ZW50RGVzY3JpcHRpb24gPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKS5nZXREZXNjcmlwdGlvbkZvcihpbnB1dFN0cmVhbSwgZmlsZS5nZXROYW1lKCksIElDb250ZW50RGVzY3JpcHRpb24uQUxMKTsKLQkJCX0KLQkJCWZpbmFsbHkgewotCQkJCWlmIChpbnB1dFN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWFzc2VydE5vdE51bGwoImNvbnRlbnQgZGVzY3JpcHRpb24gd2FzIG51bGwiLCBjb250ZW50RGVzY3JpcHRpb24pOwotCQlJQ29udGVudFR5cGUgY29udGVudFR5cGUgPSBjb250ZW50RGVzY3JpcHRpb24uZ2V0Q29udGVudFR5cGUoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiY29udGVudCB0eXBlIHdhcyBudWxsIiwgY29udGVudFR5cGUpOwotCi0JCUlDb250ZW50VHlwZSBwYXJlbnRDb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlOwotCQlib29sZWFuIGZvdW5kID0gZmFsc2U7Ci0JCXdoaWxlIChwYXJlbnRDb250ZW50VHlwZSAhPSBudWxsICYmICFmb3VuZCkgewotCQkJZm91bmQgPSBleHBlY3RlZENvbnRlbnRUeXBlLmVxdWFscyhwYXJlbnRDb250ZW50VHlwZS5nZXRJZCgpKTsKLQkJCXBhcmVudENvbnRlbnRUeXBlID0gcGFyZW50Q29udGVudFR5cGUuZ2V0QmFzZVR5cGUoKTsKLQkJfQotCQlhc3NlcnRUcnVlKCJkaWQgbm90IGZpbmQgJyIgKyBleHBlY3RlZENvbnRlbnRUeXBlICsgIicgaW4gcGFyZW50IGNoYWluIG9mIGJhc2UgdHlwZXMiLCBmb3VuZCk7Ci0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQluU2V0dXBzKys7Ci0JCWlmICghZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQpIHsKLQkJCWdldEFuZENyZWF0ZVByb2plY3QoKTsKLQkJCS8vIHVuemlwIGZpbGVzIHRvIHRoZSByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJCVN0cmluZyBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgPSBmVGVzdFByb2plY3QuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Gb2xkZXIgPSBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgKyAiLyI7Ci0JCQkvLyB0aGlzIHppcCBmaWxlIGlzIHNpdHRpbmcgaW4gdGhlICJyb290IiBvZiB0ZXN0IHBsdWdpbgotCQkJRmlsZSB6aXBGaWxlID0gVGVzdHNQbHVnaW4uZ2V0VGVzdEZpbGUoInRlc3RmaWxlcy56aXAiKTsKLQkJCVByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQkJcHJvalV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgZGVzdGluYXRpb25Gb2xkZXIpOwotCQkJcHJvalV0aWwuaW5pdEphdmFQcm9qZWN0KFRFU1RfUFJPSkVDVF9OQU1FKTsKLQkJCWZUZXN0UHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCWZUZXN0UHJvamVjdEluaXRpYWxpemVkID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCW5TZXR1cHMtLTsKLQkJaWYgKG5TZXR1cHMgPT0gMCkgewotCQkJaWYgKCFERUJVRykgewotLy8JCQkJIERpc3BsYXkgZGlzcGxheSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpOwotLy8JCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotLy8JCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLS8vCQkJCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0vLwkJCQkJCUlQcm9qZWN0IHByb2ogPSBmVGVzdFByb2plY3Q7Ci0vLwkJCQkJCWZUZXN0UHJvamVjdCA9IG51bGw7Ci0vLwkJCQkJCXRyeSB7Ci0vLwkJCQkJCQlwcm9qVXRpbC5kZWxldGVQcm9qZWN0KHByb2opOwotLy8JCQkJCQl9Ci0vLwkJCQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotLy8JCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLS8vCQkJCQkJfQotLy8JCQkJCX0KLS8vCQkJCX0pOwotCQkJfQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBJUHJvamVjdCBnZXRUZXN0UHJvamVjdCgpIHsKLQkJcmV0dXJuIGZUZXN0UHJvamVjdDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yWE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yWE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwZTJlNjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvclhNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQ7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JYTUwgZXh0ZW5kcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb24gewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBleHBlY3RlZEN1c3RvbVhNTENvbnRlbnRUeXBlID0gIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS54bWxzb3VyY2UiOwotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBleHBlY3RlZFhTTENvbnRlbnRUeXBlID0gIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS54c2xzb3VyY2UiOwotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBleHBlY3RlZFhNTENvbnRlbnRUeXBlID0gIm9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiOwotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvRW1wdHlGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAzUCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdEZvclBhcmVudChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9FbXB0eUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvZXVjanAueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDRiKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54bWwiLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIGZpbGUgaXMgaWxsZm9ybWVkIGluIGl0cyBzcGVjaWZpZWQgY2hhcnNldAotCSAqIGFuZCBjaGFyYWN0ZXJzLiAKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYU0xDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54c2wiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwN1AoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RGb3JQYXJlbnQoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54c2wiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9Ob0VuY29kaW5nLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL05vcm1hbE5vbkRlZmF1bHQueG1sIiwgbnVsbCk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9zaGlmdGppcy54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0RXh0cmFKdW5rLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYVZhbGlkU3R1ZmYueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMi54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMy54bWwiLCBqYXZhLm5pby5jaGFyc2V0LklsbGVnYWxDaGFyc2V0TmFtZUV4Y2VwdGlvbi5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDQueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdE11bHRpTGluZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjBXUygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCS8vIHdoaXRlc3BhY2UgKENSTEYpIGJlZm9yZSB4bWwgZGVjbGFyYXRpb24KLQkJZG9UZXN0KGV4cGVjdGVkQ3VzdG9tWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RXU0JlZm9yZVhNTERlY2wueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjBXUzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkvLyB3aGl0ZXNwYWNlIChzcGFjZSBvbmx5KSBiZWZvcmUgeG1sIGRlY2xhcmF0aW9uCi0JCWRvVGVzdChleHBlY3RlZEN1c3RvbVhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsMi54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMFdTMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCS8vIHdoaXRlc3BhY2UgKHNwYWNlLCB0YWJzLCBhbmQgQ1Igb25seSkgYmVmb3JlIHhtbCBkZWNsYXJhdGlvbgotCQlkb1Rlc3QoZXhwZWN0ZWRDdXN0b21YTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdFdTQmVmb3JlWE1MRGVjbDMueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjBQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Rm9yUGFyZW50KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkvLyB0YWcgKG5vdCBqdXN0IHdoaXRlIHNwYWNlKSBiZWZvcmUgeG1sIGRlY2xhcmF0aW9uLgotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEF0Rmlyc3QueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjFQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Rm9yUGFyZW50KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xBdEZpcnN0LnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xJbkxhcmdlRmlsZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMlAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RGb3JQYXJlbnQoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEluTGFyZ2VGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RVVEYxNi54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCS8vIGxhcmdlLCB1dGYxNiwgYnV0IG5vIHhtbERlY2wKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL1VURjE2TEVBdFN0YXJ0T2ZMYXJnZUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjRQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Rm9yUGFyZW50KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL1VURjE2TEVBdFN0YXJ0T2ZMYXJnZUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkvLyBpbGxmb3JtZWQsIGlzIGluIHV0ZjE2LCBidXQgbm90IGluIGhlYWRlciwgbm90IGluIGVuY29kaW5nPSBzcGVjLgotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjVQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Rm9yUGFyZW50KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL1VURjhXaXRoM0J5dGVCT00ueG1sIiwgbnVsbCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVhNjE2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZU1hbmFnZXI7Ci0KLQotcHVibGljIGNsYXNzIFRlc3RDb250ZW50VHlwZXMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0aW9uKCkgewotCQlJQ29udGVudFR5cGVNYW5hZ2VyIHJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgdHlwZSBpZGVudGlmZXIgcmVnaXN0cnkgbXVzdCBleGlzdCIsIHJlZ2lzdHJ5ICE9IG51bGwpOwotCQlJQ29udGVudFR5cGVbXSBhbGxUeXBlcyA9IHJlZ2lzdHJ5LmdldEFsbENvbnRlbnRUeXBlcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGFsbFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlJQ29udGVudFR5cGUgY29udGVudFR5cGUgPSBhbGxUeXBlc1tpXTsKLQkJCUlDb250ZW50VHlwZSBwYXJlbnRUeXBlID0gY29udGVudFR5cGUuZ2V0QmFzZVR5cGUoKTsKLQkJCWlmIChERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnQoY29udGVudFR5cGUpOwotCi0JCQkJaWYgKHBhcmVudFR5cGUgIT0gbnVsbCkgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAoZXh0ZW5kcyAiICsgcGFyZW50VHlwZSArICIpIik7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQl9Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCIgICAiICsgY29udGVudFR5cGUuZ2V0TmFtZSgpKTsKLQkJCX0KLQkJCVN0cmluZ1tdIGZpbGVzcGVjcyA9IGNvbnRlbnRUeXBlLmdldEZpbGVTcGVjcyhJQ29udGVudFR5cGUuRklMRV9FWFRFTlNJT05fU1BFQyB8IElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlmb3IgKGludCBqID0gMDsgaiA8IGZpbGVzcGVjcy5sZW5ndGg7IGorKykgewotCQkJCQlTdHJpbmcgZmlsZXNwZWMgPSBmaWxlc3BlY3Nbal07Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICAiICsgZmlsZXNwZWMpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3V0aWwvUHJvamVjdFVuemlwVXRpbGl0eS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRhZDU4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3V0aWwvUHJvamVjdFVuemlwVXRpbGl0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy51dGlsOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcEZpbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLklPdmVyd3JpdGVRdWVyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS53aXphcmRzLmRhdGF0cmFuc2Zlci5GaWxlU3lzdGVtU3RydWN0dXJlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkud2l6YXJkcy5kYXRhdHJhbnNmZXIuSUltcG9ydFN0cnVjdHVyZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLndpemFyZHMuZGF0YXRyYW5zZmVyLkltcG9ydE9wZXJhdGlvbjsKLQotLyoqCi0gKiBJbXBvcnRzIHppcHBlZCBmaWxlcyBpbnRvIHRoZSB0ZXN0IHdvcmtzcGFjZS4gRGVsZXRlcyBhbGwgcHJvamVjdHMgaW4KLSAqIHdvcmtzcGFjZS4KLSAqIAotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIFByb2plY3RVbnppcFV0aWxpdHkgewotCWNsYXNzIE15T3ZlcndyaXRlUXVlcnkgaW1wbGVtZW50cyBJT3ZlcndyaXRlUXVlcnkgewotCQlwdWJsaWMgU3RyaW5nIHF1ZXJ5T3ZlcndyaXRlKFN0cmluZyBwYXRoU3RyaW5nKSB7Ci0JCQlyZXR1cm4gQUxMOwotCQl9Ci0JfQotCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPSkVDVF9aSVBTX0ZPTERFUiA9ICJQcm9qZWN0VGVzdEZpbGVzIjsKLQlwcml2YXRlIExpc3QgZkNyZWF0ZWRQcm9qZWN0cyA9IG51bGw7Ci0KLQlwdWJsaWMgUHJvamVjdFVuemlwVXRpbGl0eSgpIHsKLQkJLy8gZm9yIGRlbGV0aW9uIGxhdGVyCi0JCWZDcmVhdGVkUHJvamVjdHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGZpbGVUb0ltcG9ydAotCSAqICAgICAgICAgICAgdGhlIGZpbGUgeW91IHdpc2ggdG8gaW1wb3J0Ci0JICogQHBhcmFtIGZvbGRlclBhdGgKLQkgKiAgICAgICAgICAgIHRoZSBjb250YWluZXIgcGF0aCB3aXRoaW4gdGhlIHdvcmtzcGFjZQotCSAqLwotCXB1YmxpYyB2b2lkIGltcG9ydEZpbGUoRmlsZSBmaWxlVG9JbXBvcnQsIFN0cmluZyBmb2xkZXJQYXRoKSB7Ci0JCVdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBpbXBvcnRQcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJdHJ5IHsKLQkJCWlmIChmaWxlVG9JbXBvcnQuZXhpc3RzKCkpIHsKLQkJCQlJUGF0aCBjb250YWluZXJQYXRoID0gbmV3IFBhdGgoZm9sZGVyUGF0aCk7Ci0JCQkJLy9mQ3JlYXRlZFByb2plY3RzLmFkZChmb2xkZXJQYXRoKTsKLQkJCQlJSW1wb3J0U3RydWN0dXJlUHJvdmlkZXIgcHJvdmlkZXIgPSBGaWxlU3lzdGVtU3RydWN0dXJlUHJvdmlkZXIuSU5TVEFOQ0U7Ci0JCQkJSU92ZXJ3cml0ZVF1ZXJ5IG92ZXJ3cml0ZUltcGxlbWVudG9yID0gbmV3IE15T3ZlcndyaXRlUXVlcnkoKTsKLQkJCQlGaWxlW10gZmlsZXNUb0ltcG9ydCA9IHtmaWxlVG9JbXBvcnR9OwotCQkJCUltcG9ydE9wZXJhdGlvbiBpbXBvcnRPcCA9IG5ldyBJbXBvcnRPcGVyYXRpb24oY29udGFpbmVyUGF0aCwgbnVsbCwgcHJvdmlkZXIsIG92ZXJ3cml0ZUltcGxlbWVudG9yLCBBcnJheXMuYXNMaXN0KGZpbGVzVG9JbXBvcnQpKTsKLQkJCQlpbXBvcnRPcC5zZXRDcmVhdGVDb250YWluZXJTdHJ1Y3R1cmUoZmFsc2UpOwotCQkJCWltcG9ydE9wLnNldE92ZXJ3cml0ZVJlc291cmNlcyh0cnVlKTsKLQkJCQlpbXBvcnRPcC5ydW4oaW1wb3J0UHJvZ3Jlc3MpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJoYW5kbGUgc291cmNlIGRvZXNuJ3QgZXhpc3QiKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWltcG9ydFByb2dyZXNzLmRvbmUoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIHRoZSBmb2xsb3dpbmcgaXMgbG9naWMgZnJvbQotCSAqIGh0dHA6Ly93d3cuZGV2c2hlZC5jb20vYy9hL0phdmEvWmlwLU1lZXRzLUphdmEvMi8KLQkgKi8KLQkvLyBzcGVjaWZ5IGJ1ZmZlciBzaXplIGZvciBleHRyYWN0aW9uCi0Jc3RhdGljIGZpbmFsIGludCBCVUZGRVIgPSAyMDQ4OwotCi0JcHVibGljIHZvaWQgdW56aXBBbmRJbXBvcnQoRmlsZSBpbkZpbGUsIFN0cmluZyBkZXN0aW5hdGlvbkRpcmVjdG9yeSkgewotCQl0cnkgewotCQkJLy8gU3BlY2lmeSBmaWxlIHRvIGRlY29tcHJlc3MKLQkJCVN0cmluZyBpbkZpbGVOYW1lID0gaW5GaWxlLmdldEFic29sdXRlUGF0aCgpOyAvLyJjOi9leGFtcGxlLnppcCI7Ci0JCQkvLyBTcGVjaWZ5IGRlc3RpbmF0aW9uIHdoZXJlIGZpbGUgd2lsbCBiZSB1bnppcHBlZAotCQkJLy9TdHJpbmcgZGVzdGluYXRpb25EaXJlY3RvcnkgPQotCQkJLy8gImQ6L2VjbGlwc2VkZXYvTTVfU1NFX1RFU1RTX1dPUktTUEFDRS8iOyAvLyJjOi90ZW1wLyI7Ci0JCQlGaWxlIHNvdXJjZVppcEZpbGUgPSBuZXcgRmlsZShpbkZpbGVOYW1lKTsKLQkJCUZpbGUgdW56aXBEZXN0aW5hdGlvbkRpcmVjdG9yeSA9IG5ldyBGaWxlKGRlc3RpbmF0aW9uRGlyZWN0b3J5KTsKLQkJCS8vIE9wZW4gWmlwIGZpbGUgZm9yIHJlYWRpbmcKLQkJCVppcEZpbGUgemlwRmlsZSA9IG5ldyBaaXBGaWxlKHNvdXJjZVppcEZpbGUsIFppcEZpbGUuT1BFTl9SRUFEKTsKLQkJCS8vIENyZWF0ZSBhbiBlbnVtZXJhdGlvbiBvZiB0aGUgZW50cmllcyBpbiB0aGUgemlwIGZpbGUKLQkJCUVudW1lcmF0aW9uIHppcEZpbGVFbnRyaWVzID0gemlwRmlsZS5lbnRyaWVzKCk7Ci0JCQlTdHJpbmcgcHJvamVjdEZvbGRlck5hbWUgPSBudWxsOwotCQkJSVByb2plY3QgY3VycmVudFByb2plY3QgPSBudWxsOwotCQkJLy8gUHJvY2VzcyBlYWNoIGVudHJ5Ci0JCQl3aGlsZSAoemlwRmlsZUVudHJpZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLQkJCQkvLyBncmFiIGEgemlwIGZpbGUgZW50cnkKLQkJCQlaaXBFbnRyeSBlbnRyeSA9IChaaXBFbnRyeSkgemlwRmlsZUVudHJpZXMubmV4dEVsZW1lbnQoKTsKLQkJCQlTdHJpbmcgY3VycmVudEVudHJ5ID0gZW50cnkuZ2V0TmFtZSgpOwotCQkJCS8vU3lzdGVtLm91dC5wcmludGxuKCJFeHRyYWN0aW5nOiAiICsgZW50cnkpOwotCQkJCUZpbGUgZGVzdEZpbGUgPSBuZXcgRmlsZSh1bnppcERlc3RpbmF0aW9uRGlyZWN0b3J5LCBjdXJyZW50RW50cnkpOwotCQkJCS8vIGdyYWIgZmlsZSdzIHBhcmVudCBkaXJlY3Rvcnkgc3RydWN0dXJlCi0JCQkJRmlsZSBkZXN0aW5hdGlvblBhcmVudCA9IGRlc3RGaWxlLmdldFBhcmVudEZpbGUoKTsKLQkJCQkvLyBjcmVhdGUgdGhlIHBhcmVudCBkaXJlY3Rvcnkgc3RydWN0dXJlIGlmIG5lZWRlZAotCQkJCWRlc3RpbmF0aW9uUGFyZW50Lm1rZGlycygpOwotCQkJCS8vIGV4dHJhY3QgZmlsZSBpZiBub3QgYSBkaXJlY3RvcnkKLQkJCQlpZiAoIWVudHJ5LmlzRGlyZWN0b3J5KCkpIHsKLQkJCQkJQnVmZmVyZWRJbnB1dFN0cmVhbSBpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKHppcEZpbGUuZ2V0SW5wdXRTdHJlYW0oZW50cnkpKTsKLQkJCQkJLy8gZXN0YWJsaXNoIGJ1ZmZlciBmb3Igd3JpdGluZyBmaWxlCi0JCQkJCWJ5dGUgZGF0YVtdID0gbmV3IGJ5dGVbQlVGRkVSXTsKLQkJCQkJLy8gd3JpdGUgdGhlIGN1cnJlbnQgZmlsZSB0byBkaXNrCi0JCQkJCUZpbGVPdXRwdXRTdHJlYW0gZmlsZU91dHB1dFN0cmVhbSA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGRlc3RGaWxlKTsKLQkJCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGRlc3QgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKEJVRkZFUik7Ci0JCQkJCS8vIHJlYWQgYW5kIHdyaXRlIHVudGlsIGxhc3QgYnl0ZSBpcyBlbmNvdW50ZXJlZAotCQkJCQlib29sZWFuIGVvZiA9IGZhbHNlOwotCQkJCQlpbnQgbkJ5dGVzID0gMDsKLQkJCQkJd2hpbGUgKCFlb2YpIHsKLQkJCQkJCW5CeXRlcyA9IGlzLnJlYWQoZGF0YSwgMCwgQlVGRkVSKTsKLQkJCQkJCWlmIChuQnl0ZXMgIT0gLTEpIHsKLQkJCQkJCQlkZXN0LndyaXRlKGRhdGEsIDAsIG5CeXRlcyk7Ci0JCQkJCQl9Ci0JCQkJCQllbHNlIHsKLQkJCQkJCQllb2YgPSB0cnVlOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWRlc3QuZmx1c2goKTsKLQkJCQkJZGVzdC5jbG9zZSgpOwotCQkJCQlmaWxlT3V0cHV0U3RyZWFtLndyaXRlKGRlc3QudG9CeXRlQXJyYXkoKSk7Ci0JCQkJCWZpbGVPdXRwdXRTdHJlYW0uY2xvc2UoKTsKLQkJCQkJaXMuY2xvc2UoKTsKLQkJCQkJaWYgKHByb2plY3RGb2xkZXJOYW1lICE9IG51bGwpCi0JCQkJCQlpbXBvcnRGaWxlKGRlc3RGaWxlLCBwcm9qZWN0Rm9sZGVyTmFtZSk7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQkvLyBuZWVkIGhhbmRsZSB0byB0aGUgbWFpbiBwcm9qZWN0IGZvbGRlciB0byBjcmVhdGUKLQkJCQkJLy8gY29udGFpbmVyUGF0aAotCQkJCQkvLyB1bmxpa2UgdmVyc2lvbiBpbiBzc2UudGVzdHMsIHdlIGRvbid0IGNyZWF0ZSBwcm9qZWN0Ci0JCQkJCS8vIGZvcgotCQkJCQkvLyBldmVyeSBkaXJlY3RvcnkKLQkJCQkJLy8JCQkJCWlmKHByb2plY3RGb2xkZXJOYW1lID09IG51bGwpIHsKLQkJCQkJLy8JCQkJCQlwcm9qZWN0Rm9sZGVyTmFtZSA9IGRlc3RGaWxlLmdldE5hbWUoKTsKLQkJCQkJLy8JCQkJCQlmQ3JlYXRlZFByb2plY3RzLmFkZChwcm9qZWN0Rm9sZGVyTmFtZSk7Ci0JCQkJCS8vCQkJCQkJCi0JCQkJCS8vCQkJCQkJY3VycmVudFByb2plY3QgPQotCQkJCQkvLyBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdEZvbGRlck5hbWUpOwotCQkJCQkvLwkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCXppcEZpbGUuY2xvc2UoKTsKLQkJCS8vIGZpeGVzIHdvcmtzcGFjZSBtZXRhZGF0YSBmb3IgdGhlIHByb2plY3QKLQkJCS8vIGZvciBjbGVhbiBzdGFydHVwIG5leHQgcnVuCi0JCQlpZiAoY3VycmVudFByb2plY3QgIT0gbnVsbCkgewotCQkJCXRyeSB7Ci0JCQkJCVBhdGggcHJvamVjdExvY2F0aW9uID0gbmV3IFBhdGgoUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCkpOwotCQkJCQljcmVhdGVQcm9qZWN0KGN1cnJlbnRQcm9qZWN0LCBwcm9qZWN0TG9jYXRpb24sIG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJfQotCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGNleCkgewotCQkJCQljZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKLQkJCWlvZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqICAKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWZyZXNoV29ya3NwYWNlKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQlJUHJvamVjdFtdIHByb2plY3RzID0gd3NSb290LmdldFByb2plY3RzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLQkJCXByb2plY3RzW2ldLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQl9Ci0JCXdzUm9vdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBEZWxldGUgcHJvamVjdHMgY3JlYXRlZCAodW56aXBwZWQgYW5kIGltcG9ydGVkKSBieSB0aGlzIHV0aWxpdHkKLQkgKiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIGRlbGV0ZVByb2plY3RzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElQcm9qZWN0W10gcHJvamVjdHMgPSBnZXRDcmVhdGVkUHJvamVjdHMoKTsKLQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIGRlbGV0ZU9wID0gbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKLQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotCQkJCQlwcm9qZWN0c1tpXS5jbGVhckhpc3RvcnkobnVsbCk7Ci0JCQkJCXByb2plY3RzW2ldLmNsb3NlKG51bGwpOwotCQkJCQlwcm9qZWN0c1tpXS5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJfQotCQkJCXJlZnJlc2hXb3Jrc3BhY2UoKTsKLQkJCX0KLQkJfTsKLQkJV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQlkZWxldGVPcC5ydW4ocHJvZ3Jlc3MpOwotCQkvLyBzYXZlcyB0aGUgbmV3IHdvcmtzcGFjZSBtZXRhZGF0YQotCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuc2F2ZSh0cnVlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkZWxldGVQcm9qZWN0KFN0cmluZyBwcm9qZWN0TmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIFN0cmluZyBuYW1lID0gcHJvamVjdE5hbWU7Ci0JCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCWZpbmFsIElQcm9qZWN0IHByb2ogPSB3c1Jvb3QuZ2V0UHJvamVjdChuYW1lKTsKLQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIGRlbGV0ZU9wID0gbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbihwcm9qKSB7Ci0JCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCS8vCQkJCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9Ci0JCQkJLy8gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJCQkvLwkJCQlJUHJvamVjdCBwcm9qID0gd3NSb290LmdldFByb2plY3QobmFtZSk7Ci0JCQkJaWYgKHByb2ogIT0gbnVsbCAmJiBwcm9qLmV4aXN0cygpKSB7Ci0JCQkJCXByb2ouY2xlYXJIaXN0b3J5KG51bGwpOwotCQkJCQkvL3Byb2ouY2xvc2UobnVsbCk7Ci0JCQkJCXByb2oucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkJCXRyeSB7Ci0JCQkJCQlwcm9qLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQkJfQotCQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkJCS8vIGp1c3QgdHJ5IGFnYWluIChub3Qgc3VyZSB3aHkgdGhleSBhcmUgbm90IGJlaW5nCi0JCQkJCQkvLyBkZWxldGVkKQotCQkJCQkJcHJvai5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQkJCXByb2ouZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCQl9Ci0JCQkJCS8vcHJvaiA9IG51bGw7Ci0JCQkJfQotCQkJCXJlZnJlc2hXb3Jrc3BhY2UoKTsKLQkJCX0KLQkJfTsKLQkJV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQlkZWxldGVPcC5ydW4ocHJvZ3Jlc3MpOwotCQkvLyBzYXZlcyB0aGUgbmV3IHdvcmtzcGFjZSBtZXRhZGF0YQotCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuc2F2ZSh0cnVlLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIElQcm9qZWN0cyB0aGF0IHdlcmUgdW56aXBwZWQgYW5kIGltcG9ydGVkIGludG8gdGhlIHdvcmtzcGFjZSBieQotCSAqICAgICAgICAgdGhpcyB1dGlsaXR5Ci0JICovCi0JcHVibGljIElQcm9qZWN0W10gZ2V0Q3JlYXRlZFByb2plY3RzKCkgewotCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQlTdHJpbmdbXSBwcm9qZWN0TmFtZXMgPSAoU3RyaW5nW10pIGZDcmVhdGVkUHJvamVjdHMudG9BcnJheShuZXcgU3RyaW5nW2ZDcmVhdGVkUHJvamVjdHMuc2l6ZSgpXSk7Ci0JCUlQcm9qZWN0W10gcHJvamVjdHMgPSBuZXcgSVByb2plY3RbcHJvamVjdE5hbWVzLmxlbmd0aF07Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdE5hbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlwcm9qZWN0c1tpXSA9IHdzUm9vdC5nZXRQcm9qZWN0KHByb2plY3ROYW1lc1tpXSk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3RzOwotCX0KLQotCXB1YmxpYyB2b2lkIGluaXRKYXZhUHJvamVjdChTdHJpbmcgcHJvak5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gcmVzeW5jaAotCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCS8vY2hhbmdlIHByZXJlcXMgdG8gZ2V0IHRoaXMgZnVuY3Rpb25hbGl0eSBiYWNrIGluCi0JCUlQcm9qZWN0IHByb2ogPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvak5hbWUpOwotCQkvLyBuZWVkIHRvIGFkZCBqYXZhIG5hdHVyZSwgb3IgZWxzZSBwcm9qZWN0IHdvbid0ICJleGlzdCgpIiBpbiB0aGUKLQkJLy8gamF2YSBlbGVtZW50IHNlbnNlCi0JCVN0cmluZ1tdIG5hdHVyZUlkcyA9IHsib3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZSJ9OwotCQlpZiAoIXByb2ouaXNPcGVuKCkpIHsKLQkJCXByb2oub3BlbihudWxsKTsKLQkJfQotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2MgPSBwcm9qLmdldERlc2NyaXB0aW9uKCk7Ci0JCWRlc2Muc2V0TmF0dXJlSWRzKG5hdHVyZUlkcyk7Ci0JCXByb2ouc2V0RGVzY3JpcHRpb24oZGVzYywgbnVsbCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3QoSVByb2plY3QgcHJvamVjdCwgSVBhdGggbG9jYXRpb25QYXRoLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKG1vbml0b3IgPT0gbnVsbCkgewotCQkJbW9uaXRvciA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJfQotCQltb25pdG9yLmJlZ2luVGFzaygiY3JlYXRpbmcgdGVzdCBwcm9qZWN0IiwgMTApOwotCQkvLyBjcmVhdGUgdGhlIHByb2plY3QKLQkJdHJ5IHsKLQkJCWlmICghcHJvamVjdC5leGlzdHMoKSkgewotCQkJCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzYyA9IHByb2plY3QuZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCQlpZiAoUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS5lcXVhbHMobG9jYXRpb25QYXRoKSkgewotCQkJCQlsb2NhdGlvblBhdGggPSBudWxsOwotCQkJCX0KLQkJCQlkZXNjLnNldExvY2F0aW9uKGxvY2F0aW9uUGF0aCk7Ci0JCQkJcHJvamVjdC5jcmVhdGUoZGVzYywgbW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCQlpZiAoIXByb2plY3QuaXNPcGVuKCkpIHsKLQkJCQlwcm9qZWN0Lm9wZW4obW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9uaXRvciAhPSBudWxsKSB7Ci0JCQkJbW9uaXRvci5kb25lKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBkZWxldGVQcm9qZWN0KElQcm9qZWN0IGZQcm9qZWN0KSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotCQlmaW5hbCBJUHJvamVjdCBwcm9qID0gZlByb2plY3Q7Ci0JCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBkZWxldGVPcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24ocHJvaikgewotCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQkvLwkJCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPQotCQkJCS8vIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCQkJLy8JCQkJSVByb2plY3QgcHJvaiA9IHdzUm9vdC5nZXRQcm9qZWN0KG5hbWUpOwotCQkJCWlmIChwcm9qICE9IG51bGwgJiYgcHJvai5leGlzdHMoKSkgewotCQkJCQlwcm9qLmNsZWFySGlzdG9yeShudWxsKTsKLQkJCQkJLy9wcm9qLmNsb3NlKG51bGwpOwotCQkJCQlwcm9qLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCQlwcm9qLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQkJLy9wcm9qID0gbnVsbDsKLQkJCQl9Ci0JCQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCQkJfQotCQl9OwotCQkvL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJZGVsZXRlT3AucnVuKG51bGwpOwotCQkvLyBzYXZlcyB0aGUgbmV3IHdvcmtzcGFjZSBtZXRhZGF0YQotCQkvL1Jlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5zYXZlKHRydWUsIG51bGwpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3V0aWwvV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3V0aWwvV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkN2Y3ZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy91dGlsL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLQotY2xhc3MgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIGltcGxlbWVudHMgSVByb2dyZXNzTW9uaXRvciB7Ci0JcHJpdmF0ZSBib29sZWFuIGZpbmlzaGVkID0gZmFsc2U7Ci0KLQlwdWJsaWMgdm9pZCBiZWdpblRhc2soU3RyaW5nIG5hbWUsIGludCB0b3RhbFdvcmspIHsKLQkJLy8gbm9vcAotCX0KLQotCXB1YmxpYyB2b2lkIGRvbmUoKSB7Ci0JCWZpbmlzaGVkID0gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0ZpbmlzaGVkKCkgewotCQlyZXR1cm4gZmluaXNoZWQ7Ci0JfQotCi0JcHVibGljIHZvaWQgaW50ZXJuYWxXb3JrZWQoZG91YmxlIHdvcmspIHsKLQkJLy8gbm9vcAotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzQ2FuY2VsZWQoKSB7Ci0JCXJldHVybiBmaW5pc2hlZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDYW5jZWxlZChib29sZWFuIHZhbHVlKSB7Ci0JCWlmICh2YWx1ZSA9PSB0cnVlKQotCQkJZmluaXNoZWQgPSB0cnVlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFRhc2tOYW1lKFN0cmluZyBuYW1lKSB7Ci0JCS8vIG5vb3AKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzdWJUYXNrKFN0cmluZyBuYW1lKSB7Ci0JCS8vIG5vb3AKLQl9Ci0KLQlwdWJsaWMgdm9pZCB3b3JrZWQoaW50IHdvcmspIHsKLQkJLy8gbm9vcAotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3dyaXRlL1Rlc3RDb2RlZFdyaXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3dyaXRlL1Rlc3RDb2RlZFdyaXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZjY0YzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy93cml0ZS9UZXN0Q29kZWRXcml0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy53cml0ZTsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvZGVkU3RyZWFtQ3JlYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuRW5jb2RpbmdSdWxlOwotCi1wdWJsaWMgY2xhc3MgVGVzdENvZGVkV3JpdGUgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqIEEgdGFibGUgb2YgaGV4IGRpZ2l0cyAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBoZXhEaWdpdCA9IHsnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRid9OwotCXByaXZhdGUgc3RhdGljIFN0cmluZ0J1ZmZlciBzQnVmZiA9IG5ldyBTdHJpbmdCdWZmZXIoMik7Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgYnl0ZVRvSGV4KGJ5dGUgYnl0ZWNoYXIpIHsKLQkJc0J1ZmYuc2V0TGVuZ3RoKDApOwotCQlpbnQgbG93ID0gYnl0ZWNoYXIgJiAweEY7Ci0JCWludCBoaSA9IChieXRlY2hhciA+PiA0KSAmIDB4RjsKLQkJc0J1ZmYuYXBwZW5kKHRvSGV4KGhpKSk7Ci0JCXNCdWZmLmFwcGVuZCh0b0hleChsb3cpKTsKLQkJcmV0dXJuIHNCdWZmLnRvU3RyaW5nKCk7Ci0JfQotCi0JLyoqCi0JICogQ29udmVydCBhIG5pYmJsZSB0byBhIGhleCBjaGFyYWN0ZXIKLQkgKiAKLQkgKiBAcGFyYW0gbmliYmxlCi0JICogICAgICAgICAgICB0aGUgbmliYmxlIHRvIGNvbnZlcnQuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgY2hhciB0b0hleChpbnQgbmliYmxlKSB7Ci0JCXJldHVybiBoZXhEaWdpdFsobmliYmxlICYgMHhGKV07Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQkvKioKLQkgKiAgCi0JICovCi0JcHVibGljIFRlc3RDb2RlZFdyaXRlKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFRlc3RDb2RlZFdyaXRlKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGUoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcganNwID0gIjwlQCBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTNcIiU+IjsKLQkJQ29kZWRTdHJlYW1DcmVhdG9yIGNvZGVkU3RyZWFtQ3JlYXRvciA9IG5ldyBDb2RlZFN0cmVhbUNyZWF0b3IoKTsKLQkJY29kZWRTdHJlYW1DcmVhdG9yLnNldCgiZHVtbXkuanNwIiwganNwKTsKLQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSA9IGNvZGVkU3RyZWFtQ3JlYXRvci5nZXRDb2RlZEJ5dGVBcnJheU91dHB1dFN0cmVhbShFbmNvZGluZ1J1bGUuQ09OVEVOVF9CQVNFRCk7Ci0JCWlmIChERUJVRykgewotCQkJZGVidWdQcmludCgidGVzdFNpbXBsZSIsIGpzcCwgIklTTy04ODU5LTMiLCBvdXRwdXRTdHJlYW0pOwotCQl9Ci0JCWFzc2VydE5vdE51bGwob3V0cHV0U3RyZWFtKTsKLQotCX0KLQotCXByaXZhdGUgdm9pZCBkZWJ1Z1ByaW50KFN0cmluZyB0ZXN0bmFtZSwgU3RyaW5nIG9yaWdpbmFsU3RyaW5nLCBTdHJpbmcgZW5jb2RpbmcsIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0pIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbih0ZXN0bmFtZSk7Ci0JCWJ5dGVbXSBieXRlcyA9IG91dHB1dFN0cmVhbS50b0J5dGVBcnJheSgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50KGJ5dGVUb0hleChieXRlc1tpXSkpOwotCQl9Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQlpZiAoZW5jb2RpbmcgPT0gbnVsbCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKG5ldyBTdHJpbmcoYnl0ZXMpKTsKLQotCQl9Ci0JCWVsc2UgewotCQkJU3lzdGVtLm91dC5wcmludGxuKG5ldyBTdHJpbmcoYnl0ZXMsIGVuY29kaW5nKSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlVVRGMTZCRSgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBqc3AgPSAiPCVAIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTE2QkVcIiU+IjsKLQkJQ29kZWRTdHJlYW1DcmVhdG9yIGNvZGVkU3RyZWFtQ3JlYXRvciA9IG5ldyBDb2RlZFN0cmVhbUNyZWF0b3IoKTsKLQkJY29kZWRTdHJlYW1DcmVhdG9yLnNldCgiZHVtbXkuanNwIiwganNwKTsKLQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSA9IGNvZGVkU3RyZWFtQ3JlYXRvci5nZXRDb2RlZEJ5dGVBcnJheU91dHB1dFN0cmVhbShFbmNvZGluZ1J1bGUuQ09OVEVOVF9CQVNFRCk7Ci0JCWlmIChERUJVRykgewotCQkJZGVidWdQcmludCgidGVzdFNpbXBsZVVURjE2QkUiLCBqc3AsICJVVEYtMTZCRSIsIG91dHB1dFN0cmVhbSk7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbChvdXRwdXRTdHJlYW0pOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZXIoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlDb2RlZFN0cmVhbUNyZWF0b3IgY29kZWRTdHJlYW1DcmVhdG9yID0gbmV3IENvZGVkU3RyZWFtQ3JlYXRvcigpOwotCQlTdHJpbmcgeG1sU3RyaW5nID0gIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi0xNlwiPz48dGFnPnRlc3QgdGV4dDwvdGFnPiI7Ci0JCWNvZGVkU3RyZWFtQ3JlYXRvci5zZXQoImR1bW15LnhtbCIsIHhtbFN0cmluZyk7Ci0JCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBjb2RlZFN0cmVhbUNyZWF0b3IuZ2V0Q29kZWRCeXRlQXJyYXlPdXRwdXRTdHJlYW0oRW5jb2RpbmdSdWxlLkNPTlRFTlRfQkFTRUQpOwotCQlpZiAoREVCVUcpIHsKLQkJCWRlYnVnUHJpbnQoInRlc3RTaW1wbGVyIiwgeG1sU3RyaW5nLCAiVVRGLTE2Iiwgb3V0cHV0U3RyZWFtKTsKLQkJfQotCQlhc3NlcnROb3ROdWxsKG91dHB1dFN0cmVhbSk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlc3QoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlDb2RlZFN0cmVhbUNyZWF0b3IgY29kZWRTdHJlYW1DcmVhdG9yID0gbmV3IENvZGVkU3RyZWFtQ3JlYXRvcigpOwotCQlTdHJpbmcgdGV4dCA9ICJ0ZXN0IHRleHQiOwotCQljb2RlZFN0cmVhbUNyZWF0b3Iuc2V0KCJkdW1teS54bWwiLCB0ZXh0KTsKLQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSA9IGNvZGVkU3RyZWFtQ3JlYXRvci5nZXRDb2RlZEJ5dGVBcnJheU91dHB1dFN0cmVhbShFbmNvZGluZ1J1bGUuQ09OVEVOVF9CQVNFRCk7Ci0JCWlmIChERUJVRykgewotCQkJZGVidWdQcmludCgidGVzdFNpbXBsZXN0IiwgdGV4dCwgbnVsbCwgb3V0cHV0U3RyZWFtKTsKLQkJfQotCQlhc3NlcnROb3ROdWxsKG91dHB1dFN0cmVhbSk7Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy94bWwvWE1MRW5jb2RpbmdUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy94bWwvWE1MRW5jb2RpbmdUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzdkZTJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTEVuY29kaW5nVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcueG1sOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0RGVjb2RlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNvZGluZ0Vycm9yQWN0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkVuY29kaW5nTWVtZW50bzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuSVJlc291cmNlQ2hhcnNldERldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5YTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5UZXN0c1BsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgWE1MRW5jb2RpbmdUZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIGludCBSRUFEX0JVRkZFUl9TSVpFID0gODAwMDsKLQlwcml2YXRlIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlUm9vdCA9ICJ0ZXN0ZmlsZXMvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlRGlyID0gInhtbC8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVSb290ICsgZmlsZURpcjsKLQotCXB1YmxpYyBYTUxFbmNvZGluZ1Rlc3RzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlU3RyZWFtKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkSUFOQUVuY29kaW5nLCBJUmVzb3VyY2VDaGFyc2V0RGV0ZWN0b3IgZGV0ZWN0b3IpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUZpbGUgZmlsZSA9IFRlc3RzUGx1Z2luLmdldFRlc3RGaWxlKGZpbGVuYW1lKTsKLQkJaWYgKCFmaWxlLmV4aXN0cygpKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihmaWxlbmFtZSArICIgd2FzIG5vdCBmb3VuZCIpOwotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7Ci0JCS8vSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlJbnB1dFN0cmVhbSBpc3RyZWFtID0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShpbnB1dFN0cmVhbSk7Ci0JCXRyeSB7Ci0JCQlkZXRlY3Rvci5zZXQoaXN0cmVhbSk7Ci0JCQlFbmNvZGluZ01lbWVudG8gZW5jb2RpbmdNZW1lbnRvID0gKChYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IpZGV0ZWN0b3IpLmdldEVuY29kaW5nTWVtZW50bygpOwotCQkJU3RyaW5nIGZvdW5kSUFOQUVuY29kaW5nID0gZW5jb2RpbmdNZW1lbnRvLmdldEphdmFDaGFyc2V0TmFtZSgpOwotCQkJLy8gSSBjaGFuZ2VkIG1hbnkgImVxdWFscyIgdG8gImVxdWFsc0lnbm9yZUNhc2UiIG9uIDExLzQvMjAwMiwKLQkJCS8vIHNpbmNlCi0JCQkvLyBzb21lIGlzc3VlcyB3aXRoIFNISUZUX0pJUyB2cy4gU2hpZnRfSklTIHdlcmUgY2F1c2luZyBmYWlsdXJlcy4KLQkJCS8vIFdlIGRvIHdhbnQgdG8gYmUgdG9sZXJhbnQgb24gaW5wdXQsIGFuZCBhY2NlcHQgZWl0aGVyLCBidXQgSQotCQkJLy8gdGhpbmsKLQkJCS8vIHRoYXQgU3VwcG9ydGVkSmF2YUVuY29kaW5ncyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvICJyZWNvbW1lbmQiCi0JCQkvLyBTaGlmdF9KSVMuCi0JCQlib29sZWFuIGV4cGVjdGVkSUFOQVJlc3VsdCA9IGZhbHNlOwotCQkJZXhwZWN0ZWRJQU5BUmVzdWx0ID0gZXhwZWN0ZWRJQU5BRW5jb2RpbmcuZXF1YWxzSWdub3JlQ2FzZShmb3VuZElBTkFFbmNvZGluZyk7Ci0KLQkJCWFzc2VydFRydWUoImVuY29kaW5nIHRlc3QgZmlsZSAiICsgZmlsZW5hbWUgKyAiIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRJQU5BRW5jb2RpbmcgKyAiIGZvdW5kOiAiICsgZm91bmRJQU5BRW5jb2RpbmcsIGV4cGVjdGVkSUFOQVJlc3VsdCk7Ci0JCQkvLyBhIHZlcnkgc2ltcGxlIHJlYWQgdGVzdCAuLi4gd2lsbCBjYXVzZSBKVW5pdCBlcnJvciAobm90IGZhaWwpIGlmIHRocm93cyBleGNlcHRpb24uCi0JCQllbnN1cmVDYW5SZWFkKGZpbGVuYW1lLCBmb3VuZElBTkFFbmNvZGluZywgaXN0cmVhbSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAoaXN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaXN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQkJaWYgKGlucHV0U3RyZWFtICE9IG51bGwpIHsKLQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTEVtcHR5RmlsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJFbXB0eUZpbGUueG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi04IiwgbmV3IFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LnhtbCI7Ci0JCVN0cmluZyBpYW5hSW5GaWxlID0gIklTTy04ODU5LTEiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBpYW5hSW5GaWxlLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxOb3JtYWxOb25EZWZhdWx0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk5vcm1hbE5vbkRlZmF1bHQueG1sIjsKLQkJU3RyaW5nIGlhbmFJbkZpbGUgPSAiSVNPLTg4NTktMSI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsIGlhbmFJbkZpbGUsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTE5vRW5jb2RpbmcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9FbmNvZGluZy54bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTgiLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCS8qKgotCSAqIENhdXRpb24sIHdoZW4gdGhpcyBmaWxlIHByaW50cyBvdXQgaW4gY29uc29sZSAod2hlbiBkZWJ1ZyBzZXQgdG8gdHJ1ZSwgaXQgYXBwZWFycyAKLQkgKiBpbmNvcnJlY3QgKGR1ZSB0byBmb250IHByb2JsZW1zIGluIGNvbnNvbGUpLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNldpdGhKYXBhbmVzZUNoYXJzLnhtbCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTZCRSIsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyB0ZXN0IHNob3dzIHVuaWNvZGUgQk9NIHNob3VsZCB0YWtlIHByaW9yaXR5IG92ZXIgc2V0dGluZ3MvZGVmYXVsdHMKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi54bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2IiwgbmV3IFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIHRlc3Qgc2hvd3MgdW5pY29kZSBCT00gc2hvdWxkIHRha2UgcHJpb3JpdHkgb3ZlciBzZXR0aW5ncy9kZWZhdWx0cwotCSAqIE5vdGU6IFVURi0xNiA9PSBVVEYtMTZCRQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RVdGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLnhtbCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTZCRSIsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFVURjgzQnl0ZUJPTSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJVVEY4V2l0aDNCeXRlQk9NLnhtbCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtOCIsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JLyoqCi0JICogRW5zdXJlcyB0aGF0IGFuIElucHV0U3RyZWFtIGhhcyBtYXJrL3Jlc2V0IHN1cHBvcnQuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSW5wdXRTdHJlYW0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShJbnB1dFN0cmVhbSBvcmlnaW5hbCkgewotCQlpZiAob3JpZ2luYWwgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQlpZiAob3JpZ2luYWwubWFya1N1cHBvcnRlZCgpKQotCQkJcmV0dXJuIG9yaWdpbmFsOwotCQlyZXR1cm4gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0ob3JpZ2luYWwpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nQnVmZmVyIHJlYWRJbnB1dFN0cmVhbShSZWFkZXIgcmVhZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBudW1SZWFkID0gMDsKLQkJY2hhciB0QnVmZltdID0gbmV3IGNoYXJbUkVBRF9CVUZGRVJfU0laRV07Ci0JCXdoaWxlICgobnVtUmVhZCA9IHJlYWRlci5yZWFkKHRCdWZmLCAwLCB0QnVmZi5sZW5ndGgpKSAhPSAtMSkgewotCQkJYnVmZmVyLmFwcGVuZCh0QnVmZiwgMCwgbnVtUmVhZCk7Ci0JCX0KLQkJcmV0dXJuIGJ1ZmZlcjsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBqdXN0IHJlYWRzIHRvIHN0cmVhbSwgdG8gYmUgc3VyZSBpdCBjYW4gYmUgcmVhZCBwZXIKLQkgKiBlbmNvZGluZywgd2l0aG91dCBleGNlcHRpb24uCi0JICovCi0JcHJpdmF0ZSB2b2lkIGVuc3VyZUNhblJlYWQoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZW5jb2RpbmcsIElucHV0U3RyZWFtIGluU3RyZWFtKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlDaGFyc2V0IGNoYXJzZXQgPSBDaGFyc2V0LmZvck5hbWUoZW5jb2RpbmcpOwotCQlDaGFyc2V0RGVjb2RlciBjaGFyc2V0RGVjb2RlciA9IGNoYXJzZXQubmV3RGVjb2RlcigpOwotCQljaGFyc2V0RGVjb2Rlci5vbk1hbGZvcm1lZElucHV0KENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0JCWNoYXJzZXREZWNvZGVyLm9uVW5tYXBwYWJsZUNoYXJhY3RlcihDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCi0JCUlucHV0U3RyZWFtUmVhZGVyIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpblN0cmVhbSwgY2hhcnNldERlY29kZXIpOwotCQlTdHJpbmdCdWZmZXIgc3RyaW5nQnVmZmVyID0gcmVhZElucHV0U3RyZWFtKHJlYWRlcik7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZmlsZW5hbWUpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKHN0cmluZ0J1ZmZlci50b1N0cmluZygpKTsKLQkJfQotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIzZDAyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3htbC9YTUxIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnhtbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuRW5jb2RpbmdQYXJzZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkhlYWRQYXJzZXJUb2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuWE1MSGVhZFRva2VuaXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuWE1MSGVhZFRva2VuaXplckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLlRlc3RzUGx1Z2luOwotCi0KLXB1YmxpYyBjbGFzcyBYTUxIZWFkVG9rZW5pemVyVGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZURpciA9ICJ4bWwvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlSG9tZSA9ICJ0ZXN0ZmlsZXMvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlTG9jYXRpb24gPSBmaWxlSG9tZSArIGZpbGVEaXI7Ci0JcHJpdmF0ZSBTdHJpbmcgZkVuY29kaW5nID0gbnVsbDsKLQlwcml2YXRlIEhlYWRQYXJzZXJUb2tlbiBmRmluYWxUb2tlbjsKLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkTmFtZSkgewotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBleHBlY3RlZE5hbWUsIG51bGwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkTmFtZSwgU3RyaW5nIGV4cGVjdGVkRmluYWxUb2tlblR5cGUpIHsKLQotCQlYTUxIZWFkVG9rZW5pemVyIHRva2VuaXplciA9IG51bGw7Ci0JCVJlYWRlciBmaWxlUmVhZGVyID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWlmIChERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICIgKyBmaWxlbmFtZSk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQl9Ci0JCQlmaWxlUmVhZGVyID0gVGVzdHNQbHVnaW4uZ2V0Qnl0ZVJlYWRlcihmaWxlbmFtZSk7Ci0JCQl0b2tlbml6ZXIgPSBuZXcgWE1MSGVhZFRva2VuaXplcihmaWxlUmVhZGVyKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciBvcGVuaW5nIGZpbGUgXCIiICsgZmlsZW5hbWUgKyAiXCIiKTsKLQkJfQotCi0JCVN0cmluZyByZXN1bHRWYWx1ZSA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlwYXJzZSh0b2tlbml6ZXIpOwotCQkJcmVzdWx0VmFsdWUgPSBmRW5jb2Rpbmc7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlhNTCBIZWFkIFRva2VuaXplciBGb3VuZCBFbmNvZGluZzogIiArIHJlc3VsdFZhbHVlKTsKLQkJCX0KLQkJCWZpbGVSZWFkZXIuY2xvc2UoKTsKLQkJfQotCQljYXRjaCAoamF2YS5pby5JT0V4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkFuIEkvTyBlcnJvciBvY2N1cmVkIHdoaWxlIHNjYW5uaW5nIDoiKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihlKTsKLQkJfQotCi0JCWlmIChleHBlY3RlZEZpbmFsVG9rZW5UeXBlICE9IG51bGwpIHsKLQkJCWFzc2VydFRydWUoImRpZCBub3QgZW5kIGFzIGV4cGVjdGVkLiBmb3VuZDogICIgKyBmRmluYWxUb2tlbi5nZXRUeXBlKCksIGV4cGVjdGVkRmluYWxUb2tlblR5cGUuZXF1YWxzKGZGaW5hbFRva2VuLmdldFR5cGUoKSkpOwotCQl9Ci0JCWVsc2UgewotCQkJaWYgKGV4cGVjdGVkTmFtZSA9PSBudWxsKSB7Ci0JCQkJLy8gVE9ETzogdGhpcyB0ZXN0IGJyYW5jaCBuZWVkcyB0byBiZSBpbXByb3ZlZCAuLi4gZG9lc24ndAotCQkJCS8vIGZhaWwKLQkJCQkvLyBhcyBpdCBzaG91bGQKLQkJCQkvLyAoc3VjaCBhcyB3aGVuIHRva2VuaXplciBjaGFuZ2VkIHRvIHJldHVybiBlYXJseSB3aGVuCi0JCQkJLy8gVW5pY29kZQotCQkJCS8vIHN0cmVhbSBmb3VuZCkuCi0JCQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgbm8gZW5jb2RpbmcsIGJ1dCBmb3VuZDogIiArIHJlc3VsdFZhbHVlLCByZXN1bHRWYWx1ZSA9PSBudWxsKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWFzc2VydFRydWUoImV4cGVjdGVkICIgKyBleHBlY3RlZE5hbWUgKyAiIGJ1dCBmb3VuZCAiICsgcmVzdWx0VmFsdWUsIGV4cGVjdGVkTmFtZS5lcXVhbHMocmVzdWx0VmFsdWUpKTsKLQkJCX0KLQkJfQotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIHBhcnNlKFhNTEhlYWRUb2tlbml6ZXIgdG9rZW5pemVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlIZWFkUGFyc2VyVG9rZW4gdG9rZW4gPSBudWxsOwotCQlTdHJpbmcgdG9rZW5UeXBlID0gbnVsbDsKLQkJZG8gewotCQkJdG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQl0b2tlblR5cGUgPSB0b2tlbi5nZXRUeXBlKCk7Ci0JCQkvLyBub3JtYWxseSAicGFyc2luZyIgdGhlIHRva2VucyBzaG91bGQgYmUgZG9uZSBieSBwYXJzZXIKLQkJCS8vIEBzZWUsIFhNTFJlc291cmNlRW5jb2RvaW5nRGV0ZWN0b3IKLQkJCS8vIGJ1dCB3ZSdsbAotCQkJLy8gZG8gaXQgaGVyZSBmb3IgYSBsaXR0bGUKLQkJCS8vIG1vcmUgaW5kZXBlbmRlbnQgdGVzdC4KLQkJCWlmICh0b2tlblR5cGUgPT0gRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVVRGMTZCRSkgewotCQkJCWZFbmNvZGluZyA9ICJVVEYxNkJFSW5TdHJlYW0iOwotCQkJfQotCQkJaWYgKHRva2VuVHlwZSA9PSBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VVEYxNkxFKSB7Ci0JCQkJZkVuY29kaW5nID0gIlVURjE2TEVJblN0cmVhbSI7Ci0JCQl9Ci0JCQlpZiAodG9rZW5UeXBlID09IEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLlVURjgzQnl0ZUJPTSkgewotCQkJCWZFbmNvZGluZyA9ICJVVEY4M0J5dGVCT01JblN0cmVhbSI7Ci0JCQl9Ci0JCQlpZiAodG9rZW5UeXBlID09IFhNTEhlYWRUb2tlbml6ZXJDb25zdGFudHMuWE1MRGVsRW5jb2RpbmcpIHsKLQkJCQlpZiAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCQl0b2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKLQkJCQkJdG9rZW5UeXBlID0gdG9rZW4uZ2V0VHlwZSgpOwotCQkJCQlpZiAoaXNMZWdhbFN0cmluZyh0b2tlblR5cGUpKSB7Ci0JCQkJCQlmRW5jb2RpbmcgPSB0b2tlbi5nZXRUZXh0KCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpOwotCQkvLyBmb3IgdGVzdGluZwotCQlmRmluYWxUb2tlbiA9IHRva2VuOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0xlZ2FsU3RyaW5nKFN0cmluZyB0b2tlblR5cGUpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkJaWYgKHRva2VuVHlwZSAhPSBudWxsKSB7Ci0JCQlyZXN1bHQgPSB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLlN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLlVuRGVsaW1pdGVkU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuSW52YWxpZFRlcm1pbmF0ZWRTdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5JbnZhbGlkVGVybWludGF0ZWRVbkRlbGltaXRlZFN0cmluZ1ZhbHVlKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIE5vcm1hbCBYTUxEZWNsYXJhdGlvbiB3aXRoIGRlZmF1bHQgZW5jb2Rpbmcgc3BlY2lmaWVkIChVVEYtOCkKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QmVzdENhc2UoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0Tm9ybWFsQ2FzZS54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTgiKTsKLQotCX0KLQotCS8qKgotCSAqIFRoaXMgaXMgYSBVVEYtMTYgZmlsZSAoVW5pY29kZSBieXRlcyBpbiBCT00pLiBTbywgdGhlIHRva2VuaXplciBieQotCSAqIGl0c2VsZiBjYW4ndCByZWFkIGNvcnJlY3RseS4gUmV0dXJucyBudWxsIGluICJwdXJlIiB0b2tlbml6ZXIgdGVzdCwgYnV0Ci0JICogZW5jb2RpbmcgZGV0ZWN0b3IgY2FzZSBzaG91bGQgc3RpbGwgaGFuZGxlIHNpbmNlIGxvb2tzIGZvciBieXRlcyBmaXJzdC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTYoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0VVRGMTYueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURjE2QkVJblN0cmVhbSIpOwotCX0KLQotCS8qKgotCSAqIEp1c3QgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGNob2tlIG9uIGVtcHR5IGZpbGUuCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEVtcHR5RmlsZSgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIkVtcHR5RmlsZS54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0aW5nIGFzIGEgcmVzdWx0IG9mIENNVkMgZGVmZWN0IDIxNzcyMAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RFVUNKUCgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgImV1Y2pwLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJFVUMtSlAiKTsKLQl9Ci0KLQkvKioKLQkgKiBFeHRlbmRlZCBYTUwgRGVjbGFyYXRpb24gdGhhdCBjb250YWlucyAnc3RhbmRhbG9uZScgYXR0cmlidXRlCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEV4dHJhQXR0ckNhc2UoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0RXh0cmFWYWxpZFN0dWZmLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtOCIpOwotCi0JfQotCi0JLyoqCi0JICogQSBjYXNlIHdpdGggYSB2YWxpZCBlbmNvZGluZywgYnV0IGV4dHJhIGF0dHJpYnV0ZXMgd2hpY2ggYXJlIG5vdAotCSAqIHZhbGlkL21lYW5pbmdmdWwuCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEV4dHJhSnVua0Nhc2UoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0RXh0cmFKdW5rLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS0xIik7Ci0JfQotCi0JLyoqCi0JICogTWlzc2luZyAyIHF1b3Rlcywgb25lIGFuZCBlbmQgb2YgdmVyc2lvbiB2YWx1ZSBhbmQgb25lIGF0IGJlZ2lubmluZyBvZgotCSAqIGVuY29kaW5nIHZhbHVlLiBJbiB0aGlzIGNhc2UsIHRva2VuaXplciBoYW5kbGVzIGFzIHVuZGVsaW1pdGUgc3RyaW5nLAotCSAqIGJ1dCBpZiB3ZSBldmVyIG1vZGlmaXkgdG8gYWxzbyBsb29rIGZvciAndmVyc2lvbicsIHRoZW4gd291bGQgbm90IHdvcmsKLQkgKiB0aGUgc2FtZS4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsRm9ybWVkKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdElsbEZvcm1lZC54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBNaXNzaW5nIFhNTERlY2wgZW5kIHRhZyAuLi4gd2Ugc2hvdWxkIGJlIGFibGUgdG8gc2FmZWx5IGd1ZXNzLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RJbGxGb3JtZWQyKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdElsbEZvcm1lZDIueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi04Iik7Ci0JfQotCi0JLyoqCi0JICogTWlzc2luZyBlbmQgcXVvdGUgb24gVVRGLTggYXR0cmlidXRlLCBzbyBwaWNrcyB1cCBmb2xsb3dpbmcgYXR0cmlidGUKLQkgKiB0b28uCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdElsbEZvcm1lZDMoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0SWxsRm9ybWVkMy54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTggc3RhbmRhbG9uZT0iKTsKLQl9Ci0KLQkvKioKLQkgKiBNaXNzaW5nIGVuZCBxdW90ZSBvbiBVVEYtOCBhdHRyaWJ1dGUsIGJ1dCB0aGVuIFhNTERlY2xFbmRzLCBzbyBzaG91bGQKLQkgKiBiZSBhYmxlIHRvIGhhbmRsZQotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RJbGxGb3JtZWQ0KCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdElsbEZvcm1lZDQueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi04Iik7Ci0JfQotCi0JLyoqCi0JICogVGVzdCBvZiBtaXNzaW5nIGVuZCBxdW90ZSBvbiBlbmNvZGluZyB2YWx1ZS4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdCgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIklsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTEiKTsKLQl9Ci0KLQkvKioKLQkgKiBFbXB0eSBzdHJpbmcgYXMgZW5jb2RpbmcgdmFsdWU7IChBbmQsIG1hbGZvcm1lZCBpbnB1dCwgZm9yIFVURi04IC4uLgotCSAqIHNob3VsZCBub3QgZWZmZWN0IHJlc3VsdHMgb2YgdGhpcyBsZXZlbCBvZiB0ZXN0KS4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWFsZm9ybWVkTm9FbmNvZGluZygpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk1hbGZvcm1lZE5vRW5jb2RpbmcueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIiIpOwotCX0KLQotCS8qKgotCSAqIEVtcHR5IHN0cmluZyBhcyBlbmNvZGluZyB2YWx1ZTsgKEFuZCwgbWFsZm9ybWVkIGlucHV0LCBmb3IgVVRGLTggLi4uCi0JICogc2hvdWxkIG5vdCBlZmZlY3QgcmVzdWx0cyBvZiB0aGlzIGxldmVsIG9mIHRlc3QpLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNYWxmb3JtZWROb0VuY29kaW5nWFNMKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTWFsZm9ybWVkTm9FbmNvZGluZy54c2wiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiIik7Ci0JfQotCi0JLyoqCi0JICogWE1MRGVjbGFyYXRpb24gbm90IGFsbCBvbiBzYW1lIGxpbmUKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TXVsdGlMaW5lQ2FzZSgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RNdWx0aUxpbmUueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTEiKTsKLQotCX0KLQotCS8qKgotCSAqIE5vIGVuY29kaW5nIGluIFhNTERlY2xhcmF0aW9uCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vRW5jb2RpbmcoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb0VuY29kaW5nLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqID9JcyB0aGlzIGEgZHVwPwotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROb0VuY29kaW5nQ2FzZSgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3ROb0VuY29kaW5nVmFsdWUueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogTm9ybWFsIFhNTERlY2xhcmF0aW9uIHdpdGggSVNPLTEgc3BlY2lmaWVkCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vcm1hbE5vbkRlZmF1bHQoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb3JtYWxOb25EZWZhdWx0LnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS0xIik7Ci0JfQotCi0JLyoqCi0JICogTm8gWE1MRGVjbGFyYXRpb24gYXQgYWxsLiAoSW52YWxpZCwgYnV0IHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIHBhcnNlKS4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9YTUxEZWNsKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdE5vWE1MRGVjbC54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBIYXJkIHRvIGhhbmRsZSBzYWZlbHkgKG1heSBhcHBlYXIgaW4gY29tbWVudCwgZm9yIGV4YW1wbGUpLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROb1hNTERlY2xBdEZpcnN0KCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdE5vWE1MRGVjbEF0Rmlyc3QueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyB0ZXN0IGlzIGp1c3QgdG8gbWFrZSBzdXJlIHRoZSBzY2FubmluZyBlbmRzIGJlZm9yZSBlbmQgb2YgZmlsZSBpcwotCSAqIHJlYWNoZWQuCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vWE1MRGVjbEluTGFyZ2VGaWxlKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdE5vWE1MRGVjbEluTGFyZ2VGaWxlLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwsIEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLk1BWF9DSEFSU19SRUFDSEVEKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0aW5nIGFzIGEgcmVzdWx0IG9mIENNVkMgZGVmZWN0IDIxNzcyMAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RzaGlmdGppcygpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInNoaWZ0amlzLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJTaGlmdF9KSVMiKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0aW5nIGFzIGEgcmVzdWx0IG9mIENNVkMgZGVmZWN0IDIxNzcyMAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNkxFV2l0aEphcGFuZXNlQ2hhcnMoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGMTZMRUluU3RyZWFtIik7Ci0JfQotCi0JLyoqCi0JICogVGVzdGluZyBhcyBhIHJlc3VsdCBvZiBDTVZDIGRlZmVjdCAyMTc3MjAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZCRVdpdGhKYXBhbmVzZUNoYXJzKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYxNkJFSW5TdHJlYW0iKTsKLQl9Ci0KLQkvKioKLQkgKiBBIGNvbW1vbiBjYXNlLgotCSAqIAotCSAqLwotCSBwdWJsaWMgdm9pZCB0ZXN0VVRGOFdpdGgzQnl0ZUJPTSgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIlVURjhXaXRoM0J5dGVCT00ueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURjgzQnl0ZUJPTUluU3RyZWFtIik7Ci0JfQotCXB1YmxpYyB2b2lkIFVURjE2TEVBdFN0YXJ0T2ZMYXJnZUZpbGUoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJVVEYxNkxFQXRTdGFydE9mTGFyZ2VGaWxlLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYxNkxFSW5TdHJlYW0iKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy94bWwvWE1MTWFsZm9ybWVkSW5wdXRUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy94bWwvWE1MTWFsZm9ybWVkSW5wdXRUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjlmNmJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTE1hbGZvcm1lZElucHV0VGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcueG1sOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0RGVjb2RlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNvZGluZ0Vycm9yQWN0aW9uOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuTWFsZm9ybWVkSW5wdXRFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuRW5jb2RpbmdNZW1lbnRvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5JUmVzb3VyY2VDaGFyc2V0RGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmV4Y2VwdGlvbnMuTWFsZm9ybWVkSW5wdXRFeGNlcHRpb25XaXRoRGV0YWlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5YTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5UZXN0c1BsdWdpbjsKLQotLyoqCi0gKiBGSVhNRTogdGhpcyBtaWdodCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gY3JlYXRlIGEgImZpbGUgcGVla2VyIj8gQnV0LAotICogaXRzIG5vdCBvdGhlcndpc2VkIHVzZWQgLS0gZGVsZXRlIGlmIG5vdCBmaXhlZC9pbXByb3ZlZCBzb29uCi0gKiBYTUxNYWxmb3JtZWRJbnB1dFRlc3RzCi0gKi8KLQotcHVibGljIGNsYXNzIFhNTE1hbGZvcm1lZElucHV0VGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBpbnQgUkVBRF9CVUZGRVJfU0laRSA9IDgwMDA7Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQotCXB1YmxpYyBYTUxNYWxmb3JtZWRJbnB1dFRlc3RzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGZvciBhIGZpbGUsIGZpbGVuYW1lIHRoYXQgc2hvdWxkIHRocm93IGEKLQkgKiBNYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbldpdGhEZXRhaWwgYXQgY2hhcmFjdGVyLCBleHBlY3RlZFBvc2l0aW9uLiBUaGlzCi0JICogaGFwcGVucyB3aGVuIG5vIGVuY29kaW5nIGlzIHNwZWNpZmllZCwgc28gdGhlIGRlZmF1bHQgaXMgdXNlZCwgYnV0Ci0JICogdGhlcmUgYXJlIGNoYXJhY3RlcnMgdGhhdCB0aGUgZGVmYXVsdCBlbmNvZGluZyBkb2VzIG5vdCByZWNvZ25pemUKLQkgKi8KLQl2b2lkIGRvVGVzdE1hbGZvcm1lZElucHV0KFN0cmluZyBmaWxlbmFtZSwgSVJlc291cmNlQ2hhcnNldERldGVjdG9yIGRldGVjdG9yLCBpbnQgZXhwZWN0ZWRQb3NpdGlvbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJRXhjZXB0aW9uIGZvdW5kRXhjZXB0aW9uID0gbnVsbDsKLQkJaW50IGJhZENoYXJQb3NpdGlvbiA9IC0xOwotCQlGaWxlIGZpbGUgPSBUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZShmaWxlbmFtZSk7Ci0JCWlmICghZmlsZS5leGlzdHMoKSkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oZmlsZW5hbWUgKyAiIHdhcyBub3QgZm91bmQiKTsKLQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOwotCQlJbnB1dFN0cmVhbSBpc3RyZWFtID0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShpbnB1dFN0cmVhbSk7Ci0JCWRldGVjdG9yLnNldChpc3RyZWFtKTsKLQkJLy8gSUVuY29kZWREb2N1bWVudCBkb2MgPQotCQkvLyBkZXRlY3Rvci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoZmlsZW5hbWUsIGlzdHJlYW0pOwotCQlFbmNvZGluZ01lbWVudG8gZW5jb2RpbmdNZW1lbnRvID0gKChYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IpIGRldGVjdG9yKS5nZXRFbmNvZGluZ01lbWVudG8oKTsKLQkJU3RyaW5nIGZvdW5kSUFOQUVuY29kaW5nID0gZW5jb2RpbmdNZW1lbnRvLmdldEphdmFDaGFyc2V0TmFtZSgpOwotCi0JCUNoYXJzZXQgY2hhcnNldCA9IENoYXJzZXQuZm9yTmFtZShmb3VuZElBTkFFbmNvZGluZyk7Ci0JCUNoYXJzZXREZWNvZGVyIGNoYXJzZXREZWNvZGVyID0gY2hhcnNldC5uZXdEZWNvZGVyKCk7Ci0JCWNoYXJzZXREZWNvZGVyLm9uTWFsZm9ybWVkSW5wdXQoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQkJY2hhcnNldERlY29kZXIub25Vbm1hcHBhYmxlQ2hhcmFjdGVyKENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0KLQkJaXN0cmVhbS5jbG9zZSgpOwotCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCi0JCS8vIG5vdywgdHJ5IHJlYWRpbmcgYXMgcGVyIGVuY29kaW5nCi0JCWlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLQkJLy8gc2tpcCBCT00gZm9yIHRoaXMgY2FzZQotCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oaW5wdXRTdHJlYW0ucmVhZCgpKTsKLQkJLy8gU3lzdGVtLm91dC5wcmludGxuKGlucHV0U3RyZWFtLnJlYWQoKSk7Ci0JCS8vIFN5c3RlbS5vdXQucHJpbnRsbihpbnB1dFN0cmVhbS5yZWFkKCkpOwotCQlJbnB1dFN0cmVhbVJlYWRlciByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW5wdXRTdHJlYW0sIGNoYXJzZXREZWNvZGVyKTsKLQotCQl0cnkgewotCQkJLy8ganVzdCB0cnkgcmVhZGluZyAuLi4gc2hvdWxkIHRocm93IGV4Y2VwdGlvbgotCQkJLy8gZXhjZXB0aW9uKQotCQkJcmVhZElucHV0U3RyZWFtKHJlYWRlcik7Ci0JCX0KLQkJY2F0Y2ggKE1hbGZvcm1lZElucHV0RXhjZXB0aW9uIGUpIHsKLQkJCS8vIGFzIGV4cGVjdGVkLCBub3cgZG8gZGV0YWlsZWQgY2hlY2tpbmcuCi0JCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJaXN0cmVhbS5jbG9zZSgpOwotCQkJaW5wdXRTdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOwotCQkJY2hhcnNldERlY29kZXIgPSBjaGFyc2V0Lm5ld0RlY29kZXIoKTsKLQkJCWNoYXJzZXREZWNvZGVyLm9uTWFsZm9ybWVkSW5wdXQoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQkJCWNoYXJzZXREZWNvZGVyLm9uVW5tYXBwYWJsZUNoYXJhY3RlcihDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCQkJcmVhZGVyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKGlucHV0U3RyZWFtLCBjaGFyc2V0RGVjb2Rlcik7Ci0JCQlpc3RyZWFtID0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShpbnB1dFN0cmVhbSk7Ci0JCQl0cnkgewotCQkJCWhhbmRsZU1hbEZvcm1lZElucHV0X0RldGFpbENoZWNraW5nKHJlYWRlciwgZm91bmRJQU5BRW5jb2RpbmcpOwotCQkJfQotCQkJY2F0Y2ggKE1hbGZvcm1lZElucHV0RXhjZXB0aW9uV2l0aERldGFpbCBzZSkgewotCQkJCWZvdW5kRXhjZXB0aW9uID0gc2U7Ci0JCQkJYmFkQ2hhclBvc2l0aW9uID0gc2UuZ2V0Q2hhclBvc2l0aW9uKCk7Ci0JCQl9Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChpc3RyZWFtICE9IG51bGwpIHsKLQkJCQlpc3RyZWFtLmNsb3NlKCk7Ci0JCQl9Ci0JCQlpZiAoaW5wdXRTdHJlYW0gIT0gbnVsbCkgewotCQkJCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCQl9Ci0KLQkJfQotCQkvLyBoYW5kbGUgYWRqdXN0bWVudHMgaGVyZSBmb3IgVk0gZGlmZmVybmNlczoKLQkJLy8gZm9yIG5vdyBpdHMgZWl0aGVyIDQ5IG9yIDQ5ICsgMiBCT01zICg1MSkKLQkJLy8gY2FuIGJlIHNtYXJ0aW5nIGxhdGVyLgotCQlhc3NlcnRUcnVlKCJNYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbiB3YXMgbm90IHRocm93biBhcyBleHBlY3RlZCBmb3IgZmlsZW5hbWU6ICIgKyBmaWxlbmFtZSArICIgRXhjZXB0aW9uIHRocm93bjoiICsgZm91bmRFeGNlcHRpb24sIGZvdW5kRXhjZXB0aW9uIGluc3RhbmNlb2YgTWFsZm9ybWVkSW5wdXRFeGNlcHRpb25XaXRoRGV0YWlsKTsKLQkJYXNzZXJ0VHJ1ZSgiV3JvbmcgY2hhcmFjdGVyIHBvc2l0aW9uIGRldGVjdGVkIGluIE1hbGZvcm1lZElucHV0RXhjZXB0aW9uLiAgRXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFBvc2l0aW9uICsgIiBGb3VuZDogIiArIGJhZENoYXJQb3NpdGlvbiwgKGJhZENoYXJQb3NpdGlvbiA9PSBleHBlY3RlZFBvc2l0aW9uKSB8fCBiYWRDaGFyUG9zaXRpb24gPT0gZXhwZWN0ZWRQb3NpdGlvbiAtIDIpOwotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RYU0xNYWxmb3JtZWRJbnB1dCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk1hbGZvcm1lZE5vRW5jb2RpbmcueHNsIjsKLQkvLyBkb1Rlc3RNYWxmb3JtZWRJbnB1dChmaWxlbmFtZSwgbmV3IFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpLCAyMTEpOwotCS8vIH0KLQotCS8qKgotCSAqIEVuc3VyZXMgdGhhdCBhbiBJbnB1dFN0cmVhbSBoYXMgbWFyay9yZXNldCBzdXBwb3J0LgotCSAqLwotCXByaXZhdGUgc3RhdGljIElucHV0U3RyZWFtIGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oSW5wdXRTdHJlYW0gb3JpZ2luYWwpIHsKLQkJaWYgKG9yaWdpbmFsID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJaWYgKG9yaWdpbmFsLm1hcmtTdXBwb3J0ZWQoKSkKLQkJCXJldHVybiBvcmlnaW5hbDsKLQkJcmV0dXJuIG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG9yaWdpbmFsKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZ0J1ZmZlciByZWFkSW5wdXRTdHJlYW0oUmVhZGVyIHJlYWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgbnVtUmVhZCA9IDA7Ci0JCWNoYXIgdEJ1ZmZbXSA9IG5ldyBjaGFyW1JFQURfQlVGRkVSX1NJWkVdOwotCQl3aGlsZSAoKG51bVJlYWQgPSByZWFkZXIucmVhZCh0QnVmZiwgMCwgdEJ1ZmYubGVuZ3RoKSkgIT0gLTEpIHsKLQkJCWlmIChERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbih0QnVmZlswXSk7Ci0JCQl9Ci0JCQlidWZmZXIuYXBwZW5kKHRCdWZmLCAwLCBudW1SZWFkKTsKLQkJfQotCQlyZXR1cm4gYnVmZmVyOwotCX0KLQotCS8qCi0JICogcmVtb3ZlZCBmb3IgUFBDIG1hY2hpbmUgd2l0aCBJQk0gVk0KLQkgKiBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTI2NTAzCi0JICovCi0JLy8gcHVibGljIHZvaWQgdGVzdFhNTE1hbGZvcm1lZElucHV0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTWFsZm9ybWVkTm9FbmNvZGluZy54bWwiOwotCS8vIGRvVGVzdE1hbGZvcm1lZElucHV0KGZpbGVuYW1lLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCksIDUxKTsKLQkvLyB9Ci0JLy8gc2luY2UgYWJvdmUgdGVzdCB3YXMgb25seSBvbmUgaW0gdGhpcyBjbGFzcywgcHV0IGluIHRoaXMgbm8gb3AgdG8gYXZvaWQKLQkvLyBhIGZhaWx1cmUgZHVlIHRvIG5vIHRlc3RzIGluIGNsYXNzIQotCXB1YmxpYyB2b2lkIHRlc3ROb09wKCkgewotCQlhc3NlcnRUcnVlKHRydWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBoYW5kbGVNYWxGb3JtZWRJbnB1dF9EZXRhaWxDaGVja2luZyhSZWFkZXIgcmVhZGVyLCBTdHJpbmcgZW5jb2RpbmdOYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24sIE1hbGZvcm1lZElucHV0RXhjZXB0aW9uV2l0aERldGFpbCB7Ci0JCWludCBjaGFyUG9zdGlvbiA9IC0xOwotCQljaGFyUG9zdGlvbiA9IGdldENoYXJQb3N0aW9uT2ZGYWlsdXJlKHJlYWRlcik7Ci0JCS8vIGFsbCBvZiB0aGF0IGp1c3QgdG8gdGhyb3cgbW9yZSBhY2N1cmF0ZSBlcnJvcgotCQkvLyBub3RlOiB3ZSBkbyB0aGUgY29udmVyc2lvbiB0byBpYW5hTmFtZSwgaW5zdGVhZCBvZiB1c2luZyB0aGUgbG9jYWwKLQkJLy8gdmFyaWFibGUsCi0JCS8vIGJlY2F1c2UgdGhpcyBpcyB1bHRpbWF0ZWx5IG9ubHkgZm9yIHRoZSB1c2VyIGVycm9yIG1lc3NhZ2UgKHRoYXQKLQkJLy8gaXMsCi0JCS8vIHRoZSBlcnJvciBvY2N1cnJlZAotCQkvLyBpbiBjb250ZXh0IG9mIGphdmFFbmNvZGluZ05hbWUgbm8gbWF0dGVyIHdoYXQgaWFuYUVuY29kaW5nTmFtZSBpcwotCQl0aHJvdyBuZXcgTWFsZm9ybWVkSW5wdXRFeGNlcHRpb25XaXRoRGV0YWlsKGVuY29kaW5nTmFtZSwgY2hhclBvc3Rpb24pOwotCX0KLQotCXByaXZhdGUgaW50IGdldENoYXJQb3N0aW9uT2ZGYWlsdXJlKFJlYWRlciByZWFkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWludCBjaGFyUG9zaXRpb24gPSAxOwotCQlpbnQgY2hhclJlYWQgPSAtMTsKLQkJaW50IHJlc3VsdCA9IC0xOwotCQlib29sZWFuIGVycm9yRm91bmQgPSBmYWxzZTsKLQkJZG8gewotCQkJdHJ5IHsKLQkJCQlpZiAocmVhZGVyLnJlYWR5KCkpIHsKLQkJCQkJY2hhclJlYWQgPSByZWFkZXIucmVhZCgpOwotCQkJCX0KLQkJCQlpZiAoREVCVUcpIHsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKGNoYXJQb3NpdGlvbiArICI6ICIgKyBlc2NhcGUoKGNoYXIpIGNoYXJSZWFkLCB0cnVlKSk7Ci0JCQkJfQotCQkJCWNoYXJQb3NpdGlvbisrOwotCQkJfQotCQkJY2F0Y2ggKE1hbGZvcm1lZElucHV0RXhjZXB0aW9uIGUpIHsKLQkJCQkvLyB0aGlzIGlzIGV4cGVjdGVkLCBzaW5jZSB3ZSdyZSBleHBlY3RpbmcgZmFpbHVyZSwKLQkJCQkvLyBzbyBubyBuZWVkIHRvIGRvIGFueXRoaW5nLgotCQkJCWVycm9yRm91bmQgPSB0cnVlOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXdoaWxlICgoY2hhclJlYWQgIT0gLTEgJiYgIWVycm9yRm91bmQpICYmIHJlYWRlci5yZWFkeSgpKTsKLQotCQlpZiAoZXJyb3JGb3VuZCkKLQkJCXJlc3VsdCA9IGNoYXJQb3NpdGlvbjsKLQkJZWxzZQotCQkJcmVzdWx0ID0gLTE7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZXNjYXBlKGNoYXIgYUNoYXIsIGJvb2xlYW4gZXNjYXBlU3BhY2UpIHsKLQotCQlTdHJpbmdCdWZmZXIgb3V0QnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlzd2l0Y2ggKGFDaGFyKSB7Ci0JCQljYXNlICcgJyA6Ci0JCQkJaWYgKGVzY2FwZVNwYWNlKQotCQkJCQlvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOwotCi0JCQkJb3V0QnVmZmVyLmFwcGVuZCgnICcpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAnXFwnIDoKLQkJCQlvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOwotCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdcdCcgOgotCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7Ci0JCQkJb3V0QnVmZmVyLmFwcGVuZCgndCcpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAnXG4nIDoKLQkJCQlvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOwotCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ24nKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ1xyJyA6Ci0JCQkJb3V0QnVmZmVyLmFwcGVuZCgnXFwnKTsKLQkJCQlvdXRCdWZmZXIuYXBwZW5kKCdyJyk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdcZicgOgotCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7Ci0JCQkJb3V0QnVmZmVyLmFwcGVuZCgnZicpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdCA6Ci0JCQkJaWYgKChhQ2hhciA8IDB4MDAyMCkgfHwgKGFDaGFyID4gMHgwMDdlKSkgewotCQkJCQlvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOwotCQkJCQlvdXRCdWZmZXIuYXBwZW5kKCd1Jyk7Ci0JCQkJCW91dEJ1ZmZlci5hcHBlbmQodG9IZXgoKGFDaGFyID4+IDEyKSAmIDB4RikpOwotCQkJCQlvdXRCdWZmZXIuYXBwZW5kKHRvSGV4KChhQ2hhciA+PiA4KSAmIDB4RikpOwotCQkJCQlvdXRCdWZmZXIuYXBwZW5kKHRvSGV4KChhQ2hhciA+PiA0KSAmIDB4RikpOwotCQkJCQlvdXRCdWZmZXIuYXBwZW5kKHRvSGV4KGFDaGFyICYgMHhGKSk7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQlpZiAoc3BlY2lhbFNhdmVDaGFycy5pbmRleE9mKGFDaGFyKSAhPSAtMSkKLQkJCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7Ci0JCQkJCW91dEJ1ZmZlci5hcHBlbmQoYUNoYXIpOwotCQkJCX0KLQkJfQotCi0JCXJldHVybiBvdXRCdWZmZXIudG9TdHJpbmcoKTsKLQl9Ci0KLQkvKioKLQkgKiBDb252ZXJ0IGEgbmliYmxlIHRvIGEgaGV4IGNoYXJhY3RlcgotCSAqIAotCSAqIEBwYXJhbSBuaWJibGUKLQkgKiAgICAgICAgICAgIHRoZSBuaWJibGUgdG8gY29udmVydC4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBjaGFyIHRvSGV4KGludCBuaWJibGUpIHsKLQkJcmV0dXJuIGhleERpZ2l0WyhuaWJibGUgJiAweEYpXTsKLQl9Ci0KLQkvKiogQSB0YWJsZSBvZiBoZXggZGlnaXRzICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhcltdIGhleERpZ2l0ID0geycwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJ307Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHNwZWNpYWxTYXZlQ2hhcnMgPSAiPTogXHRcclxuXGYjISI7Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU1YTEyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0Ci0JbmFtZT0idGVzdHN1aXRlIgotCWRlZmF1bHQ9InJ1biIKLQliYXNlZGlyPSIuIj4KLQotCTwhLS0gQ29uZmlndXJhYmxlIFByb3BlcnRpZXMgLS0+Ci0KLQk8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotCTwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0JPCEtLSA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIgLz4gLS0+Ci0KLQk8ZWNobyBtZXNzYWdlPSJiYXNlZGlyICR7YmFzZWRpcn0iIC8+Ci0JPGVjaG8gbWVzc2FnZT0iZWNsaXBzZSBwbGFjZSAke2VjbGlwc2UtaG9tZX0iIC8+Ci0KLQk8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgcGx1Z2luLW5hbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9InBsdWdpbi1uYW1lIgotCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZyIgLz4KLQk8cHJvcGVydHkKLQkJbmFtZT0ibGlicmFyeS1maWxlIgotCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLQk8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotCTwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotCTx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldAotCQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9IgotCQkJCWluY2x1ZGVzPSJvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLip4bWwiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLQk8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQkJPHByb3BlcnR5Ci0JCQluYW1lPSJ3c3QtZm9sZGVyIgotCQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93c3RfZm9sZGVyIiAvPgotCQk8ZGVsZXRlCi0JCQlkaXI9IiR7d3N0LWZvbGRlcn0iCi0JCQlxdWlldD0idHJ1ZSIgLz4KLQkJPGFudAotCQkJdGFyZ2V0PSJjb3JlLXRlc3QiCi0JCQlhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0JCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJkYXRhLWRpciIKLQkJCQl2YWx1ZT0iJHt3c3QtZm9sZGVyfSIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9InBsdWdpbi1uYW1lIgotCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iY2xhc3NuYW1lIgotCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLkVuY29kaW5nVGVzdFN1aXRlIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0icGx1Z2luLXBhdGgiCi0JCQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLQk8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLQkJPCEtLTxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPi0tPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLQk8dGFyZ2V0Ci0JCW5hbWU9InJ1biIKLQkJZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLQkJPGFudAotCQkJdGFyZ2V0PSJjb2xsZWN0IgotCQkJYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iaW5jbHVkZXMiCi0JCQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcuKnhtbCIgLz4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9Im91dHB1dC1maWxlIgotCQkJCXZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0JCTwvYW50PgotCQk8IS0tPGVtYWlsUmVzdWx0cyByZXN1bHRzRmlsZT0iJHtidWlsZC1yZXN1bHRzLWhvbWV9LyR7cGx1Z2luLW5hbWV9LnhtbCIgYWRkcmVzc2xpc3Q9ImRhdmlkX3dpbGxpYW1zQHVzLmlibS5jb20iIC8+IC0tPgotCTwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMuemlwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjBiMWFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzLnppcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL0RvY3VtZW50U3RyZWFtVGVzdENhc2Uva2FlcnU1Lmh0bSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL0RvY3VtZW50U3RyZWFtVGVzdENhc2Uva2FlcnU1Lmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU1NzBmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9Eb2N1bWVudFN0cmVhbVRlc3RDYXNlL2thZXJ1NS5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTwlLS0ganNmOmNvZGVCZWhpbmQgbGFuZ3VhZ2U9ImphdmEiIGxvY2F0aW9uPSIvSmF2YVNvdXJjZS9wYWdlY29kZS90ZXN0L0thZXJ1NS5qYXZhIiAtLSU+PCUtLSAvanNmOmNvZGVCZWhpbmQgLS0lPgotPCVAdGFnbGliIHVyaT0iaHR0cDovL2phdmEuc3VuLmNvbS9qc2YvaHRtbCIgcHJlZml4PSJoIiU+Ci08JUB0YWdsaWIgdXJpPSJodHRwOi8vd3d3LmlibS5jb20vanNmL2h0bWxfZXh0ZW5kZWQiIHByZWZpeD0iaHgiJT4KLTxIVE1MPgotPEhFQUQ+Ci08JUAgdGFnbGliIHVyaT0iaHR0cDovL2phdmEuc3VuLmNvbS9qc2YvY29yZSIgcHJlZml4PSJmIiAlPgotPCVAIHBhZ2UgCi1sYW5ndWFnZT0iamF2YSIKLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9U0hJRlRfSklTIgotcGFnZUVuY29kaW5nPSJTSElGVF9KSVMiCi0lPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9U0hJRlRfSklTIj4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KLTxMSU5LIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3RoZW1lL3N0eWxlc2hlZXQuY3NzIgotCXRpdGxlPSJTdHlsZSI+Ci08VElUTEU+a2FlcnUuanNwPC9USVRMRT4KLTwvSEVBRD4KLTxmOnZpZXc+Ci0JPEJPRFk+Ci0JPGh4OnNjcmlwdENvbGxlY3RvciBpZD0ic2NyaXB0Q29sbGVjdG9yMSI+Ci0JCTxoOmZvcm0gc3R5bGVDbGFzcz0iZm9ybSIgaWQ9ImZvcm0xIj4KLQkJCY+zlEYKLQkJCY+zlEYKLQkJCY+zlEYKLQkJCTxoOnNlbGVjdE9uZU1lbnUgaWQ9IkNvbWJvMzAiIHN0eWxlQ2xhc3M9IkNvbWJvMzAiIHRhYmluZGV4PSIyNiI+Ci0JCQkJPGY6c2VsZWN0SXRlbSBpdGVtVmFsdWU9InRva3lvIiBpdGVtTGFiZWw9InRva3lvIiAvPgotCQkJCTxmOnNlbGVjdEl0ZW0gaXRlbVZhbHVlPSKP2IyUjuaI+I+KIiBpdGVtTGFiZWw9Io/YjJSO5oj4j4oiIC8+Ci0JCQk8L2g6c2VsZWN0T25lTWVudT4KLQkJCTxoOnNlbGVjdE9uZU1lbnUgaWQ9IkNvbWJvMzEiIHN0eWxlQ2xhc3M9IkNvbWJvMzEiIHRhYmluZGV4PSIyNyI+Ci0JCQkJPGY6c2VsZWN0SXRlbSBpdGVtVmFsdWU9InRva3lvIiBpdGVtTGFiZWw9InRva3lvIiAvPgotCQkJCTxmOnNlbGVjdEl0ZW0gaXRlbVZhbHVlPSJreW90byIgaXRlbUxhYmVsPSJreW90byIgLz4KLQkJCTwvaDpzZWxlY3RPbmVNZW51PgotCQk8L2g6Zm9ybT4KLQk8L2h4OnNjcmlwdENvbGxlY3Rvcj4KLQk8L0JPRFk+Ci08L2Y6dmlldz4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL0RvY3VtZW50U3RyZWFtVGVzdENhc2Uva2FlcnU1LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL0RvY3VtZW50U3RyZWFtVGVzdENhc2Uva2FlcnU1LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDgzNzA0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9Eb2N1bWVudFN0cmVhbVRlc3RDYXNlL2thZXJ1NS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08JS0tIGpzZjpjb2RlQmVoaW5kIGxhbmd1YWdlPSJqYXZhIiBsb2NhdGlvbj0iL0phdmFTb3VyY2UvcGFnZWNvZGUvdGVzdC9LYWVydTUuamF2YSIgLS0lPjwlLS0gL2pzZjpjb2RlQmVoaW5kIC0tJT4NCi08JUB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9odG1sIiBwcmVmaXg9ImgiJT4NCi08JUB0YWdsaWIgdXJpPSJodHRwOi8vd3d3LmlibS5jb20vanNmL2h0bWxfZXh0ZW5kZWQiIHByZWZpeD0iaHgiJT4NCi08SFRNTD4NCi08SEVBRD4NCi08JUAgdGFnbGliIHVyaT0iaHR0cDovL2phdmEuc3VuLmNvbS9qc2YvY29yZSIgcHJlZml4PSJmIiAlPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9U0hJRlRfSklTIg0KLXBhZ2VFbmNvZGluZz0iU0hJRlRfSklTIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9U0hJRlRfSklTIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4NCi08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08TElOSyByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi90aGVtZS9zdHlsZXNoZWV0LmNzcyINCi0JdGl0bGU9IlN0eWxlIj4NCi08VElUTEU+a2FlcnUuanNwPC9USVRMRT4NCi08L0hFQUQ+DQotPGY6dmlldz4NCi0JPEJPRFk+DQotCTxoeDpzY3JpcHRDb2xsZWN0b3IgaWQ9InNjcmlwdENvbGxlY3RvcjEiPg0KLQkJPGg6Zm9ybSBzdHlsZUNsYXNzPSJmb3JtIiBpZD0iZm9ybTEiPg0KLQkJCY+zlEYNCi0JCQmPs5RGDQotCQkJj7OURg0KLQkJCTxoOnNlbGVjdE9uZU1lbnUgaWQ9IkNvbWJvMzAiIHN0eWxlQ2xhc3M9IkNvbWJvMzAiIHRhYmluZGV4PSIyNiI+DQotCQkJCTxmOnNlbGVjdEl0ZW0gaXRlbVZhbHVlPSJ0b2t5byIgaXRlbUxhYmVsPSJ0b2t5byIgLz4NCi0JCQkJPGY6c2VsZWN0SXRlbSBpdGVtVmFsdWU9Io/YjJSO5oj4j4oiIGl0ZW1MYWJlbD0ij9iMlI7miPiPiiIgLz4NCi0JCQk8L2g6c2VsZWN0T25lTWVudT4NCi0JCQk8aDpzZWxlY3RPbmVNZW51IGlkPSJDb21ibzMxIiBzdHlsZUNsYXNzPSJDb21ibzMxIiB0YWJpbmRleD0iMjciPg0KLQkJCQk8ZjpzZWxlY3RJdGVtIGl0ZW1WYWx1ZT0idG9reW8iIGl0ZW1MYWJlbD0idG9reW8iIC8+DQotCQkJCTxmOnNlbGVjdEl0ZW0gaXRlbVZhbHVlPSJreW90byIgaXRlbUxhYmVsPSJreW90byIgLz4NCi0JCQk8L2g6c2VsZWN0T25lTWVudT4NCi0JCTwvaDpmb3JtPg0KLQk8L2h4OnNjcmlwdENvbGxlY3Rvcj4NCi0JPC9CT0RZPg0KLTwvZjp2aWV3Pg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW1wdHlGaWxlLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2V1Y2pwLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2V1Y2pwLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUyNTZlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9ldWNqcC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBjaGFyc2V0ICJFVUMtSlAiOw0KLQ0KLUJPRFkgew0KLQlmb250LWZhbWlseSA6ICKjzaPTIKPQpbSlt6XDpa8iOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9qaXMuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfamlzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg0NzY4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9qaXMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AY2hhcnNldCAiSVNPLTIwMjItSlAiOw0KLQ0KLUJPRFkgew0KLQlmb250LWZhbWlseSA6ICIbJEIjTSNTGyhCIBskQiNQJTQlNyVDJS8bKEIiOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9zamlzLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X3NqaXMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTI5Y2RhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X3NqaXMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AY2hhcnNldCAiU0hJRlRfSklTIjsNCi0NCi1CT0RZIHsNCi0JZm9udC1mYW1pbHkgOiAigmyCciCCb4NTg1aDYoNOIjsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vRW5jb2RpbmcuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vRW5jb2RpbmcuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2YwNmJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub0VuY29kaW5nLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLUJPRFkgew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsICJNUyBTYW5zIFNlcmlmIjsNCi0JdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KLQliYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsNCi19DQotDQotVEQgew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTJwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBub3JtYWw7DQotCXRleHQtYWxpZ246IGxlZnQ7DQotfQ0KLQ0KLVRIIHsNCi0JZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iOw0KLQlmb250LXNpemU6IDEycHQ7DQotCWNvbG9yOiBibGFjazsNCi0JZm9udC1zdHlsZTogbm9ybWFsOw0KLQlmb250LXdlaWdodDogYm9sZGVyOw0KLQl0ZXh0LWFsaWduOiBsZWZ0Ow0KLX0NCi0NCi1IMSB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIjsNCi0JZm9udC1zaXplOiAxNHB0Ow0KLQljb2xvcjogYmxhY2s7DQotCWZvbnQtc3R5bGU6IG5vcm1hbDsNCi0JZm9udC13ZWlnaHQ6IGJvbGRlcjsNCi0JdGV4dC1hbGlnbjogY2VudGVyDQotfQ0KLQ0KLUgyIHsNCi0JZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iOw0KLQlmb250LXNpemU6IDEycHQ7DQotCWNvbG9yOiBibGFjazsNCi0JZm9udC1zdHlsZTogbm9ybWFsOw0KLQlmb250LXdlaWdodDogYm9sZGVyDQotfQ0KLQ0KLUgzIHsNCi0JZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iOw0KLQlmb250LXNpemU6IDEycHQ7DQotCWNvbG9yOiBibGFjazsNCi0JZm9udC1zdHlsZTogaXRhbGljICANCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjOTk3ZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGNoYXJzZXQgIklTTy04ODU5LTYiOw0KLQ0KLQ0KLQ0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWE0ZTQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBjaGFyc2V0ICJJU08tODg1OS02Ow0KLQ0KLQ0KLQ0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZDIuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkMi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzYzhhMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkMi5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLQ0KLQ0KLSAgICBAY2hhcnNldCAiSVNPLTg4NTktNiI7DQotDQotDQotDQotDQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1CaWc1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUJpZzUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RmZTVhNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUJpZzUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iQmlnNSI/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+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvRW1wdHlGaWxlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9FbXB0eUZpbGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9FbXB0eUZpbGUuanNwCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZkMGU3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTg/Pg0KLTwlQHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgcGFnZUVuY29kaW5nPSJJU08tODg1OS03JT4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjVlYjE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iIj8+DQotPHRhZz4NCi1BdXN0cmFsaesNCi08L3RhZz4NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMzM1OWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSIiPz4NCi08eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iDQotICAgIHZlcnNpb249IjEuMCINCi0gICAgeG1sbnM6eGFsYW49Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0Ij4NCi08eHNsOnZhcmlhYmxlIG5hbWU9ImJhZEVuY29kaW5nIj4NCi1BdXN0cmFsaesNCi08L3hzbDp2YXJpYWJsZT4NCi08L3hzbDpzdHlsZXNoZWV0Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob0VuY29kaW5naW5YTUxEZWNsLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob0VuY29kaW5naW5YTUxEZWNsLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVjZTc2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9FbmNvZGluZ2luWE1MRGVjbC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlODllNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSI5OSIgZW5jb2Rpbmc9IklTTy04ODU5LTgiPz4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHRXaXRoWE1MRGVjbC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg2MjQ4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktOCI/Pg0KLTwlQHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgcGFnZXRFbmNvZGluZz0iSVNPLTg4NTktNyIlPg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjI3YmJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0NCi08JUBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktNyIgJT4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MzdlZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi1JIGZvdW5kIHRoaXMgY2hhbmdlDQotDQotPCVAIHBhZ2UNCi1pbXBvcnQ9IlNlbENvbEJlYW5Sb3cxMlZpZXdCZWFuIg0KLSBwYWdlRW5jb2Rpbmc9IlNISUZUX0pJUyINCi0gY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1KVU5LIg0KLSU+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+DQotPC9ib2R5Pg0KLTwvaHRtbD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YTM5Y2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1VURjhXaXRoM0J5dGVCT00uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1dlbGxGb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYyOTY1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS04Ij8+DQotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgcGFnZUVuY29kaW5nPSJJU08tODg1OS03IiU+DQotPHRlc3Q+DQotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvaW5WYWxpZEVuY29kaW5nVmFsdWUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDA5MmUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08SFRNTD4NCi08SEVBRD4NCi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PWFiYyINCi0lPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4NCi08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08VElUTEU+aW5WYWxpZEVuY29kaW5nVmFsdWUuanNwPC9USVRMRT4NCi08L0hFQUQ+DQotPEJPRFk+DQotPFA+UGxhY2UgaW5WYWxpZEVuY29kaW5nVmFsdWUuanNwJ3MgY29udGVudCBoZXJlLjwvUD4NCi08L0JPRFk+DQotPC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9qYXZhRW5jb2RpbmdWYWx1ZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvamF2YUVuY29kaW5nVmFsdWUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWM2ZDE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9qYXZhRW5jb2RpbmdWYWx1ZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08SFRNTD4NCi08SEVBRD4NCi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSIgIA0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9Q3AxMjUyIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxUSVRMRT5pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSBpblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AncyBjb250ZW50IGhlcmUuPC9QPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDlkMDRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub0VuY29kaW5nLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWwiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+DQotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPFRJVExFPm5vRW5jb2RpbmcuanNwPC9USVRMRT4NCi08L0hFQUQ+DQotPEJPRFk+DQotPFA+UGxhY2Ugbm9FbmNvZGluZy5qc3AncyBjb250ZW50IGhlcmUuPC9QPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI0MzJmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPCVAIHBhZ2UNCi1wYWdlRW5jb2Rpbmc9ICJJU08tODg1OS0yIg0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMyINCi0lPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY1NjkwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlTm9FbmNvZGluZy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLSU+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nQ2hhcnNldC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRkOTA4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0zIg0KLSU+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NzRhMDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPGpzcDpkaXJlY3RpdmUucGFnZSANCi1wYWdlRW5jb2Rpbmc9IklTTy04ODU5LTIiDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0zIi8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RCcm9rZW5MaW5lLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0QnJva2VuTGluZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyNjc5ODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RCcm9rZW5MaW5lLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiAgDQotDQotZW5jb2Rpbmc9IklTTy04ODU5LTMiIA0KLQ0KLSA/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFmMjg3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ0ZXN0anVuayI/Pg0KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSINCi0lPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXRlc3RqdW5rIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4NCi08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08VElUTEU+dGVzdERlZmF1bHRFbmNvZGluZy5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSB0ZXN0RGVmYXVsdEVuY29kaW5nLmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZ1dpdGhKdW5rLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nV2l0aEp1bmsuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDQ4Njg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nV2l0aEp1bmsuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idGVzdGp1bmsiPz4NCi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08SFRNTD4NCi08SEVBRD4NCi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD10ZXN0anVuayI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+DQotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPFRJVExFPnRlc3REZWZhdWx0RW5jb2RpbmcuanNwPC9USVRMRT4NCi08L0hFQUQ+DQotPEJPRFk+DQotPFA+UGxhY2UgdGVzdERlZmF1bHRFbmNvZGluZy5qc3AncyBjb250ZW50IGhlcmUuPC9QPg0KLTwlDQotU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0Iik7DQotJT4NCi08L0JPRFk+DQotPC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFKdW5rLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFKdW5rLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU3Zjk1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgIGFiY2Q9ImVmYyINCi0NCi1lbmNvZGluZz0iSVNPLTg4NTktMSIgDQotDQotID8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYVZhbGlkU3R1ZmYuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYVZhbGlkU3R1ZmYuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2QwYTNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFWYWxpZFN0dWZmLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2YmY5MDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIGVuY29kaW5nPVVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZDIuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM4ZWMyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZDIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPVVURi04IA0KLTx0ZXN0Pg0KLTwvdGVzdD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vRW5jb2RpbmdWYWx1ZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vRW5jb2RpbmdWYWx1ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZDBjMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb0VuY29kaW5nVmFsdWUuanNwCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiAgICA/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWEwMTc0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTx0ZXN0Pg0KLQ0KLTwvdGVzdD4NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUF0Rmlyc3QuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODlhMGMzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUF0Rmlyc3QuanNwCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08dGVzdD4NCi0gPCVAIHBhZ2UgDQotcGFnZUVuY29kaW5nPSJJU08tODg1OS0yIg0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMyINCi0lPg0KLTwvdGVzdD4NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlSW5MYXJnZUZpbGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzQ2MzZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlSW5MYXJnZUZpbGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzU2ICswLDAgQEAKLTx0ZXN0Pg0KLQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi08L3Rlc3Q+DQotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vcm1hbENhc2UuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb3JtYWxDYXNlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEyYzQyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vcm1hbENhc2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdFVURjE2LkZyb21Ob3RlcGFkanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5Gcm9tTm90ZXBhZGpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzViOTg1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdFVURjE2LkZyb21Ob3RlcGFkanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdFVURjE2LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ5ZTgxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdFVURjE2LmpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2U2OTE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2ZmZDZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGJhOWJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgzN2VlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+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+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm1CLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtQi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzYzg3MGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm1CLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi1JIGZvdW5kIHRoaXMgY2hhbmdlDQotDQotPCVAIHBhZ2UNCi1pbXBvcnQ9IlNlbENvbEJlYW5Sb3cxMlZpZXdCZWFuIg0KLSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVNISUZUX0pJUyIgcGFnZUVuY29kaW5nPSJTSElGVF9KSVMiDQotJT4NCi08SFRNTD4NCi08SEVBRD4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1NRVRBSlVOSyI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPFRJVExFPlJlc3VsdHMgcGFnZTwvVElUTEU+DQotDQotPCEtLVN0eWxlcy0tPg0KLTxTVFlMRSBUWVBFPSJ0ZXh0L2NzcyI+DQotPCEtLQ0KLUJPRFkgew0KLQliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7DQotfQ0KLUgxIHsNCi0JY29sb3I6ICMwMDAwZmYgIWltcG9ydGFudDsNCi0JdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7DQotfQ0KLVRIIHsNCi0JdGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnQ7DQotCWNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7DQotCXZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDsNCi19DQotVEQgew0KLQl0ZXh0LWFsaWduOmxlZnQgIWltcG9ydGFudDsNCi0JdmVydGljYWwtYWxpZ246IHRvcCAhaW1wb3J0YW50Ow0KLX0NCi1USC5yZXN1bHQgew0KLQliYWNrZ3JvdW5kLWNvbG9yOiAjOTk5OTk5ICFpbXBvcnRhbnQ7DQotfQ0KLVRELnJlc3VsdCB7DQotCWJhY2tncm91bmQtY29sb3I6ICNjY2NjY2M7DQotCXZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDsNCi19DQotLS0+DQotPC9TVFlMRT4NCi0NCi0NCi08IS0tU3R5bGUgU2hlZXQtLT4NCi08TElOSyBocmVmPSIvdC90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08L2hlYWQ+DQotPGJvZHk+DQotDQotPGpzcDp1c2VCZWFuIGlkPSJzZWxDb2xCZWFuUm93MTJCZWFuIiBzY29wZT0ic2Vzc2lvbiIgY2xhc3M9IlNlbENvbEJlYW5Sb3cxMlZpZXdCZWFuIiB0eXBlPSJTZWxDb2xCZWFuUm93MTJWaWV3QmVhbiIvPg0KLTwlDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotJT4NCi0NCi08JQ0KLS8vRXhlY3V0ZSBCZWFuIE1ldGhvZHMNCi0NCi0NCi0lPg0KLQ0KLTwhLS1CYW5uZXItLT4NCi08SDE+UmVzdWx0cyBwYWdlPC9IMT4NCi0NCi08QlI+PEJSPg0KLQ0KLTwhLS0gUmVzdWx0IFRhYmxlIC0tPg0KLTxUQUJMRSBib3JkZXI9IjAiPg0KLTxUQk9EWT4NCi0JCQk8VFI+DQotCQkJPFRIPlRFU1QyX4uNi46LjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4uNi46LjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfi42LjouPKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX4+Kj4mPjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4+Kj4mPjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfj4qPiY+PKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX4mNiY6JjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4mNiY6JjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfiY2JjomPKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX41cjVqNXzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX41cjVqNXygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfjVyNWo1fKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX46Njo6OjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX46Njo6OjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfjo2Ojo6PKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotDQotPC9UQk9EWT4NCi08L1RBQkxFID4NCi08L2JvZHk+DQotPC9odG1sPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI0MjkzL3Rlc3RzaGlmdGppc1htbFN5bnRheC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyNDI5My90ZXN0c2hpZnRqaXNYbWxTeW50YXguanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjA1MWIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI0MjkzL3Rlc3RzaGlmdGppc1htbFN5bnRheC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08anNwOnJvb3QgeG1sbnM6anNwPSJodHRwOi8vamF2YS5zdW4uY29tL0pTUC9QYWdlIiB2ZXJzaW9uPSIxLjIiPg0KLTxqc3A6ZGlyZWN0aXZlLnBhZ2UgbGFuZ3VhZ2U9ImphdmEiDQotCWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9U0hJRlRfSklTIiBwYWdlRW5jb2Rpbmc9IlNISUZUX0pJUyIgLz4NCi08anNwOnRleHQ+PCFbQ0RBVEFbIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlNISUZUX0pJUyIgPz4gXV0+PC9qc3A6dGV4dD4NCi08anNwOnRleHQ+PCFbQ0RBVEFbIDwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4gXV0+PC9qc3A6dGV4dD4NCi08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+DQotPGhlYWQ+DQotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9U0hJRlRfSklTIiAvPg0KLTxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iIC8+DQotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4NCi08bGluayBocmVmPSJ0aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiDQotCXR5cGU9InRleHQvY3NzIiAvPg0KLTx0aXRsZT50ZXN0c2hpZnRqaXMuanNwPC90aXRsZT4NCi08L2hlYWQ+DQotPGJvZHk+DQotPHA+UGxhY2UgdGVzdHNoaWZ0amlzLmpzcCdzIGNvbnRlbnQgaGVyZS48L3A+DQotPC9ib2R5Pg0KLTwvaHRtbD4NCi08L2pzcDpyb290Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI5NjY3L2F1ZGkuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxYjQ3YzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIHBhZ2VFbmNvZGluZz0iU2hpZnRfSklTIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVNoaWZ0X0pJUyIlPg0KLTwlQHRhZ2xpYiB1cmk9Ii9XRUItSU5GL3dlYnNpdGVkZXNpZ25lci50bGQiIHByZWZpeD0ic2l0ZWVkaXQiJT4NCi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08SFRNTD4NCi08SEVBRD4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiDQotCWNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIEhvbWVwYWdlIEJ1aWxkZXIgVmVyc2lvbiA2LjUuMC4wIGZvciBXaW5kb3dzIj4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1TaGlmdF9KSVMiPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxUSVRMRT5BdWRpIEE2jXeT/ILcgsU8L1RJVExFPg0KLTxMSU5LIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+DQotPExJTksgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaWQ9IndlYnNpdGVfc3R5bGUiDQotCWhyZWY9Ii9BdWRpL3NpdGUtY29tcC9zdHlsZS9zaXRlLmNzcyI+DQotPC9IRUFEPg0KLTxCT0RZIHRleHQ9IiM2NjY2OTkiIGxpbms9IiM2NjY2Y2MiIHZsaW5rPSIjOTk5OTk5IiBhbGluaz0iI2NjNjZmZiI+DQotPHNpdGVlZGl0OmxheW91dD4NCi0JPHNpdGVlZGl0OmxheW91dGFyZWEgaWQ9ImJvZHkiPg0KLQkJPEgxPkF1ZGkgQTaNd5P8gtyCxTwvSDE+DQotDQotCQk8RElWIGFsaWduPSJsZWZ0Ij4NCi0JCTxUQUJMRSB3aWR0aD0iNjQwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjAiPg0KLQkJCTxUQk9EWT4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDAwY2MiIGhlaWdodD0iNSI+PEZPTlQgY29sb3I9IiNmZmZmZmYiPo13k/yC3ILFgsyMb4jcPC9GT05UPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyI+PEZPTlQgY29sb3I9IiNmZmZmZmYiPjExjI48L0ZPTlQ+PC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIiB3aWR0aD0iNSI+PC9URD4NCi0JCQkJPC9UUj4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIHdpZHRoPSIyMTYiIGJnY29sb3I9IiMwMDY2Y2MiIHZhbGlnbj0idG9wIiByb3dzcGFuPSIzIj48L1REPg0KLQkJCQkJPFREIHdpZHRoPSI0MjAiPg0KLQkJCQkJPFVMPg0KLQkJCQkJCTxMST4yMDAxlE4xMYyOjaCBQY6fivpNeSBDYXKC8Iyfk6KCtY5ugt+C6YFCPC9MST4NCi0JCQkJCQk8TEk+l52XUoLNLi4uDQotCQkJCQkJPE9MPg0KLQkJCQkJCQk8TEk+MjAwMpRONIyOgsU1lE6W2oLwjH2CpoLpkU+O1IJ1go+CjIKWgo+CyY3XgqmCoozMj+GCqpGKjp+CooLEgqKCvYFCPC9MST4NCi0JCQkJCQkJPExJPoNHg5ODV4OTgsyU8ZfNgrOCyYnklp2CqoLFgquCyIKtgsiCwYLEgquCvYFCPC9MST4NCi0JCQkJCQk8L09MPg0KLQkJCQkJCTwvTEk+DQotCQkJCQkJPExJPojIibqCzI7Uju2CqozzleKCxoLIgsGCvYFCDQotCQkJCQkJPE9MPg0KLQkJCQkJCQk8TEk+Vk9MVk8gVjcwPC9MST4NCi0JCQkJCQkJPExJPkJXTSAzMjVpIHRvdXJpbmc8L0xJPg0KLQkJCQkJCQk8TEk+VlcgUGFzc2FydCBWNiA0IE1vdGlvbjwvTEk+DQotCQkJCQkJCTxMST5NZXJjZWRlcy1CZW56IEMgQ2xhc3MgV2Fnb248L0xJPg0KLQkJCQkJCQk8TEk+QXVkaSBBNCBBdmFudDwvTEk+DQotCQkJCQkJPC9PTD4NCi0JCQkJCQk8QlI+DQotCQkJCQkJgruCpIFCIIKxgsyOnpNfgsU8Qj6CYIJVgs2KrpFTgsiDWINSgVuDdopPPC9CPoLFgqCCwYK9gUI8L0xJPg0KLQkJCQkJPC9VTD4NCi0JCQkJCTwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyI+PC9URD4NCi0JCQkJPC9UUj4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiIHdpZHRoPSI1IiBoZWlnaHQ9IjUiPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyI+PC9URD4NCi0JCQkJPC9UUj4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIHdpZHRoPSI0MjAiPoKxgrGCqYLngUGIyIm6gsyXnZdSgqqO5YLFgUGM85XijtSCqo1pgueC6oK9gUI8QlI+DQotCQkJCQmBaYKggq2C3ILFguCOhILGjciCzIzCkGyTSY7lis+CyYLmguiC3IK3gUKBag0KLQkJCQkJPFVMPg0KLQkJCQkJCTxMST5WT0xWTyBWNzAgLSCDZoNVg0ODk4KqWILFg3uDY4FCPC9MST4NCi0JCQkJCQk8TEk+QldNIDMyNWkgdG91cmluZyAtIJKGk3KUvJJbgsiDVINDg1mBQYpYkoZCV02CvoLngq+CxYN7g2OBQjwvTEk+DQotCQkJCQkJPExJPkMgQ2xhc3MgLSCJv4ppgsmMqY2Hgu2CyIKig0eDk4NXg5OBQZPgkZWCxYN7g2OBQjwvTEk+DQotCQkJCQkJPExJPlBhc3NhcnQgLSCJv4ppgs2Wo5fNk0mCvoKqk+CKT5GVg2aDVYNDg5OCxYN7g2OBQjwvTEk+DQotCQkJCQk8L1VMPg0KLQkJCQkJgruCpIFCgrGCsYLFPEI+jmOCwYK9gsyCzUE0IEF2YW50PC9CPoLFgrWCvYFCIDxCUj4NCi0JCQkJCUE0IDMuMCBxdWF0dHJvIHNwb3J0c4LJjo6P5oK1gUGCxoLEguCLQ4LJk/yCwYLEgrWC3IKigtyCtYK9gUI8QlI+DQotCQkJCQmCtYKpgrWUrZSEl1yS6ILNMjAwMpROMoyOgsaCzIKxgsaCxYFBgruCsYLcgsWR0oLGgqSCxojqk3iCzYyIgt+C3IK1gr2BQjxCUj4NCi0JCQkJCTxCUj4NCi0JCQkJCZdCiOqBQYtDgsmCyILBgsSCooK9gsyCzY66k+CCzINUg0ODWYLGg2eDiYOTg06XZZfKgqpWNzCCyZTkgteCqYLIguiPrIKzgq2CyILpgsaCooKkk1+CxYK1gr2BQjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyI+PC9URD4NCi0JCQkJPC9UUj4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyI+PEZPTlQgY29sb3I9IiNmZmZmZmYiPjEyjI6Sho97PC9GT05UPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyI+PC9URD4NCi0JCQkJPC9UUj4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiPjwvVEQ+DQotCQkJCQk8VEQ+PEJSPg0KLQkJCQkJMoyOgtyCxZHSgsaCpILGjnaCwYLEgqKC6Y/zkdSCxYFBQTSCzJLHicGP7pXxgvCTvoLmgqSCxo52gqKDZoNCgVuDiYFbgsmXp4K/ivGC6ILBgr2CxoKxguuBQZJTk5aCzIlji8aCzJX7gqqVc43dgsWTWJK3gsaYYoLwgrWC3IK1gr2BQjxCUj4NCi0JCQkJCTxCUj4NCi0JCQkJCYK7grGCxYFBVk9MVk+CqYLngsyP5oLoireCpoFBicaRsI1ckKyBaTSQbIFqgvCNbIKmgumCxkE2gqqCqIqpgt+CxoLMgrGCxoFCIDxCPom/immNt4LgkZWU9ZOZgvCNbIKmgumCxkE0IEF2YW50DQotCQkJCQkzLjAgcXVhdHRybyBzdXBvcnSCxkE2IEF2YW50IDMuMCBxdWF0cnJvgsyNt4KqgtmCxoLxgseCyIKiPC9CPoLGgsyCsYLGgUI8QlI+DQotCQkJCQk8QlI+DQotCQkJCQmNWILJibqO5oLog0yDg4OTg3mBW4OTkoaCxYFBkbyKQ4pPg4GBW4NKgVuCqYLngsyO5pHWgqaCzI/qjYeBQY24kuiKeoF7PEI+glKCT5aciX48L0I+g3uBW4Npg1iCxoLIguiBQYLGgsGCxILggqiUg4Kik76KtIKqj2+C3IK3gUI8QlI+DQotCQkJCQk8QlI+DQotCQkJCQmCu4K1gsSBQZROk+CUW47UicKUXILIivOWXZBGgWmDVoOLg2+BW4OMg0ODToOBg16DioNig06BaoLMgmCCVYKqMZHkjd2MyYKqgqCC6YLGgsyCsYLGgUI8QlI+DQotCQkJCQk8QlI+DQotCQkJCQmCxYFBjIuLx4KxgsyYYoLJj+aCwYLEKI/mgrmC54LqgsSBSIFqgUE8Qj48Rk9OVCBjb2xvcj0iI2NjMzNmZiI+QTYgMy4wIEF2YW50IHF1YXR0cm8NCi0JCQkJCTIwMDIgTW9kZWw8L0ZPTlQ+PC9CPoLwjXeT/IyIkuiCtYLcgrWCvYFCPEJSPg0KLQkJCQkJPEJSPg0KLQkJCQkJPC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDA2NmNjIj48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyI+PEZPTlQgY29sb3I9IiNmZmZmZmYiPo13k/yMiJLogUmBSTwvRk9OVD48L1REPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDAwY2MiPjxGT05UIGNvbG9yPSIjZmZmZmZmIj6Nd5P8jIiS6ILMl52XUoLwgtyCxoLfgumCxoFBPC9GT05UPoFBPC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIj48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgd2lkdGg9IjIxNiIgYmdjb2xvcj0iIzAwNjZjYyIgdmFsaWduPSJ0b3AiPjwvVEQ+DQotCQkJCQk8VEQgd2lkdGg9IjQyMCI+DQotCQkJCQk8VUw+DQotCQkJCQkJPExJPpG8gsyM85XijtSCxpTkinKCtYLEgUGDe4Nmg0KCqILmgtGO1JPgi/OK1ILMg2aDVYNDg5OC8JHlgqKCyYtDgsmT/ILBgr2BQjwvTEk+DQotCQkJCQkJPExJPoJgglOCxYLNgnWCVoJPgsmU5ILXjtST4INYg3mBW4NYgqqLt4KtgsiCwYLEgrWC3IKkgUI8L0xJPg0KLQkJCQkJCTxMST6DToNBg2eDjYFFg1aDWINlg4CBaXNraYKqju+WoYLIgsyCxYLigs2C6HNub3cgZHJpdmWCyYLNNFdEgqqXfoK1gq2CxC4uLik8L0xJPg0KLQkJCQkJCTxMST6SbIj4gquCxpPBlcqJuo7mguiDTIODg5ODeYFbg5OShoK+gsGCvY6WgUaBfIFqPC9MST4NCi0JCQkJCTwvVUw+DQotCQkJCQk8L1REPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiPjwvVEQ+DQotCQkJCTwvVFI+DQotCQkJCTxUUj4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIiB2YWxpZ249InRvcCIgY29sc3Bhbj0iMiI+PEZPTlQNCi0JCQkJCQljb2xvcj0iI2ZmZmZmZiI+jXeT/IK1gr2DgoNmg4sggqiC5oLRIJLHicGDSYN2g1aDh4OTPC9GT05UPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyI+PC9URD4NCi0JCQkJPC9UUj4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiIHZhbGlnbj0idG9wIj48L1REPg0KLQkJCQkJPFREPg0KLQkJCQkJPFVMPg0KLQkJCQkJCTxMST6DgoNmg4sNCi0JCQkJCQk8VUw+DQotCQkJCQkJCTxMST48Qj48Rk9OVCBjb2xvcj0iI2NjMzNmZiI+QTYgMy4wIEF2YW50IHF1YXR0cm8gMjAwMiBNb2RlbDwvRk9OVD48L0I+DQotCQkJCQkJCTwvTEk+DQotCQkJCQkJCTxMST6P2oK1gq2CzYJggpWChIKJgsyDSYN0g0KDVoODg4uDeYFbg1eC8IKyl5eCrYK+grOCooFCKCA8QQ0KLQkJCQkJCQkJaHJlZj0iaHR0cDovL3d3dy5hdWRpLmNvLmpwL21vZGVscy9pbmRleC5odG1sIj5odHRwOi8vd3d3LmF1ZGkuY28uanAvbW9kZWxzL2luZGV4Lmh0bWw8L0E+DQotCQkJCQkJCSk8L0xJPg0KLQkJCQkJCTwvVUw+DQotCQkJCQkJPC9MST4NCi0JCQkJCQk8TEk+g3uDZoNCgUWDSoOJgVsNCi0JCQkJCQk8VUw+DQotCQkJCQkJCTxMST6DVoOLg2+BW4OMg0ODToOBg16DioNig048L0xJPg0KLQkJCQkJCTwvVUw+DQotCQkJCQkJPC9MST4NCi0JCQkJCQk8TEk+kseJwYNJg3aDVoOHg5MNCi0JCQkJCQk8VUw+DQotCQkJCQkJCTxMST6Di4Fbg3SDQYOTg2WDaZdwg0GDk4NPg4uDWIN5gVuDVIFbIIFpi0CKQo6ukpOO1I/ql5iXcILMgr2C34FqPC9MST4NCi0JCQkJCQkJPExJPoOJg1GDYoNXg2eDjINDICiDWINMgVuUwoFFg3WBW4NjgUGOcYufgsyW7IuFk7mL74LwkM+C3Y2egt6CvYLfgsyTRI+cgq+XcIFqPC9MST4NCi0JCQkJCQkJPExJPoNvg5ODcIFblduM7Jdwg4mDb4FbIIFpjciCzJd2ll2CxS4uLi4uKTwvTEk+DQotCQkJCQkJCTxMST6DWINeg2KDaIOMg1iBRYNeg0ODhCAtIIN1g4qDV4NYg2eDkyCDdYOKg1WDYoNOPC9MST4NCi0JCQkJCQk8L1VMPg0KLQkJCQkJCTwvTEk+DQotCQkJCQk8L1VMPg0KLQkJCQkJPC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDA2NmNjIj48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyI+PEZPTlQgY29sb3I9IiNmZmZmZmYiPjFzdCCDQ4OTg3aDjINig1aDh4OTPC9GT05UPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyI+PC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIiBoZWlnaHQ9IjUiPjwvVEQ+DQotCQkJCTwvVFI+DQotCQkJCTxUUj4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDA2NmNjIiB2YWxpZ249InRvcCI+PElNRyBzcmM9ImltYWdlMjExLmpwZyINCi0JCQkJCQlib3JkZXI9IjAiIHdpZHRoPSIxOTUiIGhlaWdodD0iMTMwIj48L1REPg0KLQkJCQkJPFREPo13k/yMiJLogqmC54FBlE6WloLMjVGCvYK+grWCoo6eivqCxYK1gr2CqjKPVIrUgsaPrYK1gsSUW47UgUI8QlI+DQotCQkJCQkzk/qM44LJlWOP6oLJgnKCi4KJgsmNc4Ktl1yS6ILFgrWCvYLMgsWBQYNYg16DYoNog4yDWJGVkoWCtYLEguCC54KigtyCtYK9gUI8QlI+DQotCQkJCQk8VUw+DQotCQkJCQkJPExJPjxGT05UIGNvbG9yPSIjZmYwMGZmIj48Rk9OVCBjb2xvcj0iI2ZmMDBmZiI+PEI+UHJvcy48L0I+PC9GT05UPjwvRk9OVD4NCi0JCQkJCQk8VUw+DQotCQkJCQkJCTxMST6DWIOAgVuDWYLIg0eDk4NXg5OBQjwvTEk+DQotCQkJCQkJCTxMST6IwJLogrWCvZGWguiBaZRbjtSCtYLEM5P6jOOCzINYg22BW4FFg2iDiYNDg3WCzYLGgsSC4In1k0uCxYK1gr2BaoFCPC9MST4NCi0JCQkJCQkJPExJPo/jjr+CxY1MgqKOupPggUI8L0xJPg0KLQkJCQkJCQk8TEk+jnaCwYK9guaC6ILgiKuCrYLIgqKUUpTvgWmNgpGsgvCK3ILfgUGMu43dlb2LzzYuNUttL0yBQoFqPC9MST4NCi0JCQkJCQkJPExJPopYkoaCxYKggtyC6JOvgraO1ILwjKmCqYKvgsiCooFGgXyBajwvTEk+DQotCQkJCQkJPC9VTD4NCi0JCQkJCQk8L0xJPg0KLQkJCQkJCTxMST48Qj48Rk9OVCBjb2xvcj0iIzAwMDAzMyI+Q29ucy48L0ZPTlQ+PC9CPg0KLQkJCQkJCTxVTD4NCi0JCQkJCQkJPExJPpVXj4CTi43agsyCbYKBgpaCiYLJg3KBW4NSg5OCqpV0gqKCxIKigsiCooFCPEJSPg0KLQkJCQkJCQmBaY9hkdiP7pXxgqqCdYJogmKCcoK+gq+CxYLNlXOPXJWqgUKIyJFPjoSXcIK1gsSCooK9g3CDQ4NJg2qDQY7QIIp5g2mDcoLNl8eCqYLBgr2BQoFqPC9MST4NCi0JCQkJCQkJPExJPojZj+2CyIKtgueCopK8gq6NlYKtg4qDQYKqiZiC6oLpgUIgg2eDiYOTg06C8IpKgq+C6YLGjuiCqpBegsGNlYFCPC9MST4NCi0JCQkJCQkJPExJPoK/guWCwYLGgtOC7YLTgu2CtYK9kauJ8YLogUI8L0xJPg0KLQkJCQkJCQk8TEk+gnWCVoJPgsaU5ILXgUGMuILBgsSCtYLcgsGCvYNng4mDk4NOl2WXyoFCPC9MST4NCi0JCQkJCQk8L1VMPg0KLQkJCQkJCTwvTEk+DQotCQkJCQk8L1VMPg0KLQkJCQkJPC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDA2NmNjIj48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyI+PEZPTlQgY29sb3I9IiNmZmZmZmYiPoJQg5aMjoOMg3yBW4NngsmRsYKtLi4uLi4uLi48L0ZPTlQ+PEENCi0JCQkJCQlocmVmPSJhdWRpXzFtb250aC5odG1sIj48SU1HIHNyYz0iYjAxNmxpcy5naWYiIHdpZHRoPSIxNiINCi0JCQkJCQloZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvQT48L1REPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDAwY2MiPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyIgaGVpZ2h0PSI1Ij48L1REPg0KLQkJCQk8L1RSPg0KLQkJCTwvVEJPRFk+DQotCQk8L1RBQkxFPg0KLQkJPC9ESVY+DQotCTwvc2l0ZWVkaXQ6bGF5b3V0YXJlYT4NCi08L3NpdGVlZGl0OmxheW91dD4NCi08L0JPRFk+DQotPC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9FbXB0eUZpbGUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL0VtcHR5RmlsZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL0VtcHR5RmlsZS54bWwKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODA2OTJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMT8+Ci08dGVzdD4KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4YTFiY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSIiPz4KLTx0YWc+Ci1BdXN0cmFsaesKLTwvdGFnPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54c2wgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNjY0ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueHNsCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSIiPz4KLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKLSAgICB2ZXJzaW9uPSIxLjAiCi0gICAgeG1sbnM6eGFsYW49Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0Ij4KLTx4c2w6dmFyaWFibGUgbmFtZT0iYmFkRW5jb2RpbmciPgotQXVzdHJhbGnrCi08L3hzbDp2YXJpYWJsZT4KLTwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTm9FbmNvZGluZy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTm9FbmNvZGluZy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyZDhhZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL05vRW5jb2RpbmcueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTx0ZXN0PgotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9Ob3JtYWxOb25EZWZhdWx0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9Ob3JtYWxOb25EZWZhdWx0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJlYzk4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTm9ybWFsTm9uRGVmYXVsdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz4KLTx0ZXN0PgotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9VVEYxNkxFQXRTdGFydE9mTGFyZ2VGaWxlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9VVEYxNkxFQXRTdGFydE9mTGFyZ2VGaWxlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVlYzUzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvVVRGMTZMRUF0U3RhcnRPZkxhcmdlRmlsZS54bWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvVVRGOFdpdGgzQnl0ZUJPTS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvVVRGOFdpdGgzQnl0ZUJPTS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ODExMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL1VURjhXaXRoM0J5dGVCT00ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRlc3Q+Ci08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9ldWNqcC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNTliZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkVVQy1KUCI/PgotPFBlcnNvbj4KLQk8QWRkcmVzcz4KLQkJPENpdHk+wufPwjwvQ2l0eT4KLQkJPFN0YXRlPr/AxuDA7jwvU3RhdGU+Ci0JCTxaaXA+TTFDIDVDMjwvWmlwPgotCQk8Q291bnRyeT7G/MvcPC9Db3VudHJ5PgotCTwvQWRkcmVzcz4KLQk8TmFtZT4KLQkJPEZpcnN0PrDsz7o8L0ZpcnN0PgotCQk8TGFzdD7O68zaPC9MYXN0PgotCTwvTmFtZT4KLTwvUGVyc29uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9zaGlmdGppcy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvc2hpZnRqaXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTRiY2Y4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9zaGlmdGppcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJTaGlmdF9KSVMiPz4KLTxQZXJzb24+Ci0JPEFkZHJlc3M+Ci0JCTxDaXR5PpHlmGE8L0NpdHk+Ci0JCTxTdGF0ZT6QX5PekOw8L1N0YXRlPgotCQk8WmlwPk0xQyA1QzI8L1ppcD4KLQkJPENvdW50cnk+k/qWezwvQ291bnRyeT4KLQk8L0FkZHJlc3M+Ci0JPE5hbWU+Ci0JCTxGaXJzdD6I6phZPC9GaXJzdD4KLQkJPExhc3Q+l+mW2DwvTGFzdD4KLQk8L05hbWU+Ci08L1BlcnNvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdEV4dHJhSnVuay54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdEV4dHJhSnVuay54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MDk1ZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYUp1bmsueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiICBhYmNkPSJlZmMiCi0KLWVuY29kaW5nPSJJU08tODg1OS0xIiAKLQotID8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdEV4dHJhVmFsaWRTdHVmZi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdEV4dHJhVmFsaWRTdHVmZi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkNWMxZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYVZhbGlkU3R1ZmYueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjExYTMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCBlbmNvZGluZz1VVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY0MjJmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPVVURi04IAotPHRlc3Q+Ci08L3Rlc3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFlYWUwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDMueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTggc3RhbmRhbG9uZT0ieWVzIj8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQ0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkwYzY1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDQueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTg/PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RNdWx0aUxpbmUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RNdWx0aUxpbmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjYzZmMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0TXVsdGlMaW5lLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiAgCi0KLWVuY29kaW5nPSJJU08tODg1OS0xIiAKLQotID8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vRW5jb2RpbmdWYWx1ZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vRW5jb2RpbmdWYWx1ZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYjhlOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb0VuY29kaW5nVmFsdWUueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiAgICA/PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWFhMjdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPHRlc3Q+Ci0KLTwvdGVzdD4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xBdEZpcnN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsQXRGaXJzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNjU0OWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xBdEZpcnN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPHRlc3Q+Ci0gPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08L3Rlc3Q+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsSW5MYXJnZUZpbGUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xJbkxhcmdlRmlsZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNWZjNTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xJbkxhcmdlRmlsZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNTYgKzAsMCBAQAotPHRlc3Q+Ci0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLTwvdGVzdD4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0Tm9ybWFsQ2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NWRiYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RVVEYxNi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdFVURjE2LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ5ZTgxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdFVURjE2LnhtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM5ZDRkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdFdTQmVmb3JlWE1MRGVjbC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLQotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08L3Rlc3Q+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsMi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdFdTQmVmb3JlWE1MRGVjbDIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzA1YjRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsMi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSAgICAgICAgICA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwvdGVzdD4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RXU0JlZm9yZVhNTERlY2wzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsMy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4YjhkMDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RXU0JlZm9yZVhNTERlY2wzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotCQotCSAgICAgIAkJICAgIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPC90ZXN0PgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdlNjkxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdmZmQ2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLnhtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY2ZTM3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy54bWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MWM4ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmIwYTdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluCi0KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXhtbHVpdGVzdHMuamFyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YzZTY4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPjwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGQ4YjVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6Mzc6MjEgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyYWM2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTM2OGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzI0OTU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjA1OjI5IEVEVCAyMDA2Ci1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTVkYTg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAKLUJ1bmRsZS1DbGFzc1BhdGg6IHhtbHVpdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLlhNTFVJVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5icmVha3BvaW50cywKLSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLnZpZXdlcgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yLAotIG9yZy5lY2xpcHNlLnVpLmlkZSwKLSBvcmcuanVuaXQsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLAotIG9yZy5lY2xpcHNlLnVpLnZpZXdzLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24sCi0gY29tLmlibS5pY3UKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlYzU5ODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+TWF5IDIsIDIwMDY8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWNjNjNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHhtbHVpdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RyZXNvdXJjZXMvCi1qYXJzLmNvbXBpbGUub3JkZXIgPSB4bWx1aXRlc3RzLmphcgotc291cmNlLnhtbHVpdGVzdHMuamFyID0gc3JjLwotb3V0cHV0LnhtbHVpdGVzdHMuamFyID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9pY29ucy9icmtwX29iai5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2ljb25zL2Jya3Bfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgzMWZlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2ljb25zL2Jya3Bfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVlYmRiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFiYmNhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwotCi1CdW5kbGUtTmFtZS4wID0gWE1MIFVJIFRlc3RzCi12aWV3Lm5hbWUuMCA9IEVtYmVkZGVkIFhNTCBTdHJ1Y3R1cmVkIFRleHQgVmlld2VyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzcxNmViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08cGx1Z2luPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPgotCi0JCTx2aWV3Ci0JCQluYW1lPSIldmlldy5uYW1lLjAiCi0JCQlpY29uPSIkbmwkL2ljb25zL3NvdXJjZUVkaXRvci5naWYiCi0JCQljYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cyIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLnZpZXdlci5WaWV3ZXJUZXN0WE1MIgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMudmlld2VyLlZpZXdlclRlc3RYTUwiPgotCQk8L3ZpZXc+Ci0JPC9leHRlbnNpb24+Ci0KLQk8IS0tIHRlc3QgZm9yIGJyZWFrcG9pbnQgZXJyb3IgaGFuZGxpbmcgLSAtPgotCQk8ZXh0ZW5zaW9uCi0JCXBvaW50PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLmV4dGVuc2lvbnMuYnJlYWtwb2ludCI+Ci0JCTxicmVha3BvaW50Q29udHJpYnV0aW9uCi0JCWlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnByb3ZpZGVycy50ZXN0Ij4KLQkJPHByb3ZpZGVyCi0JCWNvbnRlbnRUeXBlcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhtbHNvdXJjZSxvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIgotCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5icmVha3BvaW50cy5CcmVha3BvaW50RXJyb3JQcm92aWRlciIKLQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuYnJlYWtwb2ludHMuQnJlYWtwb2ludEVycm9yUHJvdmlkZXIiPgotCQk8L3Byb3ZpZGVyPgotCQk8L2JyZWFrcG9pbnRDb250cmlidXRpb24+Ci0JCTwvZXh0ZW5zaW9uPgotCS0tPgotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuZXh0ZW5kZWRFZGl0b3JBY3Rpb25zIj4KLQkJPGVkaXRvckNvbnRyaWJ1dGlvbgotCQkJdGFyZ2V0SUQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5hY3Rpb25zIj4KLQkJCTxhY3Rpb24KLQkJCQlwb3B1cG1lbnVQYXRoPSJncm91cC5lZGl0b3IiCi0JCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuYnJlYWtwb2ludHMuRW5hYmxlV2FybmluZ0FjdGlvbiIKLQkJCQltZW51YmFyUGF0aD0iZWRpdC9NZW51QWRkaXRpb25zIgotCQkJCWljb249Imljb25zL2Jya3Bfb2JqLmdpZiIKLQkJCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5icmVha3BvaW50cy5FbmFibGVXYXJuaW5nQWN0aW9uIj4KLQkJCTwvYWN0aW9uPgotCQk8L2VkaXRvckNvbnRyaWJ1dGlvbj4KLQk8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9iYXNpY1hIVE1MLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvYmFzaWNYSFRNTC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyY2JlZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9iYXNpY1hIVE1MLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvY29udjJYSFRNTC5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL2NvbnYyWEhUTUwuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjVjNmIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvY29udjJYSFRNTC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL2lkZW50aWZ5RFRELmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvaWRlbnRpZnlEVEQuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2M4NjRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvaWRlbnRpZnlEVEQuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9pbXBvcnREVEQuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9pbXBvcnREVEQuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODE1ZDZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvaW1wb3J0RFRELmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvb3V0bGluZTEuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9vdXRsaW5lMS5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ZDIxYjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9vdXRsaW5lMS5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL291dGxpbmUyLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvb3V0bGluZTIuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjQ1M2Y3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvb3V0bGluZTIuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9zZXR1cEZpbGVzL1dpcmVsZXNzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvc2V0dXBGaWxlcy9XaXJlbGVzcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZTZhM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9zZXR1cEZpbGVzL1dpcmVsZXNzLnhtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvc3RyaWN0WEhUTUwuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9zdHJpY3RYSFRNTC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0Y2QwZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9zdHJpY3RYSFRNTC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfZmlsZXMvSm9iRGVzY0VSUk9SLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9maWxlcy9Kb2JEZXNjRVJST1IueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9maWxlcy9Kb2JEZXNjRVJST1IueG1sCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvRUpCVGFza3NfYWZ0ZXJfcGFzdGUuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9FSkJUYXNrc19hZnRlcl9wYXN0ZS5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0YmY1NDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9FSkJUYXNrc19hZnRlcl9wYXN0ZS5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL0VKQlRhc2tzX2JlZm9yZV9wYXN0ZS5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL0VKQlRhc2tzX2JlZm9yZV9wYXN0ZS5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZjFlYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9FSkJUYXNrc19iZWZvcmVfcGFzdGUuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9pbnZhbGlkX2R0ZC5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL2ludmFsaWRfZHRkLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAwYmIwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL2ludmFsaWRfZHRkLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvc2NoZW1hX211bHRpX2Vycm9yLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvc2NoZW1hX211bHRpX2Vycm9yLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VhMDM2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3NjaGVtYV9tdWx0aV9lcnJvci5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3NjaGVtYV91bmtub3duX2VsZW1lbnQuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9zY2hlbWFfdW5rbm93bl9lbGVtZW50LmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQzYWNjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3NjaGVtYV91bmtub3duX2VsZW1lbnQuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy93X2RvY3R5cGUuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy93X2RvY3R5cGUuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTI4ODY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvd19kb2N0eXBlLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvd291dF9kb2N0eXBlLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvd291dF9kb2N0eXBlLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYzNzIyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3dvdXRfZG9jdHlwZS5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3dyb25nX2R0ZC5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3dyb25nX2R0ZC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzZDI0MWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy93cm9uZ19kdGQuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS91MDExYW5pLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdTAxMWFuaS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNjNhZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS91MDExYW5pLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvd2lyZWxlc3MuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS93aXJlbGVzcy5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZmNjYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS93aXJlbGVzcy5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL2ludGVybmFsL3ZhbGlkYXRpb24vVGVzdERlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvaW50ZXJuYWwvdmFsaWRhdGlvbi9UZXN0RGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDIxNWFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvaW50ZXJuYWwvdmFsaWRhdGlvbi9UZXN0RGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5jb3JlLlZhbGlkYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwub3BlcmF0aW9ucy5Xb3JrYmVuY2hDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuWE1MVUlUZXN0c1BsdWdpbjsKLQotLyoqCi0gKiBUZXN0IHRoZSBYTUwgZGVsZWdhdGluZyBzb3VyY2UgdmFsaWRhdG9yLgotICoKLSAqLwotcHVibGljIGNsYXNzIFRlc3REZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWE1MIGV4dGVuZHMgVGVzdENhc2UgCi17Ci0JRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTCBzb3VyY2VWYWxpZGF0b3IgPSBuZXcgRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTCgpOwotCQotCS8qKgotCSAqIFRlc3QgdGhhdCBmaWxlcyB0aGF0IGNvbnRhaW4gbm9uLThiaXQgY2hhcnMgYXJlIHZhbGlkYXRlZAotCSAqIGNvcnJlY3RseS4gaS5lLiBEbyBub3QgcHJvZHVjZSBpbmNvcnJlY3QgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uOEJpdENoYXJzKCkKLQl7Ci0JCVN0cmluZyBwcm9qTmFtZSA9ICJQcm9qZWN0IjsKLQkJU3RyaW5nIGZpbGVOYW1lMSA9ICJpbnRlcm5hdGlvbmFsLWluc3RhbmNlLnhtbCI7Ci0JCVN0cmluZyBmaWxlTmFtZTIgPSAiaW50ZXJuYXRpb25hbC54c2QiOwotCQkKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvak5hbWUpOwotCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvak5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJCi0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgocHJvak5hbWUgKyAiLyIgKyBmaWxlTmFtZTEpKTsKLQkJaWYgKGZpbGUgIT0gbnVsbCAmJiAhZmlsZS5leGlzdHMoKSkgewotCQkJdHJ5IHsKLQkJCQlmaWxlLmNyZWF0ZShGaWxlTG9jYXRvci5vcGVuU3RyZWFtKFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLCBuZXcgUGF0aCgiL3Rlc3RyZXNvdXJjZXMvTm9uOEJpdENoYXJzL2ludGVybmF0aW9uYWwtaW5zdGFuY2UueG1sIiksIGZhbHNlKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCWZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgocHJvak5hbWUgKyAiLyIgKyBmaWxlTmFtZTIpKTsKLQkJaWYgKGZpbGUgIT0gbnVsbCAmJiAhZmlsZS5leGlzdHMoKSkgewotCQkJdHJ5IHsKLQkJCQlmaWxlLmNyZWF0ZShGaWxlTG9jYXRvci5vcGVuU3RyZWFtKFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLCBuZXcgUGF0aCgiL3Rlc3RyZXNvdXJjZXMvTm9uOEJpdENoYXJzL2ludGVybmF0aW9uYWwueHNkIiksIGZhbHNlKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCVdvcmtiZW5jaENvbnRleHQgY29udGV4dCA9IG5ldyBXb3JrYmVuY2hDb250ZXh0KCk7Ci0JCUxpc3QgZmlsZUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWZpbGVMaXN0LmFkZCgiLyIgKyBwcm9qTmFtZSArICIvIiArIGZpbGVOYW1lMSk7Ci0JCWNvbnRleHQuc2V0VmFsaWRhdGlvbkZpbGVVUklzKGZpbGVMaXN0KTsKLQkJVGVzdFJlcG9ydGVyIHJlcG9ydGVyID0gbmV3IFRlc3RSZXBvcnRlcigpOwotCQl0cnl7Ci0JCQlzb3VyY2VWYWxpZGF0b3IudmFsaWRhdGUoY29udGV4dCwgcmVwb3J0ZXIpOwotCQl9Ci0JCWNhdGNoKFZhbGlkYXRpb25FeGNlcHRpb24gZSl7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCQotCQlhc3NlcnRGYWxzZSgiTWVzc2FnZXMgd2VyZSByZXBvcnRlZCBvbiB2YWxpZCBmaWxlIDEuIiwgcmVwb3J0ZXIuaXNNZXNzYWdlUmVwb3J0ZWQoKSk7Ci0JCQotCQlXb3JrYmVuY2hDb250ZXh0IGNvbnRleHQyID0gbmV3IFdvcmtiZW5jaENvbnRleHQoKTsKLQkJTGlzdCBmaWxlTGlzdDIgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWZpbGVMaXN0Mi5hZGQoIi8iICsgcHJvak5hbWUgKyAiLyIgKyBmaWxlTmFtZTIpOwotCQljb250ZXh0Mi5zZXRWYWxpZGF0aW9uRmlsZVVSSXMoZmlsZUxpc3QyKTsKLQkJVGVzdFJlcG9ydGVyIHJlcG9ydGVyMiA9IG5ldyBUZXN0UmVwb3J0ZXIoKTsKLQkJdHJ5ewotCQkJc291cmNlVmFsaWRhdG9yLnZhbGlkYXRlKGNvbnRleHQyLCByZXBvcnRlcjIpOwotCQl9Ci0JCWNhdGNoKFZhbGlkYXRpb25FeGNlcHRpb24gZSl7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCQotCQlhc3NlcnRGYWxzZSgiTWVzc2FnZXMgd2VyZSByZXBvcnRlZCBvbiB2YWxpZCBmaWxlIDIuIiwgcmVwb3J0ZXIyLmlzTWVzc2FnZVJlcG9ydGVkKCkpOwotCX0KLQkKLQlwcml2YXRlIGNsYXNzIFRlc3RSZXBvcnRlciBpbXBsZW1lbnRzIElSZXBvcnRlcgotCXsKLQkJcHJvdGVjdGVkIGJvb2xlYW4gbWVzc2FnZVJlcG9ydGVkID0gZmFsc2U7Ci0JCQotCQlwdWJsaWMgVGVzdFJlcG9ydGVyKCl7Ci0JCQkKLQkJfQotCQkKLQkJcHVibGljIHZvaWQgYWRkTWVzc2FnZShJVmFsaWRhdG9yIG9yaWdpbiwgSU1lc3NhZ2UgbWVzc2FnZSkgewotCQkJbWVzc2FnZVJlcG9ydGVkID0gdHJ1ZTsKLQkJCQotCQl9Ci0JCQotCQlwdWJsaWMgYm9vbGVhbiBpc01lc3NhZ2VSZXBvcnRlZCgpCi0JCXsKLQkJCXJldHVybiBtZXNzYWdlUmVwb3J0ZWQ7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBkaXNwbGF5U3VidGFzayhJVmFsaWRhdG9yIHZhbGlkYXRvciwgSU1lc3NhZ2UgbWVzc2FnZSkgewotCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQkJCi0JCX0KLQotCQlwdWJsaWMgTGlzdCBnZXRNZXNzYWdlcygpIHsKLQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gaXNDYW5jZWxsZWQoKSB7Ci0JCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCByZW1vdmVBbGxNZXNzYWdlcyhJVmFsaWRhdG9yIG9yaWdpbiwgT2JqZWN0IG9iamVjdCkgewotCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQkJCi0JCX0KLQotCQlwdWJsaWMgdm9pZCByZW1vdmVBbGxNZXNzYWdlcyhJVmFsaWRhdG9yIG9yaWdpbikgewotCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQkJCi0JCX0KLQotCQlwdWJsaWMgdm9pZCByZW1vdmVNZXNzYWdlU3Vic2V0KElWYWxpZGF0b3IgdmFsaWRhdG9yLCBPYmplY3Qgb2JqLCBTdHJpbmcgZ3JvdXBOYW1lKSB7Ci0JCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCQkKLQkJfQotCQkKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL2ludGVybmFsL3ZhbGlkYXRpb24vVGVzdE1hcmt1cFZhbGlkYXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS9pbnRlcm5hbC92YWxpZGF0aW9uL1Rlc3RNYXJrdXBWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNlNjA5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL2ludGVybmFsL3ZhbGlkYXRpb24vVGVzdE1hcmt1cFZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5SZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnJlY29uY2lsZS52YWxpZGF0b3IuSW5jcmVtZW50YWxSZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklSZXBvcnRlcjsKLQotLyoqCi0gKiBUZXN0cyBNYXJrdXBWYWxpZGF0b3IKLSAqLwotcHVibGljIGNsYXNzIFRlc3RNYXJrdXBWYWxpZGF0b3IgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBNYXJrdXBWYWxpZGF0b3IgZlZhbGlkYXRvcjsKLQlwcml2YXRlIElSZXBvcnRlciBmUmVwb3J0ZXI7Ci0JcHJpdmF0ZSBJU3RydWN0dXJlZERvY3VtZW50IGZEb2N1bWVudDsKLQotCS8qKgotCSAqIFZhbGlkYXRlcyBkb2N1bWVudAotCSAqIAotCSAqIEBwYXJhbSBjb250ZW50cwotCSAqICAgICAgICAgICAgY29udGVudHMgdG8gc2V0IGluIGRvY3VtZW50Ci0JICogQHJldHVybiB0cnVlIGlmIHRoZXJlIHdhcyBhIHZhbGlkYXRpb24gZXJyb3IgZmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIHZhbGlkYXRlRXJyb3IoU3RyaW5nIGNvbnRlbnRzKSB7Ci0JCWZEb2N1bWVudC5zZXQoY29udGVudHMpOwotCQlmVmFsaWRhdG9yLnZhbGlkYXRlKG5ldyBSZWdpb24oMCwgZkRvY3VtZW50LmdldExlbmd0aCgpKSwgbnVsbCwgZlJlcG9ydGVyKTsKLQkJcmV0dXJuIGZSZXBvcnRlci5nZXRNZXNzYWdlcygpLmlzRW1wdHkoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBqdXN0IGNyZWF0ZSBvbmNlCi0JCWlmIChmVmFsaWRhdG9yID09IG51bGwpCi0JCQlmVmFsaWRhdG9yID0gbmV3IE1hcmt1cFZhbGlkYXRvcigpOwotCQlpZiAoZlJlcG9ydGVyID09IG51bGwpCi0JCQlmUmVwb3J0ZXIgPSBuZXcgSW5jcmVtZW50YWxSZXBvcnRlcihudWxsKTsKLQkJaWYgKGZEb2N1bWVudCA9PSBudWxsKQotCQkJZkRvY3VtZW50ID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoIm9uZmlyZS54bWwiLCAiIiwgbnVsbCk7Ci0KLQkJZlZhbGlkYXRvci5jb25uZWN0KGZEb2N1bWVudCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZlZhbGlkYXRvci5kaXNjb25uZWN0KGZEb2N1bWVudCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNJbkVuZFRhZygpIHsKLQkJLy8gdGVzdCBmb3IgZXJyb3IKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBhdHRyaWJ1dGVzIGluIGVuZCB0YWcgZXJyb3IiLCAhdmFsaWRhdGVFcnJvcigiPHN0b3A+PC9zdG9wIGRyb3A9XCJyb2xsXCI+IikpOwotCi0JCS8vIHRlc3QgZm9yIG5vIGVycm9yCi0JCWFzc2VydFRydWUoIlNob3VsZCBub3QgZ2V0IGF0dHJpYnV0ZXMgaW4gZW5kIHRhZyBlcnJvciIsIHZhbGlkYXRlRXJyb3IoIjxzdG9wPjwvc3RvcD4iKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENsb3NpbmdCcmFja2V0KCkgewotCQkvLyB0ZXN0IGZvciBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgZ2V0IGNsb3NpbmcgYnJhY2tldCBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8c3RvcCA8L3N0b3A+IikpOwotCi0JCS8vIHRlc3QgZm9yIG5vIGVycm9yCi0JCWFzc2VydFRydWUoIlNob3VsZCBub3QgZ2V0IGNsb3NpbmcgYnJhY2tldCBlcnJvciIsIHZhbGlkYXRlRXJyb3IoIjxzdG9wPjwvc3RvcD4iKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtcHR5VGFnKCkgewotCQkvLyB0ZXN0IGZvciBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgZ2V0IGVtcHR5IHRhZyBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8PiIpKTsKLQotCQkvLyB0ZXN0IGZvciBubyBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCBlbXB0eSB0YWcgZXJyb3IiLCB2YWxpZGF0ZUVycm9yKCI8c3RvcD48L3N0b3A+IikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVWYWx1ZSgpIHsKLQkJLy8gdGVzdCBmb3IgZXJyb3IKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBhdHRyaWJ1dGUgaGFzIG5vIHZhbHVlIGVycm9yIiwgIXZhbGlkYXRlRXJyb3IoIjxzdG9wIGRyb3A+PC9zdG9wPiIpKTsKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBhdHRyaWJ1dGUgbWlzc2luZyB2YWx1ZSBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPT48L3N0b3A+IikpOwotCi0JCS8vIHRlc3QgZm9yIG5vIGVycm9yCi0JCWFzc2VydFRydWUoIlNob3VsZCBub3QgZ2V0IGF0dHJpYnV0ZSBtaXNzaW5nIHZhbHVlIGVycm9yIiwgdmFsaWRhdGVFcnJvcigiPHN0b3AgZHJvcD1cInJvbGxcIj48L3N0b3A+IikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTcGFjZUJlZm9yZU5hbWUoKSB7Ci0JCS8vIHRlc3QgZm9yIGVycm9yCi0JCWFzc2VydFRydWUoIlNob3VsZCBnZXQgdGFnIGhhcyBzcGFjZSBiZWZvcmUgbmFtZSBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8ICAgIHN0b3A+PC9zdG9wPiIpKTsKLQotCQkvLyB0ZXN0IGZvciBubyBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCB0YWcgaGFzIHNwYWNlIGJlZm9yZSBuYW1lIGVycm9yIiwgdmFsaWRhdGVFcnJvcigiPHN0b3A+PC9zdG9wPiIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UXVvdGVzRm9yQXR0cmlidXRlVmFsdWVzKCkgewotCQkvLyB0ZXN0IGZvciBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgZ2V0IG1pc3NpbmcgZW5kIHF1b3RlIGVycm9yIiwgIXZhbGlkYXRlRXJyb3IoIjxzdG9wIGRyb3A9XCI+PC9zdG9wPiIpKTsKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBtaXNzaW5nIGVuZCBxdW90ZSBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPVwicm9sbD48L3N0b3A+IikpOwotCQlhc3NlcnRUcnVlKCJTaG91bGQgZ2V0IG1pc3NpbmcgZW5kIHF1b3RlIGVycm9yIiwgIXZhbGlkYXRlRXJyb3IoIjxzdG9wIGRyb3A9XCc+PC9zdG9wPiIpKTsKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBtaXNzaW5nIHF1b3RlcyBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPXJvbGw+PC9zdG9wPiIpKTsKLQotCQkvLyB0ZXN0IGZvciBubyBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCBtaXNzaW5nIGVuZCBxdW90ZSBlcnJvciIsIHZhbGlkYXRlRXJyb3IoIjxzdG9wIGRyb3A9XCJcIj48L3N0b3A+IikpOwotCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCBtaXNzaW5nIGVuZCBxdW90ZSBlcnJvciIsIHZhbGlkYXRlRXJyb3IoIjxzdG9wIGRyb3A9XCJyb2xsXCI+PC9zdG9wPiIpKTsKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBnZXQgbWlzc2luZyBlbmQgcXVvdGUgZXJyb3IiLCB2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPVwnXCc+PC9zdG9wPiIpKTsKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBnZXQgbWlzc2luZyBxdW90ZXMgZXJyb3IiLCB2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPVwncm9sbFwnPjwvc3RvcD4iKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9Mb2dnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NDI1MjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9Mb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogU21hbGwgY29udmVuaWVuY2UgY2xhc3MgdG8gbG9nIG1lc3NhZ2VzIHRvIHBsdWdpbidzIGxvZyBmaWxlIGFuZCBhbHNvLCBpZiBkZXNpcmVkLAotICogdGhlIGNvbnNvbGUuIFRoaXMgY2xhc3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBjbGFzc2VzIGluIHRoaXMgcGx1Z2luLiBPdGhlcgotICogcGx1Z2lucyBzaG91bGQgbWFrZSB0aGVpciBvd24gY29weSwgd2l0aCBhcHByb3ByaWF0ZSBJRC4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFDRUZJTFRFUl9MT0NBVElPTiA9ICIvZGVidWcvdHJhY2VmaWx0ZXIiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPSyA9IElTdGF0dXMuT0s7IC8vIDAKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPID0gSVN0YXR1cy5JTkZPOyAvLyAxCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklORyA9IElTdGF0dXMuV0FSTklORzsgLy8gMgotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SID0gSVN0YXR1cy5FUlJPUjsgLy8gNAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0tfREVCVUcgPSAyMDAgKyBPSzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPX0RFQlVHID0gMjAwICsgSU5GTzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HX0RFQlVHID0gMjAwICsgV0FSTklORzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9ERUJVRyA9IDIwMCArIEVSUk9SOwotCi0JLyoqCi0JICogQWRkcyBtZXNzYWdlIHRvIGxvZy4KLQkgKiBAcGFyYW0gbGV2ZWwgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgKE9LLCBJTkZPLCBXQVJOSU5HLCBFUlJPUiwgT0tfREVCVUcsIElORk9fREVCVUcsIFdBUk5JTkdfREVCVUcsIEVSUk9SX0RFQlVHKQotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gYWRkIHRvIHRoZSBsb2cKLQkgKiBAcGFyYW0gZXhjZXB0aW9uIGV4Y2VwdGlvbiB0aHJvd24KLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX2xvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChsZXZlbCA9PSBPS19ERUJVRyB8fCBsZXZlbCA9PSBJTkZPX0RFQlVHIHx8IGxldmVsID09IFdBUk5JTkdfREVCVUcgfHwgbGV2ZWwgPT0gRVJST1JfREVCVUcpIHsKLQkJCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCQlyZXR1cm47Ci0JCX0KLQotCQlpbnQgc2V2ZXJpdHkgPSBJU3RhdHVzLk9LOwotCQlzd2l0Y2ggKGxldmVsKSB7Ci0JCQljYXNlIElORk9fREVCVUcgOgotCQkJY2FzZSBJTkZPIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuSU5GTzsKLQkJCQlicmVhazsKLQkJCWNhc2UgV0FSTklOR19ERUJVRyA6Ci0JCQljYXNlIFdBUk5JTkcgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5XQVJOSU5HOwotCQkJCWJyZWFrOwotCQkJY2FzZSBFUlJPUl9ERUJVRyA6Ci0JCQljYXNlIEVSUk9SIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuRVJST1I7Ci0JCX0KLQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhzZXZlcml0eSwgUExVR0lOX0lELCBzZXZlcml0eSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JfQotCi0JLyoqCi0JICogUHJpbnRzIG1lc3NhZ2UgdG8gbG9nIGlmIGNhdGVnb3J5IG1hdGNoZXMgL2RlYnVnL3RyYWNlZmlsdGVyIG9wdGlvbi4KLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIHByaW50Ci0JICogQHBhcmFtIGNhdGVnb3J5IGNhdGVnb3J5IG9mIHRoZSBtZXNzYWdlLCB0byBiZSBjb21wYXJlZCB3aXRoIC9kZWJ1Zy90cmFjZWZpbHRlcgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAoaXNUcmFjaW5nKGNhdGVnb3J5KSkgewotCQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgUExVR0lOX0lELCBJU3RhdHVzLk9LLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gaXMgZGVidWdnaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRGVidWdnaW5nKCkgewotCQlyZXR1cm4gUGxhdGZvcm0uaW5EZWJ1Z01vZGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmVzIGlmIGN1cnJlbnRseSB0cmFjaW5nIGEgY2F0ZWdvcnkKLQkgKiBAcGFyYW0gY2F0ZWdvcnkKLQkgKiBAcmV0dXJuIHRydWUgaWYgdHJhY2luZyBjYXRlZ29yeSwgZmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzVHJhY2luZyhTdHJpbmcgY2F0ZWdvcnkpIHsKLQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyB0cmFjZUZpbHRlciA9IFBsYXRmb3JtLmdldERlYnVnT3B0aW9uKFBMVUdJTl9JRAotCQkJCSsgVFJBQ0VGSUxURVJfTE9DQVRJT04pOwotCQlpZiAodHJhY2VGaWx0ZXIgIT0gbnVsbCkgewotCQkJU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhY2VGaWx0ZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJU3RyaW5nIGNhdCA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7Ci0JCQkJaWYgKGNhdGVnb3J5LmVxdWFscyhjYXQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvblhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvblhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2M5MDM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25YTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKiAKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5FeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudmlld3MuY29udGVudG91dGxpbmUuWE1MQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudmlld3MucHJvcGVydGllcy5YTUxQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbjsKLQotLyoqCi0gKiBUZXN0cyByZXRyaWV2aW5nIGVkaXRvciBjb250cmlidXRpb25zIGZvciB4bWwgY29udGVudCB0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0RWRpdG9yQ29uZmlndXJhdGlvblhNTCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U291cmNlVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLlNPVVJDRVZJRVdFUkNPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlhc3NlcnROb3ROdWxsKCJubyBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MLCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIHNvdXJjZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwsIG8uZ2V0Q2xhc3MoKSwgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudE91dGxpbmVWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuQ09OVEVOVE9VVExJTkVDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gY29udGVudCBvdXRsaW5lIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBjb250ZW50IG91dGxpbmUgdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MLCBvLmdldENsYXNzKCksIFhNTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbi5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuUFJPUEVSVFlTSEVFVENPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlhc3NlcnROb3ROdWxsKCJubyBwcm9wZXJ0eSBzaGVldCBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBwcm9wZXJ0eSBzaGVldCBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCwgby5nZXRDbGFzcygpLCBYTUxQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbi5jbGFzcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0T3BlbkVkaXRvclhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0T3BlbkVkaXRvclhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2JiZmMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdE9wZW5FZGl0b3JYTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnRhYmxldHJlZS5YTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0OwotCi0vKioKLSAqIFRlc3QgbWlzYyBlZGl0b3IgZnVuY3Rpb25zIHdpdGggYW4gb3BlbiB4bWwgZWRpdG9yLgotICovCi1wdWJsaWMgY2xhc3MgVGVzdE9wZW5FZGl0b3JYTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gIlRlc3RPcGVuRWRpdG9yWE1MIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBGSUxFX05BTUUgPSAidGVzdFN0cnVjdHVyZWRUZXh0RWRpdG9yWE1MLnhtbCI7Ci0KLQlwcml2YXRlIHN0YXRpYyBJRWRpdG9yUGFydCBmRWRpdG9yOwotCXByaXZhdGUgc3RhdGljIElGaWxlIGZGaWxlOwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZklzU2V0dXAgPSBmYWxzZTsKLQotCXB1YmxpYyBUZXN0T3BlbkVkaXRvclhNTCgpIHsKLQkJc3VwZXIoIlRlc3RTdHJ1Y3RyZWRUZXh0RWRpdG9yWE1MIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gb25seSBjcmVhdGUgcHJvamVjdCBhbmQgZmlsZSBvbmNlCi0JCWlmICghZklzU2V0dXApIHsKLQkJCS8vIGNyZWF0ZSBwcm9qZWN0Ci0JCQljcmVhdGVQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JCQlmRmlsZSA9IGdldE9yQ3JlYXRlRmlsZShQUk9KRUNUX05BTUUgKyAiLyIgKyBGSUxFX05BTUUpOwotCQkJZklzU2V0dXAgPSB0cnVlOwotCQl9Ci0KLQkJLy8gZWRpdG9yIGlzIG9wZW5lZCBlYWNoIHRpbWUKLQkJaWYgKGZJc1NldHVwICYmIGZFZGl0b3IgPT0gbnVsbCkgewotCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0JCQlmRWRpdG9yID0gSURFLm9wZW5FZGl0b3IocGFnZSwgZkZpbGUsIHRydWUsIHRydWUpOwotCQkJaWYgKCEoKGZFZGl0b3IgaW5zdGFuY2VvZiBYTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0KSB8fCAoZkVkaXRvciBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKSkpCi0JCQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIG9wZW4gc3RydWN0dXJlZCB0ZXh0IGVkaXRvciIsIGZhbHNlKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGVkaXRvciBpcyBjbG9zZWQgZWFjaCB0aW1lCi0JCWlmIChmRWRpdG9yICE9IG51bGwpIHsKLQkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotCQkJcGFnZS5jbG9zZUVkaXRvcihmRWRpdG9yLCBmYWxzZSk7Ci0JCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gY2xvc2UgZWRpdG9yIiwgdHJ1ZSk7Ci0JCQlmRWRpdG9yID0gbnVsbDsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVQcm9qZWN0KFN0cmluZyBwcm9qTmFtZSkgewotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qTmFtZSk7Ci0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qTmFtZSk7Ci0JCXRyeSB7Ci0JCQlwcm9qZWN0LmNyZWF0ZShkZXNjcmlwdGlvbiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQlwcm9qZWN0Lm9wZW4obmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgSUZpbGUgZ2V0T3JDcmVhdGVGaWxlKFN0cmluZyBmaWxlUGF0aCkgewotCQlJRmlsZSBibGFua0ZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZmlsZVBhdGgpKTsKLQkJaWYgKGJsYW5rRmlsZSAhPSBudWxsICYmICFibGFua0ZpbGUuZXhpc3RzKCkpIHsKLQkJCXRyeSB7Ci0JCQkJYmxhbmtGaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0obmV3IGJ5dGVbMF0pLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBibGFua0ZpbGU7Ci0JfQotCi0JLyoqCi0JICogVGVzdCBzZXR0aW5nIHRleHQgaW4gZG9jdW1lbnQgb2Ygb3BlbiBlZGl0b3IuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFNldERvY3VtZW50KCkgewotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSAoSURvY3VtZW50KSBmRWRpdG9yLmdldEFkYXB0ZXIoSURvY3VtZW50LmNsYXNzKTsKLQkJdHJ5IHsKLQkJCWRvY3VtZW50LnNldCgiPGhlbGxvPjwvaGVsbG8+Iik7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gc2V0IHRleHQgaW4gZWRpdG9yOiAiICsgZSwgZmFsc2UpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0UHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMDBjYzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0UHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm9wZXJ0aWVzLkNvbmZpZ3VyYWJsZVByb3BlcnR5U2hlZXRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTb3VyY2VFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgVGVzdFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJUZXN0UHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIEZJTEVfTkFNRSA9ICJ0ZXN0UHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24ueG1sIjsKLQotCXByaXZhdGUgc3RhdGljIFN0cnVjdHVyZWRUZXh0RWRpdG9yIGZFZGl0b3I7Ci0JcHJpdmF0ZSBzdGF0aWMgSUVkaXRvclBhcnQgZk1haW5FZGl0b3I7Ci0JcHJpdmF0ZSBzdGF0aWMgSUZpbGUgZkZpbGU7Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmSXNTZXR1cCA9IGZhbHNlOwotCi0JcHVibGljIFRlc3RQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbigpIHsKLQkJc3VwZXIoIlRlc3RQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbiIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWlmICghZklzU2V0dXApIHsKLQkJCS8vIGNyZWF0ZSBwcm9qZWN0Ci0JCQljcmVhdGVQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JCQlmRmlsZSA9IGdldE9yQ3JlYXRlRmlsZShQUk9KRUNUX05BTUUgKyAiLyIgKyBGSUxFX05BTUUpOwotCQkJZklzU2V0dXAgPSB0cnVlOwotCQl9Ci0JCS8vIGVkaXRvciBpcyBvcGVuZWQgZWFjaCB0aW1lCi0JCWlmIChmSXNTZXR1cCAmJiBmTWFpbkVkaXRvciA9PSBudWxsKSB7Ci0JCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLQkJCWZNYWluRWRpdG9yID0gSURFLm9wZW5FZGl0b3IocGFnZSwgZkZpbGUsIHRydWUsIHRydWUpOwotCQkJaWYgKGZNYWluRWRpdG9yIGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpCi0JCQkJZkVkaXRvciA9IChTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgZk1haW5FZGl0b3I7Ci0JCQllbHNlIGlmIChmTWFpbkVkaXRvciAhPSBudWxsKSB7Ci0JCQkJT2JqZWN0IGFkYXB0ZXIgPSBmTWFpbkVkaXRvci5nZXRBZGFwdGVyKElUZXh0RWRpdG9yLmNsYXNzKTsKLQkJCQlpZiAoYWRhcHRlciBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKQotCQkJCQlmRWRpdG9yID0gKFN0cnVjdHVyZWRUZXh0RWRpdG9yKSBhZGFwdGVyOwotCQkJfQotCQkJaWYgKGZFZGl0b3IgPT0gbnVsbCkKLQkJCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gb3BlbiBzdHJ1Y3R1cmVkIHRleHQgZWRpdG9yIiwgZmFsc2UpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZWRpdG9yIGlzIGNsb3NlZCBlYWNoIHRpbWUKLQkJaWYgKGZNYWluRWRpdG9yICE9IG51bGwpIHsKLQkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotCQkJcGFnZS5jbG9zZUVkaXRvcihmTWFpbkVkaXRvciwgZmFsc2UpOwotCQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIGNsb3NlIGVkaXRvciIsIHRydWUpOwotCQkJZk1haW5FZGl0b3IgPSBudWxsOwotCQkJZkVkaXRvciA9IG51bGw7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY3JlYXRlUHJvamVjdChTdHJpbmcgcHJvak5hbWUpIHsKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvak5hbWUpOwotCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvak5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIElGaWxlIGdldE9yQ3JlYXRlRmlsZShTdHJpbmcgZmlsZVBhdGgpIHsKLQkJSUZpbGUgYmxhbmtGaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0JCWlmIChibGFua0ZpbGUgIT0gbnVsbCAmJiAhYmxhbmtGaWxlLmV4aXN0cygpKSB7Ci0JCQl0cnkgewotCQkJCWJsYW5rRmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG5ldyBieXRlWzBdKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gYmxhbmtGaWxlOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQcm9wZXJ0eVNvdXJjZVJlbW92YWwoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSAoSURvY3VtZW50KSBmRWRpdG9yLmdldEFkYXB0ZXIoSURvY3VtZW50LmNsYXNzKTsKLQkJLy8gc2V0IHVwIHRoZSBlZGl0b3IgZG9jdW1lbnQKLQkJZG9jdW1lbnQucmVwbGFjZSgwLCAwLCAiPHRlc3Q+PG15cHJvcGVydHkgcHJvcHM9XCJ5ZXNcIiAvPjwvdGVzdD4iKTsKLQotCQkvLyBzZXQgY3VycmVudCBzZWxlY3Rpb24gaW4gZWRpdG9yCi0JCUlTZWxlY3Rpb24gc2V0U2VsZWN0aW9uID0gbmV3IFRleHRTZWxlY3Rpb24oOSwgMCk7Ci0JCWZFZGl0b3IuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKS5zZXRTZWxlY3Rpb24oc2V0U2VsZWN0aW9uKTsKLQotCQkvLyBnZXQgY3VycmVudCBzZWxlY3Rpb24gaW4gZWRpdG9yCi0JCU9iamVjdCBpdGVtID0gbnVsbDsKLQkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmRWRpdG9yLmdldFNlbGVjdGlvblByb3ZpZGVyKCkuZ2V0U2VsZWN0aW9uKCk7Ci0JCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJaXRlbSA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0KLQkJCUlQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0ID0gKElQcm9wZXJ0eVNoZWV0UGFnZSkgZkVkaXRvci5nZXRBZGFwdGVyKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcyk7Ci0JCQlhc3NlcnRUcnVlKCJObyBDb25maWd1cmFibGVQcm9wZXJ0eVNoZWV0UGFnZSBmb3VuZCIsIHByb3BlcnR5U2hlZXQgaW5zdGFuY2VvZiBDb25maWd1cmFibGVQcm9wZXJ0eVNoZWV0UGFnZSk7Ci0JCQlpZiAocHJvcGVydHlTaGVldCBpbnN0YW5jZW9mIENvbmZpZ3VyYWJsZVByb3BlcnR5U2hlZXRQYWdlKSB7Ci0JCQkJQ29uZmlndXJhYmxlUHJvcGVydHlTaGVldFBhZ2UgY3BzID0gKENvbmZpZ3VyYWJsZVByb3BlcnR5U2hlZXRQYWdlKSBwcm9wZXJ0eVNoZWV0OwotCQkJCVByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uIGNvbmZpZyA9IGNwcy5nZXRDb25maWd1cmF0aW9uKCk7Ci0JCQkJYXNzZXJ0Tm90TnVsbCgiTm8gcHJvcGVydHkgc2hlZXQgY29uZmlndXJhdGlvbiBmb3VuZCIsIGNvbmZpZyk7Ci0KLQkJCQlJUHJvcGVydHlTb3VyY2VQcm92aWRlciBwcm92aWRlciA9IGNvbmZpZy5nZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKGNwcyk7Ci0JCQkJYXNzZXJ0Tm90TnVsbCgiTm8gcHJvcGVydHkgc2hlZXQgcHJvdmlkZXIgZm91bmQiLCBwcm92aWRlcik7Ci0KLQkJCQlJUHJvcGVydHlTb3VyY2Ugc291cmNlID0gcHJvdmlkZXIuZ2V0UHJvcGVydHlTb3VyY2UoaXRlbSk7Ci0JCQkJaWYgKHNvdXJjZSBpbnN0YW5jZW9mIElQcm9wZXJ0eVNvdXJjZUV4dGVuc2lvbikgewotCQkJCQlib29sZWFuIGNhblJlbW92ZSA9ICgoSVByb3BlcnR5U291cmNlRXh0ZW5zaW9uKSBzb3VyY2UpLmlzUHJvcGVydHlSZW1vdmFibGUoInByb3BzIik7Ci0JCQkJCWFzc2VydFRydWUoIkN1cnJlbnQgcHJvcGVydHkgY2Fubm90IGJlIHJlbW92ZWQiLCBjYW5SZW1vdmUpOwotCQkJCQlpZiAoY2FuUmVtb3ZlKSB7Ci0JCQkJCQkoKElQcm9wZXJ0eVNvdXJjZUV4dGVuc2lvbikgc291cmNlKS5yZW1vdmVQcm9wZXJ0eSgicHJvcHMiKTsKLQkJCQkJCWFzc2VydFRydWUoIkN1cnJlbnQgcHJvcGVydHkgY2Fubm90IGJlIHJlbW92ZWQiLCB0cnVlKTsKLQkJCQkJCS8vIGZvcmNlIHJldHVybiBoZXJlLCB0byBhdm9pZCBsYXN0IGZhbGwgdGhyb3VnaAotCQkJCQkJLy8gZmFpbGluZyBhc3NlcnQKLQkJCQkJCXJldHVybjsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQkvLyBpZiB3ZSBnZXQgdG8gaGVyZSwgYWx3YXlzIGZhaWwsIHNpbmNlIHNvbWV0aGluZyB3ZW50IHdyb25nLgotCQlhc3NlcnRUcnVlKCJ0ZXN0UHJvcGVydHlTb3VyY2VSZW1vdmFsIHRlc3QgZGlkIG5vdCB0YWtlIGV4cGVjdGVkIHBhdGgiLCBmYWxzZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9WZXJpZnlFZGl0b3JQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVmVyaWZ5RWRpdG9yUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2OTdmYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9WZXJpZnlFZGl0b3JQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCi0gKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zCi0gKiBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQKLSAqIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5YTUxVSVBsdWdpbjsKLQotcHVibGljIGNsYXNzIFZlcmlmeUVkaXRvclBsdWdpbiBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5FeGlzdHMoKSB7Ci0JCS8vIFRPRE86IHNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODE1MjcKLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQkJUGx1Z2luIHBsdWdpbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlwbHVnaW4gPSBYTUxVSVBsdWdpbi5nZXRJbnN0YW5jZSgpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJcGx1Z2luID0gbnVsbDsKLQkJfQotCQlhc3NlcnROb3ROdWxsKCJ4bWwgZWRpdG9yIHBsdWdpbiBjb3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIiwgcGx1Z2luKTsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MVUlQcmVmZXJlbmNlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MVUlQcmVmZXJlbmNlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY4NTI2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1hNTFVJUHJlZmVyZW5jZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLlhNTFVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWE1MVUlQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOwotCi0vKioKLSAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCBpcyB0byB2ZXJpZnkgdGhlIHZhbGlkaXR5IG9mIHRoZSBYTUwgU291cmNlIGVkaXRvcgotICogcHJlZmVyZW5jZXMuIFRlc3RzIGluY2x1ZGUgc2V0dGluZy9nZXR0aW5nIHByZWZlcmVuY2VzLgotICogCi0gKiBOT1RFOiBUaGlzIHRlc3Qgc2hvdWxkIGJlIHByZWZvcm1lZCBvbiBhIGNsZWFuIHdvcmtzcGFjZS4gSWYgcGVyZm9ybWVkIG9uCi0gKiBhbiBleGlzdGluZyB3b3Jrc3BhY2UsIHRoaXMgdGVzdCB3aWxsIG1hbmlwdWxhdGUgcHJlZmVyZW5jZXMgaW4gdGhlCi0gKiB3b3Jrc3BhY2UsIHRob3VnaCBhdHRlbXB0cyB3aWxsIGJlIG1hZGUgdG8gcmVzdG9yZSBvcmlnaW5hbCB2YWx1ZXMgYWZ0ZXIKLSAqIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxVSVByZWZlcmVuY2VzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUZXN0cyBleGlzdGFuY2Ugb2YgcHJlZmVyZW5jZSB2YWx1ZXMgd2hlbiBnZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzCi0JICogdGhyb3VnaCBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdW5kbGVHZXRQcmVmZXJlbmNlcygpIHsKLQkJZmluYWwgU3RyaW5nIGJ1bmRsZU5hbWUgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC51aSI7Ci0KLQkJLy8gbmVlZCB0byBzdGFydCB1cCBidW5kbGUgZm9yIGRlZmF1bHQgdmFsdWVzIHRvIGJlIGxvYWRlZAotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGJ1bmRsZU5hbWUpOwotCQl0cnkgewotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKQotCQkJCWJ1bmRsZS5zdGFydCgpOwotCQkJZWxzZQotCQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIGNvdWxkIG5vdCBmaW5kIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUpOwotCQl9IGNhdGNoIChCdW5kbGVFeGNlcHRpb24gZSkgewotCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2Ugb2YgZXhjZXB0aW9uIHN0YXJ0aW5nIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUgKyAiIGV4Y2VwdGlvbjogIiArIGUpOwotCQl9Ci0KLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBYTUxVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0UpOwotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIFhNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRV9DT0RFKTsKLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBYTUxVSVByZWZlcmVuY2VOYW1lcy5VU0VfSU5GRVJSRURfR1JBTU1BUik7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBidW5kbGVHZXRQcmVmZXJlbmNlKFN0cmluZyBidW5kbGVOYW1lLCBTdHJpbmcgcHJlZktleSkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CS8vIHJhbmRvbSBzdHJpbmcKLQkJCi0JCVN0cmluZyB2YWx1ZSA9IFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpLmdldFN0cmluZyhidW5kbGVOYW1lLCBwcmVmS2V5LCBkZWZhdWx0VmFsdWUsIG51bGwpOwotCQlhc3NlcnROb3RTYW1lKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlLiBLZXk6ICIrcHJlZktleSwgZGVmYXVsdFZhbHVlLCB2YWx1ZSk7CQkKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBkZWZhdWx0IHZhbHVlcyBvZiBwcmVmZXJlbmNlcy4KLQkgKiAKLQkgKiBOT1RFOiBFeHBlY3RlZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFyZC1jb2RlZCwgc28gaWYgZGVmYXVsdCB2YWx1ZXMgZG8KLQkgKiBnZXQgY2hhbmdlZCwgYXNzZXJ0aW9ucyBuZWVkIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZXMoKSB7Ci0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBYTUxVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JCQotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShzdG9yZSwgWE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFLCBCb29sZWFuLnRvU3RyaW5nKHRydWUpKTsKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uoc3RvcmUsIFhNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRV9DT0RFLCAiPCIpOwotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShzdG9yZSwgWE1MVUlQcmVmZXJlbmNlTmFtZXMuVVNFX0lORkVSUkVEX0dSQU1NQVIsIEJvb2xlYW4udG9TdHJpbmcodHJ1ZSkpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2UoSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXksIFN0cmluZyBleHBlY3RlZCkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gc3RvcmUuZ2V0RGVmYXVsdFN0cmluZyhwcmVmS2V5KTsKLQkJYXNzZXJ0RXF1YWxzKCJHZXQgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIrcHJlZktleSwgZXhwZWN0ZWQsIGRlZmF1bHRWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcyBieSBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWUgdG8gYmUgYQotCSAqIGNlcnRhaW4gdmFsdWUsIHRoZW4gZ2V0dGluZyB0aGUgcHJlZmVyZW5jZSB2YWx1ZSB0byB2ZXJpZnkgaXQgd2FzIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luU2V0UHJlZmVyZW5jZXMoKSB7Ci0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBYTUxVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JCQotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihzdG9yZSwgWE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFKTsKLQkJcGx1Z2luU2V0UHJlZmVyZW5jZVN0cmluZyhzdG9yZSwgWE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFX0NPREUpOwotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihzdG9yZSwgWE1MVUlQcmVmZXJlbmNlTmFtZXMuVVNFX0lORkVSUkVEX0dSQU1NQVIpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZUJvb2xlYW4oSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJYm9vbGVhbiBvcmlnaW5hbFZhbHVlID0gc3RvcmUuZ2V0Qm9vbGVhbihwcmVmS2V5KTsKLQkJYm9vbGVhbiBleHBlY3RlZFZhbHVlID0gIW9yaWdpbmFsVmFsdWU7Ci0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIGV4cGVjdGVkVmFsdWUpOwotCQlib29sZWFuIGZvdW5kVmFsdWUgPSBzdG9yZS5nZXRCb29sZWFuKHByZWZLZXkpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIrcHJlZktleSsiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgb3JpZ2luYWxWYWx1ZSk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKElQcmVmZXJlbmNlU3RvcmUgc3RvcmUsIFN0cmluZyBwcmVmS2V5KSB7CQkKLQkJU3RyaW5nIG9yaWdpbmFsVmFsdWUgPSBzdG9yZS5nZXRTdHJpbmcocHJlZktleSk7Ci0JCVN0cmluZyBleHBlY3RlZFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CS8vIHJhbmRvbSBzdHJpbmcKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCVN0cmluZyBmb3VuZFZhbHVlID0gc3RvcmUuZ2V0U3RyaW5nKHByZWZLZXkpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIrcHJlZktleSsiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgb3JpZ2luYWxWYWx1ZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2M3NmE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MVUlUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsKLQotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5UZXN0RGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnZhbGlkYXRpb24uVGVzdE1hcmt1cFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLnZpZXdlci5UZXN0Vmlld2VyQ29uZmlndXJhdGlvblhNTDsKLQotCi1wdWJsaWMgY2xhc3MgWE1MVUlUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBYTUxVSVRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBYTUxVSVRlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIlhNTCBVSSBUZXN0IFN1aXRlIik7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShWZXJpZnlFZGl0b3JQbHVnaW4uY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFhNTFVJUHJlZmVyZW5jZXNUZXN0LmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Vmlld2VyQ29uZmlndXJhdGlvblhNTC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25YTUwuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RPcGVuRWRpdG9yWE1MLmNsYXNzKSk7Ci0JCWFkZFRlc3QoKG5ldyBUZXN0U3VpdGUoVGVzdFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uLmNsYXNzKSkpOwotCQlhZGRUZXN0U3VpdGUoVGVzdERlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYTUwuY2xhc3MpOwotCQlhZGRUZXN0U3VpdGUoVGVzdE1hcmt1cFZhbGlkYXRvci5jbGFzcyk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MVUlUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNDAwYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFhNTFVJVGVzdHNQbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgWE1MVUlUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFhNTFVJVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBYTUxVSVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKiBvciAna2V5JyBpZiBub3QgZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlyZXR1cm4ga2V5OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL2JyZWFrcG9pbnRzL0JyZWFrcG9pbnRFcnJvclByb3ZpZGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL2JyZWFrcG9pbnRzL0JyZWFrcG9pbnRFcnJvclByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYjM0MDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9icmVha3BvaW50cy9CcmVha3BvaW50RXJyb3JQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLmJyZWFrcG9pbnRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXh0ZW5zaW9ucy5JU291cmNlRWRpdGluZ1RleHRUb29sczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5JQnJlYWtwb2ludFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuWE1MVUlUZXN0c1BsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgQnJlYWtwb2ludEVycm9yUHJvdmlkZXIgaW1wbGVtZW50cyBJQnJlYWtwb2ludFByb3ZpZGVyIHsKLQotCUlTb3VyY2VFZGl0aW5nVGV4dFRvb2xzIGZUb29sOwotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5JQnJlYWtwb2ludFByb3ZpZGVyI2FkZEJyZWFrcG9pbnQob3JnLnczYy5kb20uRG9jdW1lbnQsCi0JICogICAgICBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudCwgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0LAotCSAqICAgICAgb3JnLnczYy5kb20uTm9kZSwgaW50LCBpbnQpCi0JICovCi0JcHVibGljIElTdGF0dXMgYWRkQnJlYWtwb2ludChJRG9jdW1lbnQgaWRvYywgSUVkaXRvcklucHV0IGlucHV0LCBpbnQgbGluZU51bWJlciwgaW50IG9mZnNldCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXREZWZhdWx0KCJicmVhay1lcnJvciIsIGZhbHNlKTsKLQkJYm9vbGVhbiBlbmFibGUgPSBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRCb29sZWFuKCJicmVhay1lcnJvciIpOwotCQlpZiAoZW5hYmxlKQotCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwgSVN0YXR1cy5FUlJPUiwgZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiOiBUZXN0IEVycm9yIiwgbnVsbCk7Ci0JCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLCBJU3RhdHVzLk9LLCAiIiwgbnVsbCk7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5JQnJlYWtwb2ludFByb3ZpZGVyI2dldFJlc291cmNlKG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCkKLQkgKi8KLQlwdWJsaWMgSVJlc291cmNlIGdldFJlc291cmNlKElFZGl0b3JJbnB1dCBpbnB1dCkgewotCQlJUmVzb3VyY2UgcmVzID0gKElSZXNvdXJjZSkgaW5wdXQuZ2V0QWRhcHRlcihJRmlsZS5jbGFzcyk7Ci0JCWlmIChyZXMgPT0gbnVsbCkKLQkJCXJlcyA9IChJUmVzb3VyY2UpIGlucHV0LmdldEFkYXB0ZXIoSVJlc291cmNlLmNsYXNzKTsKLQkJcmV0dXJuIHJlczsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkuZXh0ZW5zaW9ucy5icmVha3BvaW50LklCcmVha3BvaW50UHJvdmlkZXIjc2V0U291cmNlRWRpdGluZ1RleHRUb29scyhvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5Tb3VyY2VFZGl0aW5nVGV4dFRvb2xzKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNvdXJjZUVkaXRpbmdUZXh0VG9vbHMoSVNvdXJjZUVkaXRpbmdUZXh0VG9vbHMgdG9vbCkgewotCQlmVG9vbCA9IHRvb2w7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvYnJlYWtwb2ludHMvRW5hYmxlV2FybmluZ0FjdGlvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9icmVha3BvaW50cy9FbmFibGVXYXJuaW5nQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNjJjY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9icmVha3BvaW50cy9FbmFibGVXYXJuaW5nQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLmJyZWFrcG9pbnRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5JRXh0ZW5kZWRFZGl0b3JBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5JRXh0ZW5kZWRTaW1wbGVFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5YTUxVSVRlc3RzUGx1Z2luOwotCi0KLXB1YmxpYyBjbGFzcyBFbmFibGVXYXJuaW5nQWN0aW9uIGV4dGVuZHMgQWN0aW9uIGltcGxlbWVudHMgSUV4dGVuZGVkRWRpdG9yQWN0aW9uIHsKLQlJRXh0ZW5kZWRTaW1wbGVFZGl0b3IgYWN0aXZlRWRpdG9yOwotCi0JcHVibGljIEVuYWJsZVdhcm5pbmdBY3Rpb24oKSB7Ci0JCXN1cGVyKCk7Ci0JCVhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLnNldERlZmF1bHQoImJyZWFrLWVycm9yIiwgZmFsc2UpOwotCQlib29sZWFuIGVuYWJsZWQgPSBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRCb29sZWFuKCJicmVhay1lcnJvciIpOwotCQlpZihlbmFibGVkKQotCQkJc2V0VGV4dCgiRGlzYWJsZSBCcmVha3BvaW50IEVycm9ycyIpOwotCQllbHNlCi0JCQlzZXRUZXh0KCJFbmFibGUgQnJlYWtwb2ludCBFcnJvcnMiKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGV4dAotCSAqLwotCXB1YmxpYyBFbmFibGVXYXJuaW5nQWN0aW9uKFN0cmluZyB0ZXh0KSB7Ci0JCVhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLnNldERlZmF1bHQoImJyZWFrLWVycm9yIiwgZmFsc2UpOwotCQlib29sZWFuIGVuYWJsZWQgPSBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRCb29sZWFuKCJicmVhay1lcnJvciIpOwotCQlpZihlbmFibGVkKQotCQkJc2V0VGV4dCgiRGlzYWJsZSBCcmVha3BvaW50IEVycm9ycyIpOwotCQllbHNlCi0JCQlzZXRUZXh0KCJFbmFibGUgQnJlYWtwb2ludCBFcnJvcnMiKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGV4dAotCSAqIEBwYXJhbSBpbWFnZQotCSAqLwotCXB1YmxpYyBFbmFibGVXYXJuaW5nQWN0aW9uKFN0cmluZyB0ZXh0LCBJbWFnZURlc2NyaXB0b3IgaW1hZ2UpIHsKLQkJWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuc2V0RGVmYXVsdCgiYnJlYWstZXJyb3IiLCBmYWxzZSk7Ci0JCWJvb2xlYW4gZW5hYmxlZCA9IFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLmdldEJvb2xlYW4oImJyZWFrLWVycm9yIik7Ci0JCWlmKGVuYWJsZWQpCi0JCQlzZXRUZXh0KCJEaXNhYmxlIEJyZWFrcG9pbnQgRXJyb3JzIik7Ci0JCWVsc2UKLQkJCXNldFRleHQoIkVuYWJsZSBCcmVha3BvaW50IEVycm9ycyIpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0ZXh0Ci0JICogQHBhcmFtIHN0eWxlCi0JICovCi0JcHVibGljIEVuYWJsZVdhcm5pbmdBY3Rpb24oU3RyaW5nIHRleHQsIGludCBzdHlsZSkgewotCQlYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXREZWZhdWx0KCJicmVhay1lcnJvciIsIGZhbHNlKTsKLQkJYm9vbGVhbiBlbmFibGVkID0gWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0Qm9vbGVhbigiYnJlYWstZXJyb3IiKTsKLQkJaWYoZW5hYmxlZCkKLQkJCXNldFRleHQoIkRpc2FibGUgQnJlYWtwb2ludCBFcnJvcnMiKTsKLQkJZWxzZQotCQkJc2V0VGV4dCgiRW5hYmxlIEJyZWFrcG9pbnQgRXJyb3JzIik7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmV4dGVuc2lvbi5JRXh0ZW5kZWRFZGl0b3JBY3Rpb24jaXNWaXNpYmxlKCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc1Zpc2libGUoKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24jcnVuKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCXN1cGVyLnJ1bigpOwotCQlYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXREZWZhdWx0KCJicmVhay1lcnJvciIsIGZhbHNlKTsKLQkJYm9vbGVhbiB2YWx1ZSA9IFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLmdldEJvb2xlYW4oImJyZWFrLWVycm9yIik7Ci0JCVhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLnNldFZhbHVlKCJicmVhay1lcnJvciIsICF2YWx1ZSk7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmV4dGVuc2lvbi5JRXh0ZW5kZWRFZGl0b3JBY3Rpb24jc2V0QWN0aXZlRXh0ZW5kZWRFZGl0b3Iob3JnLmVjbGlwc2Uud3N0LnNzZS51aS5leHRlbnNpb24uSUV4dGVuZGVkU2ltcGxlRWRpdG9yKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUV4dGVuZGVkRWRpdG9yKElFeHRlbmRlZFNpbXBsZUVkaXRvciB0YXJnZXRFZGl0b3IpIHsKLQkJYWN0aXZlRWRpdG9yID0gdGFyZ2V0RWRpdG9yOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVXBkYXRlI3VwZGF0ZSgpCi0JICovCi0JcHVibGljIHZvaWQgdXBkYXRlKCkgewotCQlYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXREZWZhdWx0KCJicmVhay1lcnJvciIsIGZhbHNlKTsKLQkJYm9vbGVhbiBlbmFibGVkID0gWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0Qm9vbGVhbigiYnJlYWstZXJyb3IiKTsKLQkJaWYoZW5hYmxlZCkKLQkJCXNldFRleHQoIkRpc2FibGUgQnJlYWtwb2ludCBFcnJvcnMiKTsKLQkJZWxzZQotCQkJc2V0VGV4dCgiRW5hYmxlIEJyZWFrcG9pbnQgRXJyb3JzIik7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uWE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvblhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjMyMjNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uWE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAotCXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklBdXRvRWRpdFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUluZm9ybWF0aW9uQ29udHJvbENyZWF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dEhvdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29udGVudEFzc2lzdGFudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmZvcm1hdHRlci5JQ29udGVudEZvcm1hdHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0Lmh5cGVybGluay5JSHlwZXJsaW5rRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5pbmZvcm1hdGlvbi5JSW5mb3JtYXRpb25QcmVzZW50ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5yZWNvbmNpbGVyLklSZWNvbmNpbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklBbm5vdGF0aW9uSG92ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXh0LklTdHJ1Y3R1cmVkUGFydGl0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRleHQuSVhNTFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5Mb2dnZXI7Ci0KLS8qKgotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uWE1MIGV4dGVuZHMgVGVzdENhc2UgewotICAgIAotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MIGZDb25maWcgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBmRGlzcGxheUV4aXN0cyA9IHRydWU7Ci0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlciBmVmlld2VyID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCQotICAgIHB1YmxpYyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvblhNTCgpIHsKLSAgICAgICAgc3VwZXIoIlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uWE1MIik7Ci0gICAgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotICAgIAlzdXBlci5zZXRVcCgpOwotCQlpZighdGhpcy5pc1NldHVwKXsKLQkJCXNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotICAgIH0KLQkKLQlwcml2YXRlIHZvaWQgc2V0VXBWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQkKLQkJLy8gc29tZSB0ZXN0IGVudmlyb25tZW50cyBtaWdodCBub3QgaGF2ZSBhICJyZWFsIiBkaXNwbGF5Ci0JCWlmKERpc3BsYXkuZ2V0Q3VycmVudCgpICE9IG51bGwpIHsKLQkJCQotCQkJU2hlbGwgc2hlbGwgPSBudWxsOwotCQkJQ29tcG9zaXRlIHBhcmVudCA9IG51bGw7Ci0JCQkKLQkJCWlmKFBsYXRmb3JtVUkuaXNXb3JrYmVuY2hSdW5uaW5nKCkpIHsKLQkJCQlzaGVsbCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQkJCX0KLQkJCWVsc2UgewkKLQkJCQlzaGVsbCA9IG5ldyBTaGVsbChEaXNwbGF5LmdldEN1cnJlbnQoKSk7Ci0JCQl9Ci0JCQlwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKHNoZWxsLCBTV1QuTk9ORSk7Ci0JCQkKLQkJCS8vIGR1bW15IHZpZXdlcgotCQkJZlZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCQlmQ29uZmlnID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhNTCgpOwotCQl9Ci0JCWVsc2UgewotCQkJZkRpc3BsYXlFeGlzdHMgPSBmYWxzZTsKLQkJCUxvZ2dlci5sb2coTG9nZ2VyLklORk8sICJSZW1lbWJlciwgdmlld2VyIGNvbmZpZ3VyYXRpb24gdGVzdHMgYXJlIG5vdCBydW4gYmVjYXVzZSB3b3JrYmVuY2ggaXMgbm90IG9wZW4gKG5vcm1hbCBvbiBidWlsZCBtYWNoaW5lKSIpOwotCQl9Ci0JfQotICAgIAotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QW5ub3RhdGlvbkhvdmVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJQW5ub3RhdGlvbkhvdmVyIGhvdmVyID0gZkNvbmZpZy5nZXRBbm5vdGF0aW9uSG92ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkFubm90YXRpb25Ib3ZlciBpcyBudWxsIiwgaG92ZXIpOwotICAgIH0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QXV0b0VkaXRTdHJhdGVnaWVzKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQkKLQkJSUF1dG9FZGl0U3RyYXRlZ3lbXSBzdHJhdGVnaWVzID0gZkNvbmZpZy5nZXRBdXRvRWRpdFN0cmF0ZWdpZXMoZlZpZXdlciwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQpOwotCQlhc3NlcnROb3ROdWxsKHN0cmF0ZWdpZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gYXV0byBlZGl0IHN0cmF0ZWdpZXMiLCBzdHJhdGVnaWVzLmxlbmd0aCA+IDApOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcygpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29uZmlndXJlZENvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbChjb25maWd1cmVkQ29udGVudFR5cGVzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgY29udGVudCB0eXBlcyIsIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMubGVuZ3RoID4gMCk7Ci0JfQotCQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEFzc2lzdGFudCgpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUNvbnRlbnRBc3Npc3RhbnQgY2EgPSBmQ29uZmlnLmdldENvbnRlbnRBc3Npc3RhbnQoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGlzIG5vIGNvbnRlbnQgYXNzaXN0YW50IiwgY2EpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEZvcm1hdHRlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUNvbnRlbnRGb3JtYXR0ZXIgY2YgPSBmQ29uZmlnLmdldENvbnRlbnRGb3JtYXR0ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGlzIG5vIGNvbnRlbnQgZm9ybWF0dGVyIiwgY2YpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RG91YmxlQ2xpY2tTdHJhdGVneSgpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJSVRleHREb3VibGVDbGlja1N0cmF0ZWd5IHN0cmF0ZWd5ID0gZkNvbmZpZy5nZXREb3VibGVDbGlja1N0cmF0ZWd5KGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZihzdHJhdGVneSAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGRvdWJsZSBjbGljayBzdHJhdGVnaWVzIiwgZmFsc2UpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SHlwZXJsaW5rRGV0ZWN0b3JzKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJSHlwZXJsaW5rRGV0ZWN0b3JbXSBkZXRlY3RvcnMgPSBmQ29uZmlnLmdldEh5cGVybGlua0RldGVjdG9ycyhmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgYXJlIG5vIGh5cGVybGluayBkZXRlY3RvcnMiLCBkZXRlY3RvcnMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gaHlwZXJsaW5rIGRldGVjdG9ycyIsIGRldGVjdG9ycy5sZW5ndGggPiAwKTsKLQl9Ci0JCi0gICAgcHVibGljIHZvaWQgdGVzdEdldEluZGVudFByZWZpeGVzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCVN0cmluZyBwcmVmaXhlc1tdID0gZkNvbmZpZy5nZXRJbmRlbnRQcmVmaXhlcyhmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYocHJlZml4ZXMgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBpbmRlbnQgcHJlZml4ZXMiLCBmYWxzZSk7Ci0JfQotICAgIAotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0SW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcigpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciBpbmZvQ3JlYXRvciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciBpcyBudWxsIiwgaW5mb0NyZWF0b3IpOwotICAgIH0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEluZm9ybWF0aW9uUHJlc2VudGVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJSW5mb3JtYXRpb25QcmVzZW50ZXIgcHJlc2VudGVyID0gZkNvbmZpZy5nZXRJbmZvcm1hdGlvblByZXNlbnRlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiSW5mb3JtYXRpb25QcmVzZW50ZXIgaXMgbnVsbCIsIHByZXNlbnRlcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMaW5lU3R5bGVQcm92aWRlcnMoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJTGluZVN0eWxlUHJvdmlkZXIgcHJvdmlkZXJzW10gPSBmQ29uZmlnLmdldExpbmVTdHlsZVByb3ZpZGVycyhmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYocHJvdmlkZXJzICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgbGluZSBzdHlsZSBwcm92aWRlcnMiLCBmYWxzZSk7Ci0JfQotCQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVjb25jaWxlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSVJlY29uY2lsZXIgciA9IGZDb25maWcuZ2V0UmVjb25jaWxlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiUmVjb25jaWxlciBpcyBudWxsIiwgcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRUZXh0SG92ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBob3ZlclBhcnRpdGlvbnMgPSBuZXcgU3RyaW5nW117SVN0cnVjdHVyZWRQYXJ0aXRpb25zLkRFRkFVTFRfUEFSVElUSU9OLCBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVH07Ci0JCQotCQlmb3IgKGludCBpID0gMDsgaSA8IGhvdmVyUGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJSVRleHRIb3ZlciBob3ZlciA9IGZDb25maWcuZ2V0VGV4dEhvdmVyKGZWaWV3ZXIsIGhvdmVyUGFydGl0aW9uc1tpXSwgU1dULk5PTkUpOwotCQkJYXNzZXJ0Tm90TnVsbCgiaG92ZXIgd2FzIG51bGwgZm9yIHBhcnRpdGlvbjogIiArIGhvdmVyUGFydGl0aW9uc1tpXSwgaG92ZXIpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdFhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdFhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2QwOTE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3RYTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMudmlld2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5KRmFjZVJlc291cmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5CdXN5SW5kaWNhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSU1lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JbmRleGVkUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLQotCi1wdWJsaWMgY2xhc3MgVmlld2VyVGVzdFhNTCBleHRlbmRzIFZpZXdQYXJ0IHsKLQkvKioKLQkgKiBTZXRzIHRoZSB2aWV3ZXIncyBoaWdobGlnaHRpbmcgdGV4dCByYW5nZSB0byB0aGUgdGV4dCByYW5nZSBpbmRpY2F0ZWQKLQkgKiBieSB0aGUgc2VsZWN0ZWQgTm9kZXMuCi0JICovCi0JcHJvdGVjdGVkIGNsYXNzIE5vZGVSYW5nZVNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7Ci0JCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCQlpZiAoIWV2ZW50LmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSAmJiBldmVudC5nZXRTZWxlY3Rpb24oKSBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBldmVudC5nZXRTZWxlY3Rpb24oKTsKLQkJCQlJbmRleGVkUmVnaW9uIHN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQkJSW5kZXhlZFJlZ2lvbiBlbmROb2RlID0gKEluZGV4ZWRSZWdpb24pIHNlbGVjdGlvbi50b0FycmF5KClbc2VsZWN0aW9uLnNpemUoKSAtIDFdOwotCi0JCQkJaWYgKHN0YXJ0Tm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0JCQkJCXN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIHN0YXJ0Tm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0JCQkJaWYgKGVuZE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQllbmROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgZW5kTm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0KLQkJCQlpbnQgc3RhcnQgPSBzdGFydE5vZGUuZ2V0U3RhcnRPZmZzZXQoKTsKLQkJCQlpbnQgZW5kID0gZW5kTm9kZS5nZXRFbmRPZmZzZXQoKTsKLQotCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0JCQkJZlNvdXJjZVZpZXdlci5zZXRTZWxlY3RlZFJhbmdlKHN0YXJ0LCAwKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JcHJvdGVjdGVkIGNsYXNzIE51bWJlcklucHV0RGlhbG9nIGV4dGVuZHMgRGlhbG9nIHsKLQkJcHVibGljIFRleHQgbGVuZ3RoOwotCi0JCWludCBsZW5ndGhWYWx1ZTsKLQkJcHVibGljIFRleHQgc3RhcnQ7Ci0JCWludCBzdGFydFZhbHVlOwotCQlwdWJsaWMgTnVtYmVySW5wdXREaWFsb2coU2hlbGwgc2hlbGwpIHsKLQkJCXN1cGVyKHNoZWxsKTsKLQkJfQotCi0JCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkgewotCQkJQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IChDb21wb3NpdGUpIHN1cGVyLmNyZWF0ZURpYWxvZ0FyZWEocGFyZW50KTsKLQkJCUNvbXBvc2l0ZSBjb250YWluZXIgPSBuZXcgQ29tcG9zaXRlKGNvbXBvc2l0ZSwgU1dULk5VTEwpOwotCQkJY29udGFpbmVyLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCQkJY29udGFpbmVyLnNldExheW91dChuZXcgR3JpZExheW91dCgyLCB0cnVlKSk7Ci0JCQlzZXRTaGVsbFN0eWxlKGdldFNoZWxsKCkuZ2V0U3R5bGUoKSB8IFNXVC5SRVNJWkUpOwotCi0JCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChjb250YWluZXIsIFNXVC5OVUxMKTsKLQkJCWxhYmVsLnNldFRleHQoIlN0YXJ0Iik7Ci0JCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQotCQkJbGFiZWwgPSBuZXcgTGFiZWwoY29udGFpbmVyLCBTV1QuTlVMTCk7Ci0JCQlsYWJlbC5zZXRUZXh0KCJMZW5ndGgiKTsKLQkJCWxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQlzdGFydCA9IG5ldyBUZXh0KGNvbnRhaW5lciwgU1dULkJPUkRFUik7Ci0JCQlzdGFydFZhbHVlID0gZlNvdXJjZVZpZXdlci5nZXRWaXNpYmxlUmVnaW9uKCkuZ2V0T2Zmc2V0KCk7Ci0JCQlzdGFydC5zZXRUZXh0KCIiICsgc3RhcnRWYWx1ZSk7Ci0JCQlzdGFydC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQotCQkJbGVuZ3RoID0gbmV3IFRleHQoY29udGFpbmVyLCBTV1QuQk9SREVSKTsKLQkJCWxlbmd0aFZhbHVlID0gZlNvdXJjZVZpZXdlci5nZXRWaXNpYmxlUmVnaW9uKCkuZ2V0TGVuZ3RoKCk7Ci0JCQlsZW5ndGguc2V0VGV4dCgiIiArIGxlbmd0aFZhbHVlKTsKLQkJCWxlbmd0aC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQotCQkJLy8gc3RhcnQuYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgewotCQkJLy8gcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7Ci0JCQkvLyBpZiAoZS53aWRnZXQgPT0gc3RhcnQpIHsKLQkJCS8vIHRyeSB7Ci0JCQkvLyBzdGFydFZhbHVlID0gSW50ZWdlci5kZWNvZGUoc3RhcnQuZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJLy8gfQotCQkJLy8gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJLy8gc3RhcnRWYWx1ZSA9IDA7Ci0JCQkvLyB9Ci0JCQkvLyB9Ci0JCQkvLyB9Ci0JCQkvLyB9KTsKLQkJCS8vIGxlbmd0aC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7Ci0JCQkvLyBwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKLQkJCS8vIGlmIChlLndpZGdldCA9PSBsZW5ndGgpIHsKLQkJCS8vIHRyeSB7Ci0JCQkvLyBsZW5ndGhWYWx1ZSA9IEludGVnZXIuZGVjb2RlKGxlbmd0aC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQkvLyB9Ci0JCQkvLyBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkvLyBsZW5ndGhWYWx1ZSA9IDA7Ci0JCQkvLyB9Ci0JCQkvLyB9Ci0JCQkvLyB9Ci0JCQkvLyB9KTsKLQotCQkJcmV0dXJuIGNvbXBvc2l0ZTsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2cjb2tQcmVzc2VkKCkKLQkJICovCi0JCXByb3RlY3RlZCB2b2lkIG9rUHJlc3NlZCgpIHsKLQkJCXRyeSB7Ci0JCQkJc3RhcnRWYWx1ZSA9IEludGVnZXIuZGVjb2RlKHN0YXJ0LmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJCXN0YXJ0VmFsdWUgPSAwOwotCQkJfQotCQkJdHJ5IHsKLQkJCQlsZW5ndGhWYWx1ZSA9IEludGVnZXIuZGVjb2RlKGxlbmd0aC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCQlsZW5ndGhWYWx1ZSA9IDA7Ci0JCQl9Ci0JCQlzdXBlci5va1ByZXNzZWQoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfVklFV0VSX0NPTlRFTlRTID0gIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+XG48IURPQ1RZUEUgdGFnbGliIFBVQkxJQyBcIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBKU1AgVGFnIExpYnJhcnkgMS4xLy9FTlwiIFwiaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlL2R0ZHMvd2ViLWpzcHRhZ2xpYnJhcnlfMV8xLmR0ZFwiPlxuIjsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbiBmQ29uZmlnID0gbnVsbDsKLQlwcml2YXRlIElDb250ZW50T3V0bGluZVBhZ2UgZkNvbnRlbnRPdXRsaW5lUGFnZSA9IG51bGw7Ci0JcHJpdmF0ZSBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID0gbnVsbDsKLQotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXIgZlNvdXJjZVZpZXdlciA9IG51bGw7Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBTU0VfRURJVE9SX0ZPTlQgPSAib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXh0Zm9udCI7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBhZGRBY3Rpb25zKElDb250cmlidXRpb25NYW5hZ2VyIG1ncikgewotCQlpZiAobWdyICE9IG51bGwpIHsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiTmV3IFhNTCI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJQnVzeUluZGljYXRvci5zaG93V2hpbGUoZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLCBuZXcgUnVubmFibGUoKSB7Ci0JCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCQkJc2V0dXBWaWV3ZXJGb3JOZXcoKTsKLQkJCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKHRydWUpOwotCQkJCQkJfQotCQkJCQl9KTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiQ2hhbmdlIFZpc2liaWxpdHkiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCU51bWJlcklucHV0RGlhbG9nIGRsZyA9IG5ldyBOdW1iZXJJbnB1dERpYWxvZyhmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpKTsKLQkJCQkJaW50IHByb2NlZWQgPSBkbGcub3BlbigpOwotCQkJCQlpZiAocHJvY2VlZCA9PSBXaW5kb3cuQ0FOQ0VMKQotCQkJCQkJcmV0dXJuOwotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oZGxnLnN0YXJ0VmFsdWUsIGRsZy5sZW5ndGhWYWx1ZSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlNob3cgQWxsIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQkJLy8gbm8gbG9uZ2VyIGFibGUgdG8gc2V0IGlucHV0IHRvIE5VTEwKLQkJCS8vIG1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCS8vIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCS8vIHJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJLy8gfQotCQkJLy8KLQkJCS8vIHB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkvLyByZXR1cm4gIlNldCBJbnB1dCB0byBOVUxMIjsKLQkJCS8vIH0KLQkJCS8vIHB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCS8vIHN1cGVyLnJ1bigpOwotCQkJLy8gdmlld2VyLnNldElucHV0KG51bGwpOwotCQkJLy8gfQotCQkJLy8gfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgZnJvbSBBY3RpdmUgRWRpdG9yIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJCWlmICh0ZXh0RWRpdG9yICE9IG51bGwpIHsKLQkJCQkJCXNldHVwVmlld2VyRm9yRWRpdG9yKHRleHRFZGl0b3IpOwotCQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGFuZCBGb2xsb3cgU2VsZWN0aW9uIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBhbmQgRm9sbG93IFNlbGVjdGlvbiBBcyBSZWFkT25seSI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUoZmFsc2UpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTdG9wIEZvbGxvd2luZyBTZWxlY3Rpb24iOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlKQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWdyID0gZ2V0Vmlld1NpdGUoKS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKTsKLQkJYWRkQWN0aW9ucyhtZ3IpOwotCi0JCS8vIGNyZWF0ZSBzb3VyY2Ugdmlld2VyICYgaXRzIGNvbnRlbnQgdHlwZS1zcGVjaWZpYyB2aWV3ZXIKLQkJLy8gY29uZmlndXJhdGlvbgotCQlmU291cmNlVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJZkNvbmZpZyA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUwoKTsKLQotCQkvLyBzZXQgdXAgdGhlIHZpZXdlciB3aXRoIGEgZG9jdW1lbnQgJiB2aWV3ZXIgY29uZmlnCi0JCXNldHVwVmlld2VyRm9yTmV3KCk7Ci0KLQkJc2V0dXBWaWV3ZXJQcmVmZXJlbmNlcygpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjZGlzcG9zZSgpCi0JICovCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOwotCQlmU291cmNlVmlld2VyLnVuY29uZmlndXJlKCk7Ci0JfQotCi0JLyoqCi0JICogSG9va3MgdXAgdGhlIHZpZXdlciB0byBmb2xsb3cgdGhlIHNlbGVjdGlvbiBtYWRlIGluIHRoZSBhY3RpdmUgZWRpdG9yCi0JICovCi0JcHJpdmF0ZSB2b2lkIGZvbGxvd1NlbGVjdGlvbigpIHsKLQkJSVRleHRFZGl0b3IgZWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCWlmIChlZGl0b3IgIT0gbnVsbCkgewotCQkJc2V0dXBWaWV3ZXJGb3JFZGl0b3IoZWRpdG9yKTsKLQkJCWlmIChmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9PSBudWxsKQotCQkJCWZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID0gbmV3IE5vZGVSYW5nZVNlbGVjdGlvbkxpc3RlbmVyKCk7Ci0JCi0JCQlmQ29udGVudE91dGxpbmVQYWdlID0gKChJQ29udGVudE91dGxpbmVQYWdlKSBlZGl0b3IuZ2V0QWRhcHRlcihJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSk7Ci0JCQlpZiAoZkNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7Ci0JCQkJZkNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIpOwotCQotCQkJCWlmICghZkNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKS5pc0VtcHR5KCkgJiYgZkNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCi0JCQkJCU9iamVjdFtdIG5vZGVzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZkNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSkudG9BcnJheSgpOwotCQkJCQlJbmRleGVkUmVnaW9uIHN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSBub2Rlc1swXTsKLQkJCQkJSW5kZXhlZFJlZ2lvbiBlbmROb2RlID0gKEluZGV4ZWRSZWdpb24pIG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdOwotCQotCQkJCQlpZiAoc3RhcnROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJCXN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIHN0YXJ0Tm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0JCQkJCWlmIChlbmROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJCWVuZE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBlbmROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQkKLQkJCQkJaW50IHN0YXJ0ID0gc3RhcnROb2RlLmdldFN0YXJ0T2Zmc2V0KCk7Ci0JCQkJCWludCBlbmQgPSBlbmROb2RlLmdldEVuZE9mZnNldCgpOwotCQotCQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRTZWxlY3RlZFJhbmdlKHN0YXJ0LCAwKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFjdGl2ZSB0ZXh0IGVkaXRvciBpZiBwb3NzaWJsZQotCSAqIAotCSAqIEByZXR1cm4gSVRleHRFZGl0b3IKLQkgKi8KLQlwcml2YXRlIElUZXh0RWRpdG9yIGdldEFjdGl2ZUVkaXRvcigpIHsKLQkJSVRleHRFZGl0b3IgZWRpdG9yID0gbnVsbDsKLQkJSUVkaXRvclBhcnQgZWRpdG9yUGFydCA9IGdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCWlmIChlZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVRleHRFZGl0b3IpCi0JCQllZGl0b3IgPSAoSVRleHRFZGl0b3IpIGVkaXRvclBhcnQ7Ci0JCWlmIChlZGl0b3IgPT0gbnVsbCAmJiBlZGl0b3JQYXJ0ICE9IG51bGwpCi0JCQllZGl0b3IgPSAoSVRleHRFZGl0b3IpIGVkaXRvclBhcnQuZ2V0QWRhcHRlcihJVGV4dEVkaXRvci5jbGFzcyk7Ci0JCXJldHVybiBlZGl0b3I7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JVmlld1BhcnQjaW5pdChJVmlld1NpdGUsIElNZW1lbnRvKQotCSAqLwotCXB1YmxpYyB2b2lkIGluaXQoSVZpZXdTaXRlIHNpdGUsIElNZW1lbnRvIG1lbWVudG8pIHRocm93cyBQYXJ0SW5pdEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLmluaXQoc2l0ZSwgbWVtZW50byk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCi0JICovCi0JcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7Ci0JCWlmIChmU291cmNlVmlld2VyLmdldENvbnRyb2woKSAhPSBudWxsICYmICFmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpCi0JCQlmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5zZXRGb2N1cygpOwotCX0KLQotCS8qKgotCSAqIFNldHMgdXAgdGhlIHZpZXdlciB3aXRoIHRoZSBzYW1lIGRvY3VtZW50L2lucHV0IGFzIHRoZSBnaXZlbiBlZGl0b3IKLQkgKiAKLQkgKiBAcGFyYW0gSVRleHRFZGl0b3IKLQkgKiAgICAgICAgICAgIGVkaXRvciAtIHRoZSBlZGl0b3IgdG8gdXNlICpjYW5ub3QgdG8gYmUgbnVsbCoKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJGb3JFZGl0b3IoSVRleHRFZGl0b3IgZWRpdG9yKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsgLy8gaWYgd2FzIGZvbGxvd2luZyBzZWxlY3Rpb24sIHN0b3AKLQkJSURvY3VtZW50IGRvYyA9IGVkaXRvci5nZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0RG9jdW1lbnQoZWRpdG9yLmdldEVkaXRvcklucHV0KCkpOwotCQlmU291cmNlVmlld2VyLnNldERvY3VtZW50KGRvYyk7Ci0KLQkJLy8gbmVlZCB0byByZWNvbmZpZ3VyZSBhZnRlciBzZXQgZG9jdW1lbnQganVzdCBzbyBoaWdobGlnaHRlciB3b3JrcwotCQlmU291cmNlVmlld2VyLmNvbmZpZ3VyZShuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MKCkpOwotCX0KLQotCS8qKgotCSAqIFNldCB1cCBzb3VyY2Ugdmlld2VyIHdpdGggYSBuZXcgZG9jdW1lbnQgJiBjb25maWd1cmUgaXQKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJGb3JOZXcoKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsgLy8gaWYgd2FzIGZvbGxvd2luZyBzZWxlY3Rpb24sIHN0b3AKLQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0KLQkJSURvY3VtZW50IGRvYyA9IG1vZGVsTWFuYWdlci5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCWRvYy5zZXQoREVGQVVMVF9WSUVXRVJfQ09OVEVOVFMpOwotCi0JCWZTb3VyY2VWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jKTsKLQkJLy8gbmVlZCB0byByZWNvbmZpZ3VyZSBhZnRlciBzZXQgZG9jdW1lbnQganVzdCBzbyBoaWdobGlnaHRlciB3b3JrcwotCQlmU291cmNlVmlld2VyLmNvbmZpZ3VyZShmQ29uZmlnKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdXAgc291cmNlIHZpZXdlciB3aXRoIGFueSBhZGRpdGlvbmFsIHByZWZlcmVuY2VzIGl0IHNob3VsZCBoYXZlIEV4OgotCSAqIGZvbnQsIHRhYiB3aWR0aAotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cFZpZXdlclByZWZlcmVuY2VzKCkgewotCQlmU291cmNlVmlld2VyLmdldFRleHRXaWRnZXQoKS5zZXRGb250KEpGYWNlUmVzb3VyY2VzLmdldEZvbnQoU1NFX0VESVRPUl9GT05UKSk7Ci0JfQotCi0JLyoqCi0JICogQ2Vhc2UgZm9sbG93aW5nIHRoZSBzZWxlY3Rpb24gbWFkZSBpbiB0aGUgZWRpdG9yCi0JICovCi0JcHJpdmF0ZSB2b2lkIHN0b3BGb2xsb3dTZWxlY3Rpb24oKSB7Ci0JCWlmIChmQ29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKLQkJCWZDb250ZW50T3V0bGluZVBhZ2UucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyKTsKLQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQlmQ29udGVudE91dGxpbmVQYWdlID0gbnVsbDsKLQkJfQotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDdmZWYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QKLQluYW1lPSJ0ZXN0c3VpdGUiCi0JZGVmYXVsdD0icnVuIgotCWJhc2VkaXI9Ii4iPgotCTwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0JPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KLQk8IS0tIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIiAvPi0tPgotCi0JPGVjaG8gbWVzc2FnZT0iYmFzZWRpciAke2Jhc2VkaXJ9IiAvPgotCTxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UgcGxhY2UgJHtlY2xpcHNlLWhvbWV9IiAvPgotCi0JPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIHBsdWdpbi1uYW1lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMiIC8+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9ImxpYnJhcnktZmlsZSIKLQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0JPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLQk8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLQk8dGFyZ2V0IG5hbWU9ImluaXQiPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQKLQkJCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLQkJCQlpbmNsdWRlcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy4qeG1sIiAvPgotCQk8L2RlbGV0ZT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0JPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0JCTxwcm9wZXJ0eQotCQkJbmFtZT0id3N0LWZvbGRlciIKLQkJCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd3N0X2ZvbGRlciIgLz4KLQkJPGRlbGV0ZQotCQkJZGlyPSIke3dzdC1mb2xkZXJ9IgotCQkJcXVpZXQ9InRydWUiIC8+Ci0JCTxhbnQKLQkJCXRhcmdldD0idWktdGVzdCIKLQkJCWFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImRhdGEtZGlyIgotCQkJCXZhbHVlPSIke3dzdC1mb2xkZXJ9IiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCQkJdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iY2xhc3NuYW1lIgotCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLlhNTFVJVGVzdFN1aXRlIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0icGx1Z2luLXBhdGgiCi0JCQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLQk8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLQkJPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4tLT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLQk8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0JPHRhcmdldAotCQluYW1lPSJydW4iCi0JCWRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0JCTxhbnQKLQkJCXRhcmdldD0iY29sbGVjdCIKLQkJCWFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImluY2x1ZGVzIgotCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLip4bWwiIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJvdXRwdXQtZmlsZSIKLQkJCQl2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Ob244Qml0Q2hhcnMvaW50ZXJuYXRpb25hbC1pbnN0YW5jZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvTm9uOEJpdENoYXJzL2ludGVybmF0aW9uYWwtaW5zdGFuY2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjMwYmQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Ob244Qml0Q2hhcnMvaW50ZXJuYXRpb25hbC1pbnN0YW5jZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG11bHRpLXJvb3QgeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249ImludGVybmF0aW9uYWwueHNkIiB4bWxucz0iIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLQk8cm9vdD5UaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nPC9yb290PgotCTzrv4zrpqzshLHrtoQ+67mg66W4IOqwiOyDiSDsl6zsmrDripQg6rKM7Jy866W4IOqwnOyXkCDqsJXtlZjtlZzri6Q8L+u/jOumrOyEseu2hD4KLQk85qC55YWD57SgPui/meWPquW/q+ajleiJsueLkOeLuOi3s+i/h+aHkuaDsOeLlzwv5qC55YWD57SgPgotCTxyb290Pui/meWPquW/q+ajleiJsueLkOeLuOi3s+i/h+aHkuaDsOeLlzwvcm9vdD4KLQk867+M66as7ISx67aEPlRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2c8L+u/jOumrOyEseu2hD4KLQk867+M66as7ISx67aEPlRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2c8L+u/jOumrOyEseu2hD4KLQk85qC55YWD57SgPuu5oOuluCDqsIjsg4kg7Jes7Jqw64qUIOqyjOycvOuluCDqsJzsl5Ag6rCV7ZWY7ZWc64ukPC/moLnlhYPntKA+Ci08L211bHRpLXJvb3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvTm9uOEJpdENoYXJzL2ludGVybmF0aW9uYWwueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL05vbjhCaXRDaGFycy9pbnRlcm5hdGlvbmFsLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdkMTNjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvTm9uOEJpdENoYXJzL2ludGVybmF0aW9uYWwueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6eG1sPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiPgotCi0JPCEtLTx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiBzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wMy94bWwueHNkIi8+LS0+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0ibXVsdGktcm9vdCI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJyb290IiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSLrv4zrpqzshLHrtoQiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IuagueWFg+e0oCIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJyb290IiB0eXBlPSJwcm9zZSIgLz4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSLrv4zrpqzshLHrtoQiIHR5cGU9InByb3NlIi8+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0i5qC55YWD57SgIiB0eXBlPSJwcm9zZSIgLz4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJwcm9zZSI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQk8eHNkOnBhdHRlcm4gdmFsdWU9IlRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2ciLz4KLQkJCTx4c2Q6cGF0dGVybiB2YWx1ZT0i6L+Z5Y+q5b+r5qOV6Imy54uQ54u46Lez6L+H5oeS5oOw54uXIi8+Ci0JCQk8eHNkOnBhdHRlcm4gdmFsdWU9Iuu5oOuluCDqsIjsg4kg7Jes7Jqw64qUIOqyjOycvOuluCDqsJzsl5Ag6rCV7ZWY7ZWc64ukIi8+Ci0JCTwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjAxMDUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMvIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjOWI4OGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJpbgotdGVtcC5mb2xkZXIKLWJ1aWxkLnhtbAotdmFsaWRhdGV4bWx0ZXN0cy5qYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEyNTYyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZDhiNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjM3OjIxIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjJhYzY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MjQ5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jU3VuIEFwciAxNiAxNDowNToyOSBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyMTg4M2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMC4yMDEKLUJ1bmRsZS1DbGFzc1BhdGg6IHZhbGlkYXRleG1sdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmp1bml0LAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aSwKLSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVjNTk4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPk1heSAyLCAyMDA2PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiODljNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RyZXNvdXJjZXMvLFwKLSAgICAgICAgICAgICAgIHZhbGlkYXRleG1sdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCi1zb3VyY2UudmFsaWRhdGV4bWx0ZXN0cy5qYXIgPSBzcmMvCi1iaW4uZXhjbHVkZXMgPSB0ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVjMDU2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2UKLUJ1bmRsZS1OYW1lLjAgPSBYTUwgVmFsaWRhdG9yIFRlc3RzIFBsdWctaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL1hNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9YTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFmN2Y5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL1hNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotLyoqCi0gKiBUZXN0IHRoZSBYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247Ci0JCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIAotICB7Ci0Jc3VwZXIuc2V0VXAoKTsKLQljb25maWd1cmF0aW9uID0gbmV3IFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCk7Ci0gIH0KLQotCi0gIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCWNvbmZpZ3VyYXRpb24gPSBudWxsOwotCXN1cGVyLnRlYXJEb3duKCk7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBUZXN0IHRoZSBkZWZhdWx0IHNldHRpbmcgb2YgdGhlIFdBUk5fTk9fR1JBTU1BUiBmZWF0dXJlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNldFdhcm5Ob0dyYW1tYXJGZWF0dXJlRGVmYXVsdCgpCi0gIHsKLQl0cnkKLQl7Ci0JCWFzc2VydEZhbHNlKCJUaGUgV0FSTl9OT19HUkFNTUFSIGZlYXR1cmUgaXMgbm90IHNldCBieSBkZWZhdWx0IHRvIGZhbHNlLiIsIGNvbmZpZ3VyYXRpb24uZ2V0RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5XQVJOX05PX0dSQU1NQVIpKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIHNldCByZWFkIHRoZSBXQVJOX05PX0dSQU1NQVIgZmVhdHVyZTogIiArIGUpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3Qgc2V0dGluZyB0aGUgV0FSTl9OT19HUkFNTUFSIGZlYXR1cmUgdG8gdHJ1ZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXRXYXJuTm9HcmFtbWFyRmVhdHVyZVRydWUoKQotICB7Ci0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLldBUk5fTk9fR1JBTU1BUiwgdHJ1ZSk7Ci0JICBhc3NlcnRUcnVlKCJUaGUgV0FSTl9OT19HUkFNTUFSIGZlYXR1cmUgaXMgbm90IHNldCB0byB0cnVlLiIsIGNvbmZpZ3VyYXRpb24uZ2V0RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5XQVJOX05PX0dSQU1NQVIpKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIHNldCBXQVJOX05PX0dSQU1NQVIgdG8gdHJ1ZTogIiArIGUpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3Qgc2V0dGluZyB0aGUgV0FSTl9OT19HUkFNTUFSIGZlYXR1cmUgdG8gZmFsc2UuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2V0V2Fybk5vR3JhbW1hckZlYXR1cmVGYWxzZSgpCi0gIHsKLQl0cnkKLQl7Ci0JICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uV0FSTl9OT19HUkFNTUFSLCBmYWxzZSk7Ci0JICBhc3NlcnRGYWxzZSgiVGhlIFdBUk5fTk9fR1JBTU1BUiBmZWF0dXJlIGlzIG5vdCBzZXQgdG8gZmFsc2UuIiwgY29uZmlndXJhdGlvbi5nZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLldBUk5fTk9fR1JBTU1BUikpOwotCX0KLQljYXRjaChFeGNlcHRpb24gZSkKLQl7Ci0JICBmYWlsKCJVbmFibGUgdG8gc2V0IFdBUk5fTk9fR1JBTU1BUiB0byBmYWxzZTogIiArIGUpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3Qgc2V0dGluZyBhIGZlYXR1cmUgdGhhdCBkb2Vzbid0IGV4aXN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNldE5vdEV4aXN0YW50RmVhdHVyZSgpCi0gIHsKLQl0cnkKLQl7Ci0JICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoIk5PTl9FWElTVEFOVF9GRUFUVVJFIiwgZmFsc2UpOwotCSAgZmFpbCgiU2V0dGluZyBhIG5vbiBleGlzdGFudCBmZWF0dXJlIGRpZCBub3QgcHJvZHVjZSBhbiBleGNlcHRpb24uIik7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIC8vIFRoZSB0ZXN0IHN1Y2NlZWRzIGlmIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0LgotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgZ2V0dGluZyBhIGZlYXR1cmUgdGhhdCBkb2Vzbid0IGV4aXN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEdldE5vdEV4aXN0YW50RmVhdHVyZSgpCi0gIHsKLQl0cnkKLQl7Ci0JICBjb25maWd1cmF0aW9uLmdldEZlYXR1cmUoIk5PTl9FWElTVEFOVF9GRUFUVVJFIik7Ci0JICBmYWlsKCJHZXR0aW5nIGEgbm9uIGV4aXN0YW50IGZlYXR1cmUgZGlkIG5vdCBwcm9kdWNlIGFuIGV4Y2VwdGlvbi4iKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgLy8gVGhlIHRlc3Qgc3VjY2VlZHMgaWYgdGhlIGV4Y2VwdGlvbiBpcyBjYXVnaHQuCi0JfQotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1ZhbGlkYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwYTY4ZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1ZhbGlkYXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5jb3JlLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLlhNTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlhNTENvcmVQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsLlhNTFZhbGlkYXRvclRlc3RzUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotICBWYWxpZGF0b3JXcmFwcGVyIHZhbGlkYXRvciA9IG5ldyBWYWxpZGF0b3JXcmFwcGVyKCk7Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShWYWxpZGF0b3JUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIGFkZEluZm9Ub01lc3NhZ2UgbWV0aG9kLiBUaGUgZm9sbG93aW5nIHRlc3RzIGFyZSBwZXJmb3JtZWQ6PGJyLz4KLSAgICogMS4gV2hlbiB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlIGNvbnRhaW5zIGEgbnVsbCBrZXkgbm90aGluZyBpcyBhZGRlZCB0byB0aGUgbWVzc2FnZS48YnIvPgotICAgKiAyLiBXaGVuIHRoZSBtZXNzYWdlIGNvbnRhaW5zIHRoZSBrZXkgIkVOVElSRV9FTEVNRU5UIiB0aGUgdGhyZWUgYXR0cmlidXRlcyBhcmUgYWRkZWQKLSAgICogdG8gdGhlIG1ldGhvZCBhbmQgdGhlIFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFIGlzIG51bGwuPGJyLz4KLSAgICogMy4gV2hlbiB0aGUgbWVzc2FnZSBjb250YWlucyB0aGUga2V5ICJFbnRpdHlOb3REZWNsYXJlZCIgdGhlIHRocmVlIGF0dHJpYnV0ZXMgYXJlIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBZGRJbmZvVG9NZXNzYWdlKCkKLSAgewotICAgIC8vIFRoZXNlIHN0cmluZ3MgYXJlIGNvbW1vbiBhZGRpdGlvbiBpbmZvcm1hdGlvbiB0eXBlcy4KLQlTdHJpbmcgQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgPSAiY29sdW1uTnVtYmVyIjsgLy8kTk9OLU5MUy0xJAotCVN0cmluZyBTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFID0gInNxdWlnZ2xlU2VsZWN0aW9uU3RyYXRlZ3kiOyAvLyROT04tTkxTLTEkCi0JU3RyaW5nIFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFID0gInNxdWlnZ2xlTmFtZU9yVmFsdWUiOyAvLyROT04tTkxTLTEkCi0JCi0JLy8gVGVzdCB0aGF0IHRoZSBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gdGhlIGF0dHJpYnV0ZXMgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZAotCS8vIHdpdGggYSBudWxsIGtleS4KLQlWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZSgiIiwgMSwgMSwgIiIpOwotCU1lc3NhZ2UgbWVzc2FnZSA9IG5ldyBNZXNzYWdlKCk7Ci0JdmFsaWRhdG9yLmFkZEluZm9Ub01lc3NhZ2UodmFsaWRhdGlvbk1lc3NhZ2UsIG1lc3NhZ2UpOwotCWFzc2VydE51bGwoIkNPTFVNTl9OVU1CRVJfQVRUUklCVVRFIHdhcyBub3QgbnVsbCBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIGEgbnVsbCBrZXkuIENPTFVNTl9OVU1CRVJfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKENPTFVNTl9OVU1CRVJfQVRUUklCVVRFKSwgbWVzc2FnZS5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpKTsKLQlhc3NlcnROdWxsKCJTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFIHdhcyBub3QgbnVsbCBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIGEgbnVsbCBrZXkuIFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZS5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSksIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpKTsKLQlhc3NlcnROdWxsKCJTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSB3YXMgbm90IG51bGwgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCBhIG51bGwga2V5LiBTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSksIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSk7Ci0JCi0JLy8gVGVzdCB0aGF0IHRoZSBtZXNzYWdlIGNvbnRhaW5zIHRoZSB0aHJlZSBhdHRyaWJ1dGVzIHdoZW4gdGhlIGtleSBpcyBzZXQgdG8gIkVsZW1lbnRVbnRlcm1pbmF0ZWQiLgotCVZhbGlkYXRpb25NZXNzYWdlIHZhbGlkYXRpb25NZXNzYWdlMiA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZSgiIiwgMSwgMSwgIiIsICJFbGVtZW50VW50ZXJtaW5hdGVkIiwgbnVsbCk7Ci0JTWVzc2FnZSBtZXNzYWdlMiA9IG5ldyBNZXNzYWdlKCk7Ci0JdmFsaWRhdG9yLmFkZEluZm9Ub01lc3NhZ2UodmFsaWRhdGlvbk1lc3NhZ2UyLCBtZXNzYWdlMik7Ci0JYXNzZXJ0RXF1YWxzKCJDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSB3YXMgY29ycmVjdGx5IHNldCB0byAxIGZvciBhIFZhbGlkYXRpb25NZXNzYWdlIHdpdGggdGhlIGtleSBFTlRJUkVfRUxFTUVOVC4gQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZTIuZ2V0QXR0cmlidXRlKENPTFVNTl9OVU1CRVJfQVRUUklCVVRFKSwgbmV3IEludGVnZXIoMSksIG1lc3NhZ2UyLmdldEF0dHJpYnV0ZShDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSkpOwotCWFzc2VydEVxdWFscygiU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSB3YXMgbm90IEVOVElSRV9FTEVNRU5ULiBTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UyLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFKSwgIkVOVElSRV9FTEVNRU5UIiwgbWVzc2FnZTIuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpKTsKLQlhc3NlcnROdWxsKCJTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSB3YXMgbm90IG51bGwgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCB0aGUga2V5IEVOVElSRV9FTEVNRU5ULiBTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMi5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUpLCBtZXNzYWdlMi5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUpKTsKLQkKLSAgICAvLyBUZXN0IHRoYXQgdGhlIG1lc3NhZ2UgY29udGFpbnMgdGhlIHRocmVlIGF0dHJpYnV0ZXMgd2hlbiB0aGUga2V5IGlzIHNldCB0byAiRW50aXR5Tm90RGVjbGFyZWQiLgotCVZhbGlkYXRpb25NZXNzYWdlIHZhbGlkYXRpb25NZXNzYWdlMyA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZSgiIiwgMSwgMSwgIiIsICJFbnRpdHlOb3REZWNsYXJlZCIsIG5ldyBPYmplY3RbXXsiTXlOYW1lIn0pOwotCU1lc3NhZ2UgbWVzc2FnZTMgPSBuZXcgTWVzc2FnZSgpOwotCXZhbGlkYXRvci5hZGRJbmZvVG9NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlMywgbWVzc2FnZTMpOwotCWFzc2VydEVxdWFscygiQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgd2FzIGNvcnJlY3RseSBzZXQgdG8gMSBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIHRoZSBrZXkgRW50aXR5Tm90RGVjbGFyZWQuIENPTFVNTl9OVU1CRVJfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UzLmdldEF0dHJpYnV0ZShDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSksIG5ldyBJbnRlZ2VyKDEpLCBtZXNzYWdlMy5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpKTsKLQlhc3NlcnRFcXVhbHMoIlNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgd2FzIG5vdCBURVhUX0VOVElUWV9SRUZFUkVOQ0UuIFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZTMuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpLCAiVEVYVF9FTlRJVFlfUkVGRVJFTkNFIiwgbWVzc2FnZTMuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpKTsKLQlhc3NlcnRFcXVhbHMoIlNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFIHdhcyBub3Qgc2V0IHRvIE15TmFtZSBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIHRoZSBrZXkgRW50aXR5Tm90RGVjbGFyZWQuIFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UzLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSksICJNeU5hbWUiLCBtZXNzYWdlMy5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIHZhbGlkYXRlIG1ldGhvZC4gVGVzdHMgdG8gYmUgcGVyZm9ybWVkOjxici8+Ci0gICAqIDEuIFRlc3QgdGhhdCB2YWxpZGF0aW5nIGEgdmFsaWQgZmlsZSBmcm9tIGEgVVJJIG9yIGFuIGlucHV0IHN0cmVhbSBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuPGJyLz4KLSAgICogMi4gVGVzdCB0aGF0IHZhbGlkYXRpbmcgYW4gaW52YWxpZCBmaWxlIGZyb20gYSBVUkkgb3IgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZSgpCi0gIHsKLQl0cnkKLQl7Ci0JICAvLyBUZXN0IHRoYXQgdmFsaWRhdGluZyBhIHZhbGlkIGZpbGUgZnJvbSBhIFVSSSBhbmQgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC4KLQkgIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFhNTFZhbGlkYXRvclRlc3RzUGx1Z2luLmdldFBsdWdpbkxvY2F0aW9uKCkudG9TdHJpbmcoKSArICIvIjsKLQkgIFN0cmluZyB1cmkgPSAiZmlsZTovLy8iICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyAidGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54bWwiOwotCSAgVmFsaWRhdGlvblJlcG9ydCByZXBvcnQxID0gdmFsaWRhdG9yLnZhbGlkYXRlKHVyaSwgbnVsbCwgbnVsbCk7Ci0JICBWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydDIgPSBudWxsOwotCSAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotCSAgdHJ5Ci0JICB7Ci0JICAgIGlzID0gbmV3IFVSTCh1cmkpLm9wZW5TdHJlYW0oKTsKLQkgICAgcmVwb3J0MiA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIGlzLCBudWxsKTsKLQkgIH0KLQkgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCSAgewotCQlmYWlsKCJBIHByb2JsZW0gb2NjdXJyZWQgd2hpbGUgdmFsaWRhdGluZyBhIHZhbGlkIGZpbGUgd2l0aCBhbiBpbnB1dHN0cmVhbTogIiArIGUpOwotCSAgfQotCSAgZmluYWxseQotCSAgewotCQlpZihpcyAhPSBudWxsKQotCQl7Ci0JCSAgdHJ5Ci0JCSAgewotCQkgICAgaXMuY2xvc2UoKTsKLQkJICB9Ci0JCSAgY2F0Y2goSU9FeGNlcHRpb24gZSkKLQkJICB7Ci0JCQkvLyBEbyBub3RoaW5nLgotCQkgIH0KLQkJfQotCSAgfQotCSAgYXNzZXJ0VHJ1ZSgiVmFsaWRhdGlvbiB1c2luZyBhIFVSSSBkaWQgbm90IHByb2R1Y3QgYSB2YWxpZCB2YWxpZGF0aW9uIHJlc3VsdC4iLCByZXBvcnQxLmlzVmFsaWQoKSk7Ci0JICBhc3NlcnRFcXVhbHMoIlZhbGlkYXRpb24gdXNpbmcgVVJJIGFuZCB1c2luZyBpbnB1dHN0cmVhbSBvZiB0aGUgc2FtZSBmaWxlIHByb2R1Y2VzIGRpZmZlcmVudCBudW1iZXJzIG9mIGVycm9ycy4iLCByZXBvcnQxLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgpOwotCSAgCi0gICAgICAvLyBUZXN0IHRoYXQgdmFsaWRhdGluZyBhbiBpbnZhbGlkIGZpbGUgZnJvbSBhIFVSSSBhbmQgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC4KLQkgIHVyaSA9ICJmaWxlOi8vLyIgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJ0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueG1sIjsKLQkgIHJlcG9ydDEgPSB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBudWxsLCBudWxsKTsKLQkgIHJlcG9ydDIgPSBudWxsOwotCSAgaXMgPSBudWxsOwotCSAgdHJ5Ci0JICB7Ci0JICAgIGlzID0gbmV3IFVSTCh1cmkpLm9wZW5TdHJlYW0oKTsKLQkgICAgcmVwb3J0MiA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIGlzLCBudWxsKTsKLQkgIH0KLQkgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCSAgewotCQlmYWlsKCJBIHByb2JsZW0gb2NjdXJyZWQgd2hpbGUgdmFsaWRhdGluZyBhbiBpbnZhbGlkIGZpbGUgd2l0aCBhbiBpbnB1dHN0cmVhbTogIiArIGUpOwotCSAgfQotCSAgZmluYWxseQotCSAgewotCQlpZihpcyAhPSBudWxsKQotCQl7Ci0JCSAgdHJ5Ci0JCSAgewotCQkgICAgaXMuY2xvc2UoKTsKLQkJICB9Ci0JCSAgY2F0Y2goSU9FeGNlcHRpb24gZSkKLQkJICB7Ci0JCQkvLyBEbyBub3RoaW5nLgotCQkgIH0KLQkJfQotCSAgfQotCSAgYXNzZXJ0RmFsc2UoIlZhbGlkYXRpb24gdXNpbmcgYSBVUkkgZGlkIG5vdCBwcm9kdWN0IGFuIGludmFsaWQgdmFsaWRhdGlvbiByZXN1bHQuIiwgcmVwb3J0MS5pc1ZhbGlkKCkpOwotCSAgYXNzZXJ0RXF1YWxzKCJWYWxpZGF0aW9uIHVzaW5nIFVSSSBhbmQgdXNpbmcgaW5wdXRzdHJlYW0gb2YgdGhlIHNhbWUgZmlsZSBwcm9kdWNlcyBkaWZmZXJlbnQgbnVtYmVycyBvZiBlcnJvcnMuIiwgcmVwb3J0MS5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgsIHJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkubGVuZ3RoKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIGxvY2F0ZSBwbHVnLWluIGxvY2F0aW9uOiAiICsgZSk7Ci0JfQotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGF0IHRoZSB3YXJuIG5vIGdyYW1tYXIgcHJlZmVyZW5jZSBpcyByZWFkIGZyb20gdGhlIFhNTCBjb3JlIHByZWZlcmVuY2VzLgotICAgKiBUaGVyZSBhcmUgdGhyZWUgdGVzdHMgdG8gcGVyZm9ybS4KLSAgICogMS4gVGVzdCB0aGF0IHRoZSBkZWZhdWx0IHByZWZlcmVuY2UgaXMgZGlzYWJsZWQuCi0gICAqIDIuIFRlc3QgdGhhdCBzZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHRvIGVuYWJsZWQgd29ya3MuCi0gICAqIDMuIFRlc3QgdGhhdCBzZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHRvIGRpc2FibGVkIHdvcmtzLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFdhcm5Ob0dyYW1tYXJQcmVmZXJlbmNlKCkKLSAgewotCS8vIFRlc3QgdGhhdCB0aGUgZGVmYXVsdCBwcmVmZXJlbmNlIGlzIGRpc2FibGVkLgotCXZhbGlkYXRvci5zZXR1cFZhbGlkYXRpb24obnVsbCk7Ci0JYXNzZXJ0RmFsc2UoIlRoZSBkZWZhdWx0IHdhcm4gbm8gZ3JhbW1hciBwcmVmZXJlbmNlIGlzIG5vdCBmYWxzZS4iLCB2YWxpZGF0b3IuZ2V0V2Fybk5vR3JhbW1hclByZWZlcmVuY2UoKSk7Ci0JCi0JLy8gVGVzdCB0aGF0IHRoZSBwcmVmZXJlbmNlIGlzIHJlYWQgd2hlbiBlbmFibGVkLgotCVhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuc2V0VmFsdWUoWE1MQ29yZVByZWZlcmVuY2VOYW1lcy5XQVJOX05PX0dSQU1NQVIsIHRydWUpOwotCXZhbGlkYXRvci5zZXR1cFZhbGlkYXRpb24obnVsbCk7Ci0JYXNzZXJ0VHJ1ZSgiVGhlIHdhcm4gbm8gZ3JhbW1hciBwcmVmZXJlbmNlIGlzIG5vdCB0cnVlIHdoZW4gdGhlIHByZWZlcmVuY2UgaXMgc2V0IHRvIHRydWUuIiwgdmFsaWRhdG9yLmdldFdhcm5Ob0dyYW1tYXJQcmVmZXJlbmNlKCkpOwotCQotCQotCS8vIFRlc3QgdGhhdCB0aGUgcHJlZmVyZW5jZSBpcyByZWFkIHdoZW4gZGlzYWJsZWQuCi0JWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5zZXRWYWx1ZShYTUxDb3JlUHJlZmVyZW5jZU5hbWVzLldBUk5fTk9fR1JBTU1BUiwgZmFsc2UpOwotCXZhbGlkYXRvci5zZXR1cFZhbGlkYXRpb24obnVsbCk7Ci0JYXNzZXJ0RmFsc2UoIlRoZSB3YXJuIG5vIGdyYW1tYXIgcHJlZmVyZW5jZSBpcyBub3QgZmFsc2Ugd2hlbiB0aGUgcHJlZmVyZW5jZSBpcyBzZXQgdG8gZmFsc2UuIiwgdmFsaWRhdG9yLmdldFdhcm5Ob0dyYW1tYXJQcmVmZXJlbmNlKCkpOwotCQotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JXcmFwcGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yV3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjZhZDk5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuTmVzdGVkVmFsaWRhdG9yQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgZXh0ZW5kcyB2YWxpZGF0b3IgdG8gZXhwb3NlIHRoZSBwcm90ZWN0ZWQgbWV0aG9kcwotICogZm9yIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0b3JXcmFwcGVyIGV4dGVuZHMgVmFsaWRhdG9yIAotewotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5WYWxpZGF0b3IjYWRkSW5mb1RvTWVzc2FnZShvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlLCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgYWRkSW5mb1RvTWVzc2FnZShWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZSwgSU1lc3NhZ2UgbWVzc2FnZSkgCi0gIHsKLQlzdXBlci5hZGRJbmZvVG9NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlLCBtZXNzYWdlKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuVmFsaWRhdG9yI3NldHVwVmFsaWRhdGlvbihvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLk5lc3RlZFZhbGlkYXRvckNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXR1cFZhbGlkYXRpb24oTmVzdGVkVmFsaWRhdG9yQ29udGV4dCBjb250ZXh0KSAKLSAgewotCXN1cGVyLnNldHVwVmFsaWRhdGlvbihjb250ZXh0KTsKLSAgfQotCi0vKioKLSAgICogRXhwb3J0IHRoZSB3YXJuIG5vIGdyYW1tYXIgcHJlZmVyZW5jZSBmb3IgdGVzdGluZy4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHdhcm4gbm8gZ3JhbW1hciBwcmVmZXJlbmNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0V2Fybk5vR3JhbW1hclByZWZlcmVuY2UoKQotICB7Ci0JcmV0dXJuIHdhcm5Ob0dyYW1tYXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YTUxNZXNzYWdlSW5mb0hlbHBlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YTUxNZXNzYWdlSW5mb0hlbHBlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRiZjNjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWE1MTWVzc2FnZUluZm9IZWxwZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotLyoqCi0gKiBUZXN0IGNhc2UgdG8gdGVzdCB0aGUgWE1MTWVzc2FnZUluZm9IZWxwZXIgY2xhc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxNZXNzYWdlSW5mb0hlbHBlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgcHJpdmF0ZSBYTUxNZXNzYWdlSW5mb0hlbHBlciBoZWxwZXIgPSBuZXcgWE1MTWVzc2FnZUluZm9IZWxwZXIoKTsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFhNTE1lc3NhZ2VJbmZvSGVscGVyVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGNyZWF0ZU1lc3NhZ2VJbmZvIG1ldGhvZCByZXR1cm5zIHsiIiwgbnVsbH0gd2hlbgotICAgKiBnaXZlbiBhIG5vbi1leGlzdGFudCBrZXkgYW5kIG51bGwgbWVzc2FnZSBhcmd1bWVudHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Tm90RXhpc3RhbnRLZXlBbmROdWxsTWVzc2FnZUFyZ3VtZW50cygpCi0gIHsKLQlTdHJpbmdbXSBtZXNzYWdlSW5mbyA9IGhlbHBlci5jcmVhdGVNZXNzYWdlSW5mbygiTk9OX0VYSVNUQU5UX0tFWSIsIG51bGwpOwotCWFzc2VydEVxdWFscygiVGhlIHNlbGVjdGlvbiBzdHJhdGVneSByZXR1cm5lZCB3YXMgbm90IGFuIGVtcHR5IHN0cmluZy4iLCAiIiwgbWVzc2FnZUluZm9bMF0pOwotCWFzc2VydE51bGwoIlRoZSBuYW1lT3JWYWx1ZSByZXR1cm5lZCB3YXMgbm90IG51bGwuIiwgbWVzc2FnZUluZm9bMV0pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGF0IHRoZSBjcmVhdGVNZXNzYWdlSW5mbyBtZXRob2QgcmV0dXJucyB7IiIsIG51bGx9IHdoZW4KLSAgICogZ2l2ZW4gYSBub24tZXhpc3RhbnQga2V5IGFuZCBudWxsIG1lc3NhZ2UgYXJndW1lbnRzLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE51bGxLZXlBbmRNZXNzYWdlQXJndW1lbnRzKCkKLSAgewotCVN0cmluZ1tdIG1lc3NhZ2VJbmZvID0gaGVscGVyLmNyZWF0ZU1lc3NhZ2VJbmZvKG51bGwsIG51bGwpOwotCWFzc2VydEVxdWFscygiVGhlIHNlbGVjdGlvbiBzdHJhdGVneSByZXR1cm5lZCB3YXMgbm90IGFuIGVtcHR5IHN0cmluZy4iLCAiIiwgbWVzc2FnZUluZm9bMF0pOwotCWFzc2VydE51bGwoIlRoZSBuYW1lT3JWYWx1ZSByZXR1cm5lZCB3YXMgbm90IG51bGwuIiwgbWVzc2FnZUluZm9bMV0pOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YTUxWYWxpZGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWE1MVmFsaWRhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDA1NWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YTUxWYWxpZGF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotLyoqCi0gKiBUZXN0IHRoZSBFY2xpcHNlIHNwZWNpZmljIFhNTCB2YWxpZGF0b3IuCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxWYWxpZGF0b3JUZXN0IGV4dGVuZHMgVGVzdENhc2UgCi17Ci0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFhNTFZhbGlkYXRvclRlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0byBlbnN1cmUgdGhlIFVSSSByZXNvbHZlciBpcyBub3QgbnVsbCBpbiB0aGUgRWNsaXBzZQotICAgKiBzcGVjaWZpYyBYTUwgdmFsaWRhdG9yLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVSSVJlc29sdmVySXNSZWdpc3RlcmVkKCkKLSAgewotCVhNTFZhbGlkYXRvcldyYXBwZXIgdmFsaWRhdG9yID0gbmV3IFhNTFZhbGlkYXRvcldyYXBwZXIoKTsKLQlhc3NlcnROb3ROdWxsKCJUaGUgVVJJIHJlc29sdmVyIGlzIG51bGwuIiwgdmFsaWRhdG9yLmdldFVSSVJlc29sdmVyKCkpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YTUxWYWxpZGF0b3JXcmFwcGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWE1MVmFsaWRhdG9yV3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTFhMDk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YTUxWYWxpZGF0b3JXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLlVSSVJlc29sdmVyOwotCi0vKioKLSAqIFdyYXBwZXIgZm9yIHRoZSBFY2xpcHNlIFhNTCB2YWxpZGF0b3IgY2xhc3MgdG8gYWxsb3cgZm9yIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxWYWxpZGF0b3JXcmFwcGVyIGV4dGVuZHMgWE1MVmFsaWRhdG9yIAotewotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgWE1MVmFsaWRhdG9yV3JhcHBlcigpCi0gIHsKLQlzdXBlcigpOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBVUkkgcmVzb2x2ZXIgcmVnaXN0ZXJlZCBvbiB0aGUgWE1MIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIFVSSSByZXNvbHZlciByZWdpc3RlcmVkIG9uIHRoZSBYTUwgdmFsaWRhdG9yLgotICAgKi8KLSAgcHVibGljIFVSSVJlc29sdmVyIGdldFVSSVJlc29sdmVyKCkKLSAgewotCXJldHVybiB1cmlSZXNvbHZlcjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNDVkMWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YTUxWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbi5FcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyLkVycm9yTWVzc2FnZUluZm9ybWF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5YTUxWYWxpZGF0b3JUZXN0c1BsdWdpbjsKLQotLyoqCi0gKiBUZXN0IHRoZSBFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyIGNsYXNzLgotICovCi1wdWJsaWMgY2xhc3MgRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLQkKLSAgLyoqCi0gICAqIFRlc3QgdGhlIHN0YXJ0RWxlbWVudCBtZXRob2Qgd2l0aCB0aGUgZm9sbG93aW5nIHRlc3RzOgotICAgKiAxLiBUZXN0IHRoYXQgdGhlIHJvb3QgZWxlbWVudCBpcyBwcm9wZXJseSBwdXNoZWQgdG8gdGhlIHN0YWNrLgotICAgKiAyLiBUZXN0IHRoYXQgYSBzdWJzZXF1ZW50IGVsZW1lbnQgaXMgcHJvcGVybHkgcHVzaGVkIHRvIHRoZSBzdGFjayBhbmQKLSAgICogICAgcmVnaXN0ZXJlZCBhcyBhIGNoaWxkIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3RhcnRFbGVtZW50KCkKLSAgewotCS8vIDEuIFRlc3QgdGhhdCB0aGUgcm9vdCBlbGVtZW50IGlzIHByb3Blcmx5IHB1c2hlZCB0byB0aGUgc3RhY2suCi0JU3RyaW5nIG5hbWVzcGFjZTEgPSAiaHR0cDovL25hbWVzcGFjZTEiOwotCVN0cmluZyBsb2NhbG5hbWUxID0gImxvY2FsbmFtZSI7Ci0JRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIgbWFuYWdlciA9IG5ldyBFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlcigpOwotCWFzc2VydEVxdWFscygiMS4gVGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gc3RhY2sgaXMgbm90IGVtcHR5IHRvIHN0YXJ0LiIsIDAsIG1hbmFnZXIuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5zaXplKCkpOwotCW1hbmFnZXIuc3RhcnRFbGVtZW50KG5hbWVzcGFjZTEsIGxvY2FsbmFtZTEpOwotCUVsZW1lbnRJbmZvcm1hdGlvbiBlbGVtSW5mbyA9IChFbGVtZW50SW5mb3JtYXRpb24pbWFuYWdlci5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnBvcCgpOwotCWFzc2VydEVxdWFscygiMS4gVGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gc3RhY2sgaXMgbm90IGVtcHR5IHRvIGFmdGVyIHBvcHBpbmcgdGhlIHRvcCBlbGVtZW50LiIsIDAsIG1hbmFnZXIuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5zaXplKCkpOwotCWFzc2VydEVxdWFscygiMS4gVGhlIG5hbWVzcGFjZSBzcGVjaWZpZWQgb24gdGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gaXMgbm90IGh0dHA6Ly9uYW1lc3BhY2UxIGl0IGlzICIgKyBlbGVtSW5mby5nZXROYW1lc3BhY2UoKSwgbmFtZXNwYWNlMSwgZWxlbUluZm8uZ2V0TmFtZXNwYWNlKCkpOwotCWFzc2VydEVxdWFscygiMS4gVGhlIGxvY2FsIG5hbWUgc3BlY2lmaWVkIG9uIHRoZSBlbGVtZW50IGluZm9ybWF0aW9uIGlzIG5vdCBsb2NhbG5hbWUgaXQgaXMgIiArIGVsZW1JbmZvLmdldExvY2FsbmFtZSgpLCBsb2NhbG5hbWUxLCBlbGVtSW5mby5nZXRMb2NhbG5hbWUoKSk7Ci0JCi0JLy8gMi4gVGVzdCB0aGF0IGEgc3Vic2VxdWVudCBlbGVtZW50IGlzIHByb3Blcmx5IHB1c2hlZCB0byB0aGUgc3RhY2sgYW5kIHJlZ2lzdGVyZWQgYXMgYSBjaGlsZCBlbGVtZW50LgotCVN0cmluZyBsb2NhbG5hbWUyID0gImxvY2FsbmFtZTIiOwotICAgIEVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyIG1hbmFnZXIyID0gbmV3IEVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyKCk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgZWxlbWVudCBpbmZvcm1hdGlvbiBzdGFjayBpcyBub3QgZW1wdHkgdG8gc3RhcnQuIiwgMCwgbWFuYWdlcjIuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5zaXplKCkpOwotCW1hbmFnZXIyLnN0YXJ0RWxlbWVudChuYW1lc3BhY2UxLCBsb2NhbG5hbWUxKTsKLQltYW5hZ2VyMi5zdGFydEVsZW1lbnQobmFtZXNwYWNlMSwgbG9jYWxuYW1lMik7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgZWxlbWVudCBpbmZvcm1hdGlvbiBzdGFjayBkb2VzIG5vdCBjb250YWluIDIgZWxlbWVudHMuIiwgMiwgbWFuYWdlcjIuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5zaXplKCkpOwotCUVsZW1lbnRJbmZvcm1hdGlvbiBlbGVtSW5mbzIgPSAoRWxlbWVudEluZm9ybWF0aW9uKW1hbmFnZXIyLmdldEVsZW1lbnRJbmZvcm1hdGlvblN0YWNrKCkucG9wKCk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgZWxlbWVudCBpbmZvcm1hdGlvbiBzdGFjayBkb2VzIG5vdCBjb250YWluIDEgZWxlbWVudCBhZnRlciBwb3BwaW5nIHRoZSB0b3AgZWxlbWVudC4iLCAxLCBtYW5hZ2VyMi5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgbmFtZXNwYWNlIHNwZWNpZmllZCBvbiB0aGUgZWxlbWVudCBpbmZvcm1hdGlvbiBjaGlsZCBpcyBub3QgaHR0cDovL25hbWVzcGFjZTEgaXQgaXMgIiArIGVsZW1JbmZvMi5nZXROYW1lc3BhY2UoKSwgbmFtZXNwYWNlMSwgZWxlbUluZm8yLmdldE5hbWVzcGFjZSgpKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBsb2NhbCBuYW1lIHNwZWNpZmllZCBvbiB0aGUgZWxlbWVudCBpbmZvcm1hdGlvbiBjaGlsZCBpcyBub3QgbG9jYWxuYW1lMiBpdCBpcyAiICsgZWxlbUluZm8yLmdldExvY2FsbmFtZSgpLCBsb2NhbG5hbWUyLCBlbGVtSW5mbzIuZ2V0TG9jYWxuYW1lKCkpOwotCUVsZW1lbnRJbmZvcm1hdGlvbiBlbGVtSW5mbzMgPSAoRWxlbWVudEluZm9ybWF0aW9uKW1hbmFnZXIyLmdldEVsZW1lbnRJbmZvcm1hdGlvblN0YWNrKCkucG9wKCk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgZWxlbWVudCBpbmZvcm1hdGlvbiBzdGFjayBkb2VzIG5vdCBjb250YWluIDAgZWxlbWVudHMgYWZ0ZXIgcG9wcGluZyB0aGUgdG9wIGVsZW1lbnQuIiwgMCwgbWFuYWdlcjIuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5zaXplKCkpOwotCWFzc2VydEVxdWFscygiMi4gVGhlIG5hbWVzcGFjZSBzcGVjaWZpZWQgb24gdGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gaXMgbm90IGh0dHA6Ly9uYW1lc3BhY2UxIGl0IGlzICIgKyBlbGVtSW5mbzMuZ2V0TmFtZXNwYWNlKCksIG5hbWVzcGFjZTEsIGVsZW1JbmZvMy5nZXROYW1lc3BhY2UoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgbG9jYWwgbmFtZSBzcGVjaWZpZWQgb24gdGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gaXMgbm90IGxvY2FsbmFtZSBpdCBpcyAiICsgZWxlbUluZm8zLmdldExvY2FsbmFtZSgpLCBsb2NhbG5hbWUxLCBlbGVtSW5mbzMuZ2V0TG9jYWxuYW1lKCkpOwotCWFzc2VydEVxdWFscygiMi4gVGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gZG9lcyBub3QgY29udGFpbiAxIGNoaWxkIGVsZW1lbnQgaXQgY29udGFpbnMgIiArIGVsZW1JbmZvMy5nZXRDaGlsZHJlbigpLnNpemUoKSwgMSwgZWxlbUluZm8zLmdldENoaWxkcmVuKCkuc2l6ZSgpKTsKLQlFbGVtZW50SW5mb3JtYXRpb24gZWxlbUluZm80ID0gKEVsZW1lbnRJbmZvcm1hdGlvbillbGVtSW5mbzMuZ2V0Q2hpbGRyZW4oKS5nZXQoMCk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgbmFtZXNwYWNlIHNwZWNpZmllZCBvbiB0aGUgZWxlbWVudCBpbmZvcm1hdGlvbidzIGNoaWxkIGlzIG5vdCBodHRwOi8vbmFtZXNwYWNlMSBpdCBpcyAiICsgZWxlbUluZm80LmdldE5hbWVzcGFjZSgpLCBuYW1lc3BhY2UxLCBlbGVtSW5mbzQuZ2V0TmFtZXNwYWNlKCkpOwotCWFzc2VydEVxdWFscygiMi4gVGhlIGxvY2FsIG5hbWUgc3BlY2lmaWVkIG9uIHRoZSBlbGVtZW50IGluZm9ybWF0aW9uJ3MgY2hpbGQgaXMgbm90IGxvY2FsbmFtZTIgaXQgaXMgIiArIGVsZW1JbmZvNC5nZXRMb2NhbG5hbWUoKSwgbG9jYWxuYW1lMiwgZWxlbUluZm80LmdldExvY2FsbmFtZSgpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIGVuZEVsZW1lbnQgbWV0aG9kIHdpdGggdGhlIGZvbGxvd2luZyB0ZXN0czoKLSAgICogMS4gQ2hlY2sgdGhhdCB0aGUgbGFzdCBlbGVtZW50IG9uIHRoZSBzdGFjayBpcyBzdWNjZXNzZnVsbHkgcG9wcGVkLgotICAgKiAyLiBUZXN0IHRoYXQgYW4gZWxlbWVudCBpbiBhIHNhbXBsZSBuYW1lc3BhY2UgcHJvZHVjZXMgdGhlIGV4cGVjdGVkIG1lc3NhZ2UuCi0gICAqIDMuIFRlc3QgdGhhdCBhbiBlbGVtZW50IG5vdCBpbiBhIHNhbXBsZSBuYW1lc3BhY2UgcmV0YWlucyBpdHMgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RW5kRWxlbWVudCgpCi0gIHsKLQkvLyAxLiBDaGVjayB0aGF0IHRoZSBsYXN0IGVsZW1lbnQgb24gdGhlIHN0YWNrIGlzIHN1Y2Nlc3NmdWxseSBwb3BwZWQuCi0JU3RyaW5nIG5hbWVzcGFjZTEgPSAiaHR0cDovL25hbWVzcGFjZTEiOwotICAgIFN0cmluZyBsb2NhbG5hbWUxID0gImxvY2FsbmFtZSI7Ci0JRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIgbWFuYWdlciA9IG5ldyBFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlcigpOwotCW1hbmFnZXIuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5wdXNoKG5ldyBFbGVtZW50SW5mb3JtYXRpb24obmFtZXNwYWNlMSwgbG9jYWxuYW1lMSkpOwotCW1hbmFnZXIuZW5kRWxlbWVudChuYW1lc3BhY2UxLCBsb2NhbG5hbWUxKTsKLQlhc3NlcnRFcXVhbHMoIjEuIFRoZSBzdGFjayBzdGlsbCBjb250YWlucyBhbiBlbGVtZW50LiIsIDAsIG1hbmFnZXIuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5zaXplKCkpOwotCQotCS8vIDIuIFRlc3QgdGhhdCBhbiBlbGVtZW50IGluIGEgc2FtcGxlIG5hbWVzcGFjZSBwcm9kdWNlcyB0aGUgZXhwZWN0ZWQgbWVzc2FnZS4KLQlTdHJpbmcgbmFtZXNwYWNlMiA9ICJYTUxWYWxpZGF0aW9uVGVzdFNhbXBsZU5hbWVzcGFjZSI7Ci0JRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5hZGRFcnJvck1lc3NhZ2VDdXN0b21pemVyKG5hbWVzcGFjZTIsIG5ldyBTYW1wbGVFcnJvck1lc3NhZ2VDdXN0b21pemVyKCkpOwotCUVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyIG1hbmFnZXIyID0gbmV3IEVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyKCk7Ci0JbWFuYWdlcjIuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5wdXNoKG5ldyBFbGVtZW50SW5mb3JtYXRpb24obmFtZXNwYWNlMiwgbG9jYWxuYW1lMSkpOwotCUVycm9yTWVzc2FnZUluZm9ybWF0aW9uIGVtaSA9IG1hbmFnZXIyLm5ldyBFcnJvck1lc3NhZ2VJbmZvcm1hdGlvbigpOwotCWVtaS5tZXNzYWdlID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlKCJTYW1wbGVNZXNzYWdlIiwgMSwgMiwgbmFtZXNwYWNlMik7Ci0JbWFuYWdlcjIuc2V0TWVzc2FnZUZvckNvbnNpZGVyYXRpb24oZW1pKTsKLQltYW5hZ2VyMi5lbmRFbGVtZW50KG5hbWVzcGFjZTIsIGxvY2FsbmFtZTEpOwotCWFzc2VydEVxdWFscygiMi4gVGhlIG1lc3NhZ2Ugd2FzIG5vdCBjdXN0b21pemVkIHRvIEFBQUEuIFRoZSBtZXNzYWdlIGlzICIgKyBlbWkubWVzc2FnZS5nZXRNZXNzYWdlKCksICJBQUFBIiwgZW1pLm1lc3NhZ2UuZ2V0TWVzc2FnZSgpKTsKLQkKLQkvLyAzLiBUZXN0IHRoYXQgYW4gZWxlbWVudCBub3QgaW4gYSBzYW1wbGUgbmFtZXNwYWNlIHJldGFpbnMgaXRzIHZhbHVlLgotCVN0cmluZyBuYW1lc3BhY2UzID0gIlhNTFZhbGlkYXRpb25UZXN0U2FtcGxlTmFtZXNwYWNlMyI7Ci0JRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIgbWFuYWdlcjMgPSBuZXcgRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIoKTsKLQltYW5hZ2VyMy5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnB1c2gobmV3IEVsZW1lbnRJbmZvcm1hdGlvbihuYW1lc3BhY2UzLCBsb2NhbG5hbWUxKSk7Ci0JRXJyb3JNZXNzYWdlSW5mb3JtYXRpb24gZW1pMiA9IG1hbmFnZXIzLm5ldyBFcnJvck1lc3NhZ2VJbmZvcm1hdGlvbigpOwotCWVtaTIubWVzc2FnZSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZSgiU2FtcGxlTWVzc2FnZSIsIDEsIDIsIG5hbWVzcGFjZTMpOwotCW1hbmFnZXIzLnNldE1lc3NhZ2VGb3JDb25zaWRlcmF0aW9uKGVtaTIpOwotCW1hbmFnZXIzLmVuZEVsZW1lbnQobmFtZXNwYWNlMywgbG9jYWxuYW1lMSk7Ci0JYXNzZXJ0RXF1YWxzKCIzLiBUaGUgbWVzc2FnZSBkaWQgbm90IHJldGFpbiBpdHMgdmFsdWUgb2YgU2FtcGxlTWVzc2FnZS4gVGhlIG1lc3NhZ2UgaXMgIiArIGVtaTIubWVzc2FnZS5nZXRNZXNzYWdlKCksICJTYW1wbGVNZXNzYWdlIiwgZW1pMi5tZXNzYWdlLmdldE1lc3NhZ2UoKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoZSBjb25zaWRlclJlcG9ydGVkRXJyb3IgbWV0aG9kIHdpdGggdGhlIGZvbGxvd2luZyB0ZXN0czoKLSAgICogMS4gQ2hlY2sgdGhhdCB0aGUgbWVzc2FnZUZvckNvbnNpZGVyYXRpb24gaXMgbm90IHNldCBpZiB0aGVyZSBhcmUgbm8gY3VycmVudAotICAgKiAgICB2YWxpZGF0aW9uIG1lc3NhZ2VzLgotICAgKiAyLiBDaGVjayB0aGF0IHRoZSBtZXNzYWdlRm9yQ29uc2lkZXJhdGlvbiBpcyBzZXQgY29ycmVjdGx5IGlmIHRoZXJlIGlzIGEKLSAgICogICAgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENvbnNpZGVyUmVwb3J0ZWRFcnJvcigpCi0gIHsKLQkvLyAxLiBDaGVjayB0aGF0IHRoZSBtZXNzYWdlRm9yQ29uc2lkZXJhdGlvbiBpcyBub3Qgc2V0IGlmIHRoZXJlIGFyZSBubyBjdXJyZW50IHZhbGlkYXRpb24gbWVzc2FnZXMuCi0JU3RyaW5nIG5hbWVzcGFjZTEgPSAiaHR0cDovL25hbWVzcGFjZTEiOwotCUVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyIG1hbmFnZXIgPSBuZXcgRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIoKTsKLQlWYWxpZGF0aW9uSW5mbyB2YWxpbmZvID0gbmV3IFZhbGlkYXRpb25JbmZvKG5hbWVzcGFjZTEpOwotCW1hbmFnZXIuY29uc2lkZXJSZXBvcnRlZEVycm9yKHZhbGluZm8sICJrZXkiLCBudWxsKTsKLQlhc3NlcnROdWxsKCIxLiBUaGUgbWVzc2FnZUZvckNvbnNpZGVyYXRpb24gaXMgbm90IG51bGwgd2hlbiBubyB2YWxpZGF0aW9uIG1lc3NhZ2VzIGV4aXN0LiIsIG1hbmFnZXIuZ2V0TWVzc2FnZUZvckNvbnNpZGVyYXRpb24oKSk7Ci0JCi0JLy8gMi4gQ2hlY2sgdGhhdCB0aGUgbWVzc2FnZUZvckNvbnNpZGVyYXRpb24gaXMgc2V0IGNvcnJlY3RseSBpZiB0aGVyZSBpcyBhIHZhbGlkYXRpb24gbWVzc2FnZS4KLQlFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlciBtYW5hZ2VyMiA9IG5ldyBFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlcigpOwotCVZhbGlkYXRpb25JbmZvIHZhbGluZm8yID0gbmV3IFZhbGlkYXRpb25JbmZvKG5hbWVzcGFjZTEpOwotCXZhbGluZm8yLmFkZEVycm9yKCJtZXNzYWdlIiwgMSwgMSwgbmFtZXNwYWNlMSk7Ci0JbWFuYWdlcjIuY29uc2lkZXJSZXBvcnRlZEVycm9yKHZhbGluZm8yLCAia2V5IiwgbnVsbCk7Ci0JYXNzZXJ0Tm90TnVsbCgiMi4gVGhlIG1lc3NhZ2VGb3JDb25zaWRlcmF0aW9uIGlzIG51bGwgd2hlbiBhIHZhbGlkYXRpb24gbWVzc2FnZSBleGlzdHMuIiwgbWFuYWdlcjIuZ2V0TWVzc2FnZUZvckNvbnNpZGVyYXRpb24oKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgYW4gZXJyb3IgY3VzdG9taXplciBpcyBvbmx5IGNhbGxlZCBmb3IgdGhlCi0gICAqIGNvcnJlY3QgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFcnJvclJlcG9ydGVkT25Db3JyZWN0RWxlbWVudCgpCi0gIHsKLQkgIElFcnJvck1lc3NhZ2VDdXN0b21pemVyIHRlc3RDdXN0b21pemVyID0gbmV3IElFcnJvck1lc3NhZ2VDdXN0b21pemVyKCkKLQkgIHsKLQkJICBwdWJsaWMgU3RyaW5nIGN1c3RvbWl6ZU1lc3NhZ2UoRWxlbWVudEluZm9ybWF0aW9uIGVsZW1lbnRJbmZvLCBTdHJpbmcga2V5LCBPYmplY3RbXSBhcmd1bWVudHMpCi0JCSAgewotCQkJICBpZihlbGVtZW50SW5mby5nZXRMb2NhbG5hbWUoKS5lcXVhbHMoImNoaWxkMSIpKQotCQkJICB7Ci0JCQkJICBmYWlsKCJBbiBlcnJvciB3YXMgcmVwb3J0ZWQgZm9yIHRoZSBjaGlsZDEgZWxlbWVudC4iKTsKLQkJCSAgfQotCQkJICByZXR1cm4gbnVsbDsKLQkJICB9Ci0JICB9OwotCSAgRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBFcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotCSAgcmVnaXN0cnkuYWRkRXJyb3JNZXNzYWdlQ3VzdG9taXplcigiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zaW1wbGVuZXN0ZWQiLCB0ZXN0Q3VzdG9taXplcik7Ci0JICB0cnkKLQkgIHsKLQkJICBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEggPSBYTUxWYWxpZGF0b3JUZXN0c1BsdWdpbi5nZXRQbHVnaW5Mb2NhdGlvbigpLnRvU3RyaW5nKCkgKyAiLyI7Ci0JCSAgU3RyaW5nIHVyaSA9ICJmaWxlOi8vLyIgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJ0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ3VzdG9tRXJyb3JSZXBvcnRlZE9uQ29ycmVjdEVsZW1lbnQvc2ltcGxlbmVzdGVkLnhtbCI7Ci0JCSAgCi0JCSAgWE1MVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBYTUxWYWxpZGF0b3IoKTsKLQkJICB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBudWxsLCBuZXcgWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24oKSk7Ci0JCSAgdmFsaWRhdG9yLnZhbGlkYXRlKHVyaSwgbnVsbCwgbmV3IFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCkpOwotCSAgfQotCSAgY2F0Y2goSU9FeGNlcHRpb24gZSkKLQkgIHsKLQkJICBmYWlsKCJBbiBleGNlcHRpb24gb2NjdXJyZWQgd2hpbGUgcnVubmluZyB0aGUgdGVzdDoiICsgZSk7Ci0JICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODIwMmJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQotLyoqCi0gKiBBIHdyYXBwZXIgZm9yIGNsYXNzIEVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXIgdG8gZmFjaWxpdGF0ZSB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIgZXh0ZW5kcyBFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyIAotewotICAvKioKLSAgICogR2V0IHRoZSBlbGVtZW50IGluZm9ybWF0aW9uIHN0YWNrLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSBlbGVtZW50IGluZm9ybWF0aW9uIHN0YWNrLgotICAgKi8KLSAgcHVibGljIFN0YWNrIGdldEVsZW1lbnRJbmZvcm1hdGlvblN0YWNrKCkKLSAgewotCXJldHVybiBlbGVtZW50SW5mb3JtYXRpb25TdGFjazsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgY3VycmVudCBtZXNzYWdlIGZvciBjb25zaWRlcmF0aW9uLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSBjdXJyZW50IG1lc3NhZ2UgZm9yIGNvbnNpZGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgRXJyb3JNZXNzYWdlSW5mb3JtYXRpb24gZ2V0TWVzc2FnZUZvckNvbnNpZGVyYXRpb24oKQotICB7Ci0JcmV0dXJuIG1lc3NhZ2VGb3JDb25zaWRlcmF0aW9uOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBjdXJyZW50IG1lc3NhZ2UgZm9yIGNvbnNpZGVyYXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZQotICAgKiAJCVRoZSBjdXJyZW50IG1lc3NhZ2UgZm9yIGNvbnNpZGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlRm9yQ29uc2lkZXJhdGlvbihFcnJvck1lc3NhZ2VJbmZvcm1hdGlvbiBtZXNzYWdlKQotICB7Ci0JbWVzc2FnZUZvckNvbnNpZGVyYXRpb24gPSBtZXNzYWdlOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjAzNDEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0vKioKLSAqIFRlc3RzIGZvciB0aGUgRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnkgY2xhc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBFcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgcHJpdmF0ZSBFcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeSByZWdpc3RyeSA9IG51bGw7Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCXJlZ2lzdHJ5ID0gbmV3IEVycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5V3JhcHBlcigpOwotICAgIHN1cGVyLnNldFVwKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdCB0aGUgQWRkRXJyb3JNZXNzYWdlQ3VzdG9taXplclRvUmVnaXN0cnkgbWV0aG9kIHdpdGggdGhlIGZvbGxvd2luZyB0ZXN0czoKLSAgICogMS4gVGVzdCB0aGF0IGFkZGluZyBhbiBlcnJvciBjdXN0b21pemVyIGZvciBhIG5hbWVzcGFjZSBpcyBzdWNjZXNzZnVsLgotICAgKiAyLiBUZXN0IHRoYXQgYWRkaW5nIHR3byBlcnJvciBjdXN0b21pemVycyBmb3IgYSBuYW1lc3BhY2UgcmV0dXJucyBib3RoIGN1c3RvbWl6ZXJzLgotICAgKiAzLiBUZXN0IHRoYXQgYWRkaW5nIGFuIGVudHJ5IHdpdGggYSBudWxsIG5hbWVzcGFjZSBhZGRzIHRoZSBlbnRyeSBmb3IgdGhlIGVtcHR5IHN0cmluZwotICAgKiAgICBuYW1lc3BhY2UuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QWRkRXJyb3JNZXNzYWdlQ3VzdG9taXplclRvUmVnaXN0cnkoKQotICB7Ci0gICAgLy8gMS4gVGVzdCB0aGF0IGFkZGluZyBhbiBlcnJvciBjdXN0b21pemVyIGZvciBhIG5hbWVzcGFjZSBpcyBzdWNjZXNzZnVsLgotCVN0cmluZyBuYW1lc3BhY2UxID0gImh0dHA6Ly9uYW1lc3BhY2UxIjsKLQlJRXJyb3JNZXNzYWdlQ3VzdG9taXplciBjdXN0b21pemVyID0gbmV3IElFcnJvck1lc3NhZ2VDdXN0b21pemVyKCl7Ci0gICAgICBwdWJsaWMgU3RyaW5nIGN1c3RvbWl6ZU1lc3NhZ2UoRWxlbWVudEluZm9ybWF0aW9uIGVsZW1lbnRJbmZvLCBTdHJpbmcgZXJyb3JLZXksIE9iamVjdFtdIGFyZ3VtZW50cykgCi0gICAgICB7Ci0gICAgICAgIC8vIFRoaXMgc3R1YiBmb3IgdGVzdGluZyBkb2VzIG5vdCByZXF1aXJlIGFuIGltcGxlbWVudGF0aW9uLgotCQlyZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICB9OwotICAgIHJlZ2lzdHJ5LmFkZEVycm9yTWVzc2FnZUN1c3RvbWl6ZXIobmFtZXNwYWNlMSwgY3VzdG9taXplcik7Ci0gICAgSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXJbXSByZWdpc3RlcmVkQ3VzdG9taXplcnMgPSByZWdpc3RyeS5nZXRDdXN0b21pemVycyhuYW1lc3BhY2UxKTsKLSAgICBhc3NlcnRFcXVhbHMoIjEuIFRoZXJlIHNob3VsZCBvbmx5IGJlIDEgY3VzdG9taXplciByZWdpc3RlcmVkIGZvciB0aGUgbmFtZXNwYWNlIGJ1dCB0aGVyZSBhcmUgIiArIHJlZ2lzdGVyZWRDdXN0b21pemVycy5sZW5ndGgsIDEsIHJlZ2lzdGVyZWRDdXN0b21pemVycy5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscygiMS4gVGhlIElFcnJvck1lc3NhZ2VDdXN0b21pemVyIHJldHVybmVkIGlzIG5vdCB0aGUgc2FtZSBvbmUgcmVnaXN0ZXJlZC4iLCBjdXN0b21pemVyLCByZWdpc3RlcmVkQ3VzdG9taXplcnNbMF0pOwotICAgIAotICAgIC8vIDIuIFRlc3QgdGhhdCBhZGRpbmcgdHdvIGVycm9yIGN1c3RvbWl6ZXJzIGZvciBhIG5hbWVzcGFjZSByZXR1cm5zIGJvdGggY3VzdG9taXplcnMuCi0JSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIgY3VzdG9taXplcjIgPSBuZXcgSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIoKXsKLSAgICAgIHB1YmxpYyBTdHJpbmcgY3VzdG9taXplTWVzc2FnZShFbGVtZW50SW5mb3JtYXRpb24gZWxlbWVudEluZm8sIFN0cmluZyBlcnJvcktleSwgT2JqZWN0W10gYXJndW1lbnRzKSAKLSAgICAgIHsKLSAgICAgICAgLy8gVGhpcyBzdHViIGZvciB0ZXN0aW5nIGRvZXMgbm90IHJlcXVpcmUgYW4gaW1wbGVtZW50YXRpb24uCi0JCXJldHVybiBudWxsOwotICAgICAgfQotICAgIH07Ci0gICAgcmVnaXN0cnkuYWRkRXJyb3JNZXNzYWdlQ3VzdG9taXplcihuYW1lc3BhY2UxLCBjdXN0b21pemVyMik7Ci0gICAgcmVnaXN0ZXJlZEN1c3RvbWl6ZXJzID0gcmVnaXN0cnkuZ2V0Q3VzdG9taXplcnMobmFtZXNwYWNlMSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIyLiBUaGVyZSBzaG91bGQgYmUgMiBjdXN0b21pemVycyByZWdpc3RlcmVkIGZvciB0aGUgbmFtZXNwYWNlIGJ1dCB0aGVyZSBhcmUgIiArIHJlZ2lzdGVyZWRDdXN0b21pemVycy5sZW5ndGgsIDIsIHJlZ2lzdGVyZWRDdXN0b21pemVycy5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscygiMi4gVGhlIGZpcnN0IElFcnJvck1lc3NhZ2VDdXN0b21pemVyIHJldHVybmVkIGlzIG5vdCB0aGUgc2FtZSBvbmUgcmVnaXN0ZXJlZC4iLCBjdXN0b21pemVyLCByZWdpc3RlcmVkQ3VzdG9taXplcnNbMF0pOwotICAgIGFzc2VydEVxdWFscygiMi4gVGhlIHNlY29uZCBJRXJyb3JNZXNzYWdlQ3VzdG9taXplciByZXR1cm5lZCBpcyBub3QgdGhlIHNhbWUgb25lIHJlZ2lzdGVyZWQuIiwgY3VzdG9taXplcjIsIHJlZ2lzdGVyZWRDdXN0b21pemVyc1sxXSk7Ci0gICAgCi0gICAgLy8gMy4gVGVzdCB0aGF0IGFkZGluZyBhbiBlbnRyeSB3aXRoIGEgbnVsbCBuYW1lc3BhY2UgYWRkcyB0aGUgZW50cnkgZm9yIHRoZSBlbXB0eSBzdHJpbmcgbmFtZXNwYWNlLgotICAgIHJlZ2lzdHJ5LmFkZEVycm9yTWVzc2FnZUN1c3RvbWl6ZXIobnVsbCwgY3VzdG9taXplcik7Ci0gICAgcmVnaXN0ZXJlZEN1c3RvbWl6ZXJzID0gcmVnaXN0cnkuZ2V0Q3VzdG9taXplcnMoIiIpOwotICAgIGFzc2VydEVxdWFscygiMy4gVGhlcmUgc2hvdWxkIGJlIDEgY3VzdG9taXplcnMgcmVnaXN0ZXJlZCBmb3IgdGhlIG5hbWVzcGFjZSBidXQgdGhlcmUgYXJlICIgKyByZWdpc3RlcmVkQ3VzdG9taXplcnMubGVuZ3RoLCAxLCByZWdpc3RlcmVkQ3VzdG9taXplcnMubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoIjMuIFRoZSBJRXJyb3JNZXNzYWdlQ3VzdG9taXplciByZXR1cm5lZCBpcyBub3QgdGhlIHNhbWUgb25lIHJlZ2lzdGVyZWQuIiwgY3VzdG9taXplciwgcmVnaXN0ZXJlZEN1c3RvbWl6ZXJzWzBdKTsKLSAgfQotCQotICAvKioKLSAgICogVGVzdCB0aGUgZ2V0Q3VzdG9taXplcnMgbWV0aG9kIHdpdGggdGhlIGZvbGxvd2luZyB0ZXN0czoKLSAgICogMS4gVGVzdCB0aGF0IHJlcXVlc3RpbmcgYW4gZXJyb3IgY3VzdG9taXplciBhcnJheSBmb3IgYSBuYW1lc3BhY2UgdGhhdCBoYXMgbm90IGJlZW4KLSAgICogICAgcmVnaXN0ZXJlZCBwcm9kdWNlcyBhbiBlbXB0eSBhcnJheS4KLSAgICogMi4gVGVzdCB0aGF0IHJlcXVlc3RpbmcgYW4gZXJyb3IgY3VzdG9taXplciBhcnJheSBmb3IgdGhlIG51bGwgbmFtZXNwYWNlIHJldHVybnMgdGhlCi0gICAqICAgIG9uZSByZWdpc3RlcmVkIGN1c3RvbWl6ZXIuCi0gICAqIDMuIFRlc3QgdGhhdCByZXF1ZXN0aW5nIGFuIGVycm9yIGN1c3RvbWl6ZXIgYXJyYXkgZm9yIHRoZSBlbXB0eSBzdHJpbmcgbmFtZXNwYWNlIHJldHVybnMKLSAgICogICAgdGhlIG9uZSByZWdpc3RlcmVkIGN1c3RvbWl6ZXIuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0R2V0Q3VzdG9taXplcnMoKQotICB7Ci0JLy8gMS4gVGVzdCB0aGF0IHJlcXVlc3RpbmcgYW4gZXJyb3IgY3VzdG9taXplciBsaXN0IGZvciBhIG5hbWVzcGFjZSB0aGF0IGhhcyBub3QgYmVlbgotCS8vIHJlZ2lzdGVyZWQgcHJvZHVjZXMgYW4gZW1wdHkgbGlzdC4KLQlJRXJyb3JNZXNzYWdlQ3VzdG9taXplcltdIGN1c3RvbWl6ZXJzID0gcmVnaXN0cnkuZ2V0Q3VzdG9taXplcnMoImh0dHA6Ly9ub25yZWdpc3RlcmVkbmFtZXNwYWNlIik7Ci0JYXNzZXJ0RXF1YWxzKCIxLiBUaGUgYXJyYXkgb2YgY3VzdG9taXplcnMgZm9yIGFuIHVucmVnaXN0ZXJlZCBuYW1lc3BhY2UgaXMgbm90IGVtcHR5LiIsIDAsIGN1c3RvbWl6ZXJzLmxlbmd0aCk7Ci0JCi0JLy8gMi4gVGVzdCB0aGF0IHJlcXVlc3RpbmcgYW4gZXJyb3IgY3VzdG9taXplciBhcnJheSBmb3IgdGhlIG51bGwgbmFtZXNwYWNlIHJldHVybnMgdGhlCi0JLy8gb25lIHJlZ2lzdGVyZWQgY3VzdG9taXplci4KLQlJRXJyb3JNZXNzYWdlQ3VzdG9taXplciBjdXN0b21pemVyID0gbmV3IElFcnJvck1lc3NhZ2VDdXN0b21pemVyKCl7Ci0JICBwdWJsaWMgU3RyaW5nIGN1c3RvbWl6ZU1lc3NhZ2UoRWxlbWVudEluZm9ybWF0aW9uIGVsZW1lbnRJbmZvLCBTdHJpbmcgZXJyb3JLZXksIE9iamVjdFtdIGFyZ3VtZW50cykgCi0JICB7Ci0JICAgIC8vIFRoaXMgc3R1YiBmb3IgdGVzdGluZyBkb2VzIG5vdCByZXF1aXJlIGFuIGltcGxlbWVudGF0aW9uLgotICAgICAgICByZXR1cm4gbnVsbDsKLQkgIH0KLQl9OwotCXJlZ2lzdHJ5LmFkZEVycm9yTWVzc2FnZUN1c3RvbWl6ZXIobnVsbCwgY3VzdG9taXplcik7Ci0JY3VzdG9taXplcnMgPSByZWdpc3RyeS5nZXRDdXN0b21pemVycyhudWxsKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBhcnJheSBvZiBjdXN0b21pemVycyBmb3IgYSByZWdpc3RlcmVkIGN1c3RvbWl6ZXIgZm9yIHRoZSBudWxsIG5hbWVzcGFjZSBkb2VzIG5vdCBjb250YWluIDEgY3VzdG9taXplci4iLCAxLCBjdXN0b21pemVycy5sZW5ndGgpOwotCWFzc2VydEVxdWFscygiMi4gVGhlIGN1c3RvbWl6ZXIgZm9yIHRoZSBudWxsIG5hbWVzcGFjZSB3YXMgbm90IHN1Y2Nlc3NmdWxseSByZXR1cm5lZC4iLCBjdXN0b21pemVyLCBjdXN0b21pemVyc1swXSk7Ci0JCi0JLy8gMy4gVGVzdCB0aGF0IHJlcXVlc3RpbmcgYW4gZXJyb3IgY3VzdG9taXplciBhcnJheSBmb3IgdGhlIGVtcHR5IHN0cmluZyBuYW1lc3BhY2UgcmV0dXJucwotCS8vICAgIHRoZSBvbmUgcmVnaXN0ZXJlZCBjdXN0b21pemVyIGZvciB0aGUgbnVsbCBuYW1lc3BhY2UuCi0JY3VzdG9taXplcnMgPSByZWdpc3RyeS5nZXRDdXN0b21pemVycygiIik7Ci0JYXNzZXJ0RXF1YWxzKCIzLiBUaGUgYXJyYXkgb2YgY3VzdG9taXplcnMgZm9yIGEgcmVnaXN0ZXJlZCBjdXN0b21pemVyIGZvciB0aGUgbnVsbCBuYW1lc3BhY2UgZG9lcyBub3QgY29udGFpbiAxIGN1c3RvbWl6ZXIgZm9yIHRoZSBlbXB0eSBzdHJpbmcgbmFtZXNwYWNlLiIsIDEsIGN1c3RvbWl6ZXJzLmxlbmd0aCk7Ci0JYXNzZXJ0RXF1YWxzKCIzLiBUaGUgY3VzdG9taXplciBmb3IgdGhlIGVtcHR5IHN0cmluZyBuYW1lc3BhY2Ugd2FzIG5vdCBzdWNjZXNzZnVsbHkgcmV0dXJuZWQuIiwgY3VzdG9taXplciwgY3VzdG9taXplcnNbMF0pOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5V3JhcHBlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnlXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMDJkNzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnlXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbjsKLQotLyoqCi0gKiBBIHdyYXBwZXIgZm9yIHRoZSBFcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeSBjbGFzcyB0byBhbGxvdyBmb3IgdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIEVycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5V3JhcHBlciBleHRlbmRzIEVycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5IAotewotICAvKioKLSAgICogUHVibGljIGNvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIEVycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5V3JhcHBlcigpCi0gIHsKLQlzdXBlcigpOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGY3ZTQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsLlhNTFZhbGlkYXRvclRlc3RzUGx1Z2luOwotCi0vKioKLSAqIFRlc3QgdGhlIEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZSBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgLyoqCi0gICAqIFRlc3QgdGhlIGxvYWRDdXN0b21pemVyIG1ldGhvZCB3aXRoIHRoZSBmb2xsb3dpbmcgdGVzdHM6Ci0gICAqIDEuIFRlc3QgdGhhdCBhIHZhbGlkIGJ1bmRsZSBhIGNsYXNzIHN1Y2NlZWRzLgotICAgKiAyLiBUZXN0IHRoYXQgYW4gaW52YWxpZCBjbGFzcyBmYWlscyBhbmQga2VlcHMgdGhlIGN1c3RvbWl6ZXIgc2V0IHRvIG51bGwuCi0gICAqIDMuIFRlc3QgdGhhdCBhIG51bGwgYnVuZGxlIGZhaWxzIGFuZCBrZWVwcyB0aGUgY3VzdG9taXplciBzZXQgdG8gbnVsbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2FkQ3VzdG9taXplcigpCi0gIHsKLQkvLyAxLiBUZXN0IHRoYXQgYSB2YWxpZCBidW5kbGUgYSBjbGFzcyBzdWNjZWVkcy4KLQlFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyIGRlbGVnYXRlID0gbmV3IEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIoWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0QnVuZGxlKCksICJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb24uU2FtcGxlRXJyb3JNZXNzYWdlQ3VzdG9taXplciIpOwotCWRlbGVnYXRlLmxvYWRDdXN0b21pemVyKCk7Ci0JYXNzZXJ0Tm90TnVsbCgiMS4gVGhlIGN1c3RvbWl6ZXIgbG9hZGVkIHdhcyBudWxsIGZvciBhIHZhbGlkIGN1c3RvbWl6ZXIgYW5kIGJ1bmRsZS4iLCBkZWxlZ2F0ZS5nZXRDdXN0b21pemVyKCkpOwotCQotCS8vIDIuIFRlc3QgdGhhdCBhbiBpbnZhbGlkIGNsYXNzIGZhaWxzIGFuZCBrZWVwcyB0aGUgY3VzdG9taXplciBzZXQgdG8gbnVsbC4KLQlFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyIGRlbGVnYXRlMiA9IG5ldyBFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyKFhNTFZhbGlkYXRvclRlc3RzUGx1Z2luLmdldFBsdWdpbigpLmdldEJ1bmRsZSgpLCAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uLk5vbmV4aXN0YW50RXJyb3JNZXNzYWdlQ3VzdG9taXplciIpOwotCWRlbGVnYXRlMi5sb2FkQ3VzdG9taXplcigpOwotCWFzc2VydE51bGwoIjIuIFRoZSBjdXN0b21pemVyIGxvYWRlZCB3YXMgbm90IG51bGwgZm9yIGFuIGludmFsaWQgY3VzdG9taXplciBjbGFzcy4iLCBkZWxlZ2F0ZTIuZ2V0Q3VzdG9taXplcigpKTsKLQkKLQkvLyAzLiBUZXN0IHRoYXQgYSBudWxsIGJ1bmRsZSBmYWlscyBhbmQga2VlcHMgdGhlIGN1c3RvbWl6ZXIgc2V0IHRvIG51bGwuCi0JRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlciBkZWxlZ2F0ZTMgPSBuZXcgRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlcihudWxsLCAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uLlNhbXBsZUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIiKTsKLQlkZWxlZ2F0ZTMubG9hZEN1c3RvbWl6ZXIoKTsKLQlhc3NlcnROdWxsKCIzLiBUaGUgY3VzdG9taXplciBsb2FkZWQgd2FzIG5vdCBudWxsIGZvciBhIG51bGwgYnVuZGxlLiIsIGRlbGVnYXRlMy5nZXRDdXN0b21pemVyKCkpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGUgY3VzdG9taXplTWVzc2FnZSBtZXRob2Qgd2l0aCB0aGUgZm9sbG93aW5nIHRlc3RzOgotICAgKiAxLiBUZXN0IHRoYXQgdGhlIG1lc3NhZ2UgcmV0dXJuZWQgaXMgY29ycmVjdCBmb3IgYSB2YWxpZCBjdXN0b21pemVyLgotICAgKiAyLiBUZXN0IHRoYXQgdGhlIG1lc3NhZ2UgcmV0dXJuZWQgaXMgbnVsbCBmb3IgYW4gaW52YWxpZCBjdXN0b21pemVyIGNsYXNzLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEN1c3RvbWl6ZU1lc3NhZ2UoKQotICB7Ci0gICAgLy8gMS4gVGVzdCB0aGF0IHRoZSBtZXNzYWdlIHJldHVybmVkIGlzIGNvcnJlY3QgZm9yIGEgdmFsaWQgY3VzdG9taXplci4KLSAgICBFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyIGRlbGVnYXRlID0gbmV3IEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIoWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0QnVuZGxlKCksICJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb24uU2FtcGxlRXJyb3JNZXNzYWdlQ3VzdG9taXplciIpOwotICAgIFN0cmluZyBtZXNzYWdlID0gZGVsZWdhdGUuY3VzdG9taXplTWVzc2FnZShudWxsLCBudWxsLCBudWxsKTsKLQlhc3NlcnRFcXVhbHMoIjEuIFRoZSBtZXNzYWdlIHJldHVybmVkIHdhcyBub3QgQUFBQS4iLCAiQUFBQSIsIG1lc3NhZ2UpOwotCQotCS8vIDIuIFRlc3QgdGhhdCB0aGUgbWVzc2FnZSByZXR1cm5lZCBpcyBudWxsIGZvciBhbiBpbnZhbGlkIGN1c3RvbWl6ZXIgY2xhc3MuCi0JRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlciBkZWxlZ2F0ZTIgPSBuZXcgRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlcihYTUxWYWxpZGF0b3JUZXN0c1BsdWdpbi5nZXRQbHVnaW4oKS5nZXRCdW5kbGUoKSwgIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbi5Ob25leGlzdGFudEVycm9yTWVzc2FnZUN1c3RvbWl6ZXIiKTsKLQltZXNzYWdlID0gZGVsZWdhdGUyLmN1c3RvbWl6ZU1lc3NhZ2UobnVsbCwgbnVsbCwgbnVsbCk7Ci0JYXNzZXJ0TnVsbCgiMi4gVGhlIG1lc3NhZ2UgcmV0dXJuZWQgd2FzIG5vdCBudWxsIGZvciBhbiBpbnZhbGlkIGN1c3RvbWl6ZXIuIiwgbWVzc2FnZSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI4NzE2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbjsKLQotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogQSB3cmFwcGVyIG9mIHRoZSBjbGFzcyBFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGUgdG8gZmFjaWxpdGF0ZSB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlciBleHRlbmRzIEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZSAKLXsKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIoQnVuZGxlIGJ1bmRsZSwgU3RyaW5nIGNsYXNzbmFtZSkKLSAgewotCXN1cGVyKGJ1bmRsZSwgY2xhc3NuYW1lKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbi5FcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGUjbG9hZEN1c3RvbWl6ZXIoKQotICAgKi8KLSAgcHVibGljIHZvaWQgbG9hZEN1c3RvbWl6ZXIoKQotICB7Ci0Jc3VwZXIubG9hZEN1c3RvbWl6ZXIoKTsKLSAgfQotICAKLSAgcHVibGljIElFcnJvck1lc3NhZ2VDdXN0b21pemVyIGdldEN1c3RvbWl6ZXIoKQotICB7Ci0JcmV0dXJuIGN1c3RvbWl6ZXI7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vU2FtcGxlRXJyb3JNZXNzYWdlQ3VzdG9taXplci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vU2FtcGxlRXJyb3JNZXNzYWdlQ3VzdG9taXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjYxODI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL1NhbXBsZUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uOwotCi0vKioKLSAqIEEgc2FtcGxlIGVycm9yIG1lc3NhZ2UgY3VzdG9taXplciBmb3IgdGVzdGluZy4gVGhpcyBjdXN0b21pemVyIGhhcyBhIHNpbXBsZQotICogaW1wbGVtZW50YXRpb24gdGhhdCBzaW1wbGUgcmV0dXJucyB0aGUgc3RyaW5nICJBQUFBIi4KLSAqLwotcHVibGljIGNsYXNzIFNhbXBsZUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIgaW1wbGVtZW50cyBJRXJyb3JNZXNzYWdlQ3VzdG9taXplciB7Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb24uSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIjY3VzdG9taXplTWVzc2FnZShvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb24uRWxlbWVudEluZm9ybWF0aW9uLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0W10pCi0JICovCi0JcHVibGljIFN0cmluZyBjdXN0b21pemVNZXNzYWdlKEVsZW1lbnRJbmZvcm1hdGlvbiBlbGVtZW50SW5mbywKLQkJCVN0cmluZyBlcnJvcktleSwgT2JqZWN0W10gYXJndW1lbnRzKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuICJBQUFBIjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0FsbFhNTFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxYTUxUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDI3NmVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0FsbFhNTFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25UZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuVmFsaWRhdG9yVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlhNTE1lc3NhZ2VJbmZvSGVscGVyVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlhNTFZhbGlkYXRvclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uLkVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbi5FcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uLkVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVRlc3Q7Ci0KLS8qKgotICogVGhlIHJvb3QgdGVzdCBzdWl0ZSB0aGF0IGNvbnRhaW5zIGFsbCBvdGhlciBYTUwgdmFsaWRhdG9yIHRlc3Qgc3VpdGVzLgotICovCi1wdWJsaWMgY2xhc3MgQWxsWE1MVGVzdHMgZXh0ZW5kcyBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlCi17Ci0gIC8qKgotICAgKiBDcmVhdGUgdGhpcyB0ZXN0IHN1aXRlLgotICAgKiAKLSAgICogQHJldHVybiBUaGlzIHRlc3Qgc3VpdGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBBbGxYTUxUZXN0cygpOwotICB9Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IKLSAgICovCi0gIHB1YmxpYyBBbGxYTUxUZXN0cygpCi0gIHsKLSAgICBzdXBlcigiWE1MVGVzdHNUZXN0U3VpdGUiKTsKLSAgICBhZGRUZXN0KFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdC5zdWl0ZSgpKTsKLSAgICBhZGRUZXN0KFZhbGlkYXRvclRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChYTUxNZXNzYWdlSW5mb0hlbHBlclRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChYTUxWYWxpZGF0b3JUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoWE1MRXhhbXBsZXNUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoQnVnRml4ZXNUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoUGF0aHNUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3RTdWl0ZShFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyVGVzdC5jbGFzcyk7Ci0gICAgYWRkVGVzdFN1aXRlKEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVRlc3QuY2xhc3MpOwotICAgIGFkZFRlc3RTdWl0ZShFcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeVRlc3QuY2xhc3MpOwotICAgIGFkZFRlc3RTdWl0ZShMaW5lTnVtYmVyQWRqdXN0bWVudHNUZXN0LmNsYXNzKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0Jhc2VUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYzE3YzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuWE1MVmFsaWRhdG9yOwotCi0KLS8qKgotICogQmFzZSB0ZXN0IGNhc2UgY2xhc3Mgd2hpY2ggcHJvdmlkZXMgbWV0aG9kcyB0byAKLSAqIC0gY3JlYXRlIGxvZ3MKLSAqIC0gcmVhZCBmcm9tIGxvZ3MKLSAqIC0gcnVuIGxvZyBjb21wYXJpc29uIHRlc3RzCi0gKi8KLXB1YmxpYyBjbGFzcyBCYXNlVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIEZJTEVfUFJPVE9DT0wgPSAiZmlsZTovLy8iOyAKLSAgcHJvdGVjdGVkIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSDsKLSAgcHJvdGVjdGVkIFN0cmluZyBTQU1QTEVTX0RJUiA9ICJ0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvIjsKLSAgcHJvdGVjdGVkIFhNTFZhbGlkYXRvciB2YWxpZGF0b3IgPSBYTUxWYWxpZGF0b3IuZ2V0SW5zdGFuY2UoKTsKLSAgcHJvdGVjdGVkIFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFhNTFZhbGlkYXRvclRlc3RzUGx1Z2luLmdldFBsdWdpbkxvY2F0aW9uKCkudG9TdHJpbmcoKSArICIvIjsKLSAgICBjb25maWd1cmF0aW9uID0gbmV3IFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLldBUk5fTk9fR1JBTU1BUiwgZmFsc2UpOwotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKCJVbmFibGUgdG8gc2V0IHRoZSBmZWF0dXJlIG9uIHRoZSBYTUwgdmFsaWRhdGlvbiBjb25maWd1cmF0aW9uLiIpOwotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIFJ1biBhIHZhbGlkYXRvciB0ZXN0LiBUaGUgdGVzdCB3aWxsIHJ1biB0aGUgdmFsaWRhdG9yLCBhbmQgY29tcGFyZSB0aGUgdmFsaWRhdGlvbiByZXN1bHQgd2l0aAotICAgKiB0aGUgaW5mb3JtYXRpb24gc3BlY2lmaWVkLgotICAgKiAKLSAgICogQHBhcmFtIHRlc3RmaWxlIFRoZSBmaWxlIHRvIHJ1biB0aGUgdmFsaWRhdG9yIHRlc3Qgb24uCi0gICAqIEBwYXJhbSBrZXlzIFRoZSBsaXN0IG9mIGFsbG93cyBtZXNzYWdlIGtleXMuCi0gICAqIEBwYXJhbSBudW1FcnJvcnMgVGhlIG51bWJlciBvZiBleHBlY3RlZCBlcnJvcnMuCi0gICAqIEBwYXJhbSBudW1XYXJuaW5ncyBUaGUgbnVtYmVyIG9mIGV4cGVjdGVkIHdhcm5pbmdzLgotICAgKi8KLSAgcHVibGljIHZvaWQgcnVuVGVzdChTdHJpbmcgdGVzdGZpbGUsIExpc3Qga2V5cywgaW50IG51bUVycm9ycywgaW50IG51bVdhcm5pbmdzKQotICB7Ci0gICAgVmFsaWRhdGlvblJlcG9ydCB2YWxyZXBvcnQgPSB2YWxpZGF0b3IudmFsaWRhdGUodGVzdGZpbGUsIG51bGwsIGNvbmZpZ3VyYXRpb24pOwotCQotCVZhbGlkYXRpb25NZXNzYWdlW10gdmFsbWVzc2FnZXMgPSB2YWxyZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCk7Ci0gICAgaW50IG51bW1lc3NhZ2VzID0gdmFsbWVzc2FnZXMubGVuZ3RoOwotCQotCWludCBlcnJvckNvdW50ID0gMDsKLQlpbnQgd2FybmluZ0NvdW50ID0gMDsKLQotICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1tZXNzYWdlczsgaSsrKQotICAgIHsKLSAgICAgIFZhbGlkYXRpb25NZXNzYWdlIHZhbG1lcyA9IHZhbG1lc3NhZ2VzW2ldOwotCSAgU3RyaW5nIGtleSA9IHZhbG1lcy5nZXRLZXkoKTsKLQkgIGFzc2VydFRydWUoIlRoZSBtZXNzYWdlIGtleSAiICsga2V5ICsgIiBpcyBub3QgY29ycmVjdC4iLCBrZXlzLmNvbnRhaW5zKGtleSkpOwotICAgICAgaWYodmFsbWVzLmdldFNldmVyaXR5KCkgPT0gVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0xPVykKLSAgICAgIHsKLSAgICAgICAgd2FybmluZ0NvdW50Kys7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGVycm9yQ291bnQrKzsKLSAgICAgIH0KLSAgICB9Ci0gICAgYXNzZXJ0RXF1YWxzKGVycm9yQ291bnQgKyAiIGVycm9ycyB3ZXJlIHJlcG9ydGVkIGJ1dCAiICsgbnVtRXJyb3JzICsgIiBlcnJvcnMgd2VyZSBleHBlY3RlZC4iLCBudW1FcnJvcnMsIGVycm9yQ291bnQpOwotCWFzc2VydEVxdWFscyh3YXJuaW5nQ291bnQgKyAiIHdhcm5pbmdzIHdlcmUgcmVwb3J0ZWQgYnV0ICIgKyBudW1XYXJuaW5ncyArICIgd2FybmluZ3Mgd2VyZSBleHBlY3RlZC4iLCBudW1XYXJuaW5ncywgd2FybmluZ0NvdW50KTsKLSAgfQotICAKLSAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CdWdGaXhlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0J1Z0ZpeGVzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjVlMDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0J1Z0ZpeGVzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbjsKLS8qKgotICogVGVzdCBjbGFzcyBmb3IgdGhlIFhNTCB2YWxpZGF0b3IgdG8gdGVzdCBidWcgZml4ZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBCdWdGaXhlc1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVUdGSVhFU19ESVIgPSAiYnVnZml4ZXMvIjsKLQotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShCdWdGaXhlc1Rlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvYnVnZml4ZXMvUm9vdE5vTlNDaGlsZE5TL1Jvb3ROb05TQ2hpbGROUy54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Um9vdE5vTlNDaGlsZE5TKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlJvb3ROb05TQ2hpbGROUyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiUm9vdE5vTlNDaGlsZE5TLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvYnVnZml4ZXMvRW1wdHlGaWxlL0VtcHR5LnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFbXB0eSgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJFbXB0eSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiRW1wdHlGaWxlLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL1ZhbGlkYXRlV2l0aERURFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZVdpdGhEVERWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJWYWxpZGF0ZVdpdGhEVERWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiVmFsaWRhdGVXaXRoRFRELyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL1ZhbGlkYXRlV2l0aERUREludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlV2l0aERUREludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiVmFsaWRhdGVXaXRoRFRESW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiVmFsaWRhdGVXaXRoRFRELyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1TR19DT05URU5UX0lOVkFMSUQiKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9idWdmaXhlcy9Ob3RXZWxsRm9ybWVkL05vdFdlbGxGb3JtZWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE5vdFdlbGxGb3JtZWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiTm90V2VsbEZvcm1lZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiTm90V2VsbEZvcm1lZC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJFVGFnUmVxdWlyZWQiKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9idWdmaXhlcy9DYW5ub3RMb2NhdGVEVEQvSW52YWxpZEhvc3QueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEludmFsaWRIb3N0KCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkludmFsaWRIb3N0IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJDYW5ub3RMb2NhdGVEVEQvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiRklMRV9OT1RfRk9VTkQiKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAxOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9idWdmaXhlcy9DYW5ub3RMb2NhdGVEVEQvSW52YWxpZExvY2F0aW9uLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkTG9jYXRpb24oKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiSW52YWxpZExvY2F0aW9uIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJDYW5ub3RMb2NhdGVEVEQvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiRklMRV9OT1RfRk9VTkQiKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAxOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9idWdmaXhlcy9Ob0dyYW1tYXIvTm9HcmFtbWFyLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROb0dyYW1tYXIoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiTm9HcmFtbWFyIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJOb0dyYW1tYXIvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTk9fR1JBTU1BUl9GT1VORCIpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDE7Ci0KLQl0cnkKLQl7Ci0JICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uV0FSTl9OT19HUkFNTUFSLCB0cnVlKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIHNldCBjb25maWd1cmF0aW9uIFdBUk5fTk9fR1JBTU1BUi4iKTsKLQl9Ci0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLldBUk5fTk9fR1JBTU1BUiwgZmFsc2UpOwotCX0KLQljYXRjaChFeGNlcHRpb24gZSkKLQl7Ci0JICBmYWlsKCJVbmFibGUgdG8gc2V0IGNvbmZpZ3VyYXRpb24gV0FSTl9OT19HUkFNTUFSLiIpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL2J1Z2ZpeGVzL05vTmFtZXNwYWNlU2NoZW1hL05vTmFtZXNwYWNlU2NoZW1hLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROb05hbWVzcGFjZVNjaGVtYSgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJOb05hbWVzcGFjZVNjaGVtYSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiTm9OYW1lc3BhY2VTY2hlbWEvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYiIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvTGluZU51bWJlckFkanVzdG1lbnRzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvTGluZU51bWJlckFkanVzdG1lbnRzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWI2NTA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0xpbmVOdW1iZXJBZGp1c3RtZW50c1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uUmVwb3J0OwotCi0vKioKLSAqIEEgdGVzdCBjbGFzcyB0byB0ZXN0IHRoZSBsaW5lIG51bWJlciBhZGp1c3RtZW50cyBtYWRlIGluIHRoZSBYTUwgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgY2xhc3MgTGluZU51bWJlckFkanVzdG1lbnRzVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMSU5FX05VTUJFUl9BREpVU1RNRU5UU19ESVIgPSAiTGluZU51bWJlckFkanVzdG1lbnRzLyI7Ci0JCi0JLyoqCi0JICogUnVuIGEgdmFsaWRhdG9yIHRlc3QuIFRoZSB0ZXN0IHdpbGwgcnVuIHRoZSB2YWxpZGF0b3IsIGFuZCBjb21wYXJlIHRoZSB2YWxpZGF0aW9uIHJlc3VsdCB3aXRoCi0JICogdGhlIGluZm9ybWF0aW9uIHNwZWNpZmllZC4KLQkgKiAKLQkgKiBAcGFyYW0gdGVzdGZpbGUgCi0JICogCQkJVGhlIGZpbGUgdG8gcnVuIHRoZSB2YWxpZGF0b3IgdGVzdCBvbi4KLQkgKiBAcGFyYW0ga2V5IAotCSAqIAkJCVRoZSBtZXNzYWdlIGtleS4KLQkgKiBAcGFyYW0gbnVtRXJyb3JzIAotCSAqIAkJCVRoZSBudW1iZXIgb2YgZXhwZWN0ZWQgZXJyb3JzLgotCSAqIEBwYXJhbSBudW1XYXJuaW5ncyAKLQkgKiAJCQlUaGUgbnVtYmVyIG9mIGV4cGVjdGVkIHdhcm5pbmdzLgotCSAqIEBwYXJhbSBsaW5lbm8KLQkgKiAJCQlUaGUgbGluZSBudW1iZXIgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGxvY2F0ZWQgb24uCi0JICogQHBhcmFtIGNvbHVtbm5vCi0JICogCQkJVGhlIGNvbHVtbiBudW1iZXIgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGxvY2F0ZWQgb24uCi0JICovCi0JcHVibGljIHZvaWQgcnVuVGVzdChTdHJpbmcgdGVzdGZpbGUsIFN0cmluZyBrZXksIGludCBudW1FcnJvcnMsIGludCBudW1XYXJuaW5ncywgaW50IGxpbmVubywgaW50IGNvbHVtbm5vKQotCXsKLQkgIFZhbGlkYXRpb25SZXBvcnQgdmFscmVwb3J0ID0gdmFsaWRhdG9yLnZhbGlkYXRlKHRlc3RmaWxlLCBudWxsLCBjb25maWd1cmF0aW9uKTsKLQkJCi0gICAgICBWYWxpZGF0aW9uTWVzc2FnZVtdIHZhbG1lc3NhZ2VzID0gdmFscmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpOwotCSAgaW50IG51bW1lc3NhZ2VzID0gdmFsbWVzc2FnZXMubGVuZ3RoOwotCQkKLSAgICAgIGludCBlcnJvckNvdW50ID0gMDsKLQkgIGludCB3YXJuaW5nQ291bnQgPSAwOwotCi0JICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtbWVzc2FnZXM7IGkrKykKLQkgIHsKLQkgICAgVmFsaWRhdGlvbk1lc3NhZ2UgdmFsbWVzID0gdmFsbWVzc2FnZXNbaV07Ci0JCVN0cmluZyBtZXNza2V5ID0gdmFsbWVzLmdldEtleSgpOwotCQlhc3NlcnRUcnVlKCJUaGUgbWVzc2FnZSBrZXkgIiArIGtleSArICIgaXMgbm90IGNvcnJlY3QuIiwga2V5LmVxdWFscyhtZXNza2V5KSk7Ci0JCWFzc2VydEVxdWFscygiVGhlIGxpbmUgbnVtYmVyIGlzIGluY29ycmVjdC4iLCBsaW5lbm8sIHZhbG1lcy5nZXRMaW5lTnVtYmVyKCkpOwotCQlhc3NlcnRFcXVhbHMoIlRoZSBjb2x1bW4gbnVtYmVyIGlzIGluY29ycmVjdC4iLCBjb2x1bW5ubywgdmFsbWVzLmdldENvbHVtbk51bWJlcigpKTsKLQkgICAgaWYodmFsbWVzLmdldFNldmVyaXR5KCkgPT0gVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0xPVykKLQkgICAgewotCSAgICAgIHdhcm5pbmdDb3VudCsrOwotCSAgICB9Ci0JICAgIGVsc2UKLQkgICAgewotCSAgICAgIGVycm9yQ291bnQrKzsKLQkgICAgfQotCSAgfQotCSAgYXNzZXJ0RXF1YWxzKGVycm9yQ291bnQgKyAiIGVycm9ycyB3ZXJlIHJlcG9ydGVkIGJ1dCAiICsgbnVtRXJyb3JzICsgIiBlcnJvcnMgd2VyZSBleHBlY3RlZC4iLCBudW1FcnJvcnMsIGVycm9yQ291bnQpOwotICAgICAgYXNzZXJ0RXF1YWxzKHdhcm5pbmdDb3VudCArICIgd2FybmluZ3Mgd2VyZSByZXBvcnRlZCBidXQgIiArIG51bVdhcm5pbmdzICsgIiB3YXJuaW5ncyB3ZXJlIGV4cGVjdGVkLiIsIG51bVdhcm5pbmdzLCB3YXJuaW5nQ291bnQpOwotCX0KLQkKLQkvKioKLQkgKiBUZXN0IC9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMueG1sLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RjdmNjb21wbGV4dHlwZTIzKCkKLQl7Ci0JICBTdHJpbmcgdGVzdG5hbWUgPSAiY3ZjLWNvbXBsZXgtdHlwZS4yLjMiOwotCSAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBMSU5FX05VTUJFUl9BREpVU1RNRU5UU19ESVIgKyAiY3ZjLWNvbXBsZXgtdHlwZS4yLjMvIiArIHRlc3RuYW1lICsgIi54bWwiOwotICAgICAgU3RyaW5nIGtleSA9ICJjdmMtY29tcGxleC10eXBlLjIuMyI7Ci0JICBpbnQgbGluZW5vID0gMjsKLQkgIGludCBjb2x1bW5ubyA9IDE4NzsKLQkgIGludCBudW1FcnJvcnMgPSAxOwotCSAgaW50IG51bVdhcm5pbmdzID0gMDsKLQotCSAgcnVuVGVzdCh0ZXN0ZmlsZSwga2V5LCBudW1FcnJvcnMsIG51bVdhcm5pbmdzLCBsaW5lbm8sIGNvbHVtbm5vKTsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCAvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi54bWwuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdGN2Y2NvbXBsZXh0eXBlMjRiKCkKLQl7Ci0JICBTdHJpbmcgdGVzdG5hbWUgPSAiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYiI7Ci0JICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIExJTkVfTlVNQkVSX0FESlVTVE1FTlRTX0RJUiArICJjdmMtY29tcGxleC10eXBlLjIuNC5iLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLSAgICAgIFN0cmluZyBrZXkgPSAiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYiI7Ci0JICBpbnQgbGluZW5vID0gMjsKLQkgIGludCBjb2x1bW5ubyA9IDE4NzsKLQkgIGludCBudW1FcnJvcnMgPSAxOwotCSAgaW50IG51bVdhcm5pbmdzID0gMDsKLQotCSAgcnVuVGVzdCh0ZXN0ZmlsZSwga2V5LCBudW1FcnJvcnMsIG51bVdhcm5pbmdzLCBsaW5lbm8sIGNvbHVtbm5vKTsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCAvTGluZU51bWJlckFkanVzdG1lbnRzL01TR19DT05URU5UX0lOQ09NUExFVEUvTVNHX0NPTlRFTlRfSU5DT01QTEVURS54bWwuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1zZ0NvbnRlbnRJbmNvbXBsZXRlKCkKLQl7Ci0JICBTdHJpbmcgdGVzdG5hbWUgPSAiTVNHX0NPTlRFTlRfSU5DT01QTEVURSI7Ci0JICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIExJTkVfTlVNQkVSX0FESlVTVE1FTlRTX0RJUiArICJNU0dfQ09OVEVOVF9JTkNPTVBMRVRFLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLSAgICAgIFN0cmluZyBrZXkgPSAiTVNHX0NPTlRFTlRfSU5DT01QTEVURSI7Ci0JICBpbnQgbGluZW5vID0gNjsKLQkgIGludCBjb2x1bW5ubyA9IDc7Ci0JICBpbnQgbnVtRXJyb3JzID0gMTsKLQkgIGludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQkgIHJ1blRlc3QodGVzdGZpbGUsIGtleSwgbnVtRXJyb3JzLCBudW1XYXJuaW5ncywgbGluZW5vLCBjb2x1bW5ubyk7Ci0JfQotCQotCS8qKgotCSAqIFRlc3QgL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9NU0dfQ09OVEVOVF9JTlZBTElEL01TR19DT05URU5UX0lOVkFMSUQueG1sLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNc2dDb250ZW50SW52YWxpZCgpCi0JewotCSAgU3RyaW5nIHRlc3RuYW1lID0gIk1TR19DT05URU5UX0lOVkFMSUQiOwotCSAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBMSU5FX05VTUJFUl9BREpVU1RNRU5UU19ESVIgKyAiTVNHX0NPTlRFTlRfSU5WQUxJRC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0gICAgICBTdHJpbmcga2V5ID0gIk1TR19DT05URU5UX0lOVkFMSUQiOwotCSAgaW50IGxpbmVubyA9IDY7Ci0JICBpbnQgY29sdW1ubm8gPSA3OwotCSAgaW50IG51bUVycm9ycyA9IDE7Ci0JICBpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JICBydW5UZXN0KHRlc3RmaWxlLCBrZXksIG51bUVycm9ycywgbnVtV2FybmluZ3MsIGxpbmVubywgY29sdW1ubm8pOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1BhdGhzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvUGF0aHNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MjQ1ZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvUGF0aHNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLS8qKgotICogVGVzdCBjbGFzcyBmb3IgdGhlIFhNTCB2YWxpZGF0b3IgdG8gdGVzdCBidWcgZml4ZXMuCi0gKiAKLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsLCBJQk0KLSAqLwotcHVibGljIGNsYXNzIFBhdGhzVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQoteyAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBBVEhTX0RJUiA9ICJQYXRocy8iOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFBhdGhzVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJTcGFjZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUluUGF0aEludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2VJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXQpSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDbG9zZUJyYWNrZXRJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJDbG9zZUJyYWNrZXRJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldClJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXQpSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDbG9zZUJyYWNrZXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDbG9zZUJyYWNrZXRJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJDbG9zZUJyYWNrZXQpSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJEYXNoSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJblBhdGhJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkRhc2hJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkRhc2gtSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJEYXNoLUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluUGF0aFZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJFeGNsYW1hdGlvbkluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvbiFJbkZpbGVuYW1lVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEV4Y2xhbWF0aW9uSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uIUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldChJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbkJyYWNrZXRJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldChJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuQnJhY2tldEluUGF0aEludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuQnJhY2tldEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldChJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbkJyYWNrZXRJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UGVyaW9kQnJhY2tldEluUGF0aFZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlBlcmlvZEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RCcmFja2V0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2RJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RCcmFja2V0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlBlcmlvZC5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54bWwuCi0gICAqLyAKLSAgcHVibGljIHZvaWQgdGVzdFBlcmlvZEJyYWNrZXRJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZSdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZSdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RRdW90ZUluUGF0aEludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiUXVvdGVJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGUnSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RRdW90ZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZSdJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZSdJbkZpbGVuYW1lSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZSdJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2UgSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNwYWNlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2UgSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluUGF0aFZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFRpbGRlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJUaWxkZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFRpbGRlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlfkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlfkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmRlcnNjb3JlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluUGF0aFZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0SW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hNTEV4YW1wbGVzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWE1MRXhhbXBsZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhODE0NmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWE1MRXhhbXBsZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLS8qKgotICogVGVzdCBjbGFzcyBmb3IgdGhlIFhNTCB2YWxpZGF0b3IgdG8gdGVzdCB0aGUgWE1MUHJvamVjdC4KLSAqIAotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwsIElCTQotICovCi1wdWJsaWMgY2xhc3MgWE1MRXhhbXBsZXNUZXN0IGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17IAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MRXhhbXBsZXNfRElSID0gIlhNTEV4YW1wbGVzLyI7Ci0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFhNTEV4YW1wbGVzVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YTUxFeGFtcGxlcy9JbnZvaWNlL0ludm9pY2UueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEludm9pY2UoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiSW52b2ljZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYTUxFeGFtcGxlc19ESVIgKyAiSW52b2ljZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hNTEV4YW1wbGVzL0ludm9pY2VSZW1vdGUvSW52b2ljZS54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW52b2ljZVJlbW90ZSgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJJbnZvaWNlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhNTEV4YW1wbGVzX0RJUiArICJJbnZvaWNlUmVtb3RlLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9ICAKLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YTUxFeGFtcGxlcy9JbnZvaWNlUmVtb3RlL0ludm9pY2UueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEludm9pY2VSZW1vdGVJbmRpcmVjdCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJJbnZvaWNlSW5kaXJlY3QiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWE1MRXhhbXBsZXNfRElSICsgIkludm9pY2VSZW1vdGUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0gICAgCi0gIAotICAvKioKLSAgICogVGVzdCAvWE1MRXhhbXBsZXMvSW52b2ljZUludmFsaWQvSW52b2ljZS54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW52b2ljZUludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiSW52b2ljZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYTUxFeGFtcGxlc19ESVIgKyAiSW52b2ljZUludmFsaWQvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiRklMRV9OT1RfRk9VTkQiKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAxOwotICAgIAotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWE1MRXhhbXBsZXMvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDYXRhbG9ndWUoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiQ2F0YWxvZ3VlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhNTEV4YW1wbGVzX0RJUiArICJQdWJsaWNhdGlvbkNhdGFsb2d1ZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hNTEV4YW1wbGVzL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlSW52YWxpZC9DYXRhbG9ndWUueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENhdGFsb2d1ZUludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiQ2F0YWxvZ3VlSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYTUxFeGFtcGxlc19ESVIgKyAiUHVibGljYXRpb25DYXRhbG9ndWVJbnZhbGlkLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIkZJTEVfTk9UX0ZPVU5EIik7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMTsKLSAgICAKLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hNTEV4YW1wbGVzL2oyZWUvd2ViLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RXZWIoKQotICB7Ci0JICAKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJ3ZWIiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWE1MRXhhbXBsZXNfRElSICsgImoyZWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hNTFZhbGlkYXRvclRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YTUxWYWxpZGF0b3JUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmVlMzFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hNTFZhbGlkYXRvclRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgcGx1Z2luIGNsYXNzIGZvciB0aGlzIHRlc3QgcGx1Z2luLgotICovCi1wdWJsaWMgY2xhc3MgWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCXByaXZhdGUgc3RhdGljIFhNTFZhbGlkYXRvclRlc3RzUGx1Z2luIHBsdWdpbiA9IG51bGw7Ci0KLQlwdWJsaWMgWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4oKSB7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGx1Z2luTG9jYXRpb24oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZSA9IEZpbGVMb2NhdG9yLnJlc29sdmUocGx1Z2luLmdldEJ1bmRsZSgpLmdldEVudHJ5KCIvIikpLmdldEZpbGUoKTsKLQkJcmV0dXJuIG5ldyBQYXRoKGZpbGUpLnJlbW92ZVRyYWlsaW5nU2VwYXJhdG9yKCkudG9TdHJpbmcoKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBYTUxWYWxpZGF0b3JUZXN0c1BsdWdpbiBnZXRQbHVnaW4oKQotCXsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NWZiMWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0Ci0JbmFtZT0idGVzdHN1aXRlIgotCWRlZmF1bHQ9InJ1biIKLQliYXNlZGlyPSIuIj4KLQotCTwhLS0gQ29uZmlndXJhYmxlIFByb3BlcnRpZXMgLS0+Ci0KLQk8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgZWNsaXBzZS1ob21lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cyIgLz4KLQotCTwhLS0gRW5kIENvbmZpZ3VyYWJsZSBQcm9wZXJ0aWVzIC0tPgotCi0JPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLQk8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotCTxwcm9wZXJ0eQotCQluYW1lPSJlY2xpcHNlLWhvbWUiCi0JCXZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIiAvPgotCTxwcm9wZXJ0eQotCQluYW1lPSJidnR3b3Jrc3BhY2UiCi0JCXZhbHVlPSIke2Jhc2VkaXJ9IiAvPgotCTxwcm9wZXJ0eQotCQluYW1lPSJsaWJyYXJ5LWZpbGUiCi0JCXZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotCTxwcm9wZXJ0eQotCQluYW1lPSJ3b3Jrc3BhY2UtZm9sZGVyIgotCQl2YWx1ZT0iJHtidnR3b3Jrc3BhY2V9LyR7cGx1Z2luLW5hbWV9IiAvPgotCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLQkJPHRzdGFtcCAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQKLQkJCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLQkJCQlpbmNsdWRlcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLioueG1sIiAvPgotCQk8L2RlbGV0ZT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0JPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLQkJPCEtLSBTdGFydCB3aXRoIGNsZWFuIGRhdGEgd29ya3NwYWNlIC0tPgotCQk8ZGVsZXRlCi0JCQlkaXI9IiR7d29ya3NwYWNlLWZvbGRlcn0iCi0JCQlxdWlldD0idHJ1ZSIgLz4KLQotCQk8YW50Ci0JCQl0YXJnZXQ9ImNvcmUtdGVzdCIKLQkJCWFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImRhdGEtZGlyIgotCQkJCXZhbHVlPSIke3dvcmtzcGFjZS1mb2xkZXJ9IiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCQkJdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iY2xhc3NuYW1lIgotCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuQWxsWE1MVGVzdHMiIC8+Ci0JCTwvYW50PgotCi0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLQk8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0JPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotCTx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0JCTxkZWxldGUKLQkJCWRpcj0iJHt3b3Jrc3BhY2UtZm9sZGVyfSIKLQkJCXF1aWV0PSJ0cnVlIiAvPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLQk8dGFyZ2V0Ci0JCW5hbWU9InJ1biIKLQkJZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLQkJPGFudAotCQkJdGFyZ2V0PSJjb2xsZWN0IgotCQkJYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iaW5jbHVkZXMiCi0JCQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cyoueG1sIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0ib3V0cHV0LWZpbGUiCi0JCQkJdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjUzNTc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1nZW5lcmF0ZWRSZXN1bHRzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9NU0dfQ09OVEVOVF9JTkNPTVBMRVRFL01TR19DT05URU5UX0lOQ09NUExFVEUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvTVNHX0NPTlRFTlRfSU5DT01QTEVURS9NU0dfQ09OVEVOVF9JTkNPTVBMRVRFLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk4NWM5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9NU0dfQ09OVEVOVF9JTkNPTVBMRVRFL01TR19DT05URU5UX0lOQ09NUExFVEUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHJvb3QgWwotPCFFTEVNRU5UIHJvb3QgKGNoaWxkKyk+Ci08IUVMRU1FTlQgY2hpbGQgKCNQQ0RBVEEpPgotXT4KLTxyb290PgotPC9yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvTVNHX0NPTlRFTlRfSU5WQUxJRC9NU0dfQ09OVEVOVF9JTlZBTElELnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL01TR19DT05URU5UX0lOVkFMSUQvTVNHX0NPTlRFTlRfSU5WQUxJRC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMWJkNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvTVNHX0NPTlRFTlRfSU5WQUxJRC9NU0dfQ09OVEVOVF9JTlZBTElELnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSByb290IFsKLTwhRUxFTUVOVCByb290IChjaGlsZCspPgotPCFFTEVNRU5UIGNoaWxkICgjUENEQVRBKT4KLV0+Ci08cm9vdD4KLWFhYWEKLTwvcm9vdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi4zL05vQ2hpbGRyZW4ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvTm9DaGlsZHJlbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMGY0ZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvTm9DaGlsZHJlbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Ob0NoaWxkcmVuIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTm9DaGlsZHJlbiI+Ci0KLSAgICA8ZWxlbWVudCBuYW1lPSJNeUVsZW1lbnQiIHR5cGU9InRuczpOZXdYU0RDb21wbGV4VHlwZSI+PC9lbGVtZW50PgotCi0gICAgPGNvbXBsZXhUeXBlIG5hbWU9Ik5ld1hTRENvbXBsZXhUeXBlIj4KLSAgICAJPHNlcXVlbmNlPgotICAgIAkJPGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG1pbk9jY3Vycz0iMCI+PC9lbGVtZW50PgotICAgIAk8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9jdmMtY29tcGxleC10eXBlLjIuMy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9jdmMtY29tcGxleC10eXBlLjIuMy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4MDVlY2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRuczpNeUVsZW1lbnQgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05vQ2hpbGRyZW4iIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Ob0NoaWxkcmVuIE5vQ2hpbGRyZW4ueHNkICI+Ci1hYWFhYQotPC90bnM6TXlFbGVtZW50PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9Ob0NoaWxkcmVuLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvTm9DaGlsZHJlbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMDFhMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9Ob0NoaWxkcmVuLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05vQ2hpbGRyZW4iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Ob0NoaWxkcmVuIj4KLQotICAgIDxlbGVtZW50IG5hbWU9Ik15RWxlbWVudCIgdHlwZT0idG5zOk5ld1hTRENvbXBsZXhUeXBlIj48L2VsZW1lbnQ+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iTmV3WFNEQ29tcGxleFR5cGUiPgotICAgIAk8c2VxdWVuY2U+Ci0gICAgCQk8ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIxIj48L2VsZW1lbnQ+Ci0gICAgCTwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuNC5iL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmJlZGI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08dG5zOk15RWxlbWVudCB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTm9DaGlsZHJlbiIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05vQ2hpbGRyZW4gTm9DaGlsZHJlbi54c2QgIj4KLSAgCi08L3RuczpNeUVsZW1lbnQ+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290Lz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2UvSW52b2ljZS5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2UvSW52b2ljZS5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MzdiYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlL0ludm9pY2UuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRUxFTUVOVCBJbnZvaWNlIChIZWFkZXIsSXRlbSspPgotPCFFTEVNRU5UIEhlYWRlciAoRGF0ZSxCaWxsVG8pPgotPCFBVFRMSVNUIEhlYWRlcgotIGludm9pY2VOdW1iZXIgQ0RBVEEgI1JFUVVJUkVECi0+Ci08IUVMRU1FTlQgSXRlbSAoZGVzY3JpcHRpb24qKT4KLTwhQVRUTElTVCBJdGVtCi0gcHJpY2UgQ0RBVEEgI1JFUVVJUkVECi0gZGlzY291bnQgKHByb21vdGlvbiB8IHJlZ3VsYXIpICJyZWd1bGFyIgotPgotPCFFTEVNRU5UIERhdGUgKChNb250aCxEYXksWWVhcil8KERheSxNb250aCxZZWFyKSk+Ci08IUVMRU1FTlQgQmlsbFRvIChBZGRyZXNzKT4KLTwhQVRUTElTVCBCaWxsVG8KLSBjdXN0TnVtYmVyIElEICNSRVFVSVJFRAotIG5hbWUgQ0RBVEEgI0lNUExJRUQKLSBwaG9uZSBDREFUQSAjSU1QTElFRAotPgotPCFFTEVNRU5UIGRlc2NyaXB0aW9uICgjUENEQVRBKT4KLTwhRUxFTUVOVCBBZGRyZXNzIChzdHJlZXQxLHN0cmVldDI/LGNpdHksKHN0YXRlfHByb3ZpbmNlKSx6aXAsY291bnRyeT8pPgotPCFFTEVNRU5UIHN0cmVldDEgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIHN0cmVldDIgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIGNpdHkgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIHN0YXRlICgjUENEQVRBKT4KLTwhRUxFTUVOVCBwcm92aW5jZSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgemlwICgjUENEQVRBKT4KLTwhRUxFTUVOVCBjb3VudHJ5ICgjUENEQVRBKT4KLTwhRUxFTUVOVCBNb250aCAoI1BDREFUQSk+Ci08IUVMRU1FTlQgRGF5ICgjUENEQVRBKT4KLTwhRUxFTUVOVCBZZWFyICgjUENEQVRBKT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZS9JbnZvaWNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZS9JbnZvaWNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc5YWYyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2UvSW52b2ljZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIEludm9pY2UgUFVCTElDICJJbnZvaWNlSWQiICJJbnZvaWNlLmR0ZCIgPgotPEludm9pY2U+Ci0gIDxIZWFkZXIgaW52b2ljZU51bWJlcj0iMTIzNDUiPgotICAgIDxEYXRlPgotICAgICAgPE1vbnRoPkp1bHk8L01vbnRoPgotICAgICAgPERheT4xNTwvRGF5PgotICAgICAgPFllYXI+MjAwMTwvWWVhcj4KLSAgICA8L0RhdGU+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyPSJYNTczOSIgbmFtZT0iTWlsdG9uIE1jR29vIiBwaG9uZT0iNDE2LTQ0OC00NDE0Ij4KLSAgICAgIDxBZGRyZXNzPgotICAgICAgICA8c3RyZWV0MT5JQk08L3N0cmVldDE+Ci0gICAgICAgIDxzdHJlZXQyPjExNTAgRWdsaW50b24gQXZlIEVhc3Q8L3N0cmVldDI+Ci0gICAgICAgIDxjaXR5PlRvcm9udG88L2NpdHk+Ci0gICAgICAgIDxzdGF0ZT5PbnRhcmlvPC9zdGF0ZT4KLSAgICAgICAgPHppcD5NM0MgMUg3PC96aXA+Ci0gICAgICAgIDxjb3VudHJ5PkNhbmFkYTwvY291bnRyeT4KLSAgICAgIDwvQWRkcmVzcz4KLSAgICA8L0JpbGxUbz4KLSAgPC9IZWFkZXI+Ci0gIDxJdGVtIGRpc2NvdW50PSJwcm9tb3Rpb24iIHByaWNlPSI1NyI+Ci0gICAgPGRlc2NyaXB0aW9uPmhpZ2ggc3BlZWQgM0QgZ3JhcGhpY3MgY2FyZDwvZGVzY3JpcHRpb24+Ci0gIDwvSXRlbT4KLTwvSW52b2ljZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZUludmFsaWQvSW52b2ljZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2VJbnZhbGlkL0ludm9pY2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzlhZjI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZUludmFsaWQvSW52b2ljZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIEludm9pY2UgUFVCTElDICJJbnZvaWNlSWQiICJJbnZvaWNlLmR0ZCIgPgotPEludm9pY2U+Ci0gIDxIZWFkZXIgaW52b2ljZU51bWJlcj0iMTIzNDUiPgotICAgIDxEYXRlPgotICAgICAgPE1vbnRoPkp1bHk8L01vbnRoPgotICAgICAgPERheT4xNTwvRGF5PgotICAgICAgPFllYXI+MjAwMTwvWWVhcj4KLSAgICA8L0RhdGU+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyPSJYNTczOSIgbmFtZT0iTWlsdG9uIE1jR29vIiBwaG9uZT0iNDE2LTQ0OC00NDE0Ij4KLSAgICAgIDxBZGRyZXNzPgotICAgICAgICA8c3RyZWV0MT5JQk08L3N0cmVldDE+Ci0gICAgICAgIDxzdHJlZXQyPjExNTAgRWdsaW50b24gQXZlIEVhc3Q8L3N0cmVldDI+Ci0gICAgICAgIDxjaXR5PlRvcm9udG88L2NpdHk+Ci0gICAgICAgIDxzdGF0ZT5PbnRhcmlvPC9zdGF0ZT4KLSAgICAgICAgPHppcD5NM0MgMUg3PC96aXA+Ci0gICAgICAgIDxjb3VudHJ5PkNhbmFkYTwvY291bnRyeT4KLSAgICAgIDwvQWRkcmVzcz4KLSAgICA8L0JpbGxUbz4KLSAgPC9IZWFkZXI+Ci0gIDxJdGVtIGRpc2NvdW50PSJwcm9tb3Rpb24iIHByaWNlPSI1NyI+Ci0gICAgPGRlc2NyaXB0aW9uPmhpZ2ggc3BlZWQgM0QgZ3JhcGhpY3MgY2FyZDwvZGVzY3JpcHRpb24+Ci0gIDwvSXRlbT4KLTwvSW52b2ljZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZVJlbW90ZS9JbnZvaWNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZVJlbW90ZS9JbnZvaWNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTViYTNlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2VSZW1vdGUvSW52b2ljZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIEludm9pY2UgUFVCTElDICJJbnZvaWNlSWQiICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL3dzdC9jb21wb25lbnRzL3hzZC90ZXN0cy9kdGQtcmVmZXJlbmNlcy9JbnZvaWNlLmR0ZCI+Ci08SW52b2ljZT4KLSAgPEhlYWRlciBpbnZvaWNlTnVtYmVyPSIxMjM0NSI+Ci0gICAgPERhdGU+Ci0gICAgICA8TW9udGg+SnVseTwvTW9udGg+Ci0gICAgICA8RGF5PjE1PC9EYXk+Ci0gICAgICA8WWVhcj4yMDAxPC9ZZWFyPgotICAgIDwvRGF0ZT4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXI9Ilg1NzM5IiBuYW1lPSJNaWx0b24gTWNHb28iIHBob25lPSI0MTYtNDQ4LTQ0MTQiPgotICAgICAgPEFkZHJlc3M+Ci0gICAgICAgIDxzdHJlZXQxPklCTTwvc3RyZWV0MT4KLSAgICAgICAgPHN0cmVldDI+MTE1MCBFZ2xpbnRvbiBBdmUgRWFzdDwvc3RyZWV0Mj4KLSAgICAgICAgPGNpdHk+VG9yb250bzwvY2l0eT4KLSAgICAgICAgPHN0YXRlPk9udGFyaW88L3N0YXRlPgotICAgICAgICA8emlwPk0zQyAxSDc8L3ppcD4KLSAgICAgICAgPGNvdW50cnk+Q2FuYWRhPC9jb3VudHJ5PgotICAgICAgPC9BZGRyZXNzPgotICAgIDwvQmlsbFRvPgotICA8L0hlYWRlcj4KLSAgPEl0ZW0gZGlzY291bnQ9InByb21vdGlvbiIgcHJpY2U9IjU3Ij4KLSAgICA8ZGVzY3JpcHRpb24+aGlnaCBzcGVlZCAzRCBncmFwaGljcyBjYXJkPC9kZXNjcmlwdGlvbj4KLSAgPC9JdGVtPgotPC9JbnZvaWNlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlUmVtb3RlL0ludm9pY2VJbmRpcmVjdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2VSZW1vdGUvSW52b2ljZUluZGlyZWN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjllOTg3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2VSZW1vdGUvSW52b2ljZUluZGlyZWN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgSW52b2ljZSBQVUJMSUMgIkludm9pY2VJZCIgImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvd3N0L2NvbXBvbmVudHMveHNkL3Rlc3RzL2R0ZC1yZWZlcmVuY2VzL0luZGlyZWN0SW52b2ljZS5kdGQiPgotPEludm9pY2U+Ci0gIDxIZWFkZXIgaW52b2ljZU51bWJlcj0iMTIzNDUiPgotICAgIDxEYXRlPgotICAgICAgPE1vbnRoPkp1bHk8L01vbnRoPgotICAgICAgPERheT4xNTwvRGF5PgotICAgICAgPFllYXI+MjAwMTwvWWVhcj4KLSAgICA8L0RhdGU+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyPSJYNTczOSIgbmFtZT0iTWlsdG9uIE1jR29vIiBwaG9uZT0iNDE2LTQ0OC00NDE0Ij4KLSAgICAgIDxBZGRyZXNzPgotICAgICAgICA8c3RyZWV0MT5JQk08L3N0cmVldDE+Ci0gICAgICAgIDxzdHJlZXQyPjExNTAgRWdsaW50b24gQXZlIEVhc3Q8L3N0cmVldDI+Ci0gICAgICAgIDxjaXR5PlRvcm9udG88L2NpdHk+Ci0gICAgICAgIDxzdGF0ZT5PbnRhcmlvPC9zdGF0ZT4KLSAgICAgICAgPHppcD5NM0MgMUg3PC96aXA+Ci0gICAgICAgIDxjb3VudHJ5PkNhbmFkYTwvY291bnRyeT4KLSAgICAgIDwvQWRkcmVzcz4KLSAgICA8L0JpbGxUbz4KLSAgPC9IZWFkZXI+Ci0gIDxJdGVtIGRpc2NvdW50PSJwcm9tb3Rpb24iIHByaWNlPSI1NyI+Ci0gICAgPGRlc2NyaXB0aW9uPmhpZ2ggc3BlZWQgM0QgZ3JhcGhpY3MgY2FyZDwvZGVzY3JpcHRpb24+Ci0gIDwvSXRlbT4KLTwvSW52b2ljZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc0OTg3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGM6Q2F0YWxvZ3VlIHhtbG5zOmM9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlIENhdGFsb2d1ZS54c2QgIj4KLQk8YzpCb29rPgotCQk8dGl0bGU+UHJvZmVzc2lvbmFsIFhNTCBTY2hlbWE8L3RpdGxlPgotCQk8ZGF0ZT4yMDAxPC9kYXRlPgotCQk8aXNibj4xLTg2MTAwNS00Ny00PC9pc2JuPgotCQk8cHVibGlzaGVyPldyb3ggUHJlc3M8L3B1Ymxpc2hlcj4KLQk8L2M6Qm9vaz4KLQk8YzpNYWdhemluZT4KLQkJPHRpdGxlPldlYlNwaGVyZSBEZXZlbG9wZXIncyBKb3VybmFsPC90aXRsZT4KLQkJPGRhdGU+MjAwMTwvZGF0ZT4KLQk8L2M6TWFnYXppbmU+Ci0JPGM6Qm9vaz4KLQkJPHRpdGxlPkphdmEgYW5kIFhTTFQ8L3RpdGxlPgotCQk8ZGF0ZT4yMDAxPC9kYXRlPgotCQk8aXNibj4wLTU5Ni0wMDE0My02PC9pc2JuPgotCQk8cHVibGlzaGVyPk8nUmVpbGx5PC9wdWJsaXNoZXI+Ci0JPC9jOkJvb2s+Ci08L2M6Q2F0YWxvZ3VlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGZmOWZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUiIHhtbG5zOmM9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlIj4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJQdWJsaWNhdGlvblR5cGUiPgotCQk8c2VxdWVuY2U+Ci0JCQk8ZWxlbWVudCBuYW1lPSJ0aXRsZSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0JCQk8ZWxlbWVudCBuYW1lPSJhdXRob3IiIHR5cGU9InN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+PC9lbGVtZW50PgotCQkJPGVsZW1lbnQgbmFtZT0iZGF0ZSIgdHlwZT0iZ1llYXIiPjwvZWxlbWVudD4KLQkJPC9zZXF1ZW5jZT4KLQk8L2NvbXBsZXhUeXBlPgotCQotCTxjb21wbGV4VHlwZSBuYW1lPSJCb29rVHlwZSI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0iYzpQdWJsaWNhdGlvblR5cGUiPgotCQkJICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iaXNibiIgdHlwZT0ic3RyaW5nIiAvPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJwdWJsaXNoZXIiIHR5cGU9InN0cmluZyIvPgotICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+Ci0JCQk8L2V4dGVuc2lvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotCQotCTxjb21wbGV4VHlwZSBuYW1lPSJNYWdhemluZVR5cGUiPgotCQk8Y29tcGxleENvbnRlbnQ+CQkJCi0JCQk8cmVzdHJpY3Rpb24gYmFzZT0iYzpQdWJsaWNhdGlvblR5cGUiPgotCQkJCTxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0idGl0bGUiIHR5cGU9InN0cmluZyIgLz4KLQkJCQkJPGVsZW1lbnQgbmFtZT0iYXV0aG9yIiB0eXBlPSJzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIwIi8+Ci0JCQkJCTxlbGVtZW50IG5hbWU9ImRhdGUiIHR5cGU9ImdZZWFyIj48L2VsZW1lbnQ+Ci0JCQkJPC9zZXF1ZW5jZT4KLQkJCTwvcmVzdHJpY3Rpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLQkKLQk8ZWxlbWVudCBuYW1lPSJQdWJsaWNhdGlvbiIgdHlwZT0iYzpQdWJsaWNhdGlvblR5cGUiIGFic3RyYWN0PSJ0cnVlIj48L2VsZW1lbnQ+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iQm9vayIgdHlwZT0iYzpCb29rVHlwZSIgc3Vic3RpdHV0aW9uR3JvdXA9ImM6UHVibGljYXRpb24iPjwvZWxlbWVudD4KLQotCTxlbGVtZW50IG5hbWU9Ik1hZ2F6aW5lIiB0eXBlPSJjOk1hZ2F6aW5lVHlwZSIgc3Vic3RpdHV0aW9uR3JvdXA9ImM6UHVibGljYXRpb24iPjwvZWxlbWVudD4KLQkKLQk8ZWxlbWVudCBuYW1lPSJDYXRhbG9ndWUiPgotCQk8Y29tcGxleFR5cGU+Ci0JCQk8c2VxdWVuY2U+Ci0JCQkJPGVsZW1lbnQgcmVmPSJjOlB1YmxpY2F0aW9uIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+PC9lbGVtZW50PgotCQkJPC9zZXF1ZW5jZT4KLQkJPC9jb21wbGV4VHlwZT4KLQk8L2VsZW1lbnQ+Ci0JCi08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlSW52YWxpZC9DYXRhbG9ndWUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9QdWJsaWNhdGlvbkNhdGFsb2d1ZUludmFsaWQvQ2F0YWxvZ3VlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc0OTg3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlSW52YWxpZC9DYXRhbG9ndWUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjOkNhdGFsb2d1ZSB4bWxuczpjPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZSBDYXRhbG9ndWUueHNkICI+Ci0JPGM6Qm9vaz4KLQkJPHRpdGxlPlByb2Zlc3Npb25hbCBYTUwgU2NoZW1hPC90aXRsZT4KLQkJPGRhdGU+MjAwMTwvZGF0ZT4KLQkJPGlzYm4+MS04NjEwMDUtNDctNDwvaXNibj4KLQkJPHB1Ymxpc2hlcj5Xcm94IFByZXNzPC9wdWJsaXNoZXI+Ci0JPC9jOkJvb2s+Ci0JPGM6TWFnYXppbmU+Ci0JCTx0aXRsZT5XZWJTcGhlcmUgRGV2ZWxvcGVyJ3MgSm91cm5hbDwvdGl0bGU+Ci0JCTxkYXRlPjIwMDE8L2RhdGU+Ci0JPC9jOk1hZ2F6aW5lPgotCTxjOkJvb2s+Ci0JCTx0aXRsZT5KYXZhIGFuZCBYU0xUPC90aXRsZT4KLQkJPGRhdGU+MjAwMTwvZGF0ZT4KLQkJPGlzYm4+MC01OTYtMDAxNDMtNjwvaXNibj4KLQkJPHB1Ymxpc2hlcj5PJ1JlaWxseTwvcHVibGlzaGVyPgotCTwvYzpCb29rPgotPC9jOkNhdGFsb2d1ZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvajJlZS93ZWIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9qMmVlL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjNjBhNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9qMmVlL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLSAgICA8ZGlzcGxheS1uYW1lPm1vZHVsZTwvZGlzcGxheS1uYW1lPgotICAgIDx3ZWxjb21lLWZpbGUtbGlzdD4KLSAgICAgICAgPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0gICAgICAgIDx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0gICAgICAgIDx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0gICAgICAgIDx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0gICAgICAgIDx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLSAgICAgICAgPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotICAgIDwvd2VsY29tZS1maWxlLWxpc3Q+Ci08L3dlYi1hcHA+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ2Fubm90TG9jYXRlRFREL0ludmFsaWRIb3N0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ2Fubm90TG9jYXRlRFREL0ludmFsaWRIb3N0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTllOGRiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0Nhbm5vdExvY2F0ZURURC9JbnZhbGlkSG9zdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgZXhhbXBsZSBQVUJMSUMgIlB1YmxpYyBJZGVudGlmaWVyIiAiaHR0cDovL3d3dy5lY2xpcHNlLmJsYWgvbm9uLWV4aXN0ZW50LWR0ZC5kdGQiPgotPGV4YW1wbGUvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ2Fubm90TG9jYXRlRFREL0ludmFsaWRMb2NhdGlvbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0Nhbm5vdExvY2F0ZURURC9JbnZhbGlkTG9jYXRpb24ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjFiOGJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ2Fubm90TG9jYXRlRFREL0ludmFsaWRMb2NhdGlvbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgZXhhbXBsZSBQVUJMSUMgIlB1YmxpYyBJZGVudGlmaWVyIiAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9ub24tZXhpc3RlbnQtZHRkLmR0ZCI+Ci08ZXhhbXBsZS8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DdXN0b21FcnJvclJlcG9ydGVkT25Db3JyZWN0RWxlbWVudC9zaW1wbGVuZXN0ZWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DdXN0b21FcnJvclJlcG9ydGVkT25Db3JyZWN0RWxlbWVudC9zaW1wbGVuZXN0ZWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2U3YmE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ3VzdG9tRXJyb3JSZXBvcnRlZE9uQ29ycmVjdEVsZW1lbnQvc2ltcGxlbmVzdGVkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290IHhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NpbXBsZW5lc3RlZCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NpbXBsZW5lc3RlZCBzaW1wbGVuZXN0ZWQueHNkICI+Ci0gIDxjaGlsZDE+Y2hpbGQxPC9jaGlsZDE+Ci08L3Jvb3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0N1c3RvbUVycm9yUmVwb3J0ZWRPbkNvcnJlY3RFbGVtZW50L3NpbXBsZW5lc3RlZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0N1c3RvbUVycm9yUmVwb3J0ZWRPbkNvcnJlY3RFbGVtZW50L3NpbXBsZW5lc3RlZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjZjVhZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DdXN0b21FcnJvclJlcG9ydGVkT25Db3JyZWN0RWxlbWVudC9zaW1wbGVuZXN0ZWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2ltcGxlbmVzdGVkIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2ltcGxlbmVzdGVkIj4KLQotICAgIDxlbGVtZW50IG5hbWU9InJvb3QiPgotICAgIAk8Y29tcGxleFR5cGU+Ci0gICAgCQk8c2VxdWVuY2U+Ci0KLSAgICAJCQk8ZWxlbWVudCByZWY9InRuczpjaGlsZDEiPjwvZWxlbWVudD4KLSAgICAJCQk8ZWxlbWVudCByZWY9InRuczpjaGlsZDIiPjwvZWxlbWVudD4KLSAgICAJCTwvc2VxdWVuY2U+Ci0gICAgCTwvY29tcGxleFR5cGU+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50IG5hbWU9ImNoaWxkMSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQgbmFtZT0iY2hpbGQyIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLSAgICAKLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9FbXB0eUZpbGUvRW1wdHkueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9FbXB0eUZpbGUvRW1wdHkueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvRW1wdHlGaWxlL0VtcHR5LnhtbAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vR3JhbW1hci9Ob0dyYW1tYXIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Ob0dyYW1tYXIvTm9HcmFtbWFyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg5Yzg4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vR3JhbW1hci9Ob0dyYW1tYXIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+Ci0JPGNoaWxkPgotCQk8Y2hpbGQyLz4KLQk8L2NoaWxkPgotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvTm9OYW1lc3BhY2VTY2hlbWEvTm9OYW1lc3BhY2VTY2hlbWEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Ob05hbWVzcGFjZVNjaGVtYS9Ob05hbWVzcGFjZVNjaGVtYS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwZjE5YTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Ob05hbWVzcGFjZVNjaGVtYS9Ob05hbWVzcGFjZVNjaGVtYS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdCB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbj0iTm9OYW1lc3BhY2VTY2hlbWEueHNkIj4KLSAgPGNoaWxkMT5jaGlsZDE8L2NoaWxkMT4KLTwvcm9vdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvTm9OYW1lc3BhY2VTY2hlbWEvTm9OYW1lc3BhY2VTY2hlbWEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Ob05hbWVzcGFjZVNjaGVtYS9Ob05hbWVzcGFjZVNjaGVtYS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyYjBmMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Ob05hbWVzcGFjZVNjaGVtYS9Ob05hbWVzcGFjZVNjaGVtYS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9InJvb3QiIHR5cGU9IlJvb3RUeXBlIj48L3hzZDplbGVtZW50PgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUm9vdFR5cGUiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImNoaWxkMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJjaGlsZDIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvTm90V2VsbEZvcm1lZC9Ob3RXZWxsRm9ybWVkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvTm90V2VsbEZvcm1lZC9Ob3RXZWxsRm9ybWVkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA5OWIyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vdFdlbGxGb3JtZWQvTm90V2VsbEZvcm1lZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLSAgPG5vY2xvc2luZ3RhZz4KLTwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL1Jvb3ROb05TQ2hpbGROUy9Sb290Tm9OU0NoaWxkTlMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Sb290Tm9OU0NoaWxkTlMvUm9vdE5vTlNDaGlsZE5TLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRlNDRlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL1Jvb3ROb05TQ2hpbGROUy9Sb290Tm9OU0NoaWxkTlMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCcgPz4KLTxyb290PgotICA8dGVzdDp0ZXN0IHhtbG5zOnRlc3Q9Imh0dHA6Ly90ZXN0Lm9yZy90ZXN0Ij4KLSAgPC90ZXN0OnRlc3Q+Ci08L3Jvb3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL1ZhbGlkYXRlV2l0aERURC9WYWxpZGF0ZVdpdGhEVERJbnZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL1ZhbGlkYXRlV2l0aERUREludmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDRkMGExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL1ZhbGlkYXRlV2l0aERUREludmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJpc28tODg1OS0xIj8+Ci08IURPQ1RZUEUgc2ltcGxlIFNZU1RFTSAic2ltcGxlLmR0ZCI+Ci0KLTxzaW1wbGUgdmVyc2lvbj0iMi4wIiB4bWxucz0iaHR0cDovL3d3dy5zaW1wbGUuY29tL3NpbXBsZSI+Ci0gPGR1bW15PiA8L2R1bW15PgotPC9zaW1wbGU+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL1ZhbGlkYXRlV2l0aERURC9WYWxpZGF0ZVdpdGhEVERWYWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL1ZhbGlkYXRlV2l0aERURC9WYWxpZGF0ZVdpdGhEVERWYWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5OTVkOGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9WYWxpZGF0ZVdpdGhEVEQvVmFsaWRhdGVXaXRoRFREVmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJpc28tODg1OS0xIj8+Ci08IURPQ1RZUEUgc2ltcGxlIFNZU1RFTSAic2ltcGxlLmR0ZCI+Ci0KLTxzaW1wbGUgdmVyc2lvbj0iMi4wIiB4bWxucz0iaHR0cDovL3d3dy5zaW1wbGUuY29tL3NpbXBsZSI+Ci0gIDxzaW1wbGUxPgotICAgIDxzaW1wbGUyLz4KLSAgPC9zaW1wbGUxPgotPC9zaW1wbGU+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL1ZhbGlkYXRlV2l0aERURC9zaW1wbGUuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9WYWxpZGF0ZVdpdGhEVEQvc2ltcGxlLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg0OWI5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL1ZhbGlkYXRlV2l0aERURC9zaW1wbGUuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08IUVMRU1FTlQgc2ltcGxlIChzaW1wbGUxKT4KLTwhQVRUTElTVCBzaW1wbGUgCi0gICAgICAgICAgIHZlcnNpb24gQ0RBVEEgI1JFUVVJUkVECi0gICAgICAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAnaHR0cDovL3d3dy5zaW1wbGUuY29tL3NpbXBsZScgCi0gICAgICAgICAgID4KLTwhRUxFTUVOVCBzaW1wbGUxIChzaW1wbGUyKT4KLTwhRUxFTUVOVCBzaW1wbGUyIEVNUFRZPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMDEwNTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhhNjgwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXZhbGlkYXRleHNkdGVzdHMuamFyCi10ZW1wLmZvbGRlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDhjZDQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkOGI1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6Mzc6MjEgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFjNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyNDk1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjA1OjI5IEVEVCAyMDA2Ci1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRhNjkxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjIwMQotQnVuZGxlLUNsYXNzUGF0aDogdmFsaWRhdGV4c2R0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5YU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5qdW5pdCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDt4LWludGVybmFsOj10cnVlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWM1OTg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+TWF5IDIsIDIwMDY8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY0YmVkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gdmFsaWRhdGV4c2R0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgdGVzdHJlc291cmNlcy8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLXNvdXJjZS52YWxpZGF0ZXhzZHRlc3RzLmphciA9IHNyYy8gCi0KLWJpbi5leGNsdWRlcyA9IHRlc3RyZXNvdXJjZXMvLmN2c2lnbm9yZSxcCi0gICAgICAgICAgICAgICB0ZXN0cmVzb3VyY2VzL2dlbmVyYXRlZFJlc3VsdHMvCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1YTU0MGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlCi1CdW5kbGUtTmFtZS4wID0gWFNEIFZhbGlkYXRpb24gVGVzdHMgUGx1Zy1pbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL1hTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTgzZDc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25UZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotLyoqCi0gKiBUZXN0IHRoZSBYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCXN1cGVyLnNldFVwKCk7Ci0JY29uZmlndXJhdGlvbiA9IG5ldyBYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpOwotICB9Ci0KLQotICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLQljb25maWd1cmF0aW9uID0gbnVsbDsKLQlzdXBlci50ZWFyRG93bigpOwotICB9Ci0KLQotICAvKioKLSAgICogVGVzdCB0aGUgZGVmYXVsdCBzZXR0aW5nIG9mIHRoZSBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgZmVhdHVyZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXRIb25vdXJBbGxTY2hlbWFMb2NhdGlvbnNGZWF0dXJlRGVmYXVsdCgpCi0gIHsKLQl0cnkKLQl7Ci0JCWFzc2VydEZhbHNlKCJUaGUgSE9OT1VSX0FMTF9TQ0hFTUFfTE9DQVRJT05TIGZlYXR1cmUgaXMgbm90IHNldCBieSBkZWZhdWx0IHRvIGZhbHNlLiIsIGNvbmZpZ3VyYXRpb24uZ2V0RmVhdHVyZShYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5IT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMpKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIHNldCByZWFkIHRoZSBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgZmVhdHVyZTogIiArIGUpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3Qgc2V0dGluZyB0aGUgSE9OT1VSX0FMTF9TQ0hFTUFfTE9DQVRJT05TIGZlYXR1cmUgdG8gdHJ1ZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXRIb25vdXJBbGxTY2hlbWFMb2NhdGlvbnNGZWF0dXJlVHJ1ZSgpCi0gIHsKLQl0cnkKLQl7Ci0JICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uSE9OT1VSX0FMTF9TQ0hFTUFfTE9DQVRJT05TLCB0cnVlKTsKLQkgIGFzc2VydFRydWUoIlRoZSBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgZmVhdHVyZSBpcyBub3Qgc2V0IHRvIHRydWUuIiwgY29uZmlndXJhdGlvbi5nZXRGZWF0dXJlKFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uLkhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUykpOwotCX0KLQljYXRjaChFeGNlcHRpb24gZSkKLQl7Ci0JICBmYWlsKCJVbmFibGUgdG8gc2V0IEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUyB0byB0cnVlOiAiICsgZSk7Ci0JfQotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCBzZXR0aW5nIHRoZSBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgZmVhdHVyZSB0byBmYWxzZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXRIb25vdXJBbGxTY2hlbWFMb2NhdGlvbnNGZWF0dXJlRmFsc2UoKQotICB7Ci0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uLkhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUywgZmFsc2UpOwotCSAgYXNzZXJ0RmFsc2UoIlRoZSBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgZmVhdHVyZSBpcyBub3Qgc2V0IHRvIGZhbHNlLiIsIGNvbmZpZ3VyYXRpb24uZ2V0RmVhdHVyZShYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5IT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMpKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIHNldCBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgdG8gZmFsc2U6ICIgKyBlKTsKLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHNldHRpbmcgYSBmZWF0dXJlIHRoYXQgZG9lc24ndCBleGlzdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXROb3RFeGlzdGFudEZlYXR1cmUoKQotICB7Ci0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKCJOT05fRVhJU1RBTlRfRkVBVFVSRSIsIGZhbHNlKTsKLQkgIGZhaWwoIlNldHRpbmcgYSBub24gZXhpc3RhbnQgZmVhdHVyZSBkaWQgbm90IHByb2R1Y2UgYW4gZXhjZXB0aW9uLiIpOwotCX0KLQljYXRjaChFeGNlcHRpb24gZSkKLQl7Ci0JICAvLyBUaGUgdGVzdCBzdWNjZWVkcyBpZiB0aGUgZXhjZXB0aW9uIGlzIGNhdWdodC4KLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IGdldHRpbmcgYSBmZWF0dXJlIHRoYXQgZG9lc24ndCBleGlzdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXROb3RFeGlzdGFudEZlYXR1cmUoKQotICB7Ci0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5nZXRGZWF0dXJlKCJOT05fRVhJU1RBTlRfRkVBVFVSRSIpOwotCSAgZmFpbCgiR2V0dGluZyBhIG5vbiBleGlzdGFudCBmZWF0dXJlIGRpZCBub3QgcHJvZHVjZSBhbiBleGNlcHRpb24uIik7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIC8vIFRoZSB0ZXN0IHN1Y2NlZWRzIGlmIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0LgotCX0KLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjQ0NjU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwuY29yZS5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuTmVzdGVkVmFsaWRhdG9yQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvblJlcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luOwotCi0vKioKLSAqIEEgdGVzdCBjbGFzcyBmb3IgdGhlIFZhbGlkYXRvciBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIFZhbGlkYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgVmFsaWRhdG9yV3JhcHBlciB2YWxpZGF0b3IgPSBuZXcgVmFsaWRhdG9yV3JhcHBlcigpOwotCSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFZhbGlkYXRvclRlc3QuY2xhc3MpOwotICB9Ci0JICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIGFkZEluZm9Ub01lc3NhZ2UgbWV0aG9kLiBUaGUgZm9sbG93aW5nIHRlc3RzIGFyZSBwZXJmb3JtZWQ6PGJyLz4KLSAgICogMS4gV2hlbiB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlIGNvbnRhaW5zIGEgbnVsbCBrZXkgbm90aGluZyBpcyBhZGRlZCB0byB0aGUgbWVzc2FnZS48YnIvPgotICAgKiAyLiBXaGVuIHRoZSBtZXNzYWdlIGNvbnRhaW5zIHRoZSBrZXkgIkVOVElSRV9FTEVNRU5UIiB0aGUgdGhyZWUgYXR0cmlidXRlcyBhcmUgYWRkZWQKLSAgICogdG8gdGhlIG1ldGhvZCBhbmQgdGhlIFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFIGlzIG51bGwuPGJyLz4KLSAgICogMy4gV2hlbiB0aGUgbWVzc2FnZSBjb250YWlucyB0aGUga2V5ICJFbnRpdHlOb3REZWNsYXJlZCIgdGhlIHRocmVlIGF0dHJpYnV0ZXMgYXJlIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBZGRJbmZvVG9NZXNzYWdlKCkKLSAgewotICAgIC8vIFRoZXNlIHN0cmluZ3MgYXJlIGNvbW1vbiBhZGRpdGlvbiBpbmZvcm1hdGlvbiB0eXBlcy4KLQlTdHJpbmcgQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgPSAiY29sdW1uTnVtYmVyIjsgLy8kTk9OLU5MUy0xJAotCVN0cmluZyBTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFID0gInNxdWlnZ2xlU2VsZWN0aW9uU3RyYXRlZ3kiOyAvLyROT04tTkxTLTEkCi0JU3RyaW5nIFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFID0gInNxdWlnZ2xlTmFtZU9yVmFsdWUiOyAvLyROT04tTkxTLTEkCi0JCi0JLy8gVGVzdCB0aGF0IHRoZSBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gdGhlIGF0dHJpYnV0ZXMgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZAotCS8vIHdpdGggYSBudWxsIGtleS4KLQlWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZSgiIiwgMSwgMSwgIiIpOwotCU1lc3NhZ2UgbWVzc2FnZSA9IG5ldyBNZXNzYWdlKCk7Ci0JdmFsaWRhdG9yLmFkZEluZm9Ub01lc3NhZ2UodmFsaWRhdGlvbk1lc3NhZ2UsIG1lc3NhZ2UpOwotCWFzc2VydE51bGwoIkNPTFVNTl9OVU1CRVJfQVRUUklCVVRFIHdhcyBub3QgbnVsbCBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIGEgbnVsbCBrZXkuIENPTFVNTl9OVU1CRVJfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKENPTFVNTl9OVU1CRVJfQVRUUklCVVRFKSwgbWVzc2FnZS5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpKTsKLQlhc3NlcnROdWxsKCJTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFIHdhcyBub3QgbnVsbCBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIGEgbnVsbCBrZXkuIFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZS5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSksIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpKTsKLQlhc3NlcnROdWxsKCJTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSB3YXMgbm90IG51bGwgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCBhIG51bGwga2V5LiBTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSksIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSk7Ci0JCi0JLy8gVGVzdCB0aGF0IHRoZSBtZXNzYWdlIGNvbnRhaW5zIHRoZSB0aHJlZSBhdHRyaWJ1dGVzIHdoZW4gdGhlIGtleSBpcyBzZXQgdG8gInM0cy1lbHQtY2hhcmFjdGVyIi4KLQlWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZTIgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2UoIiIsIDEsIDEsICIiLCAiczRzLWVsdC1jaGFyYWN0ZXIiLCBudWxsKTsKLQlNZXNzYWdlIG1lc3NhZ2UyID0gbmV3IE1lc3NhZ2UoKTsKLQl2YWxpZGF0b3IuYWRkSW5mb1RvTWVzc2FnZSh2YWxpZGF0aW9uTWVzc2FnZTIsIG1lc3NhZ2UyKTsKLQlhc3NlcnRFcXVhbHMoIkNPTFVNTl9OVU1CRVJfQVRUUklCVVRFIHdhcyBjb3JyZWN0bHkgc2V0IHRvIDEgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCB0aGUga2V5IHM0cy1lbHQtY2hhcmFjdGVyLiBDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMi5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpLCBuZXcgSW50ZWdlcigxKSwgbWVzc2FnZTIuZ2V0QXR0cmlidXRlKENPTFVNTl9OVU1CRVJfQVRUUklCVVRFKSk7Ci0JYXNzZXJ0RXF1YWxzKCJTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFIHdhcyBub3QgVEVYVC4gU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMi5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSksICJURVhUIiwgbWVzc2FnZTIuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpKTsKLQlhc3NlcnRFcXVhbHMoIlNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFIHdhcyBub3QgYW4gZW1wdHkgc3RyaW5nIGZvciBhIFZhbGlkYXRpb25NZXNzYWdlIHdpdGggdGhlIGtleSBzNHMtZWx0LWNoYXJhY3Rlci4gU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZTIuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSwgIiIsIG1lc3NhZ2UyLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSkpOwotCQotICAgIC8vIFRlc3QgdGhhdCB0aGUgbWVzc2FnZSBjb250YWlucyB0aGUgdGhyZWUgYXR0cmlidXRlcyB3aGVuIHRoZSBrZXkgaXMgc2V0IHRvICJzcmMtcmVzb2x2ZSIuCi0JVmFsaWRhdGlvbk1lc3NhZ2UgdmFsaWRhdGlvbk1lc3NhZ2UzID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlKCInTXlOYW1lJyIsIDEsIDEsICIiLCAic3JjLXJlc29sdmUiLCBudWxsKTsKLQlNZXNzYWdlIG1lc3NhZ2UzID0gbmV3IE1lc3NhZ2UoKTsKLQl2YWxpZGF0b3IuYWRkSW5mb1RvTWVzc2FnZSh2YWxpZGF0aW9uTWVzc2FnZTMsIG1lc3NhZ2UzKTsKLQlhc3NlcnRFcXVhbHMoIkNPTFVNTl9OVU1CRVJfQVRUUklCVVRFIHdhcyBjb3JyZWN0bHkgc2V0IHRvIDEgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCB0aGUga2V5IHNyYy1yZXNvbHZlLiBDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMy5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpLCBuZXcgSW50ZWdlcigxKSwgbWVzc2FnZTMuZ2V0QXR0cmlidXRlKENPTFVNTl9OVU1CRVJfQVRUUklCVVRFKSk7Ci0JYXNzZXJ0RXF1YWxzKCJTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFIHdhcyBub3QgVkFMVUVfT0ZfQVRUUklCVVRFX1dJVEhfR0lWRU5fVkFMVUUuIFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZTMuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpLCAiVkFMVUVfT0ZfQVRUUklCVVRFX1dJVEhfR0lWRU5fVkFMVUUiLCBtZXNzYWdlMy5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSkpOwotCWFzc2VydEVxdWFscygiU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgd2FzIG5vdCBzZXQgdG8gTXlOYW1lIGZvciBhIFZhbGlkYXRpb25NZXNzYWdlIHdpdGggdGhlIGtleSBzcmMtcmVzb2x2ZS4gU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZTMuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSwgIk15TmFtZSIsIG1lc3NhZ2UzLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSkpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGUgdmFsaWRhdGUgbWV0aG9kLiBUZXN0cyB0byBiZSBwZXJmb3JtZWQ6PGJyLz4KLSAgICogMS4gVGVzdCB0aGF0IHZhbGlkYXRpbmcgYSB2YWxpZCBmaWxlIGZyb20gYSBVUkkgb3IgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC48YnIvPgotICAgKiAyLiBUZXN0IHRoYXQgdmFsaWRhdGluZyBhbiBpbnZhbGlkIGZpbGUgZnJvbSBhIFVSSSBvciBhbiBpbnB1dCBzdHJlYW0gcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlKCkKLSAgewotCXRyeQotCXsKLQkgIC8vIFRlc3QgdGhhdCB2YWxpZGF0aW5nIGEgdmFsaWQgZmlsZSBmcm9tIGEgVVJJIGFuZCBhbiBpbnB1dCBzdHJlYW0gcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LgotCSAgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLQkgIFN0cmluZyB1cmkgPSAiZmlsZTovLy8iICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyAidGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54c2QiOwotCSAgVmFsaWRhdGlvblJlcG9ydCByZXBvcnQxID0gdmFsaWRhdG9yLnZhbGlkYXRlKHVyaSwgbnVsbCwgbmV3IE5lc3RlZFZhbGlkYXRvckNvbnRleHQoKSk7Ci0JICBWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydDIgPSBudWxsOwotCSAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotCSAgdHJ5Ci0JICB7Ci0JICAgIGlzID0gbmV3IFVSTCh1cmkpLm9wZW5TdHJlYW0oKTsKLQkgICAgcmVwb3J0MiA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIGlzLCBuZXcgTmVzdGVkVmFsaWRhdG9yQ29udGV4dCgpKTsKLQkgIH0KLQkgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCSAgewotCQlmYWlsKCJBIHByb2JsZW0gb2NjdXJyZWQgd2hpbGUgdmFsaWRhdGluZyBhIHZhbGlkIGZpbGUgd2l0aCBhbiBpbnB1dHN0cmVhbTogIiArIGUpOwotCSAgfQotCSAgZmluYWxseQotCSAgewotCQlpZihpcyAhPSBudWxsKQotCQl7Ci0JCSAgdHJ5Ci0JCSAgewotCQkgICAgaXMuY2xvc2UoKTsKLQkJICB9Ci0JCSAgY2F0Y2goSU9FeGNlcHRpb24gZSkKLQkJICB7Ci0JCQkvLyBEbyBub3RoaW5nLgotCQkgIH0KLQkJfQotCSAgfQotCSAgYXNzZXJ0VHJ1ZSgiVmFsaWRhdGlvbiB1c2luZyBhIFVSSSBkaWQgbm90IHByb2R1Y3QgYSB2YWxpZCB2YWxpZGF0aW9uIHJlc3VsdC4iLCByZXBvcnQxLmlzVmFsaWQoKSk7Ci0JICBhc3NlcnRFcXVhbHMoIlZhbGlkYXRpb24gdXNpbmcgVVJJIGFuZCB1c2luZyBpbnB1dHN0cmVhbSBvZiB0aGUgc2FtZSBmaWxlIHByb2R1Y2VzIGRpZmZlcmVudCBudW1iZXJzIG9mIGVycm9ycy4iLCByZXBvcnQxLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgpOwotCSAgCi0gICAgICAvLyBUZXN0IHRoYXQgdmFsaWRhdGluZyBhbiBpbnZhbGlkIGZpbGUgZnJvbSBhIFVSSSBhbmQgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC4KLQkgIHVyaSA9ICJmaWxlOi8vLyIgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJ0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueHNkIjsKLQkgIHJlcG9ydDEgPSB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBudWxsLCBuZXcgTmVzdGVkVmFsaWRhdG9yQ29udGV4dCgpKTsKLQkgIHJlcG9ydDIgPSBudWxsOwotCSAgaXMgPSBudWxsOwotCSAgdHJ5Ci0JICB7Ci0JICAgIGlzID0gbmV3IFVSTCh1cmkpLm9wZW5TdHJlYW0oKTsKLQkgICAgcmVwb3J0MiA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIGlzLCBuZXcgTmVzdGVkVmFsaWRhdG9yQ29udGV4dCgpKTsKLQkgIH0KLQkgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCSAgewotCQlmYWlsKCJBIHByb2JsZW0gb2NjdXJyZWQgd2hpbGUgdmFsaWRhdGluZyBhbiBpbnZhbGlkIGZpbGUgd2l0aCBhbiBpbnB1dHN0cmVhbTogIiArIGUpOwotCSAgfQotCSAgZmluYWxseQotCSAgewotCQlpZihpcyAhPSBudWxsKQotCQl7Ci0JCSAgdHJ5Ci0JCSAgewotCQkgICAgaXMuY2xvc2UoKTsKLQkJICB9Ci0JCSAgY2F0Y2goSU9FeGNlcHRpb24gZSkKLQkJICB7Ci0JCQkvLyBEbyBub3RoaW5nLgotCQkgIH0KLQkJfQotCSAgfQotCSAgYXNzZXJ0RmFsc2UoIlZhbGlkYXRpb24gdXNpbmcgYSBVUkkgZGlkIG5vdCBwcm9kdWN0IGFuIGludmFsaWQgdmFsaWRhdGlvbiByZXN1bHQuIiwgcmVwb3J0MS5pc1ZhbGlkKCkpOwotCSAgYXNzZXJ0RXF1YWxzKCJWYWxpZGF0aW9uIHVzaW5nIFVSSSBhbmQgdXNpbmcgaW5wdXRzdHJlYW0gb2YgdGhlIHNhbWUgZmlsZSBwcm9kdWNlcyBkaWZmZXJlbnQgbnVtYmVycyBvZiBlcnJvcnMuIiwgcmVwb3J0MS5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgsIHJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkubGVuZ3RoKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIGxvY2F0ZSBwbHVnLWluIGxvY2F0aW9uOiAiICsgZSk7Ci0JfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yV3JhcHBlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1ZhbGlkYXRvcldyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgyMjM5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotCi0vKioKLSAqIEEgd3JhcHBlciBjbGFzcyB0byBhbGxvdyBmb3IgdGVzdGluZyB0aGUgVmFsaWRhdG9yIGNsYXNzLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yV3JhcHBlciBleHRlbmRzIFZhbGlkYXRvciAKLXsKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuVmFsaWRhdG9yI2FkZEluZm9Ub01lc3NhZ2Uob3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZSwgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JTWVzc2FnZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEluZm9Ub01lc3NhZ2UoVmFsaWRhdGlvbk1lc3NhZ2UgdmFsaWRhdGlvbk1lc3NhZ2UsIElNZXNzYWdlIG1lc3NhZ2UpIAotICB7Ci0Jc3VwZXIuYWRkSW5mb1RvTWVzc2FnZSh2YWxpZGF0aW9uTWVzc2FnZSwgbWVzc2FnZSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YU0RNZXNzYWdlSW5mb0hlbHBlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YU0RNZXNzYWdlSW5mb0hlbHBlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM2ZWIxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWFNETWVzc2FnZUluZm9IZWxwZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotLyoqCi0gKiBUZXN0IGNhc2UgdG8gdGVzdCB0aGUgWFNETWVzc2FnZUluZm9IZWxwZXIgY2xhc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0RNZXNzYWdlSW5mb0hlbHBlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgcHJpdmF0ZSBYU0RNZXNzYWdlSW5mb0hlbHBlcldyYXBwZXIgaGVscGVyID0gbmV3IFhTRE1lc3NhZ2VJbmZvSGVscGVyV3JhcHBlcigpOwotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoWFNETWVzc2FnZUluZm9IZWxwZXJUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCB0aGUgY3JlYXRlTWVzc2FnZUluZm8gbWV0aG9kIHJldHVybnMgeyIiLCAiIn0gd2hlbgotICAgKiBnaXZlbiBhIG5vbi1leGlzdGFudCBrZXkgYW5kIG51bGwgbWVzc2FnZSBhcmd1bWVudHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Tm90RXhpc3RhbnRLZXlBbmROdWxsTWVzc2FnZUFyZ3VtZW50cygpCi0gIHsKLQlTdHJpbmdbXSBtZXNzYWdlSW5mbyA9IGhlbHBlci5jcmVhdGVNZXNzYWdlSW5mbygiTk9OX0VYSVNUQU5UX0tFWSIsIG51bGwpOwotCWFzc2VydEVxdWFscygiVGhlIHNlbGVjdGlvbiBzdHJhdGVneSByZXR1cm5lZCB3YXMgbm90IGFuIGVtcHR5IHN0cmluZy4iLCAiIiwgbWVzc2FnZUluZm9bMF0pOwotCWFzc2VydEVxdWFscygiVGhlIG5hbWVPclZhbHVlIHJldHVybmVkIHdhcyBub3QgYW4gZW1wdHkgc3RyaW5nLiIsICIiLCBtZXNzYWdlSW5mb1sxXSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGNyZWF0ZU1lc3NhZ2VJbmZvIG1ldGhvZCByZXR1cm5zIHsiIiwgIiJ9IHdoZW4KLSAgICogZ2l2ZW4gYSBub24tZXhpc3RhbnQga2V5IGFuIG51bGwgbWVzc2FnZSBhcmd1bWVudHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TnVsbEtleUFuZE1lc3NhZ2VBcmd1bWVudHMoKQotICB7Ci0JU3RyaW5nW10gbWVzc2FnZUluZm8gPSBoZWxwZXIuY3JlYXRlTWVzc2FnZUluZm8obnVsbCwgbnVsbCk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgc2VsZWN0aW9uIHN0cmF0ZWd5IHJldHVybmVkIHdhcyBub3QgYW4gZW1wdHkgc3RyaW5nLiIsICIiLCBtZXNzYWdlSW5mb1swXSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbmFtZU9yVmFsdWUgcmV0dXJuZWQgd2FzIG5vdCBhbiBlbXB0eSBzdHJpbmcuIiwgIiIsIG1lc3NhZ2VJbmZvWzFdKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIG1ldGhvZCBnZXRGaXJzdFN0cmluZ0JldHdlZW5TaW5nbGVRdW90ZXMuIFRoZXJlIGFyZSBhIGZldyB0ZXN0czoKLSAgICogMS4gVGVzdCB0aGF0IGEgc2ltcGxlIHN0cmluZyB3aXRoIHNpbmdsZSBxdW90ZXMgJ25hbWUnIHJldHVybnMgbmFtZS4KLSAgICogMi4gVGVzdCB0aGF0IGEgc3RyaW5nIHdpdGggbm8gc2luZ2xlIHF1b3RlcyByZXR1cm5zIG51bGwuCi0gICAqIDMuIFRlc3QgdGhhdCBhIHN0cmluZyB3aXRoIGEgc2luZ2xlIHNpbmdsZSBxdW90ZSAnbmFtZSByZXR1cm5zIG51bGwuCi0gICAqIDQuIFRlc3QgdGhhdCBhIHN0cmluZyB3aXRoIDMgc2luZ2xlIHF1b3RlcyAnbmFtZSduYW1lMicgcmV0dXJucyBuYW1lLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEdldEZpcnN0U3RyaW5nQmV0d2VlblNpbmdsZVF1b3RlcygpCi0gIHsKLQkvLyAxLiBUZXN0IHRoYXQgYSBzaW1wbGUgc3RyaW5nIHdpdGggc2luZ2xlIHF1b3RlcyAnbmFtZScgcmV0dXJucyBuYW1lLgotCVN0cmluZyByZXN1bHQgPSBoZWxwZXIuZ2V0Rmlyc3RTdHJpbmdCZXR3ZWVuU2luZ2xlUXVvdGVzKCInbmFtZSciKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXR1cm5lZCBzdHJpbmcgd2FzIG5vdCBcIm5hbWVcIiBmb3IgdGhlIHN0cmluZyBcIiduYW1lJ1wiLiIsICJuYW1lIiwgcmVzdWx0KTsKLQkKLQkvLyAyLiBUZXN0IHRoYXQgYSBzdHJpbmcgd2l0aCBubyBzaW5nbGUgcXVvdGVzIHJldHVybnMgbnVsbC4KLQlyZXN1bHQgPSBoZWxwZXIuZ2V0Rmlyc3RTdHJpbmdCZXR3ZWVuU2luZ2xlUXVvdGVzKCJuYW1lIik7Ci0JYXNzZXJ0TnVsbCgiVGhlIHJldHVybmVkIHN0cmluZyB3YXMgbm90IG51bGwgZm9yIHRoZSBzdHJpbmcgXCJuYW1lXCIgd2l0aCBubyBzaW5nbGUgcXVvdGVzLiIsIHJlc3VsdCk7Ci0JCi0JLy8gMy4gVGVzdCB0aGF0IGEgc3RyaW5nIHdpdGggYSBzaW5nbGUgc2luZ2xlIHF1b3RlICduYW1lIHJldHVybnMgbnVsbC4KLQlyZXN1bHQgPSBoZWxwZXIuZ2V0Rmlyc3RTdHJpbmdCZXR3ZWVuU2luZ2xlUXVvdGVzKCInbmFtZSIpOwotCWFzc2VydE51bGwoIlRoZSByZXR1cm5lZCBzdHJpbmcgd2FzIG5vdCBudWxsIGZvciB0aGUgc3RyaW5nIFwiJ25hbWVcIiB3aXRoIG9uZSBzaW5nbGUgcXVvdGUuIiwgcmVzdWx0KTsKLQkKLQkvLyA0LiBUZXN0IHRoYXQgYSBzdHJpbmcgd2l0aCAzIHNpbmdsZSBxdW90ZXMgJ25hbWUnbmFtZTInIHJldHVybnMgbmFtZS4KLQlyZXN1bHQgPSBoZWxwZXIuZ2V0Rmlyc3RTdHJpbmdCZXR3ZWVuU2luZ2xlUXVvdGVzKCInbmFtZSduYW1lMiciKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXR1cm5lZCBzdHJpbmcgd2FzIG5vdCBcIm5hbWVcIiBmb3IgdGhlIHN0cmluZyBcIiduYW1lJ25hbWUyJ1wiIHdpdGggMyBzaW5nbGUgcXVvdGVzLiIsICJuYW1lIiwgcmVzdWx0KTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWFNETWVzc2FnZUluZm9IZWxwZXJXcmFwcGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWFNETWVzc2FnZUluZm9IZWxwZXJXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NDI5NjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRE1lc3NhZ2VJbmZvSGVscGVyV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlOwotCi0vKioKLSAqIEEgd3JhcHBlciBjbGFzcyBmb3IgdGhlIFhTRE1lc3NhZ2VJbmZvSGVscGVyIGNsYXNzIGZvciB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgWFNETWVzc2FnZUluZm9IZWxwZXJXcmFwcGVyIGV4dGVuZHMgWFNETWVzc2FnZUluZm9IZWxwZXIgCi17Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlhTRE1lc3NhZ2VJbmZvSGVscGVyI2dldEZpcnN0U3RyaW5nQmV0d2VlblNpbmdsZVF1b3RlcyhqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRGaXJzdFN0cmluZ0JldHdlZW5TaW5nbGVRdW90ZXMoU3RyaW5nIHMpIAotICB7Ci0JcmV0dXJuIHN1cGVyLmdldEZpcnN0U3RyaW5nQmV0d2VlblNpbmdsZVF1b3RlcyhzKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRFZhbGlkYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YU0RWYWxpZGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YTc0NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRFZhbGlkYXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0vKioKLSAqIFRlc3QgdGhlIEVjbGlwc2Ugc3BlY2lmaWMgWFNEIHZhbGlkYXRvci4KLSAqLwotcHVibGljIGNsYXNzIFhTRFZhbGlkYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoWFNEVmFsaWRhdG9yVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRvIGVuc3VyZSB0aGUgVVJJIHJlc29sdmVyIGlzIG5vdCBudWxsIGluIHRoZSBFY2xpcHNlCi0gICAqIHNwZWNpZmljIFhTRCB2YWxpZGF0b3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VVJJUmVzb2x2ZXJJc1JlZ2lzdGVyZWQoKQotICB7Ci0JWFNEVmFsaWRhdG9yV3JhcHBlciB2YWxpZGF0b3IgPSBuZXcgWFNEVmFsaWRhdG9yV3JhcHBlcigpOwotCWFzc2VydE5vdE51bGwoIlRoZSBVUkkgcmVzb2x2ZXIgaXMgbnVsbC4iLCB2YWxpZGF0b3IuZ2V0VVJJUmVzb2x2ZXIoKSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRFZhbGlkYXRvcldyYXBwZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YU0RWYWxpZGF0b3JXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxNDdlZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRFZhbGlkYXRvcldyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwucHJvdmlzaW9uYWwuVVJJUmVzb2x2ZXI7Ci0KLS8qKgotICogV3JhcHBlciBmb3IgdGhlIEVjbGlwc2UgWFNEIHZhbGlkYXRvciBjbGFzcyB0byBhbGxvdyBmb3IgdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIFhTRFZhbGlkYXRvcldyYXBwZXIgZXh0ZW5kcyBYU0RWYWxpZGF0b3IgCi17Ci0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBYU0RWYWxpZGF0b3JXcmFwcGVyKCkKLSAgewotCXN1cGVyKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIFVSSSByZXNvbHZlciByZWdpc3RlcmVkIG9uIHRoZSBYTUwgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgVVJJIHJlc29sdmVyIHJlZ2lzdGVyZWQgb24gdGhlIFhNTCB2YWxpZGF0b3IuCi0gICAqLwotICBwdWJsaWMgVVJJUmVzb2x2ZXIgZ2V0VVJJUmVzb2x2ZXIoKQotICB7Ci0JcmV0dXJuIHVyaXJlc29sdmVyOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxYU0RUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQWxsWFNEVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJhMWU2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxYU0RUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5WYWxpZGF0b3JUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuWFNETWVzc2FnZUluZm9IZWxwZXJUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuWFNEVmFsaWRhdG9yVGVzdDsKLS8qKgotICogVGhlIHJvb3QgdGVzdCBzdWl0ZSB0aGF0IGNvbnRhaW5zIGFsbCBvdGhlciBYU0QgdmFsaWRhdG9yIHRlc3Qgc3VpdGVzLgotICovCi1wdWJsaWMgY2xhc3MgQWxsWFNEVGVzdHMgZXh0ZW5kcyBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlCi17Ci0gIC8qKgotICAgKiBDcmVhdGUgdGhpcyB0ZXN0IHN1aXRlLgotICAgKiAKLSAgICogQHJldHVybiBUaGlzIHRlc3Qgc3VpdGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBBbGxYU0RUZXN0cygpOwotICB9Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IKLSAgICovCi0gIHB1YmxpYyBBbGxYU0RUZXN0cygpCi0gIHsKLSAgICBzdXBlcigiQWxsWFNEVGVzdHMiKTsKLSAgICBhZGRUZXN0KFZhbGlkYXRvclRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChYU0RNZXNzYWdlSW5mb0hlbHBlclRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChYU0RWYWxpZGF0b3JUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoQnVnRml4ZXNUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoUGF0aHNUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3RTdWl0ZShYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3QuY2xhc3MpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkyODQ1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5EYXRhT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvblJlcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlhTRFZhbGlkYXRvcjsKLQotLyoqCi0gKiBCYXNlIHRlc3QgY2FzZSBjbGFzcyB3aGljaCBwcm92aWRlcyBtZXRob2RzIHRvIAotICogLSBjcmVhdGUgbG9ncwotICogLSByZWFkIGZyb20gbG9ncwotICogLSBydW4gbG9nIGNvbXBhcmlzb24gdGVzdHMKLSAqLwotcHVibGljIGNsYXNzIEJhc2VUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgRklMRV9QUk9UT0NPTCA9ICJmaWxlOi8vLyI7IAotICBwcm90ZWN0ZWQgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIOwotICBwcm90ZWN0ZWQgU3RyaW5nIFNBTVBMRVNfRElSID0gInRlc3RyZXNvdXJjZXMvc2FtcGxlcy8iOwotICBwcm90ZWN0ZWQgU3RyaW5nIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiA9ICJ0ZXN0cmVzb3VyY2VzL2dlbmVyYXRlZFJlc3VsdHMvIjsKLSAgcHJvdGVjdGVkIFN0cmluZyBJREVBTF9SRVNVTFRTX0RJUiA9ICJ0ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy8iOwotICBwcm90ZWN0ZWQgU3RyaW5nIExPR19GSUxFX0xPQ0FUSU9OID0gInJlc3VsdHMubG9nIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzIjsKLSAgcHJpdmF0ZSBYU0RWYWxpZGF0b3IgdmFsaWRhdG9yID0gWFNEVmFsaWRhdG9yLmdldEluc3RhbmNlKCk7Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkKLSAgewotICAgIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJ1biBhIHZhbGlkYXRvciB0ZXN0LiBUaGUgdGVzdCB3aWxsIHJ1biB0aGUgdmFsaWRhdG9yLCBsb2cgdGhlIHJlc3VsdHMgYW5kIGNvbXBhcmUgdGhlIHJlc3VsdHMKLSAgICogd2l0aCB0aGUgaWRlYWwgcmVzdWx0cy4gVGhlIHRlc3Qgd2lsbCBvbmx5IHBhc3MgaWYgdGhlIHR3byBsb2cgZmlsZXMgYXJlIHRoZSBzYW1lLgotICAgKiAKLSAgICogQHBhcmFtIHRlc3RmaWxlIFRoZSBmaWxlIHRvIHJ1biB0aGUgdmFsaWRhdG9yIHRlc3Qgb24uCi0gICAqIEBwYXJhbSBsb2dsb2NhdGlvbiBUaGUgbG9jYXRpb24gdG8gY3JlYXRlIHRoZSBsb2cgZmlsZS4KLSAgICogQHBhcmFtIGlkZWFsbG9nbG9jYXRpb24gVGhlIGxvY2F0aW9uIG9mIHRoZSBpZGVhbCBsb2cgZmlsZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1blRlc3QoU3RyaW5nIHRlc3RmaWxlLCBTdHJpbmcgbG9nbG9jYXRpb24sIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uKQotICB7Ci0JcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24sIG5ldyBYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpKTsKLSAgfQotICAvKioKLSAgICogUnVuIGEgdmFsaWRhdG9yIHRlc3QuIFRoZSB0ZXN0IHdpbGwgcnVuIHRoZSB2YWxpZGF0b3IsIGxvZyB0aGUgcmVzdWx0cyBhbmQgY29tcGFyZSB0aGUgcmVzdWx0cwotICAgKiB3aXRoIHRoZSBpZGVhbCByZXN1bHRzLiBUaGUgdGVzdCB3aWxsIG9ubHkgcGFzcyBpZiB0aGUgdHdvIGxvZyBmaWxlcyBhcmUgdGhlIHNhbWUuCi0gICAqIAotICAgKiBAcGFyYW0gdGVzdGZpbGUgCi0gICAqIAkJVGhlIGZpbGUgdG8gcnVuIHRoZSB2YWxpZGF0b3IgdGVzdCBvbi4KLSAgICogQHBhcmFtIGxvZ2xvY2F0aW9uIAotICAgKiAJCVRoZSBsb2NhdGlvbiB0byBjcmVhdGUgdGhlIGxvZyBmaWxlLgotICAgKiBAcGFyYW0gaWRlYWxsb2dsb2NhdGlvbiAKLSAgICogCQlUaGUgbG9jYXRpb24gb2YgdGhlIGlkZWFsIGxvZyBmaWxlLgotICAgKiBAcGFyYW0gY29uZmlndXJhdGlvbiAKLSAgICogCQlUaGUgWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgdmFsaWRhdGlvbiB0ZXN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgcnVuVGVzdChTdHJpbmcgdGVzdGZpbGUsIFN0cmluZyBsb2dsb2NhdGlvbiwgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24sIFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0gIHsKLSAgICBWYWxpZGF0aW9uUmVwb3J0IHZhbHJlcG9ydCA9IHZhbGlkYXRvci52YWxpZGF0ZSh0ZXN0ZmlsZSwgbnVsbCwgY29uZmlndXJhdGlvbik7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgY3JlYXRlTG9nKGxvZ2xvY2F0aW9uLCB2YWxyZXBvcnQpOwotICAgICAgU3RyaW5nIGdlbmVyYXRlZExvZyA9IGdldFN0cmluZ0Zyb21GaWxlKGxvZ2xvY2F0aW9uKTsKLSAgICAgIFN0cmluZyBpZGVhbExvZyA9IGdldFN0cmluZ0Zyb21GaWxlKGlkZWFsbG9nbG9jYXRpb24pOwotICAgICAgYXNzZXJ0RXF1YWxzKGlkZWFsTG9nLCBnZW5lcmF0ZWRMb2cpOwotICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoIkNvdWxkIG5vdCBjb21wYXJlIGxvZyBmaWxlcyIpOwotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGZpbGUuCi0gICAqIAotICAgKiBAcGFyYW0gZmlsZW5hbWUgdGhlIGZpbGUgbmFtZSBvZiB0aGUgZmlsZSB0byBnZXQgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbi4KLSAgICogQHJldHVybiBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGlmIHN1Y2Nlc3NmdWwuCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uIFRocm93biBpZiB1bmFibGUgdG8gY3JlYXRlIGEgc3RyaW5nIHJlcHJlc2VudGFpb24gb2YgdGhlIGZpbGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRTdHJpbmdGcm9tRmlsZShTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIFN0cmluZ0J1ZmZlciBmaWxlc3RyaW5nID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIFJlYWRlciByZWFkZXIgPSBudWxsOwotICAgIEJ1ZmZlcmVkUmVhZGVyIGJ1ZnJlYWRlciA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZW5hbWUpOwotICAgICAgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoZmlsZSk7Ci0gICAgICBidWZyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIocmVhZGVyKTsKLSAgICAgIHdoaWxlIChidWZyZWFkZXIucmVhZHkoKSkKLSAgICAgIHsKLSAgICAgICAgZmlsZXN0cmluZy5hcHBlbmQoYnVmcmVhZGVyLnJlYWRMaW5lKCkgKyAiXG4iKTsKLSAgICAgIH0KLSAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCk7Ci0gICAgfSBmaW5hbGx5Ci0gICAgewotICAgICAgYnVmcmVhZGVyLmNsb3NlKCk7Ci0gICAgICByZWFkZXIuY2xvc2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZpbGVzdHJpbmcudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIGxvZyBmaWxlIGZvciBhbiBYU0QgdGVzdC4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgbmFtZSBvZiB0aGUgbG9nIGZpbGUgdG8gY3JlYXRlLgotICAgKiBAcGFyYW0gdmFscmVwb3J0IFRoZSB2YWxpZGF0aW9uIHJlcG9ydCBmb3IgdGhpcyBmaWxlLgotICAgKiBAcmV0dXJuIFRoZSBmaWxlIGNvbnRlbnRzIGFzIGEgc3RyaW5nIGlmIHN1Y2Nlc3NmdWwgb3IgbnVsbCBpZiBub3Qgc3VjY2Vzc2Z1bC4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZUxvZyhTdHJpbmcgZmlsZW5hbWUsIFZhbGlkYXRpb25SZXBvcnQgdmFscmVwb3J0KQotICB7Ci0gICAgIFZhbGlkYXRpb25NZXNzYWdlW10gdmFsbWVzc2FnZXMgPSB2YWxyZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCk7Ci0gICAgIGludCBudW1tZXNzYWdlcyA9IHZhbG1lc3NhZ2VzLmxlbmd0aDsvL3ZhbGlkYXRvci5nZXRFcnJvcnMoKS5zaXplKCkgKyB2YWxpZGF0b3IuZ2V0V2FybmluZ3MoKS5zaXplKCk7Ci0gICAgIFN0cmluZ0J1ZmZlciBlcnJvcnNTdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgIFN0cmluZ0J1ZmZlciB3YXJuaW5nc1N0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgaW50IG51bWVycm9ycyA9IDA7Ci0gICAgIGludCBudW13YXJuaW5ncyA9IDA7Ci0gICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1tZXNzYWdlczsgaSsrKQotICAgICB7Ci0gICAgICAgVmFsaWRhdGlvbk1lc3NhZ2UgdmFsbWVzID0gdmFsbWVzc2FnZXNbaV07Ci0gICAgICAgaWYodmFsbWVzLmdldFNldmVyaXR5KCkgPT0gVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0xPVykKLSAgICAgICB7Ci0gICAgICAgICBudW13YXJuaW5ncysrOwotICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSB2YWxtZXMuZ2V0TWVzc2FnZSgpOwotICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZUFsbCgiJ1teJ10qIiArIFBMVUdJTl9OQU1FICsgIlteJy9dKi8iLCAiJyIpOwotICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZUFsbCgiWyhdW14oXSoiICsgUExVR0lOX05BTUUgKyAiW14nL10qLyIsICIoIik7Ci0gICAgICAgICB3YXJuaW5nc1N0cmluZy5hcHBlbmQobWVzc2FnZSArICIgWyIgKyB2YWxtZXMuZ2V0TGluZU51bWJlcigpICsiLCAiICsgdmFsbWVzLmdldENvbHVtbk51bWJlcigpICsiXVxuIik7Ci0gICAgICAgICB3YXJuaW5nc1N0cmluZy5hcHBlbmQoY3JlYXRlTmVzdGVkTWVzc2FnZVN0cmluZyh2YWxtZXMuZ2V0TmVzdGVkTWVzc2FnZXMoKSkpOwotICAgICAgIH0KLSAgICAgICBlbHNlCi0gICAgICAgewotICAgICAgICAgbnVtZXJyb3JzKys7Ci0gICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IHZhbG1lcy5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCInW14nXSoiICsgUExVR0lOX05BTUUgKyAiW14nL10qLyIsICInIik7Ci0gICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCJbKF1bXihdKiIgKyBQTFVHSU5fTkFNRSArICJbXicvXSovIiwgIigiKTsKLSAgICAgICAgIGVycm9yc1N0cmluZy5hcHBlbmQobWVzc2FnZSArICIgWyIgKyB2YWxtZXMuZ2V0TGluZU51bWJlcigpICsiLCAiICsgdmFsbWVzLmdldENvbHVtbk51bWJlcigpICsiXVxuIik7Ci0gICAgICAgICBlcnJvcnNTdHJpbmcuYXBwZW5kKGNyZWF0ZU5lc3RlZE1lc3NhZ2VTdHJpbmcodmFsbWVzLmdldE5lc3RlZE1lc3NhZ2VzKCkpKTsKLSAgICAgICB9Ci0gICAgIH0KLSAgICAgU3RyaW5nQnVmZmVyIGxvZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgbG9nLmFwcGVuZCgibnVtYmVyIG9mIGVycm9ycyAgICAgIDogIiArIG51bWVycm9ycyArICJcbiIpOwotICAgICBpZihudW13YXJuaW5ncyA+IDApCi0gICAgIHsKLSAgICAgICBsb2cuYXBwZW5kKCJudW1iZXIgb2Ygd2FybmluZ3MgICAgOiAiICsgbnVtd2FybmluZ3MgKyAiXG4iKTsKLSAgICAgfQotICAgICBsb2cuYXBwZW5kKCJcbi0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLSAgICAgaWYobnVtZXJyb3JzID09IDApCi0gICAgIHsKLSAgICAgICBsb2cuYXBwZW5kKCIobm9uZSlcbiIpOwotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotICAgICAgIGxvZy5hcHBlbmQoZXJyb3JzU3RyaW5nLnRvU3RyaW5nKCkpOwotICAgICB9Ci0gICAgIGlmKG51bXdhcm5pbmdzID4gMCkKLSAgICAgewotICAgICAgIGxvZy5hcHBlbmQoIi0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLSAgICAgICBsb2cuYXBwZW5kKGVycm9yc1N0cmluZy50b1N0cmluZygpKTsKLSAgICAgfQotICAgICBsb2cuYXBwZW5kKHdhcm5pbmdzU3RyaW5nLnRvU3RyaW5nKCkpOwotICAgICBsb2cuYXBwZW5kKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0gICAKLSAgICAgRGF0YU91dHB1dFN0cmVhbSBvdXRTdHJlYW0gPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIEZpbGUgbG9nZmlsZSA9IG5ldyBGaWxlKGZpbGVuYW1lKTsKLSAgICAgIEZpbGUgcGFyZW50ID0gbG9nZmlsZS5nZXRQYXJlbnRGaWxlKCk7Ci0gIAlpZiAoIXBhcmVudC5leGlzdHMoKSkgCi0gIAl7Ci0gIAkgIHBhcmVudC5ta2RpcnMoKTsKLSAgCX0KLSAgICAgIGlmKGxvZ2ZpbGUuZXhpc3RzKCkpCi0gICAgICB7Ci0gICAgICAgIGxvZ2ZpbGUuZGVsZXRlKCk7Ci0gICAgICB9Ci0gICAgICBsb2dmaWxlLmNyZWF0ZU5ld0ZpbGUoKTsKLSAgICAgIAotICAgICAgb3V0U3RyZWFtID0gbmV3IERhdGFPdXRwdXRTdHJlYW0obmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZW5hbWUsIHRydWUpKTsKLSAgICAgIG91dFN0cmVhbS53cml0ZUJ5dGVzKGxvZy50b1N0cmluZygpKTsKLSAgICAgIG91dFN0cmVhbS5jbG9zZSgpOwotCi0gICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBJZiB3ZSBjYW4ndCB3cml0ZSB0aGUgbG9nIHRoZW4gY2xlYXIgdGhlIGxvZy4KLSAgICAgIGxvZy5kZWxldGUoMCwgbG9nLmxlbmd0aCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxvZy50b1N0cmluZygpOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKExpc3QgbmVzdGVkTWVzc2FnZXMpCi0gIHsKLSAgICByZXR1cm4gY3JlYXRlTmVzdGVkTWVzc2FnZVN0cmluZyhuZXN0ZWRNZXNzYWdlcywgMCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZU5lc3RlZE1lc3NhZ2VTdHJpbmcoTGlzdCBuZXN0ZWRNZXNzYWdlcywgaW50IGRlcHRoKQotICB7Ci0gICAgaWYobmVzdGVkTWVzc2FnZXMgIT0gbnVsbCAmJiBuZXN0ZWRNZXNzYWdlcy5zaXplKCkgPiAwKQotICAgIHsKLSAgICAgIFN0cmluZyBtZXNzYWdlU3RyaW5nID0gIiI7Ci0gICAgICBJdGVyYXRvciBuZXN0ZWRNZXNJdGVyID0gbmVzdGVkTWVzc2FnZXMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlKG5lc3RlZE1lc0l0ZXIuaGFzTmV4dCgpKQotICAgICAgewotICAgICAgICBWYWxpZGF0aW9uTWVzc2FnZSBuZXN2YWxtZXMgPSAoVmFsaWRhdGlvbk1lc3NhZ2UpbmVzdGVkTWVzSXRlci5uZXh0KCk7Ci0gICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgbWVzc2FnZVN0cmluZyArPSAiICI7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgY29udGFpbnMgYW55IGZpbGUgcmVmZXJlbmNlcyBtYWtlIHRoZW0gcmVsYXRpdmUuCi0gICAgICAgIFN0cmluZyBtZXNzYWdlID0gbmVzdmFsbWVzLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZUFsbCgiJ1teJ10qIiArIFBMVUdJTl9OQU1FICsgIlteJy9dKi8iLCAiJyIpOwotICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCJbKF1bXihdKiIgKyBQTFVHSU5fTkFNRSArICJbXicvXSovIiwgIlsoXSIpOwotICAgICAgICBtZXNzYWdlU3RyaW5nICs9ICgiLT4gIiArIG1lc3NhZ2UgKyAiIFsiICsgbmVzdmFsbWVzLmdldExpbmVOdW1iZXIoKSArIiwgIiArIG5lc3ZhbG1lcy5nZXRDb2x1bW5OdW1iZXIoKSArIl1cbiIpOwotICAgICAgICBtZXNzYWdlU3RyaW5nICs9IGNyZWF0ZU5lc3RlZE1lc3NhZ2VTdHJpbmcobmVzdmFsbWVzLmdldE5lc3RlZE1lc3NhZ2VzKCksIGRlcHRoICsgMSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbWVzc2FnZVN0cmluZzsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBJUHJvamVjdCBjcmVhdGVTaW1wbGVQcm9qZWN0KFN0cmluZyBwcm9qZWN0TmFtZSwgU3RyaW5nW10gZmlsZXMpCi0gIHsKLSAgICBmaW5hbCBJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLSAgICBmaW5hbCBJUHJvamVjdCBwcm9qZWN0ID0gd29ya3NwYWNlLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICBpZighcHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICB0cnkKLQkgIHsKLSAgICAgICAgcHJvamVjdC5jcmVhdGUobnVsbCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaChDb3JlRXhjZXB0aW9uIGUpCi0JICB7Ci0gICAgICAgIGZhaWwoIkNvdWxkIG5vdCBjcmVhdGUgcHJvamVjdCAiICsgcHJvamVjdE5hbWUgKyBlKTsKLSAgICAgIH0gCi0gICAgfQotICAgIGlmKCFwcm9qZWN0LmlzT3BlbigpKQotICAgIHsKLSAgICAgIHRyeQotCSAgewotICAgICAgICBwcm9qZWN0Lm9wZW4obnVsbCk7Ci0JICB9Ci0gICAgICBjYXRjaChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGZhaWwoIkNvdWxkIG5vdCBvcGVuIHByb2plY3QgIiArIHByb2plY3ROYW1lICsgZSk7Ci0JICB9Ci0gICAgfQotICAgIHRyeQotICAgIHsKLSAgICAgIElQcm9qZWN0RGVzY3JpcHRpb24gcHJvamVjdERlc2NyaXB0aW9uID0gcHJvamVjdC5nZXREZXNjcmlwdGlvbigpOyAKLSAgICAgIHByb2plY3REZXNjcmlwdGlvbi5zZXROYW1lKHByb2plY3ROYW1lKTsKLSAgICAgIHByb2plY3Quc2V0RGVzY3JpcHRpb24ocHJvamVjdERlc2NyaXB0aW9uLCBudWxsKTsKLSAgICB9Ci0gICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbCgiVW5hYmxlIHRvIHNldCBwcm9qZWN0IHByb3BlcnRpZXMgZm9yIHByb2plY3QgIiArIHByb2plY3ROYW1lICsgIi4gIiArIGUpOwotICAgIH0KLQotICAgIGlmKGZpbGVzICE9IG51bGwpCi0gICAgewotICAgICAgaW50IG51bWZpbGVzID0gZmlsZXMubGVuZ3RoOwotICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bWZpbGVzOyBpKyspCi0gICAgICB7Ci0gICAgICAgIHRyeQotCQl7Ci0gICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gZmlsZXNbaV07Ci0gICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKCdcXCcsJy8nKTsKLSAgICAgICAgICBpZihmaWxlbmFtZS5zdGFydHNXaXRoKCJmaWxlOiIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDUpOwotCQkJd2hpbGUoZmlsZW5hbWUuc3RhcnRzV2l0aCgiLyIpKQotCSAgICAgICAgewotCSAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZygxKTsKLQkgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZW5hbWUpOwotICAgICAgICAgIEZpbGVJbnB1dFN0cmVhbSBpbiA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7Ci0gICAgICAgICAgSUZpbGUgaUZpbGUgPSBwcm9qZWN0LmdldEZpbGUoZmlsZS5nZXROYW1lKCkpOwotICAgICAgICAgIGlmKCFpRmlsZS5leGlzdHMoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpRmlsZS5jcmVhdGUoaW4sIHRydWUsIG51bGwpOwotICAgICAgICAgICAgaW4uY2xvc2UoKTsKLSAgICAgICAgICB9Ci0JCX0KLSAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0JCXsKLQkJICBmYWlsKCJVbmFibGUgdG8gbG9jYXRlIGZpbGUgIiArIGZpbGVzW2ldKTsKLQkJfSAKLSAgICAgIH0KLSAgICB9Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcHJvamVjdC5yZWZyZXNoTG9jYWwoLTEsIG51bGwpOwotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSkKLSAgICB7fQotICAgIHJldHVybiBwcm9qZWN0OwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CdWdGaXhlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0J1Z0ZpeGVzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmE2YWQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0J1Z0ZpeGVzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklDYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklDYXRhbG9nRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSU5leHRDYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotCi0KLQotLyoqCi0gKiBUZXN0IGNsYXNzIGZvciBidWcgZml4ZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBCdWdGaXhlc1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgQlVHRklYRVNfRElSID0gIkJ1Z0ZpeGVzLyI7Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShCdWdGaXhlc1Rlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkKLSAgewotICAgIHN1cGVyLnNldFVwKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9CdWdGaXhlcy9FbXB0eS54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFbXB0eSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRW1wdHkiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIkVtcHR5RmlsZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiRW1wdHlGaWxlLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkVtcHR5RmlsZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIkludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIGNyZWF0ZVNpbXBsZVByb2plY3QoIlByb2plY3QiLCBuZXcgU3RyaW5nW117dGVzdGZpbGV9KTsKLSAgICAKLSAgICAKLSAgICBJQ2F0YWxvZyBjYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLSAgICBJTmV4dENhdGFsb2dbXSBuZXh0Q2F0YWxvZ3MgPSBjYXRhbG9nLmdldE5leHRDYXRhbG9ncygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmV4dENhdGFsb2dzLmxlbmd0aDsgaSsrKQotCXsKLQkJSU5leHRDYXRhbG9nIG5leHRDYXRhbG9nID0gbmV4dENhdGFsb2dzW2ldOwotCQlpZihYTUxDb3JlUGx1Z2luLlVTRVJfQ0FUQUxPR19JRC5lcXVhbHMobmV4dENhdGFsb2cuZ2V0SWQoKSkpewotCQkJSUNhdGFsb2cgdXNlckNhdGFsb2cgPSBuZXh0Q2F0YWxvZy5nZXRSZWZlcmVuY2VkQ2F0YWxvZygpOwotCQkJaWYodXNlckNhdGFsb2cgIT0gbnVsbCkKLQkJCXsKLQkJCQlJQ2F0YWxvZ0VudHJ5IGNhdGFsb2dFbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KXVzZXJDYXRhbG9nLmNyZWF0ZUNhdGFsb2dFbGVtZW50KElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9QVUJMSUMpOwotCQkJICAgIGNhdGFsb2dFbnRyeS5zZXRLZXkoInRlc3RLZXkiKTsKLQkJCSAgICBjYXRhbG9nRW50cnkuc2V0VVJJKCJodHRwOi8vdGVzdHVyaSIpOwotCQkJICAgIHVzZXJDYXRhbG9nLmFkZENhdGFsb2dFbGVtZW50KGNhdGFsb2dFbnRyeSk7Ci0JCQkgICAgcnVuVGVzdCgicGxhdGZvcm06L3Jlc291cmNlL1Byb2plY3QvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QiLypGSUxFX1BST1RPQ09MICsgZmlsZS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCkqLywgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotCQkJICAgIGNhdGFsb2cucmVtb3ZlQ2F0YWxvZ0VsZW1lbnQoY2F0YWxvZ0VudHJ5KTsKLQkJCX0JCi0JCX0JCi0JfSAKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE1pc3NpbmdDbG9zaW5nU2NoZW1hVGFnKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJNaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIk1pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIk1pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvQnVnRml4ZXMvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIkltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL0ltcG9ydEludmFsaWRMb2NhdGlvbi9JbXBvcnRJbnZhbGlkTG9jYXRpb24ueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0SW52YWxpZExvY2F0aW9uKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRJbnZhbGlkTG9jYXRpb24iOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIkltcG9ydEludmFsaWRMb2NhdGlvbi8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0SW52YWxpZExvY2F0aW9uLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkltcG9ydEludmFsaWRMb2NhdGlvbi8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL1R3b09wZW5CcmFja2V0cy9Ud29PcGVuQnJhY2tldHMueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VHdvT3BlbkJyYWNrZXRzKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJUd29PcGVuQnJhY2tldHMiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIlR3b09wZW5CcmFja2V0cy8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiVHdvT3BlbkJyYWNrZXRzLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIlR3b09wZW5CcmFja2V0cy8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9BLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJJbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvQnVnRml4ZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL2RvZy54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RIb25vdXJBbGxTY2hlbWFMb2NhdGlvbnMoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gImRvZyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJIb25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IG5ldyBYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGNvbmZpZ3VyYXRpb24uc2V0RmVhdHVyZShYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5IT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMsIHRydWUpOwotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKCJVbmFibGUgdG8gc2V0IHRoZSBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgZmVhdHVyZSB0byB0cnVlOiAiICsgZSk7Ci0gICAgfQotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uLCBjb25maWd1cmF0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL1hTRFJlZ2lzdGVyZWRXaXRoQ2F0YWxvZy9JbnZhbGlkU2NoZW1hV2l0aE5hbWVzcGFjZUluQ2F0YWxvZy54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkU2NoZW1hV2l0aE5hbWVzcGFjZUluQ2F0YWxvZygpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW52YWxpZFNjaGVtYVdpdGhOYW1lc3BhY2VJbkNhdGFsb2ciOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiWFNEUmVnaXN0ZXJlZFdpdGhDYXRhbG9nLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJYU0RSZWdpc3RlcmVkV2l0aENhdGFsb2cvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiWFNEUmVnaXN0ZXJlZFdpdGhDYXRhbG9nLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgY3JlYXRlU2ltcGxlUHJvamVjdCgiUHJvamVjdCIsIG5ldyBTdHJpbmdbXXt0ZXN0ZmlsZX0pOwotICAgIAotICAgIAotICAgIElDYXRhbG9nIGNhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotICAgIElOZXh0Q2F0YWxvZ1tdIG5leHRDYXRhbG9ncyA9IGNhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXh0Q2F0YWxvZ3MubGVuZ3RoOyBpKyspCi0JewotCQlJTmV4dENhdGFsb2cgbmV4dENhdGFsb2cgPSBuZXh0Q2F0YWxvZ3NbaV07Ci0JCWlmKFhNTENvcmVQbHVnaW4uVVNFUl9DQVRBTE9HX0lELmVxdWFscyhuZXh0Q2F0YWxvZy5nZXRJZCgpKSl7Ci0JCQlJQ2F0YWxvZyB1c2VyQ2F0YWxvZyA9IG5leHRDYXRhbG9nLmdldFJlZmVyZW5jZWRDYXRhbG9nKCk7Ci0JCQlpZih1c2VyQ2F0YWxvZyAhPSBudWxsKQotCQkJewotCQkJCUlDYXRhbG9nRW50cnkgY2F0YWxvZ0VudHJ5ID0gKElDYXRhbG9nRW50cnkpdXNlckNhdGFsb2cuY3JlYXRlQ2F0YWxvZ0VsZW1lbnQoSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0JCQkgICAgY2F0YWxvZ0VudHJ5LnNldEtleSgiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUiKTsKLQkJCSAgICBjYXRhbG9nRW50cnkuc2V0VVJJKCJwbGF0Zm9ybTovcmVzb3VyY2UvUHJvamVjdC9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZCIpOwotCQkJICAgIHVzZXJDYXRhbG9nLmFkZENhdGFsb2dFbGVtZW50KGNhdGFsb2dFbnRyeSk7Ci0JCQkgICAgcnVuVGVzdCgicGxhdGZvcm06L3Jlc291cmNlL1Byb2plY3QvSW52YWxpZFNjaGVtYVdpdGhOYW1lc3BhY2VJbkNhdGFsb2cueHNkIiwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotCQkJICAgIGNhdGFsb2cucmVtb3ZlQ2F0YWxvZ0VsZW1lbnQoY2F0YWxvZ0VudHJ5KTsKLQkJCX0JCi0JCX0JCi0JfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvUGF0aHNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9QYXRoc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJiMTJhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9QYXRoc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0vKioKLSAqIFRlc3RzIHRoYXQgdGVzdCB2YXJpb3VzIHR5cGVzIG9mIHZhcmlhdGlvbnMgaW4gZmlsZSBwYXRocy4KLSAqLwotcHVibGljIGNsYXNzIFBhdGhzVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICBwcml2YXRlIFN0cmluZyBQQVRIU19ESVIgPSAiUGF0aHMvIjsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFBhdGhzVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKQotICB7Ci0gICAgc3VwZXIuc2V0VXAoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNwYWNlSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlNwYWNlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTcGFjZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldClJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXQpSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0dEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDbG9zZUJyYWNrZXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldClJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENsb3NlQnJhY2tldEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJDbG9zZUJyYWNrZXQpSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2hJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RGFzaEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2hJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJEYXNoLUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2gtSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJFeGNsYW1hdGlvbkluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvbiFJbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXhjbGFtYXRpb25JbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uIUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEV4Y2xhbWF0aW9uSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldChJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuQnJhY2tldEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldChJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldChJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuQnJhY2tldEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2RJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UGVyaW9kSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2QuSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZSdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RRdW90ZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZSdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFF1b3RlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUXVvdGVJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGUnSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFF1b3RlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZSdJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZSdJbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RRdW90ZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZSdJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2UgSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2UgSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFRpbGRlSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VGlsZGVJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJUaWxkZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VGlsZGVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlfkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFRpbGRlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlfkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VW5kZXJzY29yZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VW5kZXJzY29yZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VW5kZXJzY29yZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQW5nbGVIYXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioqKioqKioqKioqKioqKioKLSAgICogVGVzdCBJbXBvcnRzCi0gICAqKioqKioqKioqKioqKioqKi8KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEFuZ2xlSGF0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRBbmdsZUhhdEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0QW5nbGVIYXRJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0QW5nbGVIYXRJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRBbmdsZUhhdEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydEFuZ2xlSGF0SW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRTcGFjZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRTcGFjZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFNwYWNlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0U3BhY2VJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXQpSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydENsb3NlQnJhY2tldEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQ2xvc2VCcmFja2V0KUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydENsb3NlQnJhY2tldHRJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldClJbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0Q2xvc2VCcmFja2V0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRDbG9zZUJyYWNrZXQpSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldClJbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRDbG9zZUJyYWNrZXRJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0Q2xvc2VCcmFja2V0KUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RGFzaEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnREYXNoSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydERhc2hJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnREYXNoSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RGFzaEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0RGFzaC1JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RGFzaEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnREYXNoLUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbiFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRFeGNsYW1hdGlvbkluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRFeGNsYW1hdGlvbkluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbiFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb24hSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEV4Y2xhbWF0aW9uSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRFeGNsYW1hdGlvbiFJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvbiFJbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRFeGNsYW1hdGlvbkluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRFeGNsYW1hdGlvbiFJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXQoSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0T3BlbkJyYWNrZXRJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXQoSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRPcGVuQnJhY2tldEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydE9wZW5CcmFja2V0KEluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRPcGVuQnJhY2tldEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0T3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXQoSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0T3BlbkJyYWNrZXRJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0T3BlbkJyYWNrZXQoSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0UGVyaW9kSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFBlcmlvZEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFBlcmlvZEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0UGVyaW9kSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFBlcmlvZC5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGUnSW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0UXVvdGVJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UXVvdGVJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGUnSW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRRdW90ZUluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFF1b3RlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlJ0luRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRRdW90ZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UXVvdGUnSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGUnSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0UXVvdGVJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UXVvdGUnSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0U3BhY2VJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFNwYWNlIEluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFNwYWNlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFNwYWNlIEluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRUaWxkZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRUaWxkZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFRpbGRlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0VGlsZGVJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFRpbGRlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRUaWxkZX5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRUaWxkZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFVuZGVyc2NvcmVJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRVbmRlcnNjb3JlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0VW5kZXJzY29yZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFVuZGVyc2NvcmVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFVuZGVyc2NvcmVJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hTRFZhbGlkYXRpb25UZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3ODcxYzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgcGx1Z2luIGNsYXNzIGZvciB0aGlzIHRlc3QgcGx1Z2luLgotICovCi1wdWJsaWMgY2xhc3MgWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgQnVuZGxlIHBsdWdpbkJ1bmRsZTsKLQotICBwdWJsaWMgWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luKCkKLSAgewotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQWN0aXZhdG9yI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIAotICB7Ci0Jc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JcGx1Z2luQnVuZGxlID0gY29udGV4dC5nZXRCdW5kbGUoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUFjdGl2YXRvciNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLQlwbHVnaW5CdW5kbGUgPSBudWxsOwotCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIGluc3RhbGwgVVJMIG9mIHRoaXMgcGx1Z2luLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgaW5zdGFsbCB1cmwgb2YgdGhpcyBwbHVnaW4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEluc3RhbGxVUkwoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmV0dXJuIEZpbGVMb2NhdG9yLnJlc29sdmUocGx1Z2luQnVuZGxlLmdldEVudHJ5KCIvIikpLmdldEZpbGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVkOGZkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QKLQluYW1lPSJ0ZXN0c3VpdGUiCi0JZGVmYXVsdD0icnVuIgotCWJhc2VkaXI9Ii4iPgotCi0JPCEtLSBDb25maWd1cmFibGUgUHJvcGVydGllcyAtLT4KLQotCTwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBlY2xpcHNlLWhvbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9InBsdWdpbi1uYW1lIgotCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzIiAvPgotCi0JPCEtLSBFbmQgQ29uZmlndXJhYmxlIFByb3BlcnRpZXMgLS0+Ci0KLQk8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotCTwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9ImVjbGlwc2UtaG9tZSIKLQkJdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iIC8+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9ImJ2dHdvcmtzcGFjZSIKLQkJdmFsdWU9IiR7YmFzZWRpcn0iIC8+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9ImxpYnJhcnktZmlsZSIKLQkJdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9IndvcmtzcGFjZS1mb2xkZXIiCi0JCXZhbHVlPSIke2J2dHdvcmtzcGFjZX0vJHtwbHVnaW4tbmFtZX0iIC8+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0JPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLQk8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLQk8dGFyZ2V0IG5hbWU9ImluaXQiPgotCQk8dHN0YW1wIC8+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldAotCQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9IgotCQkJCWluY2x1ZGVzPSJvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMuKi54bWwiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgotCi0JPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLQk8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotCQk8IS0tIFN0YXJ0IHdpdGggY2xlYW4gZGF0YSB3b3Jrc3BhY2UgLS0+Ci0JCTxkZWxldGUKLQkJCWRpcj0iJHt3b3Jrc3BhY2UtZm9sZGVyfSIKLQkJCXF1aWV0PSJ0cnVlIiAvPgotCi0JCTxhbnQKLQkJCXRhcmdldD0iY29yZS10ZXN0IgotCQkJYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotCQkJZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iZGF0YS1kaXIiCi0JCQkJdmFsdWU9IiR7d29ya3NwYWNlLWZvbGRlcn0iIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJCQl2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJjbGFzc25hbWUiCi0JCQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5BbGxYU0RUZXN0cyIgLz4KLQkJPC9hbnQ+Ci0KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLQk8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLQkJPGRlbGV0ZQotCQkJZGlyPSIke3dvcmtzcGFjZS1mb2xkZXJ9IgotCQkJcXVpZXQ9InRydWUiIC8+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0JPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotCTx0YXJnZXQKLQkJbmFtZT0icnVuIgotCQlkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotCQk8YW50Ci0JCQl0YXJnZXQ9ImNvbGxlY3QiCi0JCQlhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0JCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJpbmNsdWRlcyIKLQkJCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzKi54bWwiIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJvdXRwdXQtZmlsZSIKLQkJCQl2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNTM1NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWdlbmVyYXRlZFJlc3VsdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9FbXB0eUZpbGUvRW1wdHkueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9FbXB0eUZpbGUvRW1wdHkueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvRW1wdHlGaWxlL0VtcHR5LnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvZG9nLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL2RvZy54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvZG9nLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbXBvcnRJbnZhbGlkTG9jYXRpb24vSW1wb3J0SW52YWxpZExvY2F0aW9uLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW1wb3J0SW52YWxpZExvY2F0aW9uL0ltcG9ydEludmFsaWRMb2NhdGlvbi54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWZmY2VmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbXBvcnRJbnZhbGlkTG9jYXRpb24vSW1wb3J0SW52YWxpZExvY2F0aW9uLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjaGVtYV9yZWZlcmVuY2UuNDogRmFpbGVkIHRvIHJlYWQgc2NoZW1hIGRvY3VtZW50ICdzdWJkaXIvaW1wb3J0aW5nLnhzZGEnLCBiZWNhdXNlIDEpIGNvdWxkIG5vdCBmaW5kIHRoZSBkb2N1bWVudDsgMikgdGhlIGRvY3VtZW50IGNvdWxkIG5vdCBiZSByZWFkOyAzKSB0aGUgcm9vdCBlbGVtZW50IG9mIHRoZSBkb2N1bWVudCBpcyBub3QgPHhzZDpzY2hlbWE+LiBbMywgOThdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9BLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0EueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0EueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGE2NjUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc3JjLXJlc29sdmUuNC4yOiBFcnJvciByZXNvbHZpbmcgY29tcG9uZW50ICdzdHJpbmdhJy4gSXQgd2FzIGRldGVjdGVkIHRoYXQgJ3N0cmluZ2EnIGlzIGluIG5hbWVzcGFjZSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnLCBidXQgY29tcG9uZW50cyBmcm9tIHRoaXMgbmFtZXNwYWNlIGFyZSBub3QgcmVmZXJlbmNlYWJsZSBmcm9tIHNjaGVtYSBkb2N1bWVudCAncGxhdGZvcm06L3Jlc291cmNlL1Byb2plY3QvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QnLiBJZiB0aGlzIGlzIHRoZSBpbmNvcnJlY3QgbmFtZXNwYWNlLCBwZXJoYXBzIHRoZSBwcmVmaXggb2YgJ3N0cmluZ2EnIG5lZWRzIHRvIGJlIGNoYW5nZWQuIElmIHRoaXMgaXMgdGhlIGNvcnJlY3QgbmFtZXNwYWNlLCB0aGVuIGFuIGFwcHJvcHJpYXRlICdpbXBvcnQnIHRhZyBzaG91bGQgYmUgYWRkZWQgdG8gJ3BsYXRmb3JtOi9yZXNvdXJjZS9Qcm9qZWN0L0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cueHNkJy4gWzMsIDUwXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9NaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZy9NaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZy54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3ZmIwMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTI1XQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9Ud29PcGVuQnJhY2tldHMvVHdvT3BlbkJyYWNrZXRzLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvVHdvT3BlbkJyYWNrZXRzL1R3b09wZW5CcmFja2V0cy54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjMzOTk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9Ud29PcGVuQnJhY2tldHMvVHdvT3BlbkJyYWNrZXRzLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBtYXJrdXAgaW4gdGhlIGRvY3VtZW50IHByZWNlZGluZyB0aGUgcm9vdCBlbGVtZW50IG11c3QgYmUgd2VsbC1mb3JtZWQuIFsxLCAyXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9YU0RSZWdpc3RlcmVkV2l0aENhdGFsb2cvSW52YWxpZFNjaGVtYVdpdGhOYW1lc3BhY2VJbkNhdGFsb2cueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9YU0RSZWdpc3RlcmVkV2l0aENhdGFsb2cvSW52YWxpZFNjaGVtYVdpdGhOYW1lc3BhY2VJbkNhdGFsb2cueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVkMWE5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvWFNEUmVnaXN0ZXJlZFdpdGhDYXRhbG9nL0ludmFsaWRTY2hlbWFXaXRoTmFtZXNwYWNlSW5DYXRhbG9nLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVsZW1lbnQgdHlwZSAiY29tcGxleFR5cGUiIG11c3QgYmUgZm9sbG93ZWQgYnkgZWl0aGVyIGF0dHJpYnV0ZSBzcGVjaWZpY2F0aW9ucywgIj4iIG9yICIvPiIuIFs2LCAzXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1OTRjOTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmYTYxMzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2E2NzJlLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0KUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmY2Y0OWIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RjZWYxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9JbXBvcnREYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyNjk3ZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9JbXBvcnREYXNoLUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwNjI3ZDQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb24hSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0ltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwYThmNDIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb24hSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VkOWJlOC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldChJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRkOGJjZS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydE9wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBhNzAyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9JbXBvcnRQZXJpb2RJblBhdGhJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9JbXBvcnRQZXJpb2RJblBhdGhWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTc5YWVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aEludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aEludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljNzM5ZjkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGUnSW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MDcxZTIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGUnSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9JbXBvcnRRdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY5YTZlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI3ODEyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0NvcHkgb2YgLWZvclhlcmNlczIuNi4yLSBJbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9Db3B5IG9mIC1mb3JYZXJjZXMyLjYuMi0gSW1wb3J0VGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI5YjEwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0NvcHkgb2YgLWZvclhlcmNlczIuNi4yLSBJbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxDQotDQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlJTdFSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQ0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNmNmU5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU5NzEzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWVhM2Y3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFlNzc4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9FbXB0eUZpbGUvRW1wdHkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9FbXB0eUZpbGUvRW1wdHkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvRW1wdHlGaWxlL0VtcHR5LnhzZAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9QYXJ0MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9QYXJ0MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYzgxZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvUGFydDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/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==