PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+DQo8IS0tIE5ld1BhZ2UgLS0+DQo8aHRtbCBsYW5nPSJydSI+DQo8aGVhZD48bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCB1c2VyLXNjYWxhYmxlPW5vLCBpbml0aWFsLXNjYWxlPTEsIG1heGltdW0tc2NhbGU9MSI+DQo8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jICh2ZXJzaW9uIDEuNy4wXzc1KSBvbiBNb24gRGVjIDIxIDEyOjI1OjI0IE1TSyAyMDE1IC0tPg0KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiIGNoYXJzZXQ9IlVURi04Ij4NCjx0aXRsZT5JZ25pdGVTZXJ2aWNlcyAoSWduaXRlIDEuNS4wLWZpbmFsLVNOQVBTSE9UKTwvdGl0bGU+DQo8bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDE1LTEyLTIxIj4NCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uLy4uLy4uL2phdmFkb2MuY3NzIiB0aXRsZT0iU3R5bGUiPg0KPGxpbmsgcmVsPSdzaG9ydGN1dCBpY29uJyBocmVmPSdodHRwczovL2lnbml0ZS5hcGFjaGUub3JnL2Zhdmljb24uaWNvJy8+CjxsaW5rIHR5cGU9J3RleHQvY3NzJyByZWw9J3N0eWxlc2hlZXQnIGhyZWY9J2h0dHA6Ly9hZ29yYmF0Y2hldi50eXBlcGFkLmNvbS9wdWIvc2gvM18wXzgzL3N0eWxlcy9zaENvcmUuY3NzJy8+CjxsaW5rIHR5cGU9J3RleHQvY3NzJyByZWw9J3N0eWxlc2hlZXQnIGhyZWY9J2h0dHA6Ly9hZ29yYmF0Y2hldi50eXBlcGFkLmNvbS9wdWIvc2gvM18wXzgzL3N0eWxlcy9zaFRoZW1lRGVmYXVsdC5jc3MnLz4KPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0naHR0cDovL2Fnb3JiYXRjaGV2LnR5cGVwYWQuY29tL3B1Yi9zaC8zXzBfODMvc2NyaXB0cy9zaENvcmUuanMnPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgc3JjPSdodHRwOi8vYWdvcmJhdGNoZXYudHlwZXBhZC5jb20vcHViL3NoLzNfMF84My9zY3JpcHRzL3NoTGVnYWN5LmpzJz48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0naHR0cDovL2Fnb3JiYXRjaGV2LnR5cGVwYWQuY29tL3B1Yi9zaC8zXzBfODMvc2NyaXB0cy9zaEJydXNoSmF2YS5qcyc+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBzcmM9J2h0dHA6Ly9hZ29yYmF0Y2hldi50eXBlcGFkLmNvbS9wdWIvc2gvM18wXzgzL3NjcmlwdHMvc2hCcnVzaFBsYWluLmpzJz48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0naHR0cDovL2Fnb3JiYXRjaGV2LnR5cGVwYWQuY29tL3B1Yi9zaC8zXzBfODMvc2NyaXB0cy9zaEJydXNoSlNjcmlwdC5qcyc+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBzcmM9J2h0dHA6Ly9hZ29yYmF0Y2hldi50eXBlcGFkLmNvbS9wdWIvc2gvM18wXzgzL3NjcmlwdHMvc2hCcnVzaEJhc2guanMnPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgc3JjPSdodHRwOi8vYWdvcmJhdGNoZXYudHlwZXBhZC5jb20vcHViL3NoLzNfMF84My9zY3JpcHRzL3NoQnJ1c2hYbWwuanMnPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgc3JjPSdodHRwOi8vYWdvcmJhdGNoZXYudHlwZXBhZC5jb20vcHViL3NoLzNfMF84My9zY3JpcHRzL3NoQnJ1c2hTY2FsYS5qcyc+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBzcmM9J2h0dHA6Ly9hZ29yYmF0Y2hldi50eXBlcGFkLmNvbS9wdWIvc2gvM18wXzgzL3NjcmlwdHMvc2hCcnVzaEdyb292eS5qcyc+PC9zY3JpcHQ+CjwvaGVhZD4KDQo8Ym9keT4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tDQogICAgaWYgKGxvY2F0aW9uLmhyZWYuaW5kZXhPZignaXMtZXh0ZXJuYWw9dHJ1ZScpID09IC0xKSB7DQogICAgICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iSWduaXRlU2VydmljZXMgKElnbml0ZSAxLjUuMC1maW5hbC1TTkFQU0hPVCkiOw0KICAgIH0NCi8vLS0+DQo8L3NjcmlwdD4NCjxub3NjcmlwdD4NCjxkaXY+SmF2YVNjcmlwdCBpcyBkaXNhYmxlZCBvbiB5b3VyIGJyb3dzZXIuPC9kaXY+DQo8L25vc2NyaXB0Pg0KPCEtLSA9PT09PT09PT0gU1RBUlQgT0YgVE9QIE5BVkJBUiA9PT09PT09IC0tPg0KPGRpdiBjbGFzcz0idG9wTmF2Ij48YSBuYW1lPSJuYXZiYXJfdG9wIj4NCjwhLS0gICAtLT4NCjwvYT48YSBocmVmPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L2E+PGEgbmFtZT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+DQo8IS0tICAgLS0+DQo8L2E+DQo8dWwgY2xhc3M9Im5hdkxpc3QiIHRpdGxlPSJOYXZpZ2F0aW9uIj4NCjxsaT48YSBocmVmPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPk92ZXJ2aWV3PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPlBhY2thZ2U8L2E+PC9saT4NCjxsaSBjbGFzcz0ibmF2QmFyQ2VsbDFSZXYiPkNsYXNzPC9saT4NCjxsaT48YSBocmVmPSJjbGFzcy11c2UvSWduaXRlU2VydmljZXMuaHRtbCI+VXNlPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0icGFja2FnZS10cmVlLmh0bWwiPlRyZWU8L2E+PC9saT4NCjxsaT48YSBocmVmPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+RGVwcmVjYXRlZDwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj5JbmRleDwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPkhlbHA8L2E+PC9saT4NCjwvdWw+DQo8ZGl2IGNsYXNzPSJhYm91dExhbmd1YWdlIj48ZW0+SWduaXRlIC0gSW4tTWVtb3J5IERhdGEgRmFicmljPC9lbT48L2Rpdj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0ic3ViTmF2Ij4NCjx1bCBjbGFzcz0ibmF2TGlzdCI+DQo8bGk+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvSWduaXRlU2VtYXBob3JlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmFwYWNoZS5pZ25pdGUiPjxzcGFuIGNsYXNzPSJzdHJvbmciPlByZXYgQ2xhc3M8L3NwYW4+PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvSWduaXRlU2V0Lmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmFwYWNoZS5pZ25pdGUiPjxzcGFuIGNsYXNzPSJzdHJvbmciPk5leHQgQ2xhc3M8L3NwYW4+PC9hPjwvbGk+DQo8L3VsPg0KPHVsIGNsYXNzPSJuYXZMaXN0Ij4NCjxsaT48YSBocmVmPSIuLi8uLi8uLi9pbmRleC5odG1sP29yZy9hcGFjaGUvaWduaXRlL0lnbml0ZVNlcnZpY2VzLmh0bWwiIHRhcmdldD0iX3RvcCI+RnJhbWVzPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iSWduaXRlU2VydmljZXMuaHRtbCIgdGFyZ2V0PSJfdG9wIj5ObyBGcmFtZXM8L2E+PC9saT4NCjwvdWw+DQo8dWwgY2xhc3M9Im5hdkxpc3QiIGlkPSJhbGxjbGFzc2VzX25hdmJhcl90b3AiPg0KPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj5BbGwgQ2xhc3NlczwvYT48L2xpPg0KPC91bD4NCjxkaXY+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQ0KICBhbGxDbGFzc2VzTGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbGxjbGFzc2VzX25hdmJhcl90b3AiKTsNCiAgaWYod2luZG93PT10b3ApIHsNCiAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsNCiAgfQ0KICBlbHNlIHsNCiAgICBhbGxDbGFzc2VzTGluay5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOw0KICB9DQogIC8vLS0+DQo8L3NjcmlwdD4NCjwvZGl2Pg0KPGRpdj4NCjx1bCBjbGFzcz0ic3ViTmF2TGlzdCI+DQo8bGk+U3VtbWFyeTombmJzcDs8L2xpPg0KPGxpPk5lc3RlZCZuYnNwO3wmbmJzcDs8L2xpPg0KPGxpPkZpZWxkJm5ic3A7fCZuYnNwOzwvbGk+DQo8bGk+Q29uc3RyJm5ic3A7fCZuYnNwOzwvbGk+DQo8bGk+PGEgaHJlZj0iI21ldGhvZF9zdW1tYXJ5Ij5NZXRob2Q8L2E+PC9saT4NCjwvdWw+DQo8dWwgY2xhc3M9InN1Yk5hdkxpc3QiPg0KPGxpPkRldGFpbDombmJzcDs8L2xpPg0KPGxpPkZpZWxkJm5ic3A7fCZuYnNwOzwvbGk+DQo8bGk+Q29uc3RyJm5ic3A7fCZuYnNwOzwvbGk+DQo8bGk+PGEgaHJlZj0iI21ldGhvZF9kZXRhaWwiPk1ldGhvZDwvYT48L2xpPg0KPC91bD4NCjwvZGl2Pg0KPGEgbmFtZT0ic2tpcC1uYXZiYXJfdG9wIj4NCjwhLS0gICAtLT4NCjwvYT48L2Rpdj4NCjwhLS0gPT09PT09PT09IEVORCBPRiBUT1AgTkFWQkFSID09PT09PT09PSAtLT4NCjwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4NCjxkaXYgY2xhc3M9ImhlYWRlciI+DQo8ZGl2IGNsYXNzPSJzdWJUaXRsZSI+b3JnLmFwYWNoZS5pZ25pdGU8L2Rpdj4NCjxoMiB0aXRsZT0iSW50ZXJmYWNlIElnbml0ZVNlcnZpY2VzIiBjbGFzcz0idGl0bGUiPkludGVyZmFjZSBJZ25pdGVTZXJ2aWNlczwvaDI+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImNvbnRlbnRDb250YWluZXIiPg0KPGRpdiBjbGFzcz0iZGVzY3JpcHRpb24iPg0KPHVsIGNsYXNzPSJibG9ja0xpc3QiPg0KPGxpIGNsYXNzPSJibG9ja0xpc3QiPg0KPGRsPg0KPGR0PkFsbCBTdXBlcmludGVyZmFjZXM6PC9kdD4NCjxkZD48YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9sYW5nL0lnbml0ZUFzeW5jU3VwcG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5hcGFjaGUuaWduaXRlLmxhbmciPklnbml0ZUFzeW5jU3VwcG9ydDwvYT48L2RkPg0KPC9kbD4NCjxocj4NCjxicj4NCjxwcmU+cHVibGljIGludGVyZmFjZSA8c3BhbiBjbGFzcz0ic3Ryb25nIj5JZ25pdGVTZXJ2aWNlczwvc3Bhbj4NCmV4dGVuZHMgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvbGFuZy9JZ25pdGVBc3luY1N1cHBvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuYXBhY2hlLmlnbml0ZS5sYW5nIj5JZ25pdGVBc3luY1N1cHBvcnQ8L2E+PC9wcmU+DQo8ZGl2IGNsYXNzPSJibG9jayI+RGVmaW5lcyBmdW5jdGlvbmFsaXR5IG5lY2Vzc2FyeSB0byBkZXBsb3kgZGlzdHJpYnV0ZWQgc2VydmljZXMgb24gdGhlIGdyaWQuCiA8cD4KIEluc3RhbmNlIG9mIDxjb2RlPklnbml0ZVNlcnZpY2VzPC9jb2RlPiB3aGljaCBzcGFucyBhbGwgY2x1c3RlciBub2RlcyBjYW4gYmUgb2J0YWluZWQgZnJvbSBJZ25pdGUgYXMgZm9sbG93czoKIDxwcmUgY2xhc3M9ImJydXNoOmphdmEiPgogSWduaXRlIGlnbml0ZSA9IElnbml0aW9uLmlnbml0ZSgpOwoKIElnbml0ZVNlcnZpY2VzIHN2Y3MgPSBpZ25pdGUuc2VydmljZXMoKTsKIDwvcHJlPgogWW91IGNhbiBhbHNvIG9idGFpbiBhbiBpbnN0YW5jZSBvZiB0aGUgc2VydmljZXMgZmFjYWRlIG92ZXIgYSBzcGVjaWZpYyBjbHVzdGVyIGdyb3VwOgogPHByZSBjbGFzcz0iYnJ1c2g6amF2YSI+CiAvLyBDbHVzdGVyIGdyb3VwIG92ZXIgcmVtb3RlIG5vZGVzIChleGNsdWRpbmcgdGhlIGxvY2FsIG5vZGUpLgogQ2x1c3Rlckdyb3VwIHJlbW90ZU5vZGVzID0gaWduaXRlLmNsdXN0ZXIoKS5mb3JSZW1vdGVzKCk7CgogLy8gU2VydmljZXMgaW5zdGFuY2Ugc3Bhbm5pbmcgYWxsIHJlbW90ZSBjbHVzdGVyIG5vZGVzLgogSWduaXRlU2VydmljZXMgc3ZjcyA9IGlnbml0ZS5zZXJ2aWNlcyhyZW1vdGVOb2Rlcyk7CiA8L3ByZT4KIDxwPgogV2l0aCBkaXN0cmlidXRlZCBzZXJ2aWNlcyB5b3UgY2FuIGRvIHRoZSBmb2xsb3dpbmc6CiA8dWw+CiA8bGk+QXV0b21hdGljYWxseSBkZXBsb3kgYW55IG51bWJlciBvZiBzZXJ2aWNlIGluc3RhbmNlcyBvbiB0aGUgZ3JpZC48L2xpPgogPGxpPgogICAgIEF1dG9tYXRpY2FsbHkgZGVwbG95IHNpbmdsZXRvbnMsIGluY2x1ZGluZyA8Yj5jbHVzdGVyLXNpbmdsZXRvbjwvYj4sCiAgICAgPGI+bm9kZS1zaW5nbGV0b248L2I+LCBvciA8Yj5rZXktYWZmaW5pdHktc2luZ2xldG9uPC9iPi4KIDwvbGk+CiA8bGk+QXV0b21hdGljYWxseSBkZXBsb3kgc2VydmljZXMgb24gbm9kZSBzdGFydC11cCBieSBzcGVjaWZ5aW5nIHRoZW0gaW4gZ3JpZCBjb25maWd1cmF0aW9uLjwvbGk+CiA8bGk+VW5kZXBsb3kgYW55IG9mIHRoZSBkZXBsb3llZCBzZXJ2aWNlcy48L2xpPgogPGxpPkdldCBpbmZvcm1hdGlvbiBhYm91dCBzZXJ2aWNlIGRlcGxveW1lbnQgdG9wb2xvZ3kgd2l0aGluIHRoZSBncmlkLjwvbGk+CiA8L3VsPgogPGgxIGNsYXNzPSJoZWFkZXIiPkRlcGxveW1lbnQgRnJvbSBDb25maWd1cmF0aW9uPC9oMT4KIEluIGFkZGl0aW9uIHRvIGRlcGxveWluZyBtYW5hZ2VkIHNlcnZpY2VzIGJ5IGNhbGxpbmcgYW55IG9mIHRoZSBwcm92aWRlZCA8Y29kZT5kZXBsb3koLi4uKTwvY29kZT4gbWV0aG9kcywKIHlvdSBjYW4gYWxzbyBhdXRvbWF0aWNhbGx5IGRlcGxveSBzZXJ2aWNlcyBvbiBzdGFydHVwIGJ5IHNwZWNpZnlpbmcgdGhlbSBpbiA8YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9jb25maWd1cmF0aW9uL0lnbml0ZUNvbmZpZ3VyYXRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5hcGFjaGUuaWduaXRlLmNvbmZpZ3VyYXRpb24iPjxjb2RlPklnbml0ZUNvbmZpZ3VyYXRpb248L2NvZGU+PC9hPgogbGlrZSBzbzoKIDxwcmUgbmFtZT0iY29kZSIgY2xhc3M9ImphdmEiPgogSWduaXRlQ29uZmlndXJhdGlvbiBncmlkQ2ZnID0gbmV3IElnbml0ZUNvbmZpZ3VyYXRpb24oKTsKCiBHcmlkU2VydmljZUNvbmZpZ3VyYXRpb24gc3ZjQ2ZnMSA9IG5ldyBHcmlkU2VydmljZUNvbmZpZ3VyYXRpb24oKTsKCiAvLyBDbHVzdGVyLXdpZGUgc2luZ2xldG9uIGNvbmZpZ3VyYXRpb24uCiBzdmNDZmcxLnNldE5hbWUoIm15Q2x1c3RlclNpbmdsZXRvblNlcnZpY2UiKTsKIHN2Y0NmZzEuc2V0TWF4UGVyTm9kZUNvdW50KDEpOwogc3ZjQ2ZnMS5zZXRUb3RhbENvdW50KDEpOwogc3ZjQ2ZnMS5zZXRTZXJ2aWNlKG5ldyBNeUNsdXN0ZXJTaW5nbGV0b25TZXJ2aWNlKCkpOwoKIEdyaWRTZXJ2aWNlQ29uZmlndXJhdGlvbiBzdmNDZmcyID0gbmV3IEdyaWRTZXJ2aWNlQ29uZmlndXJhdGlvbigpOwoKIC8vIFBlci1ub2RlIHNpbmdsZXRvbiBjb25maWd1cmF0aW9uLgogc3ZjQ2ZnMi5zZXROYW1lKCJteU5vZGVTaW5nbGV0b25TZXJ2aWNlIik7CiBzdmNDZmcyLnNldE1heFBlck5vZGVDb3VudCgxKTsKIHN2Y0NmZzIuc2V0U2VydmljZShuZXcgTXlOb2RlU2luZ2xldG9uU2VydmljZSgpKTsKCiBncmlkQ2ZnLnNldFNlcnZpY2VDb25maWd1cmF0aW9uKHN2Y0NmZzEsIHN2Y0NmZzIpOwogLi4uCiBJZ25pdGlvbi5zdGFydChncmlkQ2ZnKTsKIDwvcHJlPgogPGgxIGNsYXNzPSJoZWFkZXIiPkxvYWQgQmFsYW5jaW5nPC9oMT4KIEluIGFsbCBjYXNlcywgb3RoZXIgdGhhbiBzaW5nbGV0b24gc2VydmljZSBkZXBsb3ltZW50LCBJZ25pdGUgd2lsbCBhdXRvbWF0aWNhbGx5IG1ha2Ugc3VyZSB0aGF0CiBhbiBhYm91dCBlcXVhbCBudW1iZXIgb2Ygc2VydmljZXMgYXJlIGRlcGxveWVkIG9uIGVhY2ggbm9kZSB3aXRoaW4gdGhlIGdyaWQuIFdoZW5ldmVyIGNsdXN0ZXIgdG9wb2xvZ3kKIGNoYW5nZXMsIElnbml0ZSB3aWxsIHJlLWV2YWx1YXRlIHNlcnZpY2UgZGVwbG95bWVudHMgYW5kIG1heSByZS1kZXBsb3kgYW4gYWxyZWFkeSBkZXBsb3llZCBzZXJ2aWNlCiBvbiBhbm90aGVyIG5vZGUgZm9yIGJldHRlciBsb2FkIGJhbGFuY2luZy4KIDxoMSBjbGFzcz0iaGVhZGVyIj5GYXVsdCBUb2xlcmFuY2U8L2gxPgogSWduaXRlIGd1YXJhbnRlZXMgdGhhdCBzZXJ2aWNlcyBhcmUgZGVwbG95ZWQgYWNjb3JkaW5nIHRvIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIHJlZ2FyZGxlc3MKIG9mIGFueSB0b3BvbG9neSBjaGFuZ2VzLCBpbmNsdWRpbmcgbm9kZSBjcmFzaGVzLgogPGgxIGNsYXNzPSJoZWFkZXIiPlJlc291cmNlIEluamVjdGlvbjwvaDE+CiBBbGwgZGlzdHJpYnV0ZWQgc2VydmljZXMgY2FuIGJlIGluamVjdGVkIHdpdGgKIGlnbml0ZSByZXNvdXJjZXMuIEJvdGgsIGZpZWxkIGFuZCBtZXRob2QgYmFzZWQgaW5qZWN0aW9ucyBhcmUgc3VwcG9ydGVkLiBUaGUgZm9sbG93aW5nIGlnbml0ZQogcmVzb3VyY2VzIGNhbiBiZSBpbmplY3RlZDoKIDx1bD4KIDxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9yZXNvdXJjZXMvSWduaXRlSW5zdGFuY2VSZXNvdXJjZS5odG1sIiB0aXRsZT0iYW5ub3RhdGlvbiBpbiBvcmcuYXBhY2hlLmlnbml0ZS5yZXNvdXJjZXMiPjxjb2RlPklnbml0ZUluc3RhbmNlUmVzb3VyY2U8L2NvZGU+PC9hPjwvbGk+CiA8bGk+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvcmVzb3VyY2VzL0xvZ2dlclJlc291cmNlLmh0bWwiIHRpdGxlPSJhbm5vdGF0aW9uIGluIG9yZy5hcGFjaGUuaWduaXRlLnJlc291cmNlcyI+PGNvZGU+TG9nZ2VyUmVzb3VyY2U8L2NvZGU+PC9hPjwvbGk+CiA8bGk+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvcmVzb3VyY2VzL1NwcmluZ0FwcGxpY2F0aW9uQ29udGV4dFJlc291cmNlLmh0bWwiIHRpdGxlPSJhbm5vdGF0aW9uIGluIG9yZy5hcGFjaGUuaWduaXRlLnJlc291cmNlcyI+PGNvZGU+U3ByaW5nQXBwbGljYXRpb25Db250ZXh0UmVzb3VyY2U8L2NvZGU+PC9hPjwvbGk+CiA8bGk+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvcmVzb3VyY2VzL1NwcmluZ1Jlc291cmNlLmh0bWwiIHRpdGxlPSJhbm5vdGF0aW9uIGluIG9yZy5hcGFjaGUuaWduaXRlLnJlc291cmNlcyI+PGNvZGU+U3ByaW5nUmVzb3VyY2U8L2NvZGU+PC9hPjwvbGk+CiA8L3VsPgogUmVmZXIgdG8gY29ycmVzcG9uZGluZyByZXNvdXJjZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgogPGgxIGNsYXNzPSJoZWFkZXIiPlNlcnZpY2UgRXhhbXBsZTwvaDE+CiBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgaG93IGFuIGRpc3RyaWJ1dGVkIHNlcnZpY2UgbWF5IGJlIGltcGxlbWVudGVkIGFuZCBkZXBsb3llZDoKIDxwcmUgbmFtZT0iY29kZSIgY2xhc3M9ImphdmEiPgogLy8gU2ltcGxlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24uCiBwdWJsaWMgY2xhc3MgTXlHcmlkU2VydmljZSBpbXBsZW1lbnRzIEdyaWRTZXJ2aWNlIHsKICAgICAgLi4uCiAgICAgIC8vIEV4YW1wbGUgb2YgaWduaXRlIHJlc291cmNlIGluamVjdGlvbi4gQWxsIHJlc291cmNlcyBhcmUgb3B0aW9uYWwuCiAgICAgIC8vIFlvdSBzaG91bGQgaW5qZWN0IHJlc291cmNlcyBvbmx5IGFzIG5lZWRlZC4KICAgICAgJiM2NDtJZ25pdGVJbnN0YW5jZVJlc291cmNlCiAgICAgIHByaXZhdGUgR3JpZCBncmlkOwogICAgICAuLi4KICAgICAgJiM2NDtPdmVycmlkZSBwdWJsaWMgdm9pZCBjYW5jZWwoR3JpZFNlcnZpY2VDb250ZXh0IGN0eCkgewogICAgICAgICAgLy8gTm8tb3AuCiAgICAgIH0KCiAgICAgICYjNjQ7T3ZlcnJpZGUgcHVibGljIHZvaWQgZXhlY3V0ZShHcmlkU2VydmljZUNvbnRleHQgY3R4KSB7CiAgICAgICAgICAvLyBMb29wIHVudGlsIHNlcnZpY2UgaXMgY2FuY2VsbGVkLgogICAgICAgICAgd2hpbGUgKCFjdHguaXNDYW5jZWxsZWQoKSkgewogICAgICAgICAgICAgIC8vIERvIHNvbWV0aGluZy4KICAgICAgICAgICAgICAuLi4KICAgICAgICAgIH0KICAgICAgfQogIH0KIC4uLgogR3JpZFNlcnZpY2VzIHN2Y3MgPSBncmlkLnNlcnZpY2VzKCk7Cgogc3Zjcy5kZXBsb3lDbHVzdGVyU2luZ2xldG9uKCJteVNpbmdsZXRvbiIsIG5ldyBNeUdyaWRTZXJ2aWNlKCkpOwogPC9wcmU+PC9kaXY+DQo8L2xpPg0KPC91bD4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0ic3VtbWFyeSI+DQo8dWwgY2xhc3M9ImJsb2NrTGlzdCI+DQo8bGkgY2xhc3M9ImJsb2NrTGlzdCI+DQo8IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+DQo8dWwgY2xhc3M9ImJsb2NrTGlzdCI+DQo8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0ibWV0aG9kX3N1bW1hcnkiPg0KPCEtLSAgIC0tPg0KPC9hPg0KPGgzPk1ldGhvZCBTdW1tYXJ5PC9oMz4NCjx0YWJsZSBjbGFzcz0ib3ZlcnZpZXdTdW1tYXJ5IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgc3VtbWFyeT0iTWV0aG9kIFN1bW1hcnkgdGFibGUsIGxpc3RpbmcgbWV0aG9kcywgYW5kIGFuIGV4cGxhbmF0aW9uIj4NCjxjYXB0aW9uPjxzcGFuPk1ldGhvZHM8L3NwYW4+PHNwYW4gY2xhc3M9InRhYkVuZCI+Jm5ic3A7PC9zcGFuPjwvY2FwdGlvbj4NCjx0cj4NCjx0aCBjbGFzcz0iY29sRmlyc3QiIHNjb3BlPSJjb2wiPk1vZGlmaWVyIGFuZCBUeXBlPC90aD4NCjx0aCBjbGFzcz0iY29sTGFzdCIgc2NvcGU9ImNvbCI+TWV0aG9kIGFuZCBEZXNjcmlwdGlvbjwvdGg+DQo8L3RyPg0KPHRyIGNsYXNzPSJhbHRDb2xvciI+DQo8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT52b2lkPC9jb2RlPjwvdGQ+DQo8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvSWduaXRlU2VydmljZXMuaHRtbCNjYW5jZWwoamF2YS5sYW5nLlN0cmluZykiPmNhbmNlbDwvYT48L3N0cm9uZz4oPGEgaHJlZj0iaHR0cDovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2UvNy9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWw/aXMtZXh0ZXJuYWw9dHJ1ZSIgdGl0bGU9ImNsYXNzIG9yIGludGVyZmFjZSBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtuYW1lKTwvY29kZT4NCjxkaXYgY2xhc3M9ImJsb2NrIj5DYW5jZWxzIHNlcnZpY2UgZGVwbG95bWVudC48L2Rpdj4NCjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3dDb2xvciI+DQo8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT52b2lkPC9jb2RlPjwvdGQ+DQo8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvSWduaXRlU2VydmljZXMuaHRtbCNjYW5jZWxBbGwoKSI+Y2FuY2VsQWxsPC9hPjwvc3Ryb25nPigpPC9jb2RlPg0KPGRpdiBjbGFzcz0iYmxvY2siPkNhbmNlbHMgYWxsIGRlcGxveWVkIHNlcnZpY2VzLjwvZGl2Pg0KPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9ImFsdENvbG9yIj4NCjx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9hcGFjaGUvaWduaXRlL2NsdXN0ZXIvQ2x1c3Rlckdyb3VwLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmFwYWNoZS5pZ25pdGUuY2x1c3RlciI+Q2x1c3Rlckdyb3VwPC9hPjwvY29kZT48L3RkPg0KPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9hcGFjaGUvaWduaXRlL0lnbml0ZVNlcnZpY2VzLmh0bWwjY2x1c3Rlckdyb3VwKCkiPmNsdXN0ZXJHcm91cDwvYT48L3N0cm9uZz4oKTwvY29kZT4NCjxkaXYgY2xhc3M9ImJsb2NrIj5HZXRzIHRoZSBjbHVzdGVyIGdyb3VwIHRvIHdoaWNoIHRoaXMgPGNvZGU+R3JpZFNlcnZpY2VzPC9jb2RlPiBpbnN0YW5jZSBiZWxvbmdzLjwvZGl2Pg0KPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvd0NvbG9yIj4NCjx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnZvaWQ8L2NvZGU+PC90ZD4NCjx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9JZ25pdGVTZXJ2aWNlcy5odG1sI2RlcGxveShvcmcuYXBhY2hlLmlnbml0ZS5zZXJ2aWNlcy5TZXJ2aWNlQ29uZmlndXJhdGlvbikiPmRlcGxveTwvYT48L3N0cm9uZz4oPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvc2VydmljZXMvU2VydmljZUNvbmZpZ3VyYXRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5hcGFjaGUuaWduaXRlLnNlcnZpY2VzIj5TZXJ2aWNlQ29uZmlndXJhdGlvbjwvYT4mbmJzcDtjZmcpPC9jb2RlPg0KPGRpdiBjbGFzcz0iYmxvY2siPkRlcGxveXMgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBzZXJ2aWNlIG9uIHRoZSBncmlkIGFjY29yZGluZyB0byBwcm92aWRlZAogY29uZmlndXJhdGlvbi48L2Rpdj4NCjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJhbHRDb2xvciI+DQo8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT52b2lkPC9jb2RlPjwvdGQ+DQo8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvSWduaXRlU2VydmljZXMuaHRtbCNkZXBsb3lDbHVzdGVyU2luZ2xldG9uKGphdmEubGFuZy5TdHJpbmcsJTIwb3JnLmFwYWNoZS5pZ25pdGUuc2VydmljZXMuU2VydmljZSkiPmRlcGxveUNsdXN0ZXJTaW5nbGV0b248L2E+PC9zdHJvbmc+KDxhIGhyZWY9Imh0dHA6Ly9kb2NzLm9yYWNsZS5jb20vamF2YXNlLzcvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sP2lzLWV4dGVybmFsPXRydWUiIHRpdGxlPSJjbGFzcyBvciBpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7bmFtZSwNCiAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9zZXJ2aWNlcy9TZXJ2aWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmFwYWNoZS5pZ25pdGUuc2VydmljZXMiPlNlcnZpY2U8L2E+Jm5ic3A7c3ZjKTwvY29kZT4NCjxkaXYgY2xhc3M9ImJsb2NrIj5EZXBsb3lzIGEgY2x1c3Rlci13aWRlIHNpbmdsZXRvbiBzZXJ2aWNlLjwvZGl2Pg0KPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvd0NvbG9yIj4NCjx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPnZvaWQ8L2NvZGU+PC90ZD4NCjx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9JZ25pdGVTZXJ2aWNlcy5odG1sI2RlcGxveUtleUFmZmluaXR5U2luZ2xldG9uKGphdmEubGFuZy5TdHJpbmcsJTIwb3JnLmFwYWNoZS5pZ25pdGUuc2VydmljZXMuU2VydmljZSwlMjBqYXZhLmxhbmcuU3RyaW5nLCUyMGphdmEubGFuZy5PYmplY3QpIj5kZXBsb3lLZXlBZmZpbml0eVNpbmdsZXRvbjwvYT48L3N0cm9uZz4oPGEgaHJlZj0iaHR0cDovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2UvNy9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWw/aXMtZXh0ZXJuYWw9dHJ1ZSIgdGl0bGU9ImNsYXNzIG9yIGludGVyZmFjZSBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtuYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9zZXJ2aWNlcy9TZXJ2aWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmFwYWNoZS5pZ25pdGUuc2VydmljZXMiPlNlcnZpY2U8L2E+Jm5ic3A7c3ZjLA0KICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vZG9jcy5vcmFjbGUuY29tL2phdmFzZS83L2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbD9pcy1leHRlcm5hbD10cnVlIiB0aXRsZT0iY2xhc3Mgb3IgaW50ZXJmYWNlIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO2NhY2hlTmFtZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2UvNy9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWw/aXMtZXh0ZXJuYWw9dHJ1ZSIgdGl0bGU9ImNsYXNzIG9yIGludGVyZmFjZSBpbiBqYXZhLmxhbmciPk9iamVjdDwvYT4mbmJzcDthZmZLZXkpPC9jb2RlPg0KPGRpdiBjbGFzcz0iYmxvY2siPkRlcGxveXMgb25lIGluc3RhbmNlIG9mIHRoaXMgc2VydmljZSBvbiB0aGUgcHJpbWFyeSBub2RlIGZvciBhIGdpdmVuIGFmZmluaXR5IGtleS48L2Rpdj4NCjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJhbHRDb2xvciI+DQo8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT52b2lkPC9jb2RlPjwvdGQ+DQo8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvSWduaXRlU2VydmljZXMuaHRtbCNkZXBsb3lNdWx0aXBsZShqYXZhLmxhbmcuU3RyaW5nLCUyMG9yZy5hcGFjaGUuaWduaXRlLnNlcnZpY2VzLlNlcnZpY2UsJTIwaW50LCUyMGludCkiPmRlcGxveU11bHRpcGxlPC9hPjwvc3Ryb25nPig8YSBocmVmPSJodHRwOi8vZG9jcy5vcmFjbGUuY29tL2phdmFzZS83L2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbD9pcy1leHRlcm5hbD10cnVlIiB0aXRsZT0iY2xhc3Mgb3IgaW50ZXJmYWNlIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO25hbWUsDQogICAgICAgICAgICAgIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9hcGFjaGUvaWduaXRlL3NlcnZpY2VzL1NlcnZpY2UuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuYXBhY2hlLmlnbml0ZS5zZXJ2aWNlcyI+U2VydmljZTwvYT4mbmJzcDtzdmMsDQogICAgICAgICAgICAgIGludCZuYnNwO3RvdGFsQ250LA0KICAgICAgICAgICAgICBpbnQmbmJzcDttYXhQZXJOb2RlQ250KTwvY29kZT4NCjxkaXYgY2xhc3M9ImJsb2NrIj5EZXBsb3lzIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgc2VydmljZSBvbiB0aGUgZ3JpZC48L2Rpdj4NCjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3dDb2xvciI+DQo8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT52b2lkPC9jb2RlPjwvdGQ+DQo8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvSWduaXRlU2VydmljZXMuaHRtbCNkZXBsb3lOb2RlU2luZ2xldG9uKGphdmEubGFuZy5TdHJpbmcsJTIwb3JnLmFwYWNoZS5pZ25pdGUuc2VydmljZXMuU2VydmljZSkiPmRlcGxveU5vZGVTaW5nbGV0b248L2E+PC9zdHJvbmc+KDxhIGhyZWY9Imh0dHA6Ly9kb2NzLm9yYWNsZS5jb20vamF2YXNlLzcvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sP2lzLWV4dGVybmFsPXRydWUiIHRpdGxlPSJjbGFzcyBvciBpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7bmFtZSwNCiAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9zZXJ2aWNlcy9TZXJ2aWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmFwYWNoZS5pZ25pdGUuc2VydmljZXMiPlNlcnZpY2U8L2E+Jm5ic3A7c3ZjKTwvY29kZT4NCjxkaXYgY2xhc3M9ImJsb2NrIj5EZXBsb3lzIGEgcGVyLW5vZGUgc2luZ2xldG9uIHNlcnZpY2UuPC9kaXY+DQo8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0iYWx0Q29sb3IiPg0KPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+PHNwYW4gY2xhc3M9J2FuZ2xlX2JyYWNrZXQnPiZsdDs8L3NwYW4+VDxzcGFuIGNsYXNzPSdhbmdsZV9icmFja2V0Jz4mZ3Q7PC9zcGFuPiZuYnNwO1Q8L2NvZGU+PC90ZD4NCjx0ZCBjbGFzcz0iY29sTGFzdCI+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9JZ25pdGVTZXJ2aWNlcy5odG1sI3NlcnZpY2UoamF2YS5sYW5nLlN0cmluZykiPnNlcnZpY2U8L2E+PC9zdHJvbmc+KDxhIGhyZWY9Imh0dHA6Ly9kb2NzLm9yYWNsZS5jb20vamF2YXNlLzcvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sP2lzLWV4dGVybmFsPXRydWUiIHRpdGxlPSJjbGFzcyBvciBpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7bmFtZSk8L2NvZGU+DQo8ZGl2IGNsYXNzPSJibG9jayI+R2V0cyBkZXBsb3llZCBzZXJ2aWNlIHdpdGggc3BlY2lmaWVkIG5hbWUuPC9kaXY+DQo8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93Q29sb3IiPg0KPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2UvNy9kb2NzL2FwaS9qYXZhL3V0aWwvQ29sbGVjdGlvbi5odG1sP2lzLWV4dGVybmFsPXRydWUiIHRpdGxlPSJjbGFzcyBvciBpbnRlcmZhY2UgaW4gamF2YS51dGlsIj5Db2xsZWN0aW9uPC9hPjxzcGFuIGNsYXNzPSdhbmdsZV9icmFja2V0Jz4mbHQ7PC9zcGFuPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9hcGFjaGUvaWduaXRlL3NlcnZpY2VzL1NlcnZpY2VEZXNjcmlwdG9yLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmFwYWNoZS5pZ25pdGUuc2VydmljZXMiPlNlcnZpY2VEZXNjcmlwdG9yPC9hPjxzcGFuIGNsYXNzPSdhbmdsZV9icmFja2V0Jz4mZ3Q7PC9zcGFuPjwvY29kZT48L3RkPg0KPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9hcGFjaGUvaWduaXRlL0lnbml0ZVNlcnZpY2VzLmh0bWwjc2VydmljZURlc2NyaXB0b3JzKCkiPnNlcnZpY2VEZXNjcmlwdG9yczwvYT48L3N0cm9uZz4oKTwvY29kZT4NCjxkaXYgY2xhc3M9ImJsb2NrIj5HZXRzIG1ldGFkYXRhIGFib3V0IGFsbCBkZXBsb3llZCBzZXJ2aWNlcy48L2Rpdj4NCjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJhbHRDb2xvciI+DQo8dGQgY2xhc3M9ImNvbEZpcnN0Ij48Y29kZT48c3BhbiBjbGFzcz0nYW5nbGVfYnJhY2tldCc+Jmx0Ozwvc3Bhbj5UPHNwYW4gY2xhc3M9J2FuZ2xlX2JyYWNrZXQnPiZndDs8L3NwYW4+Jm5ic3A7VDwvY29kZT48L3RkPg0KPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9hcGFjaGUvaWduaXRlL0lnbml0ZVNlcnZpY2VzLmh0bWwjc2VydmljZVByb3h5KGphdmEubGFuZy5TdHJpbmcsJTIwamF2YS5sYW5nLkNsYXNzLCUyMGJvb2xlYW4pIj5zZXJ2aWNlUHJveHk8L2E+PC9zdHJvbmc+KDxhIGhyZWY9Imh0dHA6Ly9kb2NzLm9yYWNsZS5jb20vamF2YXNlLzcvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sP2lzLWV4dGVybmFsPXRydWUiIHRpdGxlPSJjbGFzcyBvciBpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7bmFtZSwNCiAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9kb2NzLm9yYWNsZS5jb20vamF2YXNlLzcvZG9jcy9hcGkvamF2YS9sYW5nL0NsYXNzLmh0bWw/aXMtZXh0ZXJuYWw9dHJ1ZSIgdGl0bGU9ImNsYXNzIG9yIGludGVyZmFjZSBpbiBqYXZhLmxhbmciPkNsYXNzPC9hPjxzcGFuIGNsYXNzPSdhbmdsZV9icmFja2V0Jz4mbHQ7PC9zcGFuPj8gc3VwZXIgVDxzcGFuIGNsYXNzPSdhbmdsZV9icmFja2V0Jz4mZ3Q7PC9zcGFuPiZuYnNwO3N2Y0l0ZiwNCiAgICAgICAgICAgIGJvb2xlYW4mbmJzcDtzdGlja3kpPC9jb2RlPg0KPGRpdiBjbGFzcz0iYmxvY2siPkdldHMgYSByZW1vdGUgaGFuZGxlIG9uIHRoZSBzZXJ2aWNlLjwvZGl2Pg0KPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvd0NvbG9yIj4NCjx0ZCBjbGFzcz0iY29sRmlyc3QiPjxjb2RlPjxzcGFuIGNsYXNzPSdhbmdsZV9icmFja2V0Jz4mbHQ7PC9zcGFuPlQ8c3BhbiBjbGFzcz0nYW5nbGVfYnJhY2tldCc+Jmd0Ozwvc3Bhbj4mbmJzcDs8YSBocmVmPSJodHRwOi8vZG9jcy5vcmFjbGUuY29tL2phdmFzZS83L2RvY3MvYXBpL2phdmEvdXRpbC9Db2xsZWN0aW9uLmh0bWw/aXMtZXh0ZXJuYWw9dHJ1ZSIgdGl0bGU9ImNsYXNzIG9yIGludGVyZmFjZSBpbiBqYXZhLnV0aWwiPkNvbGxlY3Rpb248L2E+PHNwYW4gY2xhc3M9J2FuZ2xlX2JyYWNrZXQnPiZsdDs8L3NwYW4+VDxzcGFuIGNsYXNzPSdhbmdsZV9icmFja2V0Jz4mZ3Q7PC9zcGFuPjwvY29kZT48L3RkPg0KPHRkIGNsYXNzPSJjb2xMYXN0Ij48Y29kZT48c3Ryb25nPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9hcGFjaGUvaWduaXRlL0lnbml0ZVNlcnZpY2VzLmh0bWwjc2VydmljZXMoamF2YS5sYW5nLlN0cmluZykiPnNlcnZpY2VzPC9hPjwvc3Ryb25nPig8YSBocmVmPSJodHRwOi8vZG9jcy5vcmFjbGUuY29tL2phdmFzZS83L2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbD9pcy1leHRlcm5hbD10cnVlIiB0aXRsZT0iY2xhc3Mgb3IgaW50ZXJmYWNlIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO25hbWUpPC9jb2RlPg0KPGRpdiBjbGFzcz0iYmxvY2siPkdldHMgYWxsIGRlcGxveWVkIHNlcnZpY2VzIHdpdGggc3BlY2lmaWVkIG5hbWUuPC9kaXY+DQo8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0iYWx0Q29sb3IiPg0KPHRkIGNsYXNzPSJjb2xGaXJzdCI+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvSWduaXRlU2VydmljZXMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuYXBhY2hlLmlnbml0ZSI+SWduaXRlU2VydmljZXM8L2E+PC9jb2RlPjwvdGQ+DQo8dGQgY2xhc3M9ImNvbExhc3QiPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvSWduaXRlU2VydmljZXMuaHRtbCN3aXRoQXN5bmMoKSI+d2l0aEFzeW5jPC9hPjwvc3Ryb25nPigpPC9jb2RlPg0KPGRpdiBjbGFzcz0iYmxvY2siPkdldHMgaW5zdGFuY2Ugb2YgdGhpcyBjb21wb25lbnQgd2l0aCBhc3luY2hyb25vdXMgbW9kZSBlbmFibGVkLjwvZGl2Pg0KPC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KPHVsIGNsYXNzPSJibG9ja0xpc3QiPg0KPGxpIGNsYXNzPSJibG9ja0xpc3QiPjxhIG5hbWU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS5pZ25pdGUubGFuZy5JZ25pdGVBc3luY1N1cHBvcnQiPg0KPCEtLSAgIC0tPg0KPC9hPg0KPGgzPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlJm5ic3A7b3JnLmFwYWNoZS5pZ25pdGUubGFuZy48YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9sYW5nL0lnbml0ZUFzeW5jU3VwcG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5hcGFjaGUuaWduaXRlLmxhbmciPklnbml0ZUFzeW5jU3VwcG9ydDwvYT48L2gzPg0KPGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvbGFuZy9JZ25pdGVBc3luY1N1cHBvcnQuaHRtbCNmdXR1cmUoKSI+ZnV0dXJlPC9hPiwgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvbGFuZy9JZ25pdGVBc3luY1N1cHBvcnQuaHRtbCNpc0FzeW5jKCkiPmlzQXN5bmM8L2E+PC9jb2RlPjwvbGk+DQo8L3VsPg0KPC9saT4NCjwvdWw+DQo8L2xpPg0KPC91bD4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iZGV0YWlscyI+DQo8dWwgY2xhc3M9ImJsb2NrTGlzdCI+DQo8bGkgY2xhc3M9ImJsb2NrTGlzdCI+DQo8IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+DQo8dWwgY2xhc3M9ImJsb2NrTGlzdCI+DQo8bGkgY2xhc3M9ImJsb2NrTGlzdCI+PGEgbmFtZT0ibWV0aG9kX2RldGFpbCI+DQo8IS0tICAgLS0+DQo8L2E+DQo8aDM+TWV0aG9kIERldGFpbDwvaDM+DQo8YSBuYW1lPSJjbHVzdGVyR3JvdXAoKSI+DQo8IS0tICAgLS0+DQo8L2E+DQo8dWwgY2xhc3M9ImJsb2NrTGlzdCI+DQo8bGkgY2xhc3M9ImJsb2NrTGlzdCI+DQo8aDQ+Y2x1c3Rlckdyb3VwPC9oND4NCjxwcmU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvY2x1c3Rlci9DbHVzdGVyR3JvdXAuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuYXBhY2hlLmlnbml0ZS5jbHVzdGVyIj5DbHVzdGVyR3JvdXA8L2E+Jm5ic3A7Y2x1c3Rlckdyb3VwKCk8L3ByZT4NCjxkaXYgY2xhc3M9ImJsb2NrIj5HZXRzIHRoZSBjbHVzdGVyIGdyb3VwIHRvIHdoaWNoIHRoaXMgPGNvZGU+R3JpZFNlcnZpY2VzPC9jb2RlPiBpbnN0YW5jZSBiZWxvbmdzLjwvZGl2Pg0KPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD5DbHVzdGVyIGdyb3VwIHRvIHdoaWNoIHRoaXMgPGNvZGU+R3JpZFNlcnZpY2VzPC9jb2RlPiBpbnN0YW5jZSBiZWxvbmdzLjwvZGQ+PC9kbD4NCjwvbGk+DQo8L3VsPg0KPGEgbmFtZT0iZGVwbG95Q2x1c3RlclNpbmdsZXRvbihqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLmlnbml0ZS5zZXJ2aWNlcy5TZXJ2aWNlKSI+DQo8IS0tICAgLS0+DQo8L2E+DQo8dWwgY2xhc3M9ImJsb2NrTGlzdCI+DQo8bGkgY2xhc3M9ImJsb2NrTGlzdCI+DQo8aDQ+ZGVwbG95Q2x1c3RlclNpbmdsZXRvbjwvaDQ+DQo8cHJlPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9hcGFjaGUvaWduaXRlL2xhbmcvSWduaXRlQXN5bmNTdXBwb3J0ZWQuaHRtbCIgdGl0bGU9ImFubm90YXRpb24gaW4gb3JnLmFwYWNoZS5pZ25pdGUubGFuZyI+QElnbml0ZUFzeW5jU3VwcG9ydGVkPC9hPg0Kdm9pZCZuYnNwO2RlcGxveUNsdXN0ZXJTaW5nbGV0b24oPGEgaHJlZj0iaHR0cDovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2UvNy9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWw/aXMtZXh0ZXJuYWw9dHJ1ZSIgdGl0bGU9ImNsYXNzIG9yIGludGVyZmFjZSBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtuYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9zZXJ2aWNlcy9TZXJ2aWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmFwYWNoZS5pZ25pdGUuc2VydmljZXMiPlNlcnZpY2U8L2E+Jm5ic3A7c3ZjKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9JZ25pdGVFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5hcGFjaGUuaWduaXRlIj5JZ25pdGVFeGNlcHRpb248L2E+PC9wcmU+DQo8ZGl2IGNsYXNzPSJibG9jayI+RGVwbG95cyBhIGNsdXN0ZXItd2lkZSBzaW5nbGV0b24gc2VydmljZS4gSWduaXRlIHdpbGwgZ3VhcmFudGVlIHRoYXQgdGhlcmUgaXMgYWx3YXlzCiBvbmUgaW5zdGFuY2Ugb2YgdGhlIHNlcnZpY2UgaW4gdGhlIGNsdXN0ZXIuIEluIGNhc2UgaWYgZ3JpZCBub2RlIG9uIHdoaWNoIHRoZSBzZXJ2aWNlCiB3YXMgZGVwbG95ZWQgY3Jhc2hlcyBvciBzdG9wcywgSWduaXRlIHdpbGwgYXV0b21hdGljYWxseSByZWRlcGxveSBpdCBvbiBhbm90aGVyIG5vZGUuCiBIb3dldmVyLCBpZiB0aGUgbm9kZSBvbiB3aGljaCB0aGUgc2VydmljZSBpcyBkZXBsb3llZCByZW1haW5zIGluIHRvcG9sb2d5LCB0aGVuIHRoZQogc2VydmljZSB3aWxsIGFsd2F5cyBiZSBkZXBsb3llZCBvbiB0aGF0IG5vZGUgb25seSwgcmVnYXJkbGVzcyBvZiB0b3BvbG9neSBjaGFuZ2VzLgogPHA+CiBOb3RlIHRoYXQgaW4gY2FzZSBvZiB0b3BvbG9neSBjaGFuZ2VzLCBkdWUgdG8gbmV0d29yayBkZWxheXMsIHRoZXJlIG1heSBiZSBhIHRlbXBvcmFyeSBzaXR1YXRpb24KIHdoZW4gYSBzaW5nbGV0b24gc2VydmljZSBpbnN0YW5jZSB3aWxsIGJlIGFjdGl2ZSBvbiBtb3JlIHRoYW4gb25lIG5vZGUgKGUuZy4gY3Jhc2ggZGV0ZWN0aW9uIGRlbGF5KS4KIDxwPgogVGhpcyBtZXRob2QgaXMgYW5hbG9nb3VzIHRvIGNhbGxpbmcKIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9hcGFjaGUvaWduaXRlL0lnbml0ZVNlcnZpY2VzLmh0bWwjZGVwbG95TXVsdGlwbGUoamF2YS5sYW5nLlN0cmluZywlMjBvcmcuYXBhY2hlLmlnbml0ZS5zZXJ2aWNlcy5TZXJ2aWNlLCUyMGludCwlMjBpbnQpIj48Y29kZT5kZXBsb3lNdWx0aXBsZShuYW1lLCBzdmMsIDEsIDEpPC9jb2RlPjwvYT4gbWV0aG9kLjwvZGl2Pg0KPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5uYW1lPC9jb2RlPiAtIFNlcnZpY2UgbmFtZS48L2RkPjxkZD48Y29kZT5zdmM8L2NvZGU+IC0gU2VydmljZSBpbnN0YW5jZS48L2RkPg0KPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4NCjxkZD48Y29kZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9JZ25pdGVFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5hcGFjaGUuaWduaXRlIj5JZ25pdGVFeGNlcHRpb248L2E+PC9jb2RlPiAtIElmIGZhaWxlZCB0byBkZXBsb3kgc2VydmljZS48L2RkPjwvZGw+DQo8L2xpPg0KPC91bD4NCjxhIG5hbWU9ImRlcGxveU5vZGVTaW5nbGV0b24oamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS5pZ25pdGUuc2VydmljZXMuU2VydmljZSkiPg0KPCEtLSAgIC0tPg0KPC9hPg0KPHVsIGNsYXNzPSJibG9ja0xpc3QiPg0KPGxpIGNsYXNzPSJibG9ja0xpc3QiPg0KPGg0PmRlcGxveU5vZGVTaW5nbGV0b248L2g0Pg0KPHByZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9sYW5nL0lnbml0ZUFzeW5jU3VwcG9ydGVkLmh0bWwiIHRpdGxlPSJhbm5vdGF0aW9uIGluIG9yZy5hcGFjaGUuaWduaXRlLmxhbmciPkBJZ25pdGVBc3luY1N1cHBvcnRlZDwvYT4NCnZvaWQmbmJzcDtkZXBsb3lOb2RlU2luZ2xldG9uKDxhIGhyZWY9Imh0dHA6Ly9kb2NzLm9yYWNsZS5jb20vamF2YXNlLzcvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sP2lzLWV4dGVybmFsPXRydWUiIHRpdGxlPSJjbGFzcyBvciBpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7bmFtZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvc2VydmljZXMvU2VydmljZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5hcGFjaGUuaWduaXRlLnNlcnZpY2VzIj5TZXJ2aWNlPC9hPiZuYnNwO3N2YykNCiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvSWduaXRlRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuYXBhY2hlLmlnbml0ZSI+SWduaXRlRXhjZXB0aW9uPC9hPjwvcHJlPg0KPGRpdiBjbGFzcz0iYmxvY2siPkRlcGxveXMgYSBwZXItbm9kZSBzaW5nbGV0b24gc2VydmljZS4gSWduaXRlIHdpbGwgZ3VhcmFudGVlIHRoYXQgdGhlcmUgaXMgYWx3YXlzCiBvbmUgaW5zdGFuY2Ugb2YgdGhlIHNlcnZpY2UgcnVubmluZyBvbiBlYWNoIG5vZGUuIFdoZW5ldmVyIG5ldyBub2RlcyBhcmUgc3RhcnRlZAogd2l0aGluIHRoZSB1bmRlcmx5aW5nIGNsdXN0ZXIgZ3JvdXAsIElnbml0ZSB3aWxsIGF1dG9tYXRpY2FsbHkgZGVwbG95IG9uZSBpbnN0YW5jZSBvZgogdGhlIHNlcnZpY2Ugb24gZXZlcnkgbmV3IG5vZGUuCiA8cD4KIFRoaXMgbWV0aG9kIGlzIGFuYWxvZ291cyB0byBjYWxsaW5nCiA8YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9JZ25pdGVTZXJ2aWNlcy5odG1sI2RlcGxveU11bHRpcGxlKGphdmEubGFuZy5TdHJpbmcsJTIwb3JnLmFwYWNoZS5pZ25pdGUuc2VydmljZXMuU2VydmljZSwlMjBpbnQsJTIwaW50KSI+PGNvZGU+ZGVwbG95TXVsdGlwbGUobmFtZSwgc3ZjLCAwLCAxKTwvY29kZT48L2E+IG1ldGhvZC48L2Rpdj4NCjxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+bmFtZTwvY29kZT4gLSBTZXJ2aWNlIG5hbWUuPC9kZD48ZGQ+PGNvZGU+c3ZjPC9jb2RlPiAtIFNlcnZpY2UgaW5zdGFuY2UuPC9kZD4NCjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UaHJvd3M6PC9zcGFuPjwvZHQ+DQo8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvSWduaXRlRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuYXBhY2hlLmlnbml0ZSI+SWduaXRlRXhjZXB0aW9uPC9hPjwvY29kZT4gLSBJZiBmYWlsZWQgdG8gZGVwbG95IHNlcnZpY2UuPC9kZD48L2RsPg0KPC9saT4NCjwvdWw+DQo8YSBuYW1lPSJkZXBsb3lLZXlBZmZpbml0eVNpbmdsZXRvbihqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLmlnbml0ZS5zZXJ2aWNlcy5TZXJ2aWNlLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0KSI+DQo8IS0tICAgLS0+DQo8L2E+DQo8dWwgY2xhc3M9ImJsb2NrTGlzdCI+DQo8bGkgY2xhc3M9ImJsb2NrTGlzdCI+DQo8aDQ+ZGVwbG95S2V5QWZmaW5pdHlTaW5nbGV0b248L2g0Pg0KPHByZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9sYW5nL0lnbml0ZUFzeW5jU3VwcG9ydGVkLmh0bWwiIHRpdGxlPSJhbm5vdGF0aW9uIGluIG9yZy5hcGFjaGUuaWduaXRlLmxhbmciPkBJZ25pdGVBc3luY1N1cHBvcnRlZDwvYT4NCnZvaWQmbmJzcDtkZXBsb3lLZXlBZmZpbml0eVNpbmdsZXRvbig8YSBocmVmPSJodHRwOi8vZG9jcy5vcmFjbGUuY29tL2phdmFzZS83L2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbD9pcy1leHRlcm5hbD10cnVlIiB0aXRsZT0iY2xhc3Mgb3IgaW50ZXJmYWNlIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO25hbWUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9zZXJ2aWNlcy9TZXJ2aWNlLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmFwYWNoZS5pZ25pdGUuc2VydmljZXMiPlNlcnZpY2U8L2E+Jm5ic3A7c3ZjLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQE51bGxhYmxlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vZG9jcy5vcmFjbGUuY29tL2phdmFzZS83L2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbD9pcy1leHRlcm5hbD10cnVlIiB0aXRsZT0iY2xhc3Mgb3IgaW50ZXJmYWNlIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO2NhY2hlTmFtZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9kb2NzLm9yYWNsZS5jb20vamF2YXNlLzcvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sP2lzLWV4dGVybmFsPXRydWUiIHRpdGxlPSJjbGFzcyBvciBpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5PYmplY3Q8L2E+Jm5ic3A7YWZmS2V5KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvSWduaXRlRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuYXBhY2hlLmlnbml0ZSI+SWduaXRlRXhjZXB0aW9uPC9hPjwvcHJlPg0KPGRpdiBjbGFzcz0iYmxvY2siPkRlcGxveXMgb25lIGluc3RhbmNlIG9mIHRoaXMgc2VydmljZSBvbiB0aGUgcHJpbWFyeSBub2RlIGZvciBhIGdpdmVuIGFmZmluaXR5IGtleS4KIFdoZW5ldmVyIHRvcG9sb2d5IGNoYW5nZXMgYW5kIHByaW1hcnkgbm9kZSBhc3NpZ25tZW50IGNoYW5nZXMsIElnbml0ZSB3aWxsIGFsd2F5cwogbWFrZSBzdXJlIHRoYXQgdGhlIHNlcnZpY2UgaXMgdW5kZXBsb3llZCBvbiB0aGUgcHJldmlvdXMgcHJpbWFyeSBub2RlIGFuZCBkZXBsb3llZAogb24gdGhlIG5ldyBwcmltYXJ5IG5vZGUuCiA8cD4KIE5vdGUgdGhhdCBpbiBjYXNlIG9mIHRvcG9sb2d5IGNoYW5nZXMsIGR1ZSB0byBuZXR3b3JrIGRlbGF5cywgdGhlcmUgbWF5IGJlIGEgdGVtcG9yYXJ5IHNpdHVhdGlvbgogd2hlbiBhIHNlcnZpY2UgaW5zdGFuY2Ugd2lsbCBiZSBhY3RpdmUgb24gbW9yZSB0aGFuIG9uZSBub2RlIChlLmcuIGNyYXNoIGRldGVjdGlvbiBkZWxheSkuCiA8cD4KIFRoaXMgbWV0aG9kIGlzIGFuYWxvZ291cyB0byB0aGUgaW52b2NhdGlvbiBvZiA8YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9JZ25pdGVTZXJ2aWNlcy5odG1sI2RlcGxveShvcmcuYXBhY2hlLmlnbml0ZS5zZXJ2aWNlcy5TZXJ2aWNlQ29uZmlndXJhdGlvbikiPjxjb2RlPmRlcGxveShvcmcuYXBhY2hlLmlnbml0ZS5zZXJ2aWNlcy5TZXJ2aWNlQ29uZmlndXJhdGlvbik8L2NvZGU+PC9hPiBtZXRob2QKIGFzIGZvbGxvd3M6CiA8cHJlIG5hbWU9ImNvZGUiIGNsYXNzPSJqYXZhIj4KICAgICBHcmlkU2VydmljZUNvbmZpZ3VyYXRpb24gY2ZnID0gbmV3IEdyaWRTZXJ2aWNlQ29uZmlndXJhdGlvbigpOwoKICAgICBjZmcuc2V0TmFtZShuYW1lKTsKICAgICBjZmcuc2V0U2VydmljZShzdmMpOwogICAgIGNmZy5zZXRDYWNoZU5hbWUoY2FjaGVOYW1lKTsKICAgICBjZmcuc2V0QWZmaW5pdHlLZXkoYWZmS2V5KTsKICAgICBjZmcuc2V0VG90YWxDb3VudCgxKTsKICAgICBjZmcuc2V0TWF4UGVyTm9kZUNvdW50KDEpOwoKICAgICBncmlkLnNlcnZpY2VzKCkuZGVwbG95KGNmZyk7CiA8L3ByZT48L2Rpdj4NCjxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+bmFtZTwvY29kZT4gLSBTZXJ2aWNlIG5hbWUuPC9kZD48ZGQ+PGNvZGU+c3ZjPC9jb2RlPiAtIFNlcnZpY2UgaW5zdGFuY2UuPC9kZD48ZGQ+PGNvZGU+Y2FjaGVOYW1lPC9jb2RlPiAtIE5hbWUgb2YgdGhlIGNhY2hlIG9uIHdoaWNoIGFmZmluaXR5IGZvciBrZXkgc2hvdWxkIGJlIGNhbGN1bGF0ZWQsIDxjb2RlPm51bGw8L2NvZGU+IGZvcgogICAgICBkZWZhdWx0IGNhY2hlLjwvZGQ+PGRkPjxjb2RlPmFmZktleTwvY29kZT4gLSBBZmZpbml0eSBjYWNoZSBrZXkuPC9kZD4NCjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UaHJvd3M6PC9zcGFuPjwvZHQ+DQo8ZGQ+PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvSWduaXRlRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuYXBhY2hlLmlnbml0ZSI+SWduaXRlRXhjZXB0aW9uPC9hPjwvY29kZT4gLSBJZiBmYWlsZWQgdG8gZGVwbG95IHNlcnZpY2UuPC9kZD48L2RsPg0KPC9saT4NCjwvdWw+DQo8YSBuYW1lPSJkZXBsb3lNdWx0aXBsZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLmlnbml0ZS5zZXJ2aWNlcy5TZXJ2aWNlLCBpbnQsIGludCkiPg0KPCEtLSAgIC0tPg0KPC9hPg0KPHVsIGNsYXNzPSJibG9ja0xpc3QiPg0KPGxpIGNsYXNzPSJibG9ja0xpc3QiPg0KPGg0PmRlcGxveU11bHRpcGxlPC9oND4NCjxwcmU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvbGFuZy9JZ25pdGVBc3luY1N1cHBvcnRlZC5odG1sIiB0aXRsZT0iYW5ub3RhdGlvbiBpbiBvcmcuYXBhY2hlLmlnbml0ZS5sYW5nIj5ASWduaXRlQXN5bmNTdXBwb3J0ZWQ8L2E+DQp2b2lkJm5ic3A7ZGVwbG95TXVsdGlwbGUoPGEgaHJlZj0iaHR0cDovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2UvNy9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWw/aXMtZXh0ZXJuYWw9dHJ1ZSIgdGl0bGU9ImNsYXNzIG9yIGludGVyZmFjZSBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtuYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvc2VydmljZXMvU2VydmljZS5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5hcGFjaGUuaWduaXRlLnNlcnZpY2VzIj5TZXJ2aWNlPC9hPiZuYnNwO3N2YywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3RvdGFsQ250LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7bWF4UGVyTm9kZUNudCkNCiAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9hcGFjaGUvaWduaXRlL0lnbml0ZUV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmFwYWNoZS5pZ25pdGUiPklnbml0ZUV4Y2VwdGlvbjwvYT48L3ByZT4NCjxkaXYgY2xhc3M9ImJsb2NrIj5EZXBsb3lzIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgc2VydmljZSBvbiB0aGUgZ3JpZC4gSWduaXRlIHdpbGwgZGVwbG95IGEKIG1heGltdW0gYW1vdW50IG9mIHNlcnZpY2VzIGVxdWFsIHRvIDxjb2RlPid0b3RhbENudCc8L2NvZGU+IHBhcmFtZXRlciBtYWtpbmcgc3VyZSB0aGF0CiB0aGVyZSBhcmUgbm8gbW9yZSB0aGFuIDxjb2RlPidtYXhQZXJOb2RlQ250JzwvY29kZT4gc2VydmljZSBpbnN0YW5jZXMgcnVubmluZwogb24gZWFjaCBub2RlLiBXaGVuZXZlciB0b3BvbG9neSBjaGFuZ2VzLCBJZ25pdGUgd2lsbCBhdXRvbWF0aWNhbGx5IHJlYmFsYW5jZQogdGhlIGRlcGxveWVkIHNlcnZpY2VzIHdpdGhpbiBjbHVzdGVyIHRvIG1ha2Ugc3VyZSB0aGF0IGVhY2ggbm9kZSB3aWxsIGVuZCB1cCB3aXRoCiBhYm91dCBlcXVhbCBudW1iZXIgb2YgZGVwbG95ZWQgaW5zdGFuY2VzIHdoZW5ldmVyIHBvc3NpYmxlLgogPHA+CiBOb3RlIHRoYXQgYXQgbGVhc3Qgb25lIG9mIDxjb2RlPid0b3RhbENudCc8L2NvZGU+IG9yIDxjb2RlPidtYXhQZXJOb2RlQ250JzwvY29kZT4gcGFyYW1ldGVycyBtdXN0IGhhdmUKIHZhbHVlIGdyZWF0ZXIgdGhhbiA8Y29kZT4wPC9jb2RlPi4KIDxwPgogVGhpcyBtZXRob2QgaXMgYW5hbG9nb3VzIHRvIHRoZSBpbnZvY2F0aW9uIG9mIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9hcGFjaGUvaWduaXRlL0lnbml0ZVNlcnZpY2VzLmh0bWwjZGVwbG95KG9yZy5hcGFjaGUuaWduaXRlLnNlcnZpY2VzLlNlcnZpY2VDb25maWd1cmF0aW9uKSI+PGNvZGU+ZGVwbG95KG9yZy5hcGFjaGUuaWduaXRlLnNlcnZpY2VzLlNlcnZpY2VDb25maWd1cmF0aW9uKTwvY29kZT48L2E+IG1ldGhvZAogYXMgZm9sbG93czoKIDxwcmUgbmFtZT0iY29kZSIgY2xhc3M9ImphdmEiPgogICAgIEdyaWRTZXJ2aWNlQ29uZmlndXJhdGlvbiBjZmcgPSBuZXcgR3JpZFNlcnZpY2VDb25maWd1cmF0aW9uKCk7CgogICAgIGNmZy5zZXROYW1lKG5hbWUpOwogICAgIGNmZy5zZXRTZXJ2aWNlKHN2Yyk7CiAgICAgY2ZnLnNldFRvdGFsQ291bnQodG90YWxDbnQpOwogICAgIGNmZy5zZXRNYXhQZXJOb2RlQ291bnQobWF4UGVyTm9kZUNudCk7CgogICAgIGdyaWQuc2VydmljZXMoKS5kZXBsb3koY2ZnKTsKIDwvcHJlPjwvZGl2Pg0KPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5uYW1lPC9jb2RlPiAtIFNlcnZpY2UgbmFtZS48L2RkPjxkZD48Y29kZT5zdmM8L2NvZGU+IC0gU2VydmljZSBpbnN0YW5jZS48L2RkPjxkZD48Y29kZT50b3RhbENudDwvY29kZT4gLSBNYXhpbXVtIG51bWJlciBvZiBkZXBsb3llZCBzZXJ2aWNlcyBpbiB0aGUgZ3JpZCwgPGNvZGU+MDwvY29kZT4gZm9yIHVubGltaXRlZC48L2RkPjxkZD48Y29kZT5tYXhQZXJOb2RlQ250PC9jb2RlPiAtIE1heGltdW0gbnVtYmVyIG9mIGRlcGxveWVkIHNlcnZpY2VzIG9uIGVhY2ggbm9kZSwgPGNvZGU+MDwvY29kZT4gZm9yIHVubGltaXRlZC48L2RkPg0KPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4NCjxkZD48Y29kZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9JZ25pdGVFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5hcGFjaGUuaWduaXRlIj5JZ25pdGVFeGNlcHRpb248L2E+PC9jb2RlPiAtIElmIGZhaWxlZCB0byBkZXBsb3kgc2VydmljZS48L2RkPjwvZGw+DQo8L2xpPg0KPC91bD4NCjxhIG5hbWU9ImRlcGxveShvcmcuYXBhY2hlLmlnbml0ZS5zZXJ2aWNlcy5TZXJ2aWNlQ29uZmlndXJhdGlvbikiPg0KPCEtLSAgIC0tPg0KPC9hPg0KPHVsIGNsYXNzPSJibG9ja0xpc3QiPg0KPGxpIGNsYXNzPSJibG9ja0xpc3QiPg0KPGg0PmRlcGxveTwvaDQ+DQo8cHJlPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9hcGFjaGUvaWduaXRlL2xhbmcvSWduaXRlQXN5bmNTdXBwb3J0ZWQuaHRtbCIgdGl0bGU9ImFubm90YXRpb24gaW4gb3JnLmFwYWNoZS5pZ25pdGUubGFuZyI+QElnbml0ZUFzeW5jU3VwcG9ydGVkPC9hPg0Kdm9pZCZuYnNwO2RlcGxveSg8YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9zZXJ2aWNlcy9TZXJ2aWNlQ29uZmlndXJhdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmFwYWNoZS5pZ25pdGUuc2VydmljZXMiPlNlcnZpY2VDb25maWd1cmF0aW9uPC9hPiZuYnNwO2NmZykNCiAgICAgICAgICAgIHRocm93cyA8YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9JZ25pdGVFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5hcGFjaGUuaWduaXRlIj5JZ25pdGVFeGNlcHRpb248L2E+PC9wcmU+DQo8ZGl2IGNsYXNzPSJibG9jayI+RGVwbG95cyBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNlcnZpY2Ugb24gdGhlIGdyaWQgYWNjb3JkaW5nIHRvIHByb3ZpZGVkCiBjb25maWd1cmF0aW9uLiBJZ25pdGUgd2lsbCBkZXBsb3kgYSBtYXhpbXVtIGFtb3VudCBvZiBzZXJ2aWNlcyBlcXVhbCB0bwogPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvc2VydmljZXMvU2VydmljZUNvbmZpZ3VyYXRpb24uaHRtbCNnZXRUb3RhbENvdW50KCkiPjxjb2RlPmNmZy5nZXRUb3RhbENvdW50KCk8L2NvZGU+PC9hPiAgcGFyYW1ldGVyCiBtYWtpbmcgc3VyZSB0aGF0IHRoZXJlIGFyZSBubyBtb3JlIHRoYW4gPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvc2VydmljZXMvU2VydmljZUNvbmZpZ3VyYXRpb24uaHRtbCNnZXRNYXhQZXJOb2RlQ291bnQoKSI+PGNvZGU+Y2ZnLmdldE1heFBlck5vZGVDb3VudCgpPC9jb2RlPjwvYT4KIHNlcnZpY2UgaW5zdGFuY2VzIHJ1bm5pbmcgb24gZWFjaCBub2RlLiBXaGVuZXZlciB0b3BvbG9neSBjaGFuZ2VzLCBJZ25pdGUgd2lsbCBhdXRvbWF0aWNhbGx5IHJlYmFsYW5jZQogdGhlIGRlcGxveWVkIHNlcnZpY2VzIHdpdGhpbiBjbHVzdGVyIHRvIG1ha2Ugc3VyZSB0aGF0IGVhY2ggbm9kZSB3aWxsIGVuZCB1cCB3aXRoCiBhYm91dCBlcXVhbCBudW1iZXIgb2YgZGVwbG95ZWQgaW5zdGFuY2VzIHdoZW5ldmVyIHBvc3NpYmxlLgogPHA+CiBJZiA8YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9zZXJ2aWNlcy9TZXJ2aWNlQ29uZmlndXJhdGlvbi5odG1sI2dldEFmZmluaXR5S2V5KCkiPjxjb2RlPmNmZy5nZXRBZmZpbml0eUtleSgpPC9jb2RlPjwvYT4gaXMgbm90IDxjb2RlPm51bGw8L2NvZGU+LCB0aGVuIElnbml0ZQogd2lsbCBkZXBsb3kgdGhlIHNlcnZpY2Ugb24gdGhlIHByaW1hcnkgbm9kZSBmb3IgZ2l2ZW4gYWZmaW5pdHkga2V5LiBUaGUgYWZmaW5pdHkgd2lsbCBiZSBjYWxjdWxhdGVkCiBvbiB0aGUgY2FjaGUgd2l0aCA8YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9zZXJ2aWNlcy9TZXJ2aWNlQ29uZmlndXJhdGlvbi5odG1sI2dldENhY2hlTmFtZSgpIj48Y29kZT5jZmcuZ2V0Q2FjaGVOYW1lKCk8L2NvZGU+PC9hPiBuYW1lLgogPHA+CiBJZiA8YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9zZXJ2aWNlcy9TZXJ2aWNlQ29uZmlndXJhdGlvbi5odG1sI2dldE5vZGVGaWx0ZXIoKSI+PGNvZGU+Y2ZnLmdldE5vZGVGaWx0ZXIoKTwvY29kZT48L2E+IGlzIG5vdCA8Y29kZT5udWxsPC9jb2RlPiwgdGhlbgogSWduaXRlIHdpbGwgZGVwbG95IHNlcnZpY2Ugb24gYWxsIGdyaWQgbm9kZXMgZm9yIHdoaWNoIHRoZSBwcm92aWRlZCBmaWx0ZXIgZXZhbHVhdGVzIHRvIDxjb2RlPnRydWU8L2NvZGU+LgogVGhlIG5vZGUgZmlsdGVyIHdpbGwgYmUgY2hlY2tlZCBpbiBhZGRpdGlvbiB0byB0aGUgdW5kZXJseWluZyBjbHVzdGVyIGdyb3VwIGZpbHRlciwgb3IgdGhlCiB3aG9sZSBncmlkLCBpZiB0aGUgdW5kZXJseWluZyBjbHVzdGVyIGdyb3VwIGluY2x1ZGVzIGFsbCB0aGUgY2x1c3RlciBub2Rlcy4KIDxwPgogTm90ZSB0aGF0IGF0IGxlYXN0IG9uZSBvZiA8Y29kZT4ndG90YWxDbnQnPC9jb2RlPiBvciA8Y29kZT4nbWF4UGVyTm9kZUNudCc8L2NvZGU+IHBhcmFtZXRlcnMgbXVzdCBoYXZlCiB2YWx1ZSBncmVhdGVyIHRoYW4gPGNvZGU+MDwvY29kZT4uCiA8cD4KIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBjcmVhdGluZyBzZXJ2aWNlIGRlcGxveW1lbnQgY29uZmlndXJhdGlvbjoKIDxwcmUgbmFtZT0iY29kZSIgY2xhc3M9ImphdmEiPgogICAgIEdyaWRTZXJ2aWNlQ29uZmlndXJhdGlvbiBjZmcgPSBuZXcgR3JpZFNlcnZpY2VDb25maWd1cmF0aW9uKCk7CgogICAgIGNmZy5zZXROYW1lKG5hbWUpOwogICAgIGNmZy5zZXRTZXJ2aWNlKHN2Yyk7CiAgICAgY2ZnLnNldFRvdGFsQ291bnQoMCk7IC8vIFVubGltaXRlZC4KICAgICBjZmcuc2V0TWF4UGVyTm9kZUNvdW50KDIpOyAvLyBEZXBsb3kgMiBpbnN0YW5jZXMgb2Ygc2VydmljZSBvbiBlYWNoIG5vZGUuCgogICAgIGdyaWQuc2VydmljZXMoKS5kZXBsb3koY2ZnKTsKIDwvcHJlPjwvZGl2Pg0KPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5jZmc8L2NvZGU+IC0gU2VydmljZSBjb25maWd1cmF0aW9uLjwvZGQ+DQo8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0Pg0KPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9hcGFjaGUvaWduaXRlL0lnbml0ZUV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmFwYWNoZS5pZ25pdGUiPklnbml0ZUV4Y2VwdGlvbjwvYT48L2NvZGU+IC0gSWYgZmFpbGVkIHRvIGRlcGxveSBzZXJ2aWNlLjwvZGQ+PC9kbD4NCjwvbGk+DQo8L3VsPg0KPGEgbmFtZT0iY2FuY2VsKGphdmEubGFuZy5TdHJpbmcpIj4NCjwhLS0gICAtLT4NCjwvYT4NCjx1bCBjbGFzcz0iYmxvY2tMaXN0Ij4NCjxsaSBjbGFzcz0iYmxvY2tMaXN0Ij4NCjxoND5jYW5jZWw8L2g0Pg0KPHByZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9sYW5nL0lnbml0ZUFzeW5jU3VwcG9ydGVkLmh0bWwiIHRpdGxlPSJhbm5vdGF0aW9uIGluIG9yZy5hcGFjaGUuaWduaXRlLmxhbmciPkBJZ25pdGVBc3luY1N1cHBvcnRlZDwvYT4NCnZvaWQmbmJzcDtjYW5jZWwoPGEgaHJlZj0iaHR0cDovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2UvNy9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWw/aXMtZXh0ZXJuYWw9dHJ1ZSIgdGl0bGU9ImNsYXNzIG9yIGludGVyZmFjZSBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtuYW1lKQ0KICAgICAgICAgICAgdGhyb3dzIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9hcGFjaGUvaWduaXRlL0lnbml0ZUV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmFwYWNoZS5pZ25pdGUiPklnbml0ZUV4Y2VwdGlvbjwvYT48L3ByZT4NCjxkaXYgY2xhc3M9ImJsb2NrIj5DYW5jZWxzIHNlcnZpY2UgZGVwbG95bWVudC4gSWYgYSBzZXJ2aWNlIHdpdGggc3BlY2lmaWVkIG5hbWUgd2FzIGRlcGxveWVkIG9uIHRoZSBncmlkLAogdGhlbiA8YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9zZXJ2aWNlcy9TZXJ2aWNlLmh0bWwjY2FuY2VsKG9yZy5hcGFjaGUuaWduaXRlLnNlcnZpY2VzLlNlcnZpY2VDb250ZXh0KSI+PGNvZGU+U2VydmljZS5jYW5jZWwob3JnLmFwYWNoZS5pZ25pdGUuc2VydmljZXMuU2VydmljZUNvbnRleHQpPC9jb2RlPjwvYT4gbWV0aG9kIHdpbGwgYmUgY2FsbGVkIG9uIGl0LgogPHA+CiBOb3RlIHRoYXQgSWduaXRlIGNhbm5vdCBndWFyYW50ZWUgdGhhdCB0aGUgc2VydmljZSBleGl0cyBmcm9tIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9hcGFjaGUvaWduaXRlL3NlcnZpY2VzL1NlcnZpY2UuaHRtbCNleGVjdXRlKG9yZy5hcGFjaGUuaWduaXRlLnNlcnZpY2VzLlNlcnZpY2VDb250ZXh0KSI+PGNvZGU+U2VydmljZS5leGVjdXRlKG9yZy5hcGFjaGUuaWduaXRlLnNlcnZpY2VzLlNlcnZpY2VDb250ZXh0KTwvY29kZT48L2E+CiBtZXRob2Qgd2hlbmV2ZXIgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvc2VydmljZXMvU2VydmljZS5odG1sI2NhbmNlbChvcmcuYXBhY2hlLmlnbml0ZS5zZXJ2aWNlcy5TZXJ2aWNlQ29udGV4dCkiPjxjb2RlPlNlcnZpY2UuY2FuY2VsKG9yZy5hcGFjaGUuaWduaXRlLnNlcnZpY2VzLlNlcnZpY2VDb250ZXh0KTwvY29kZT48L2E+IGlzIGNhbGxlZC4gSXQgaXMgdXAgdG8gdGhlIHVzZXIgdG8KIG1ha2Ugc3VyZSB0aGF0IHRoZSBzZXJ2aWNlIGNvZGUgcHJvcGVybHkgcmVhY3RzIHRvIGNhbmNlbGxhdGlvbnMuCiA8cD4KIFN1cHBvcnRzIGFzeW5jaHJvbm91cyBleGVjdXRpb24gKHNlZSA8YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9sYW5nL0lnbml0ZUFzeW5jU3VwcG9ydC5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5hcGFjaGUuaWduaXRlLmxhbmciPjxjb2RlPklnbml0ZUFzeW5jU3VwcG9ydDwvY29kZT48L2E+KS48L2Rpdj4NCjxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+bmFtZTwvY29kZT4gLSBOYW1lIG9mIHNlcnZpY2UgdG8gY2FuY2VsLjwvZGQ+DQo8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VGhyb3dzOjwvc3Bhbj48L2R0Pg0KPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9hcGFjaGUvaWduaXRlL0lnbml0ZUV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmFwYWNoZS5pZ25pdGUiPklnbml0ZUV4Y2VwdGlvbjwvYT48L2NvZGU+IC0gSWYgZmFpbGVkIHRvIGNhbmNlbCBzZXJ2aWNlLjwvZGQ+PC9kbD4NCjwvbGk+DQo8L3VsPg0KPGEgbmFtZT0iY2FuY2VsQWxsKCkiPg0KPCEtLSAgIC0tPg0KPC9hPg0KPHVsIGNsYXNzPSJibG9ja0xpc3QiPg0KPGxpIGNsYXNzPSJibG9ja0xpc3QiPg0KPGg0PmNhbmNlbEFsbDwvaDQ+DQo8cHJlPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9hcGFjaGUvaWduaXRlL2xhbmcvSWduaXRlQXN5bmNTdXBwb3J0ZWQuaHRtbCIgdGl0bGU9ImFubm90YXRpb24gaW4gb3JnLmFwYWNoZS5pZ25pdGUubGFuZyI+QElnbml0ZUFzeW5jU3VwcG9ydGVkPC9hPg0Kdm9pZCZuYnNwO2NhbmNlbEFsbCgpDQogICAgICAgICAgICAgICB0aHJvd3MgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvSWduaXRlRXhjZXB0aW9uLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuYXBhY2hlLmlnbml0ZSI+SWduaXRlRXhjZXB0aW9uPC9hPjwvcHJlPg0KPGRpdiBjbGFzcz0iYmxvY2siPkNhbmNlbHMgYWxsIGRlcGxveWVkIHNlcnZpY2VzLgogPHA+CiBOb3RlIHRoYXQgZGVwZW5kaW5nIG9uIHVzZXIgbG9naWMsIGl0IG1heSBzdGlsbCB0YWtlIGV4dHJhIHRpbWUgZm9yIGEgc2VydmljZSB0bwogZmluaXNoIGV4ZWN1dGlvbiwgZXZlbiBhZnRlciBpdCB3YXMgY2FuY2VsbGVkLgogPHA+CiBTdXBwb3J0cyBhc3luY2hyb25vdXMgZXhlY3V0aW9uIChzZWUgPGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvbGFuZy9JZ25pdGVBc3luY1N1cHBvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuYXBhY2hlLmlnbml0ZS5sYW5nIj48Y29kZT5JZ25pdGVBc3luY1N1cHBvcnQ8L2NvZGU+PC9hPikuPC9kaXY+DQo8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4NCjxkZD48Y29kZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9JZ25pdGVFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5hcGFjaGUuaWduaXRlIj5JZ25pdGVFeGNlcHRpb248L2E+PC9jb2RlPiAtIElmIGZhaWxlZCB0byBjYW5jZWwgc2VydmljZXMuPC9kZD48L2RsPg0KPC9saT4NCjwvdWw+DQo8YSBuYW1lPSJzZXJ2aWNlRGVzY3JpcHRvcnMoKSI+DQo8IS0tICAgLS0+DQo8L2E+DQo8dWwgY2xhc3M9ImJsb2NrTGlzdCI+DQo8bGkgY2xhc3M9ImJsb2NrTGlzdCI+DQo8aDQ+c2VydmljZURlc2NyaXB0b3JzPC9oND4NCjxwcmU+PGEgaHJlZj0iaHR0cDovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2UvNy9kb2NzL2FwaS9qYXZhL3V0aWwvQ29sbGVjdGlvbi5odG1sP2lzLWV4dGVybmFsPXRydWUiIHRpdGxlPSJjbGFzcyBvciBpbnRlcmZhY2UgaW4gamF2YS51dGlsIj5Db2xsZWN0aW9uPC9hPjxzcGFuIGNsYXNzPSdhbmdsZV9icmFja2V0Jz4mbHQ7PC9zcGFuPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9hcGFjaGUvaWduaXRlL3NlcnZpY2VzL1NlcnZpY2VEZXNjcmlwdG9yLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmFwYWNoZS5pZ25pdGUuc2VydmljZXMiPlNlcnZpY2VEZXNjcmlwdG9yPC9hPjxzcGFuIGNsYXNzPSdhbmdsZV9icmFja2V0Jz4mZ3Q7PC9zcGFuPiZuYnNwO3NlcnZpY2VEZXNjcmlwdG9ycygpPC9wcmU+DQo8ZGl2IGNsYXNzPSJibG9jayI+R2V0cyBtZXRhZGF0YSBhYm91dCBhbGwgZGVwbG95ZWQgc2VydmljZXMuPC9kaXY+DQo8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPk1ldGFkYXRhIGFib3V0IGFsbCBkZXBsb3llZCBzZXJ2aWNlcy48L2RkPjwvZGw+DQo8L2xpPg0KPC91bD4NCjxhIG5hbWU9InNlcnZpY2UoamF2YS5sYW5nLlN0cmluZykiPg0KPCEtLSAgIC0tPg0KPC9hPg0KPHVsIGNsYXNzPSJibG9ja0xpc3QiPg0KPGxpIGNsYXNzPSJibG9ja0xpc3QiPg0KPGg0PnNlcnZpY2U8L2g0Pg0KPHByZT48c3BhbiBjbGFzcz0nYW5nbGVfYnJhY2tldCc+Jmx0Ozwvc3Bhbj5UPHNwYW4gY2xhc3M9J2FuZ2xlX2JyYWNrZXQnPiZndDs8L3NwYW4+Jm5ic3A7VCZuYnNwO3NlcnZpY2UoPGEgaHJlZj0iaHR0cDovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2UvNy9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWw/aXMtZXh0ZXJuYWw9dHJ1ZSIgdGl0bGU9ImNsYXNzIG9yIGludGVyZmFjZSBpbiBqYXZhLmxhbmciPlN0cmluZzwvYT4mbmJzcDtuYW1lKTwvcHJlPg0KPGRpdiBjbGFzcz0iYmxvY2siPkdldHMgZGVwbG95ZWQgc2VydmljZSB3aXRoIHNwZWNpZmllZCBuYW1lLjwvZGl2Pg0KPGRsPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5UeXBlIFBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPlQ8L2NvZGU+IC0gU2VydmljZSB0eXBlPC9kZD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UGFyYW1ldGVyczo8L3NwYW4+PC9kdD48ZGQ+PGNvZGU+bmFtZTwvY29kZT4gLSBTZXJ2aWNlIG5hbWUuPC9kZD4NCjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5SZXR1cm5zOjwvc3Bhbj48L2R0PjxkZD5EZXBsb3llZCBzZXJ2aWNlIHdpdGggc3BlY2lmaWVkIG5hbWUuPC9kZD48L2RsPg0KPC9saT4NCjwvdWw+DQo8YSBuYW1lPSJzZXJ2aWNlcyhqYXZhLmxhbmcuU3RyaW5nKSI+DQo8IS0tICAgLS0+DQo8L2E+DQo8dWwgY2xhc3M9ImJsb2NrTGlzdCI+DQo8bGkgY2xhc3M9ImJsb2NrTGlzdCI+DQo8aDQ+c2VydmljZXM8L2g0Pg0KPHByZT48c3BhbiBjbGFzcz0nYW5nbGVfYnJhY2tldCc+Jmx0Ozwvc3Bhbj5UPHNwYW4gY2xhc3M9J2FuZ2xlX2JyYWNrZXQnPiZndDs8L3NwYW4+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2UvNy9kb2NzL2FwaS9qYXZhL3V0aWwvQ29sbGVjdGlvbi5odG1sP2lzLWV4dGVybmFsPXRydWUiIHRpdGxlPSJjbGFzcyBvciBpbnRlcmZhY2UgaW4gamF2YS51dGlsIj5Db2xsZWN0aW9uPC9hPjxzcGFuIGNsYXNzPSdhbmdsZV9icmFja2V0Jz4mbHQ7PC9zcGFuPlQ8c3BhbiBjbGFzcz0nYW5nbGVfYnJhY2tldCc+Jmd0Ozwvc3Bhbj4mbmJzcDtzZXJ2aWNlcyg8YSBocmVmPSJodHRwOi8vZG9jcy5vcmFjbGUuY29tL2phdmFzZS83L2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbD9pcy1leHRlcm5hbD10cnVlIiB0aXRsZT0iY2xhc3Mgb3IgaW50ZXJmYWNlIGluIGphdmEubGFuZyI+U3RyaW5nPC9hPiZuYnNwO25hbWUpPC9wcmU+DQo8ZGl2IGNsYXNzPSJibG9jayI+R2V0cyBhbGwgZGVwbG95ZWQgc2VydmljZXMgd2l0aCBzcGVjaWZpZWQgbmFtZS48L2Rpdj4NCjxkbD48ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+VHlwZSBQYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5UPC9jb2RlPiAtIFNlcnZpY2UgdHlwZS48L2RkPjxkdD48c3BhbiBjbGFzcz0ic3Ryb25nIj5QYXJhbWV0ZXJzOjwvc3Bhbj48L2R0PjxkZD48Y29kZT5uYW1lPC9jb2RlPiAtIFNlcnZpY2UgbmFtZS48L2RkPg0KPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPmFsbCBkZXBsb3llZCBzZXJ2aWNlcyB3aXRoIHNwZWNpZmllZCBuYW1lLjwvZGQ+PC9kbD4NCjwvbGk+DQo8L3VsPg0KPGEgbmFtZT0ic2VydmljZVByb3h5KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5DbGFzcywgYm9vbGVhbikiPg0KPCEtLSAgIC0tPg0KPC9hPg0KPHVsIGNsYXNzPSJibG9ja0xpc3QiPg0KPGxpIGNsYXNzPSJibG9ja0xpc3QiPg0KPGg0PnNlcnZpY2VQcm94eTwvaDQ+DQo8cHJlPjxzcGFuIGNsYXNzPSdhbmdsZV9icmFja2V0Jz4mbHQ7PC9zcGFuPlQ8c3BhbiBjbGFzcz0nYW5nbGVfYnJhY2tldCc+Jmd0Ozwvc3Bhbj4mbmJzcDtUJm5ic3A7c2VydmljZVByb3h5KDxhIGhyZWY9Imh0dHA6Ly9kb2NzLm9yYWNsZS5jb20vamF2YXNlLzcvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sP2lzLWV4dGVybmFsPXRydWUiIHRpdGxlPSJjbGFzcyBvciBpbnRlcmZhY2UgaW4gamF2YS5sYW5nIj5TdHJpbmc8L2E+Jm5ic3A7bmFtZSwNCiAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2UvNy9kb2NzL2FwaS9qYXZhL2xhbmcvQ2xhc3MuaHRtbD9pcy1leHRlcm5hbD10cnVlIiB0aXRsZT0iY2xhc3Mgb3IgaW50ZXJmYWNlIGluIGphdmEubGFuZyI+Q2xhc3M8L2E+PHNwYW4gY2xhc3M9J2FuZ2xlX2JyYWNrZXQnPiZsdDs8L3NwYW4+PyBzdXBlciBUPHNwYW4gY2xhc3M9J2FuZ2xlX2JyYWNrZXQnPiZndDs8L3NwYW4+Jm5ic3A7c3ZjSXRmLA0KICAgICAgICAgICAgICAgICBib29sZWFuJm5ic3A7c3RpY2t5KQ0KICAgICAgICAgICAgICAgdGhyb3dzIDxhIGhyZWY9Ii4uLy4uLy4uL29yZy9hcGFjaGUvaWduaXRlL0lnbml0ZUV4Y2VwdGlvbi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmFwYWNoZS5pZ25pdGUiPklnbml0ZUV4Y2VwdGlvbjwvYT48L3ByZT4NCjxkaXYgY2xhc3M9ImJsb2NrIj5HZXRzIGEgcmVtb3RlIGhhbmRsZSBvbiB0aGUgc2VydmljZS4gSWYgc2VydmljZSBpcyBhdmFpbGFibGUgbG9jYWxseSwKIHRoZW4gbG9jYWwgaW5zdGFuY2UgaXMgcmV0dXJuZWQsIG90aGVyd2lzZSwgYSByZW1vdGUgcHJveHkgaXMgZHluYW1pY2FsbHkKIGNyZWF0ZWQgYW5kIHByb3ZpZGVkIGZvciB0aGUgc3BlY2lmaWVkIHNlcnZpY2UuPC9kaXY+DQo8ZGw+PGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlBhcmFtZXRlcnM6PC9zcGFuPjwvZHQ+PGRkPjxjb2RlPm5hbWU8L2NvZGU+IC0gU2VydmljZSBuYW1lLjwvZGQ+PGRkPjxjb2RlPnN2Y0l0ZjwvY29kZT4gLSBJbnRlcmZhY2UgZm9yIHRoZSBzZXJ2aWNlLjwvZGQ+PGRkPjxjb2RlPnN0aWNreTwvY29kZT4gLSBXaGV0aGVyIG9yIG5vdCBJZ25pdGUgc2hvdWxkIGFsd2F5cyBjb250YWN0IHRoZSBzYW1lIHJlbW90ZQogICAgICBzZXJ2aWNlIG9yIHRyeSB0byBsb2FkLWJhbGFuY2UgYmV0d2VlbiBzZXJ2aWNlcy48L2RkPg0KPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlJldHVybnM6PC9zcGFuPjwvZHQ+PGRkPkVpdGhlciBwcm94eSBvdmVyIHJlbW90ZSBzZXJ2aWNlIG9yIGxvY2FsIHNlcnZpY2UgaWYgaXQgaXMgZGVwbG95ZWQgbG9jYWxseS48L2RkPg0KPGR0PjxzcGFuIGNsYXNzPSJzdHJvbmciPlRocm93czo8L3NwYW4+PC9kdD4NCjxkZD48Y29kZT48YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9JZ25pdGVFeGNlcHRpb24uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5hcGFjaGUuaWduaXRlIj5JZ25pdGVFeGNlcHRpb248L2E+PC9jb2RlPiAtIElmIGZhaWxlZCB0byBjcmVhdGUgc2VydmljZSBwcm94eS48L2RkPjwvZGw+DQo8L2xpPg0KPC91bD4NCjxhIG5hbWU9IndpdGhBc3luYygpIj4NCjwhLS0gICAtLT4NCjwvYT4NCjx1bCBjbGFzcz0iYmxvY2tMaXN0TGFzdCI+DQo8bGkgY2xhc3M9ImJsb2NrTGlzdCI+DQo8aDQ+d2l0aEFzeW5jPC9oND4NCjxwcmU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvSWduaXRlU2VydmljZXMuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuYXBhY2hlLmlnbml0ZSI+SWduaXRlU2VydmljZXM8L2E+Jm5ic3A7d2l0aEFzeW5jKCk8L3ByZT4NCjxkaXYgY2xhc3M9ImJsb2NrIj5HZXRzIGluc3RhbmNlIG9mIHRoaXMgY29tcG9uZW50IHdpdGggYXN5bmNocm9ub3VzIG1vZGUgZW5hYmxlZC48L2Rpdj4NCjxkbD4NCjxkdD48c3Ryb25nPlNwZWNpZmllZCBieTo8L3N0cm9uZz48L2R0Pg0KPGRkPjxjb2RlPjxhIGhyZWY9Ii4uLy4uLy4uL29yZy9hcGFjaGUvaWduaXRlL2xhbmcvSWduaXRlQXN5bmNTdXBwb3J0Lmh0bWwjd2l0aEFzeW5jKCkiPndpdGhBc3luYzwvYT48L2NvZGU+Jm5ic3A7aW4gaW50ZXJmYWNlJm5ic3A7PGNvZGU+PGEgaHJlZj0iLi4vLi4vLi4vb3JnL2FwYWNoZS9pZ25pdGUvbGFuZy9JZ25pdGVBc3luY1N1cHBvcnQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuYXBhY2hlLmlnbml0ZS5sYW5nIj5JZ25pdGVBc3luY1N1cHBvcnQ8L2E+PC9jb2RlPjwvZGQ+DQo8ZHQ+PHNwYW4gY2xhc3M9InN0cm9uZyI+UmV0dXJuczo8L3NwYW4+PC9kdD48ZGQ+SW5zdGFuY2Ugb2YgdGhpcyBjb21wb25lbnQgd2l0aCBhc3luY2hyb25vdXMgbW9kZSBlbmFibGVkLjwvZGQ+PC9kbD4NCjwvbGk+DQo8L3VsPg0KPC9saT4NCjwvdWw+DQo8L2xpPg0KPC91bD4NCjwvZGl2Pg0KPC9kaXY+DQo8IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+DQo8IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+DQo8ZGl2IGNsYXNzPSJib3R0b21OYXYiPjxhIG5hbWU9Im5hdmJhcl9ib3R0b20iPg0KPCEtLSAgIC0tPg0KPC9hPjxhIGhyZWY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvYT48YSBuYW1lPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij4NCjwhLS0gICAtLT4NCjwvYT4NCjx1bCBjbGFzcz0ibmF2TGlzdCIgdGl0bGU9Ik5hdmlnYXRpb24iPg0KPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+T3ZlcnZpZXc8L2E+PC9saT4NCjxsaT48YSBocmVmPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+UGFja2FnZTwvYT48L2xpPg0KPGxpIGNsYXNzPSJuYXZCYXJDZWxsMVJldiI+Q2xhc3M8L2xpPg0KPGxpPjxhIGhyZWY9ImNsYXNzLXVzZS9JZ25pdGVTZXJ2aWNlcy5odG1sIj5Vc2U8L2E+PC9saT4NCjxsaT48YSBocmVmPSJwYWNrYWdlLXRyZWUuaHRtbCI+VHJlZTwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj5EZXByZWNhdGVkPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPkluZGV4PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+SGVscDwvYT48L2xpPg0KPC91bD4NCjxkaXYgY2xhc3M9ImFib3V0TGFuZ3VhZ2UiPjxlbT5JZ25pdGUgLSBJbi1NZW1vcnkgRGF0YSBGYWJyaWM8L2VtPjwvZGl2Pg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJzdWJOYXYiPg0KPHVsIGNsYXNzPSJuYXZMaXN0Ij4NCjxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9JZ25pdGVTZW1hcGhvcmUuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuYXBhY2hlLmlnbml0ZSI+PHNwYW4gY2xhc3M9InN0cm9uZyI+UHJldiBDbGFzczwvc3Bhbj48L2E+PC9saT4NCjxsaT48YSBocmVmPSIuLi8uLi8uLi9vcmcvYXBhY2hlL2lnbml0ZS9JZ25pdGVTZXQuaHRtbCIgdGl0bGU9ImludGVyZmFjZSBpbiBvcmcuYXBhY2hlLmlnbml0ZSI+PHNwYW4gY2xhc3M9InN0cm9uZyI+TmV4dCBDbGFzczwvc3Bhbj48L2E+PC9saT4NCjwvdWw+DQo8dWwgY2xhc3M9Im5hdkxpc3QiPg0KPGxpPjxhIGhyZWY9Ii4uLy4uLy4uL2luZGV4Lmh0bWw/b3JnL2FwYWNoZS9pZ25pdGUvSWduaXRlU2VydmljZXMuaHRtbCIgdGFyZ2V0PSJfdG9wIj5GcmFtZXM8L2E+PC9saT4NCjxsaT48YSBocmVmPSJJZ25pdGVTZXJ2aWNlcy5odG1sIiB0YXJnZXQ9Il90b3AiPk5vIEZyYW1lczwvYT48L2xpPg0KPC91bD4NCjx1bCBjbGFzcz0ibmF2TGlzdCIgaWQ9ImFsbGNsYXNzZXNfbmF2YmFyX2JvdHRvbSI+DQo8bGk+PGEgaHJlZj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPkFsbCBDbGFzc2VzPC9hPjwvbGk+DQo8L3VsPg0KPGRpdj4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tDQogIGFsbENsYXNzZXNMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFsbGNsYXNzZXNfbmF2YmFyX2JvdHRvbSIpOw0KICBpZih3aW5kb3c9PXRvcCkgew0KICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOw0KICB9DQogIGVsc2Ugew0KICAgIGFsbENsYXNzZXNMaW5rLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7DQogIH0NCiAgLy8tLT4NCjwvc2NyaXB0Pg0KPC9kaXY+DQo8ZGl2Pg0KPHVsIGNsYXNzPSJzdWJOYXZMaXN0Ij4NCjxsaT5TdW1tYXJ5OiZuYnNwOzwvbGk+DQo8bGk+TmVzdGVkJm5ic3A7fCZuYnNwOzwvbGk+DQo8bGk+RmllbGQmbmJzcDt8Jm5ic3A7PC9saT4NCjxsaT5Db25zdHImbmJzcDt8Jm5ic3A7PC9saT4NCjxsaT48YSBocmVmPSIjbWV0aG9kX3N1bW1hcnkiPk1ldGhvZDwvYT48L2xpPg0KPC91bD4NCjx1bCBjbGFzcz0ic3ViTmF2TGlzdCI+DQo8bGk+RGV0YWlsOiZuYnNwOzwvbGk+DQo8bGk+RmllbGQmbmJzcDt8Jm5ic3A7PC9saT4NCjxsaT5Db25zdHImbmJzcDt8Jm5ic3A7PC9saT4NCjxsaT48YSBocmVmPSIjbWV0aG9kX2RldGFpbCI+TWV0aG9kPC9hPjwvbGk+DQo8L3VsPg0KPC9kaXY+DQo8YSBuYW1lPSJza2lwLW5hdmJhcl9ib3R0b20iPg0KPCEtLSAgIC0tPg0KPC9hPjwvZGl2Pg0KPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPg0KPHAgY2xhc3M9ImxlZ2FsQ29weSI+PHNtYWxsPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0wIGNlbGxwYWRkaW5nPTAgc3R5bGU9InBhZGRpbmc6IDVweCI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgc3R5bGU9InBhZGRpbmctbGVmdDogMDsgbWFyZ2luOiAwIj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IHN0eWxlPSJwYWRkaW5nOiAwOyBtYXJnaW46IDAiPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIHN0eWxlPSJwYWRkaW5nOiAwOyBtYXJnaW46IDAiPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGFyZ2V0PV9ibGFuayBocmVmPSJodHRwczovL2FwYWNoZS5vcmcvcHJvamVjdHMvaWduaXRlLmh0bWwiPjxub2JyPjIwMTUgQ29weXJpZ2h0ICYjMTY5OyBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbjwvbm9icj48L2E+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJyaWdodCIgdmFsaWduPSJjZW50ZXIiPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vQXBhY2hlSWduaXRlIiBjbGFzcz0idHdpdHRlci1mb2xsb3ctYnV0dG9uIiBkYXRhLXNob3ctY291bnQ9ImZhbHNlIiBkYXRhLXNpemU9ImxhcmdlIj5Gb2xsb3cgQEFwYWNoZUlnbml0ZTwvYT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2NyaXB0PiFmdW5jdGlvbihkLHMsaWQpe3ZhciBqcyxmanM9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZShzKVswXSxwPS9eaHR0cDovLnRlc3QoZC5sb2NhdGlvbik/J2h0dHAnOidodHRwcyc7aWYoIWQuZ2V0RWxlbWVudEJ5SWQoaWQpKXtqcz1kLmNyZWF0ZUVsZW1lbnQocyk7anMuaWQ9aWQ7anMuc3JjPXArJzovL3BsYXRmb3JtLnR3aXR0ZXIuY29tL3dpZGdldHMuanMnO2Zqcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShqcyxmanMpO319KGRvY3VtZW50LCAnc2NyaXB0JywgJ3R3aXR0ZXItd2pzJyk7PC9zY3JpcHQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiIgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgc3R5bGU9InBhZGRpbmctbGVmdDogMDsgbWFyZ2luOiAwIj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IHN0eWxlPSJwYWRkaW5nOiAwOyBtYXJnaW46IDAiPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIHN0eWxlPSJwYWRkaW5nOiAwOyBtYXJnaW46IDAiPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+SWduaXRlIEZhYnJpYzwvYj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD46Jm5ic3A7Jm5ic3A7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlci4gPHN0cm9uZz4xLjUuMC1maW5hbC1TTkFQU0hPVDwvc3Ryb25nPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIHN0eWxlPSJwYWRkaW5nOiAwOyBtYXJnaW46IDAiPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+UmVsZWFzZSBEYXRlPC9iPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjombmJzcDsmbmJzcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgxOXq4OHw/CAyMSAyMDE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+PC9zbWFsbD48L3A+DQo8IS0tRk9PVEVSLS0+PHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPlN5bnRheEhpZ2hsaWdodGVyLmFsbCgpO2RwLlN5bnRheEhpZ2hsaWdodGVyLkhpZ2hsaWdodEFsbCgnY29kZScpOzwvc2NyaXB0Pgo8L2JvZHk+Cg0KPC9odG1sPg0K