PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+PHRpdGxlPkQtQnVzIFNwZWNpZmljYXRpb248L3RpdGxlPjxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJhcnRpY2xlIiB0aXRsZT0iRC1CdXMgU3BlY2lmaWNhdGlvbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iaW5kZXgiPjwvYT5ELUJ1cyBTcGVjaWZpY2F0aW9uPC9oMj48L2Rpdj48ZGl2PjxkaXYgY2xhc3M9ImF1dGhvcmdyb3VwIj48ZGl2IGNsYXNzPSJhdXRob3IiPjxoMyBjbGFzcz0iYXV0aG9yIj48c3BhbiBjbGFzcz0iZmlyc3RuYW1lIj5IYXZvYzwvc3Bhbj4gPHNwYW4gY2xhc3M9InN1cm5hbWUiPlBlbm5pbmd0b248L3NwYW4+PC9oMz48ZGl2IGNsYXNzPSJhZmZpbGlhdGlvbiI+PHNwYW4gY2xhc3M9Im9yZ25hbWUiPlJlZCBIYXQsIEluYy48YnI+PC9zcGFuPjxkaXYgY2xhc3M9ImFkZHJlc3MiPjxwPjxicj4KCaCgoKA8Y29kZSBjbGFzcz0iZW1haWwiPiZsdDs8YSBjbGFzcz0iZW1haWwiIGhyZWY9Im1haWx0bzpocEBwb2JveC5jb20iPmhwQHBvYm94LmNvbTwvYT4mZ3Q7PC9jb2RlPjxicj4KCaCgPC9wPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImF1dGhvciI+PGgzIGNsYXNzPSJhdXRob3IiPjxzcGFuIGNsYXNzPSJmaXJzdG5hbWUiPkFuZGVyczwvc3Bhbj4gPHNwYW4gY2xhc3M9InN1cm5hbWUiPkNhcmxzc29uPC9zcGFuPjwvaDM+PGRpdiBjbGFzcz0iYWZmaWxpYXRpb24iPjxzcGFuIGNsYXNzPSJvcmduYW1lIj5Db2RlRmFjdG9yeSBBQjxicj48L3NwYW4+PGRpdiBjbGFzcz0iYWRkcmVzcyI+PHA+PGJyPgqgoKCgoKCgoKCgoKA8Y29kZSBjbGFzcz0iZW1haWwiPiZsdDs8YSBjbGFzcz0iZW1haWwiIGhyZWY9Im1haWx0bzphbmRlcnNjYUBjb2RlZmFjdG9yeS5zZSI+YW5kZXJzY2FAY29kZWZhY3Rvcnkuc2U8L2E+Jmd0OzwvY29kZT48YnI+CqCgoKCgoKCgoKA8L3A+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iYXV0aG9yIj48aDMgY2xhc3M9ImF1dGhvciI+PHNwYW4gY2xhc3M9ImZpcnN0bmFtZSI+QWxleGFuZGVyPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3VybmFtZSI+TGFyc3Nvbjwvc3Bhbj48L2gzPjxkaXYgY2xhc3M9ImFmZmlsaWF0aW9uIj48c3BhbiBjbGFzcz0ib3JnbmFtZSI+UmVkIEhhdCwgSW5jLjxicj48L3NwYW4+PGRpdiBjbGFzcz0iYWRkcmVzcyI+PHA+PGJyPgqgoKCgoKCgoKCgoKA8Y29kZSBjbGFzcz0iZW1haWwiPiZsdDs8YSBjbGFzcz0iZW1haWwiIGhyZWY9Im1haWx0bzphbGV4bEByZWRoYXQuY29tIj5hbGV4bEByZWRoYXQuY29tPC9hPiZndDs8L2NvZGU+PGJyPgqgoKCgoKCgoKCgPC9wPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImF1dGhvciI+PGgzIGNsYXNzPSJhdXRob3IiPjxzcGFuIGNsYXNzPSJmaXJzdG5hbWUiPlN2ZW48L3NwYW4+IDxzcGFuIGNsYXNzPSJzdXJuYW1lIj5IZXJ6YmVyZzwvc3Bhbj48L2gzPjxkaXYgY2xhc3M9ImFmZmlsaWF0aW9uIj48c3BhbiBjbGFzcz0ib3JnbmFtZSI+SW1lbmRpbyBBQjxicj48L3NwYW4+PGRpdiBjbGFzcz0iYWRkcmVzcyI+PHA+PGJyPgqgoKCgoKCgoKCgoKA8Y29kZSBjbGFzcz0iZW1haWwiPiZsdDs8YSBjbGFzcz0iZW1haWwiIGhyZWY9Im1haWx0bzpzdmVuQGltZW5kaW8uY29tIj5zdmVuQGltZW5kaW8uY29tPC9hPiZndDs8L2NvZGU+PGJyPgqgoKCgoKCgoKCgPC9wPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjxkaXY+PHAgY2xhc3M9InJlbGVhc2VpbmZvIj5WZXJzaW9uIDAuMTU8L3A+PC9kaXY+PGRpdj48ZGl2IGNsYXNzPSJyZXZoaXN0b3J5Ij48dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iUmV2aXNpb24gaGlzdG9yeSI+PHRyPjx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiIGNvbHNwYW49IjMiPjxiPlJldmlzaW9uIEhpc3Rvcnk8L2I+PC90aD48L3RyPjx0cj48dGQgYWxpZ249ImxlZnQiPlJldmlzaW9uIGN1cnJlbnQ8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+PGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZGJ1cy9kYnVzL2xvZy9kb2MvZGJ1cy1zcGVjaWZpY2F0aW9uLnhtbCIgdGFyZ2V0PSJfdG9wIj5jb21taXQgbG9nPC9hPjwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0ibGVmdCIgY29sc3Bhbj0iMyI+PC90ZD48L3RyPjx0cj48dGQgYWxpZ249ImxlZnQiPlJldmlzaW9uIDAuMTU8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+MyBOb3ZlbWJlciAyMDEwPC90ZD48dGQgYWxpZ249ImxlZnQiPjwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSJsZWZ0IiBjb2xzcGFuPSIzIj48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0ibGVmdCI+UmV2aXNpb24gMC4xNDwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij4xMiBNYXkgMjAxMDwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0ibGVmdCIgY29sc3Bhbj0iMyI+PC90ZD48L3RyPjx0cj48dGQgYWxpZ249ImxlZnQiPlJldmlzaW9uIDAuMTM8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+MjMgRGV6ZW1iZXIgMjAwOTwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0ibGVmdCIgY29sc3Bhbj0iMyI+PC90ZD48L3RyPjx0cj48dGQgYWxpZ249ImxlZnQiPlJldmlzaW9uIDAuMTI8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+NyBOb3ZlbWJlciwgMjAwNjwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0ibGVmdCIgY29sc3Bhbj0iMyI+PC90ZD48L3RyPjx0cj48dGQgYWxpZ249ImxlZnQiPlJldmlzaW9uIDAuMTE8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+NiBGZWJydWFyeSAyMDA1PC90ZD48dGQgYWxpZ249ImxlZnQiPjwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSJsZWZ0IiBjb2xzcGFuPSIzIj48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0ibGVmdCI+UmV2aXNpb24gMC4xMDwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij4yOCBKYW51YXJ5IDIwMDU8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+PC90ZD48L3RyPjx0cj48dGQgYWxpZ249ImxlZnQiIGNvbHNwYW49IjMiPjwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSJsZWZ0Ij5SZXZpc2lvbiAwLjk8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+NyBKYW51YXIgMjAwNTwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0ibGVmdCIgY29sc3Bhbj0iMyI+PC90ZD48L3RyPjx0cj48dGQgYWxpZ249ImxlZnQiPlJldmlzaW9uIDAuODwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij4wNiBTZXB0ZW1iZXIgMjAwMzwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0ibGVmdCIgY29sc3Bhbj0iMyI+Rmlyc3QgcmVsZWFzZWQgZG9jdW1lbnQuPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+PC9kaXY+PC9kaXY+PGhyPjwvZGl2PjxkaXYgY2xhc3M9InRvYyI+PHA+PGI+VGFibGUgb2YgQ29udGVudHM8L2I+PC9wPjxkbD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjaW50cm9kdWN0aW9uIj5JbnRyb2R1Y3Rpb248L2E+PC9zcGFuPjwvZHQ+PGRkPjxkbD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjc3RhYmlsaXR5Ij5Qcm90b2NvbCBhbmQgU3BlY2lmaWNhdGlvbiBTdGFiaWxpdHk8L2E+PC9zcGFuPjwvZHQ+PC9kbD48L2RkPjxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNtZXNzYWdlLXByb3RvY29sIj5NZXNzYWdlIFByb3RvY29sPC9hPjwvc3Bhbj48L2R0PjxkZD48ZGw+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI21lc3NhZ2UtcHJvdG9jb2wtc2lnbmF0dXJlcyI+VHlwZSBTaWduYXR1cmVzPC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNtZXNzYWdlLXByb3RvY29sLW1hcnNoYWxpbmciPk1hcnNoYWxpbmcgKFdpcmUgRm9ybWF0KTwvYT48L3NwYW4+PC9kdD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjbWVzc2FnZS1wcm90b2NvbC1tZXNzYWdlcyI+TWVzc2FnZSBGb3JtYXQ8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI21lc3NhZ2UtcHJvdG9jb2wtbmFtZXMiPlZhbGlkIE5hbWVzPC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNtZXNzYWdlLXByb3RvY29sLXR5cGVzIj5NZXNzYWdlIFR5cGVzPC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNtZXNzYWdlLXByb3RvY29sLWhhbmRsaW5nLWludmFsaWQiPkludmFsaWQgUHJvdG9jb2wgYW5kIFNwZWMgRXh0ZW5zaW9uczwvYT48L3NwYW4+PC9kdD48L2RsPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2F1dGgtcHJvdG9jb2wiPkF1dGhlbnRpY2F0aW9uIFByb3RvY29sPC9hPjwvc3Bhbj48L2R0PjxkZD48ZGw+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2F1dGgtcHJvdG9jb2wtb3ZlcnZpZXciPlByb3RvY29sIE92ZXJ2aWV3PC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNhdXRoLW51bC1ieXRlIj5TcGVjaWFsIGNyZWRlbnRpYWxzLXBhc3NpbmcgbnVsIGJ5dGU8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2F1dGgtY29tbWFuZC1hdXRoIj5BVVRIIGNvbW1hbmQ8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2F1dGgtY29tbWFuZC1jYW5jZWwiPkNBTkNFTCBDb21tYW5kPC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNhdXRoLWNvbW1hbmQtZGF0YSI+REFUQSBDb21tYW5kPC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNhdXRoLWNvbW1hbmQtYmVnaW4iPkJFR0lOIENvbW1hbmQ8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2F1dGgtY29tbWFuZC1yZWplY3RlZCI+UkVKRUNURUQgQ29tbWFuZDwvYT48L3NwYW4+PC9kdD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYXV0aC1jb21tYW5kLW9rIj5PSyBDb21tYW5kPC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNhdXRoLWNvbW1hbmQtZXJyb3IiPkVSUk9SIENvbW1hbmQ8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2F1dGgtY29tbWFuZC1uZWdvdGlhdGUtdW5peC1mZCI+TkVHT1RJQVRFX1VOSVhfRkQgQ29tbWFuZDwvYT48L3NwYW4+PC9kdD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYXV0aC1jb21tYW5kLWFncmVlLXVuaXgtZmQiPkFHUkVFX1VOSVhfRkQgQ29tbWFuZDwvYT48L3NwYW4+PC9kdD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYXV0aC1jb21tYW5kLWZ1dHVyZSI+RnV0dXJlIEV4dGVuc2lvbnM8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2F1dGgtZXhhbXBsZXMiPkF1dGhlbnRpY2F0aW9uIGV4YW1wbGVzPC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNhdXRoLXN0YXRlcyI+QXV0aGVudGljYXRpb24gc3RhdGUgZGlhZ3JhbXM8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2F1dGgtbWVjaGFuaXNtcyI+QXV0aGVudGljYXRpb24gbWVjaGFuaXNtczwvYT48L3NwYW4+PC9kdD48L2RsPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2FkZHJlc3NlcyI+U2VydmVyIEFkZHJlc3NlczwvYT48L3NwYW4+PC9kdD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjdHJhbnNwb3J0cyI+VHJhbnNwb3J0czwvYT48L3NwYW4+PC9kdD48ZGQ+PGRsPjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiN0cmFuc3BvcnRzLXVuaXgtZG9tYWluLXNvY2tldHMiPlVuaXggRG9tYWluIFNvY2tldHM8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI3RyYW5zcG9ydHMtbGF1bmNoZCI+bGF1bmNoZDwvYT48L3NwYW4+PC9kdD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjdHJhbnNwb3J0cy10Y3Atc29ja2V0cyI+VENQIFNvY2tldHM8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI3RyYW5zcG9ydHMtbm9uY2UtdGNwLXNvY2tldHMiPk5vbmNlLXNlY3VyZWQgVENQIFNvY2tldHM8L2E+PC9zcGFuPjwvZHQ+PC9kbD48L2RkPjxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNtZXRhLXRyYW5zcG9ydHMiPk1ldGEgVHJhbnNwb3J0czwvYT48L3NwYW4+PC9kdD48ZGQ+PGRsPjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNtZXRhLXRyYW5zcG9ydHMtYXV0b2xhdW5jaCI+QXV0b2xhdW5jaDwvYT48L3NwYW4+PC9kdD48L2RsPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI25hbWluZy1jb252ZW50aW9ucyI+TmFtaW5nIENvbnZlbnRpb25zPC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiN1dWlkcyI+VVVJRHM8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3N0YW5kYXJkLWludGVyZmFjZXMiPlN0YW5kYXJkIEludGVyZmFjZXM8L2E+PC9zcGFuPjwvZHQ+PGRkPjxkbD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjc3RhbmRhcmQtaW50ZXJmYWNlcy1wZWVyIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkRCdXMuUGVlcjwvY29kZT48L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI3N0YW5kYXJkLWludGVyZmFjZXMtaW50cm9zcGVjdGFibGUiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5JbnRyb3NwZWN0YWJsZTwvY29kZT48L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI3N0YW5kYXJkLWludGVyZmFjZXMtcHJvcGVydGllcyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPm9yZy5mcmVlZGVza3RvcC5EQnVzLlByb3BlcnRpZXM8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PjwvZGw+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjaW50cm9zcGVjdGlvbi1mb3JtYXQiPkludHJvc3BlY3Rpb24gRGF0YSBGb3JtYXQ8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI21lc3NhZ2UtYnVzIj5NZXNzYWdlIEJ1cyBTcGVjaWZpY2F0aW9uPC9hPjwvc3Bhbj48L2R0PjxkZD48ZGw+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI21lc3NhZ2UtYnVzLW92ZXJ2aWV3Ij5NZXNzYWdlIEJ1cyBPdmVydmlldzwvYT48L3NwYW4+PC9kdD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjbWVzc2FnZS1idXMtbmFtZXMiPk1lc3NhZ2UgQnVzIE5hbWVzPC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNtZXNzYWdlLWJ1cy1yb3V0aW5nIj5NZXNzYWdlIEJ1cyBNZXNzYWdlIFJvdXRpbmc8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI21lc3NhZ2UtYnVzLXN0YXJ0aW5nLXNlcnZpY2VzIj5NZXNzYWdlIEJ1cyBTdGFydGluZyBTZXJ2aWNlczwvYT48L3NwYW4+PC9kdD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjbWVzc2FnZS1idXMtdHlwZXMiPldlbGwta25vd24gTWVzc2FnZSBCdXMgSW5zdGFuY2VzPC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNtZXNzYWdlLWJ1cy1tZXNzYWdlcyI+TWVzc2FnZSBCdXMgTWVzc2FnZXM8L2E+PC9zcGFuPjwvZHQ+PC9kbD48L2RkPjxkdD48c3BhbiBjbGFzcz0iZ2xvc3NhcnkiPjxhIGhyZWY9IiNpZHA1Nzg4OTkyIj5HbG9zc2FyeTwvYT48L3NwYW4+PC9kdD48L2RsPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iSW50cm9kdWN0aW9uIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9ImludHJvZHVjdGlvbiI+PC9hPkludHJvZHVjdGlvbjwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgIEQtQnVzIGlzIGEgc3lzdGVtIGZvciBsb3ctbGF0ZW5jeSwgbG93LW92ZXJoZWFkLCBlYXN5IHRvIHVzZQogICAgICBpbnRlcnByb2Nlc3MgY29tbXVuaWNhdGlvbiAoSVBDKS4gSW4gbW9yZSBkZXRhaWw6CiAgICAgIDwvcD48ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiB0eXBlPSJkaXNjIj48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgRC1CdXMgaXMgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bG93LWxhdGVuY3k8L2VtPjwvc3Bhbj4gYmVjYXVzZSBpdCBpcyBkZXNpZ25lZCAKICAgICAgICAgICAgdG8gYXZvaWQgcm91bmQgdHJpcHMgYW5kIGFsbG93IGFzeW5jaHJvbm91cyBvcGVyYXRpb24sIG11Y2ggbGlrZSAKICAgICAgICAgICAgdGhlIFggcHJvdG9jb2wuCiAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgRC1CdXMgaXMgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bG93LW92ZXJoZWFkPC9lbT48L3NwYW4+IGJlY2F1c2UgaXQgdXNlcyBhCiAgICAgICAgICAgIGJpbmFyeSBwcm90b2NvbCwgYW5kIGRvZXMgbm90IGhhdmUgdG8gY29udmVydCB0byBhbmQgZnJvbSBhIHRleHQKICAgICAgICAgICAgZm9ybWF0IHN1Y2ggYXMgWE1MLiBCZWNhdXNlIEQtQnVzIGlzIGludGVuZGVkIGZvciBwb3RlbnRpYWxseQogICAgICAgICAgICBoaWdoLXJlc29sdXRpb24gc2FtZS1tYWNoaW5lIElQQywgbm90IHByaW1hcmlseSBmb3IgSW50ZXJuZXQgSVBDLAogICAgICAgICAgICB0aGlzIGlzIGFuIGludGVyZXN0aW5nIG9wdGltaXphdGlvbi4KICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICBELUJ1cyBpcyA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5lYXN5IHRvIHVzZTwvZW0+PC9zcGFuPiBiZWNhdXNlIGl0IHdvcmtzIGluIHRlcm1zCiAgICAgICAgICAgIG9mIDxlbSBjbGFzcz0iZmlyc3R0ZXJtIj5tZXNzYWdlczwvZW0+IHJhdGhlciB0aGFuIGJ5dGUgc3RyZWFtcywgYW5kCiAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgaGFuZGxlcyBhIGxvdCBvZiB0aGUgaGFyZCBJUEMgaXNzdWVzLiBBbHNvLCB0aGUgRC1CdXMKICAgICAgICAgICAgbGlicmFyeSBpcyBkZXNpZ25lZCB0byBiZSB3cmFwcGVkIGluIGEgd2F5IHRoYXQgbGV0cyBkZXZlbG9wZXJzIHVzZQogICAgICAgICAgICB0aGVpciBmcmFtZXdvcmsncyBleGlzdGluZyBvYmplY3QvdHlwZSBzeXN0ZW0sIHJhdGhlciB0aGFuIGxlYXJuaW5nCiAgICAgICAgICAgIGEgbmV3IG9uZSBzcGVjaWZpY2FsbHkgZm9yIElQQy4KICAgICAgICAgIDwvcD48L2xpPjwvdWw+PC9kaXY+PHA+CiAgICA8L3A+PHA+CiAgICAgIFRoZSBiYXNlIEQtQnVzIHByb3RvY29sIGlzIGEgb25lLXRvLW9uZSAocGVlci10by1wZWVyIG9yIGNsaWVudC1zZXJ2ZXIpCiAgICAgIHByb3RvY29sLCBzcGVjaWZpZWQgaW4gPGEgY2xhc3M9InhyZWYiIGhyZWY9IiNtZXNzYWdlLXByb3RvY29sIiB0aXRsZT0iTWVzc2FnZSBQcm90b2NvbCI+dGhlIHNlY3Rpb24gY2FsbGVkICYjODIyMDtNZXNzYWdlIFByb3RvY29sJiM4MjIxOzwvYT4uIFRoYXQgaXMsIGl0IGlzCiAgICAgIGEgc3lzdGVtIGZvciBvbmUgYXBwbGljYXRpb24gdG8gdGFsayB0byBhIHNpbmdsZSBvdGhlcgogICAgICBhcHBsaWNhdGlvbi4gSG93ZXZlciwgdGhlIHByaW1hcnkgaW50ZW5kZWQgYXBwbGljYXRpb24gb2YgdGhlIHByb3RvY29sIGlzIHRoZQogICAgICBELUJ1cyA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+bWVzc2FnZSBidXM8L2VtPiwgc3BlY2lmaWVkIGluIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjbWVzc2FnZS1idXMiIHRpdGxlPSJNZXNzYWdlIEJ1cyBTcGVjaWZpY2F0aW9uIj50aGUgc2VjdGlvbiBjYWxsZWQgJiM4MjIwO01lc3NhZ2UgQnVzIFNwZWNpZmljYXRpb24mIzgyMjE7PC9hPi4gVGhlIG1lc3NhZ2UgYnVzIGlzIGEgc3BlY2lhbCBhcHBsaWNhdGlvbiB0aGF0CiAgICAgIGFjY2VwdHMgY29ubmVjdGlvbnMgZnJvbSBtdWx0aXBsZSBvdGhlciBhcHBsaWNhdGlvbnMsIGFuZCBmb3J3YXJkcwogICAgICBtZXNzYWdlcyBhbW9uZyB0aGVtLgogICAgPC9wPjxwPgogICAgICBVc2VzIG9mIEQtQnVzIGluY2x1ZGUgbm90aWZpY2F0aW9uIG9mIHN5c3RlbSBjaGFuZ2VzIChub3RpZmljYXRpb24gb2Ygd2hlbgogICAgICBhIGNhbWVyYSBpcyBwbHVnZ2VkIGluIHRvIGEgY29tcHV0ZXIsIG9yIGEgbmV3IHZlcnNpb24gb2Ygc29tZSBzb2Z0d2FyZQogICAgICBoYXMgYmVlbiBpbnN0YWxsZWQpLCBvciBkZXNrdG9wIGludGVyb3BlcmFiaWxpdHksIGZvciBleGFtcGxlIGEgZmlsZQogICAgICBtb25pdG9yaW5nIHNlcnZpY2Ugb3IgYSBjb25maWd1cmF0aW9uIHNlcnZpY2UuCiAgICA8L3A+PHA+CiAgICAgIEQtQnVzIGlzIGRlc2lnbmVkIGZvciB0d28gc3BlY2lmaWMgdXNlIGNhc2VzOgogICAgICA8L3A+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgIEEgInN5c3RlbSBidXMiIGZvciBub3RpZmljYXRpb25zIGZyb20gdGhlIHN5c3RlbSB0byB1c2VyIHNlc3Npb25zLAogICAgICAgICAgICBhbmQgdG8gYWxsb3cgdGhlIHN5c3RlbSB0byByZXF1ZXN0IGlucHV0IGZyb20gdXNlciBzZXNzaW9ucy4KICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICBBICJzZXNzaW9uIGJ1cyIgdXNlZCB0byBpbXBsZW1lbnQgZGVza3RvcCBlbnZpcm9ubWVudHMgc3VjaCBhcyAKICAgICAgICAgICAgR05PTUUgYW5kIEtERS4KICAgICAgICAgIDwvcD48L2xpPjwvdWw+PC9kaXY+PHA+CiAgICAgIEQtQnVzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBhIGdlbmVyaWMgSVBDIHN5c3RlbSBmb3IgYW55IHBvc3NpYmxlIAogICAgICBhcHBsaWNhdGlvbiwgYW5kIGludGVudGlvbmFsbHkgb21pdHMgbWFueSBmZWF0dXJlcyBmb3VuZCBpbiBvdGhlciAKICAgICAgSVBDIHN5c3RlbXMgZm9yIHRoaXMgcmVhc29uLgogICAgPC9wPjxwPgogICAgICBBdCB0aGUgc2FtZSB0aW1lLCB0aGUgYnVzIGRhZW1vbnMgb2ZmZXIgYSBudW1iZXIgb2YgZmVhdHVyZXMgbm90IGZvdW5kIGluCiAgICAgIG90aGVyIElQQyBzeXN0ZW1zLCBzdWNoIGFzIHNpbmdsZS1vd25lciAiYnVzIG5hbWVzIiAoc2ltaWxhciB0byBYCiAgICAgIHNlbGVjdGlvbnMpLCBvbi1kZW1hbmQgc3RhcnR1cCBvZiBzZXJ2aWNlcywgYW5kIHNlY3VyaXR5IHBvbGljaWVzLgogICAgICBJbiBtYW55IHdheXMsIHRoZXNlIGZlYXR1cmVzIGFyZSB0aGUgcHJpbWFyeSBtb3RpdmF0aW9uIGZvciBkZXZlbG9waW5nIAogICAgICBELUJ1czsgb3RoZXIgc3lzdGVtcyB3b3VsZCBoYXZlIHN1ZmZpY2VkIGlmIElQQyB3ZXJlIHRoZSBvbmx5IGdvYWwuCiAgICA8L3A+PHA+CiAgICAgIEQtQnVzIG1heSB0dXJuIG91dCB0byBiZSB1c2VmdWwgaW4gdW5hbnRpY2lwYXRlZCBhcHBsaWNhdGlvbnMsIGJ1dCBmdXR1cmUKICAgICAgdmVyc2lvbnMgb2YgdGhpcyBzcGVjIGFuZCB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIHByb2JhYmx5IHdpbGwgbm90CiAgICAgIGluY29ycG9yYXRlIGZlYXR1cmVzIHRoYXQgaW50ZXJmZXJlIHdpdGggdGhlIGNvcmUgdXNlIGNhc2VzLgogICAgPC9wPjxwPgogICAgICBUaGUga2V5IHdvcmRzICJNVVNUIiwgIk1VU1QgTk9UIiwgIlJFUVVJUkVEIiwgIlNIQUxMIiwgIlNIQUxMIE5PVCIsCiAgICAgICJTSE9VTEQiLCAiU0hPVUxEIE5PVCIsICJSRUNPTU1FTkRFRCIsICJNQVkiLCBhbmQgIk9QVElPTkFMIiBpbiB0aGlzCiAgICAgIGRvY3VtZW50IGFyZSB0byBiZSBpbnRlcnByZXRlZCBhcyBkZXNjcmliZWQgaW4gUkZDIDIxMTkuIEhvd2V2ZXIsIHRoZQogICAgICBkb2N1bWVudCBjb3VsZCB1c2UgYSBzZXJpb3VzIGF1ZGl0IHRvIGJlIHN1cmUgaXQgbWFrZXMgc2Vuc2UgdG8gZG8KICAgICAgc28uIEFsc28sIHRoZXkgYXJlIG5vdCBjYXBpdGFsaXplZC4KICAgIDwvcD48ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IlByb3RvY29sIGFuZCBTcGVjaWZpY2F0aW9uIFN0YWJpbGl0eSI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0ic3RhYmlsaXR5Ij48L2E+UHJvdG9jb2wgYW5kIFNwZWNpZmljYXRpb24gU3RhYmlsaXR5PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBUaGUgRC1CdXMgcHJvdG9jb2wgaXMgZnJvemVuIChvbmx5IGNvbXBhdGlibGUgZXh0ZW5zaW9ucyBhcmUgYWxsb3dlZCkgYXMKICAgICAgICBvZiBOb3ZlbWJlciA4LCAyMDA2LiAgSG93ZXZlciwgdGhpcyBzcGVjaWZpY2F0aW9uIGNvdWxkIHN0aWxsIHVzZSBhIGZhaXIKICAgICAgICBiaXQgb2Ygd29yayB0byBtYWtlIGludGVyb3BlcmFibGUgcmVpbXBsZW1lbnRhdGlvbiBwb3NzaWJsZSB3aXRob3V0CiAgICAgICAgcmVmZXJlbmNlIHRvIHRoZSBELUJ1cyByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24uIFRodXMsIHRoaXMKICAgICAgICBzcGVjaWZpY2F0aW9uIGlzIG5vdCBtYXJrZWQgMS4wLiBUbyBtYXJrIGl0IDEuMCwgd2UnZCBsaWtlIHRvIHNlZQogICAgICAgIHNvbWVvbmUgaW52ZXN0IHNpZ25pZmljYW50IGVmZm9ydCBpbiBjbGFyaWZ5aW5nIHRoZSBzcGVjaWZpY2F0aW9uCiAgICAgICAgbGFuZ3VhZ2UsIGFuZCBncm93aW5nIHRoZSBzcGVjaWZpY2F0aW9uIHRvIGNvdmVyIG1vcmUgYXNwZWN0cyBvZiB0aGUKICAgICAgICByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24ncyBiZWhhdmlvci4KICAgICAgPC9wPjxwPgogICAgICAgIFVudGlsIHRoaXMgd29yayBpcyBjb21wbGV0ZSwgYW55IGF0dGVtcHQgdG8gcmVpbXBsZW1lbnQgRC1CdXMgd2lsbCAKICAgICAgICBwcm9iYWJseSByZXF1aXJlIGxvb2tpbmcgYXQgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBhbmQvb3IgYXNraW5nCiAgICAgICAgcXVlc3Rpb25zIG9uIHRoZSBELUJ1cyBtYWlsaW5nIGxpc3QgYWJvdXQgaW50ZW5kZWQgYmVoYXZpb3IuIAogICAgICAgIFF1ZXN0aW9ucyBvbiB0aGUgbGlzdCBhcmUgdmVyeSB3ZWxjb21lLgogICAgICA8L3A+PHA+CiAgICAgICAgTm9uZXRoZWxlc3MsIHRoaXMgZG9jdW1lbnQgc2hvdWxkIGJlIGEgdXNlZnVsIHN0YXJ0aW5nIHBvaW50IGFuZCBpcyAKICAgICAgICB0byBvdXIga25vd2xlZGdlIGFjY3VyYXRlLCB0aG91Z2ggaW5jb21wbGV0ZS4KICAgICAgPC9wPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iTWVzc2FnZSBQcm90b2NvbCI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJtZXNzYWdlLXByb3RvY29sIj48L2E+TWVzc2FnZSBQcm90b2NvbDwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgIEEgPGVtIGNsYXNzPSJmaXJzdHRlcm0iPm1lc3NhZ2U8L2VtPiBjb25zaXN0cyBvZiBhCiAgICAgIDxlbSBjbGFzcz0iZmlyc3R0ZXJtIj5oZWFkZXI8L2VtPiBhbmQgYSA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+Ym9keTwvZW0+LiBJZiB5b3UKICAgICAgdGhpbmsgb2YgYSBtZXNzYWdlIGFzIGEgcGFja2FnZSwgdGhlIGhlYWRlciBpcyB0aGUgYWRkcmVzcywgYW5kIHRoZSBib2R5CiAgICAgIGNvbnRhaW5zIHRoZSBwYWNrYWdlIGNvbnRlbnRzLiBUaGUgbWVzc2FnZSBkZWxpdmVyeSBzeXN0ZW0gdXNlcyB0aGUgaGVhZGVyCiAgICAgIGluZm9ybWF0aW9uIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdG8gc2VuZCB0aGUgbWVzc2FnZSBhbmQgaG93IHRvIGludGVycHJldAogICAgICBpdDsgdGhlIHJlY2lwaWVudCBpbnRlcnByZXRzIHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlLgogICAgPC9wPjxwPgogICAgICBUaGUgYm9keSBvZiB0aGUgbWVzc2FnZSBpcyBtYWRlIHVwIG9mIHplcm8gb3IgbW9yZQogICAgICA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+YXJndW1lbnRzPC9lbT4sIHdoaWNoIGFyZSB0eXBlZCB2YWx1ZXMsIHN1Y2ggYXMgYW4KICAgICAgaW50ZWdlciBvciBhIGJ5dGUgYXJyYXkuCiAgICA8L3A+PHA+CiAgICAgIEJvdGggaGVhZGVyIGFuZCBib2R5IHVzZSB0aGUgc2FtZSB0eXBlIHN5c3RlbSBhbmQgZm9ybWF0IGZvciAKICAgICAgc2VyaWFsaXppbmcgZGF0YS4gRWFjaCB0eXBlIG9mIHZhbHVlIGhhcyBhIHdpcmUgZm9ybWF0LiAKICAgICAgQ29udmVydGluZyBhIHZhbHVlIGZyb20gc29tZSBvdGhlciByZXByZXNlbnRhdGlvbiBpbnRvIHRoZSB3aXJlCiAgICAgIGZvcm1hdCBpcyBjYWxsZWQgPGVtIGNsYXNzPSJmaXJzdHRlcm0iPm1hcnNoYWxpbmc8L2VtPiBhbmQgY29udmVydGluZwogICAgICBpdCBiYWNrIGZyb20gdGhlIHdpcmUgZm9ybWF0IGlzIDxlbSBjbGFzcz0iZmlyc3R0ZXJtIj51bm1hcnNoYWxpbmc8L2VtPi4KICAgIDwvcD48ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IlR5cGUgU2lnbmF0dXJlcyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0ibWVzc2FnZS1wcm90b2NvbC1zaWduYXR1cmVzIj48L2E+VHlwZSBTaWduYXR1cmVzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBUaGUgRC1CdXMgcHJvdG9jb2wgZG9lcyBub3QgaW5jbHVkZSB0eXBlIHRhZ3MgaW4gdGhlIG1hcnNoYWxlZCBkYXRhOyBhCiAgICAgICAgYmxvY2sgb2YgbWFyc2hhbGVkIHZhbHVlcyBtdXN0IGhhdmUgYSBrbm93biA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+dHlwZQogICAgICAgIHNpZ25hdHVyZTwvZW0+LiAgVGhlIHR5cGUgc2lnbmF0dXJlIGlzIG1hZGUgdXAgb2YgPGVtIGNsYXNzPSJmaXJzdHRlcm0iPnR5cGUKICAgICAgICBjb2RlczwvZW0+LiBBIHR5cGUgY29kZSBpcyBhbiBBU0NJSSBjaGFyYWN0ZXIgcmVwcmVzZW50aW5nIHRoZQogICAgICAgIHR5cGUgb2YgYSB2YWx1ZS4gQmVjYXVzZSBBU0NJSSBjaGFyYWN0ZXJzIGFyZSB1c2VkLCB0aGUgdHlwZSBzaWduYXR1cmUKICAgICAgICB3aWxsIGFsd2F5cyBmb3JtIGEgdmFsaWQgQVNDSUkgc3RyaW5nLiBBIHNpbXBsZSBzdHJpbmcgY29tcGFyZSAKICAgICAgICBkZXRlcm1pbmVzIHdoZXRoZXIgdHdvIHR5cGUgc2lnbmF0dXJlcyBhcmUgZXF1aXZhbGVudC4KICAgICAgPC9wPjxwPgogICAgICAgIEFzIGEgc2ltcGxlIGV4YW1wbGUsIHRoZSB0eXBlIGNvZGUgZm9yIDMyLWJpdCBpbnRlZ2VyICg8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+SU5UMzI8L2NvZGU+KSBpcwogICAgICAgIHRoZSBBU0NJSSBjaGFyYWN0ZXIgJ2knLiBTbyB0aGUgc2lnbmF0dXJlIGZvciBhIGJsb2NrIG9mIHZhbHVlcyAKICAgICAgICBjb250YWluaW5nIGEgc2luZ2xlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5JTlQzMjwvY29kZT4gd291bGQgYmU6CiAgICAgICAgPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgICJpIgogICAgICAgIDwvcHJlPjxwPgogICAgICAgIEEgYmxvY2sgb2YgdmFsdWVzIGNvbnRhaW5pbmcgdHdvIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5JTlQzMjwvY29kZT4gd291bGQgaGF2ZSB0aGlzIHNpZ25hdHVyZToKICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogICAgICAgICAgImlpIgogICAgICAgIDwvcHJlPjxwPiAgICAgICAgCiAgICAgIDwvcD48cD4KICAgICAgICBBbGwgPGVtIGNsYXNzPSJmaXJzdHRlcm0iPmJhc2ljPC9lbT4gdHlwZXMgd29yayBsaWtlIAogICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5JTlQzMjwvY29kZT4gaW4gdGhpcyBleGFtcGxlLiBUbyBtYXJzaGFsIGFuZCB1bm1hcnNoYWwgCiAgICAgICAgYmFzaWMgdHlwZXMsIHlvdSBzaW1wbHkgcmVhZCBvbmUgdmFsdWUgZnJvbSB0aGUgZGF0YQogICAgICAgIGJsb2NrIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCB0eXBlIGNvZGUgaW4gdGhlIHNpZ25hdHVyZS4KICAgICAgICBJbiBhZGRpdGlvbiB0byBiYXNpYyB0eXBlcywgdGhlcmUgYXJlIGZvdXIgPGVtIGNsYXNzPSJmaXJzdHRlcm0iPmNvbnRhaW5lcjwvZW0+IAogICAgICAgIHR5cGVzOiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+U1RSVUNUPC9jb2RlPiwgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkFSUkFZPC9jb2RlPiwgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPlZBUklBTlQ8L2NvZGU+LCAKICAgICAgICBhbmQgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRJQ1RfRU5UUlk8L2NvZGU+LgogICAgICA8L3A+PHA+CiAgICAgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPlNUUlVDVDwvY29kZT4gaGFzIGEgdHlwZSBjb2RlLCBBU0NJSSBjaGFyYWN0ZXIgJ3InLCBidXQgdGhpcyB0eXBlIAogICAgICAgIGNvZGUgZG9lcyBub3QgYXBwZWFyIGluIHNpZ25hdHVyZXMuIEluc3RlYWQsIEFTQ0lJIGNoYXJhY3RlcnMKICAgICAgICAnKCcgYW5kICcpJyBhcmUgdXNlZCB0byBtYXJrIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgc3RydWN0LgogICAgICAgIFNvIGZvciBleGFtcGxlLCBhIHN0cnVjdCBjb250YWluaW5nIHR3byBpbnRlZ2VycyB3b3VsZCBoYXZlIHRoaXMgCiAgICAgICAgc2lnbmF0dXJlOgogICAgICAgIDwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CiAgICAgICAgICAiKGlpKSIKICAgICAgICA8L3ByZT48cD4KICAgICAgICBTdHJ1Y3RzIGNhbiBiZSBuZXN0ZWQsIHNvIGZvciBleGFtcGxlIGEgc3RydWN0IGNvbnRhaW5pbmcgCiAgICAgICAgYW4gaW50ZWdlciBhbmQgYW5vdGhlciBzdHJ1Y3Q6CiAgICAgICAgPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgICIoaShpaSkpIgogICAgICAgIDwvcHJlPjxwPgogICAgICAgIFRoZSB2YWx1ZSBibG9jayBzdG9yaW5nIHRoYXQgc3RydWN0IHdvdWxkIGNvbnRhaW4gdGhyZWUgaW50ZWdlcnM7IHRoZQogICAgICAgIHR5cGUgc2lnbmF0dXJlIGFsbG93cyB5b3UgdG8gZGlzdGluZ3Vpc2ggIihpKGlpKSkiIGZyb20gIigoaWkpaSkiIG9yCiAgICAgICAgIihpaWkpIiBvciAiaWlpIi4KICAgICAgPC9wPjxwPgogICAgICAgIFRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+U1RSVUNUPC9jb2RlPiB0eXBlIGNvZGUgJ3InIGlzIG5vdCBjdXJyZW50bHkgdXNlZCBpbiB0aGUgRC1CdXMgcHJvdG9jb2wsCiAgICAgICAgYnV0IGlzIHVzZWZ1bCBpbiBjb2RlIHRoYXQgaW1wbGVtZW50cyB0aGUgcHJvdG9jb2wuIFRoaXMgdHlwZSBjb2RlIAogICAgICAgIGlzIHNwZWNpZmllZCB0byBhbGxvdyBzdWNoIGNvZGUgdG8gaW50ZXJvcGVyYXRlIGluIG5vbi1wcm90b2NvbCBjb250ZXh0cy4KICAgICAgPC9wPjxwPgogICAgICAgIEVtcHR5IHN0cnVjdHVyZXMgYXJlIG5vdCBhbGxvd2VkOyB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZQogICAgICAgIHR5cGUgY29kZSBiZXR3ZWVuIHRoZSBwYXJlbnRoZXNlcy4KICAgICAgPC9wPjxwPgogICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5BUlJBWTwvY29kZT4gaGFzIEFTQ0lJIGNoYXJhY3RlciAnYScgYXMgdHlwZSBjb2RlLiBUaGUgYXJyYXkgdHlwZSBjb2RlIG11c3QgYmUKICAgICAgICBmb2xsb3dlZCBieSBhIDxlbSBjbGFzcz0iZmlyc3R0ZXJtIj5zaW5nbGUgY29tcGxldGUgdHlwZTwvZW0+LiBUaGUgc2luZ2xlCiAgICAgICAgY29tcGxldGUgdHlwZSBmb2xsb3dpbmcgdGhlIGFycmF5IGlzIHRoZSB0eXBlIG9mIGVhY2ggYXJyYXkgZWxlbWVudC4gU28KICAgICAgICB0aGUgc2ltcGxlIGV4YW1wbGUgaXM6CiAgICAgICAgPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgICJhaSIKICAgICAgICA8L3ByZT48cD4KICAgICAgICB3aGljaCBpcyBhbiBhcnJheSBvZiAzMi1iaXQgaW50ZWdlcnMuIEJ1dCBhbiBhcnJheSBjYW4gYmUgb2YgYW55IHR5cGUsIAogICAgICAgIHN1Y2ggYXMgdGhpcyBhcnJheS1vZi1zdHJ1Y3Qtd2l0aC10d28taW50MzItZmllbGRzOgogICAgICAgIDwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CiAgICAgICAgICAiYShpaSkiCiAgICAgICAgPC9wcmU+PHA+CiAgICAgICAgT3IgdGhpcyBhcnJheSBvZiBhcnJheSBvZiBpbnRlZ2VyOgogICAgICAgIDwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CiAgICAgICAgICAiYWFpIgogICAgICAgIDwvcHJlPjxwPgogICAgICA8L3A+PHA+CiAgICAgICAgVGhlIHBocmFzZSA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+c2luZ2xlIGNvbXBsZXRlIHR5cGU8L2VtPiBkZXNlcnZlcyBzb21lIAogICAgICAgIGRlZmluaXRpb24uIEEgc2luZ2xlIGNvbXBsZXRlIHR5cGUgaXMgYSBiYXNpYyB0eXBlIGNvZGUsIGEgdmFyaWFudCB0eXBlIGNvZGUsIAogICAgICAgIGFuIGFycmF5IHdpdGggaXRzIGVsZW1lbnQgdHlwZSwgb3IgYSBzdHJ1Y3Qgd2l0aCBpdHMgZmllbGRzLiAKICAgICAgICBTbyB0aGUgZm9sbG93aW5nIHNpZ25hdHVyZXMgYXJlIG5vdCBzaW5nbGUgY29tcGxldGUgdHlwZXM6CiAgICAgICAgPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgICJhYSIKICAgICAgICA8L3ByZT48cD4KICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogICAgICAgICAgIihpaSIKICAgICAgICA8L3ByZT48cD4KICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogICAgICAgICAgImlpKSIKICAgICAgICA8L3ByZT48cD4KICAgICAgICBBbmQgdGhlIGZvbGxvd2luZyBzaWduYXR1cmVzIGNvbnRhaW4gbXVsdGlwbGUgY29tcGxldGUgdHlwZXM6CiAgICAgICAgPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgICJpaSIKICAgICAgICA8L3ByZT48cD4KICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogICAgICAgICAgImFpYWkiCiAgICAgICAgPC9wcmU+PHA+CiAgICAgICAgPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgICIoaWkpKGlpKSIKICAgICAgICA8L3ByZT48cD4KICAgICAgICBOb3RlIGhvd2V2ZXIgdGhhdCBhIHNpbmdsZSBjb21wbGV0ZSB0eXBlIG1heSA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5jb250YWluPC9lbT48L3NwYW4+CiAgICAgICAgbXVsdGlwbGUgb3RoZXIgc2luZ2xlIGNvbXBsZXRlIHR5cGVzLgogICAgICA8L3A+PHA+CiAgICAgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPlZBUklBTlQ8L2NvZGU+IGhhcyBBU0NJSSBjaGFyYWN0ZXIgJ3YnIGFzIGl0cyB0eXBlIGNvZGUuIEEgbWFyc2hhbGVkIHZhbHVlIG9mCiAgICAgICAgdHlwZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VkFSSUFOVDwvY29kZT4gd2lsbCBoYXZlIHRoZSBzaWduYXR1cmUgb2YgYSBzaW5nbGUgY29tcGxldGUgdHlwZSBhcyBwYXJ0CiAgICAgICAgb2YgdGhlIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnZhbHVlPC9lbT48L3NwYW4+LiAgVGhpcyBzaWduYXR1cmUgd2lsbCBiZSBmb2xsb3dlZCBieSBhCiAgICAgICAgbWFyc2hhbGVkIHZhbHVlIG9mIHRoYXQgdHlwZS4KICAgICAgPC9wPjxwPgogICAgICAgIEEgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRJQ1RfRU5UUlk8L2NvZGU+IHdvcmtzIGV4YWN0bHkgbGlrZSBhIHN0cnVjdCwgYnV0IHJhdGhlcgogICAgICAgIHRoYW4gcGFyZW50aGVzZXMgaXQgdXNlcyBjdXJseSBicmFjZXMsIGFuZCBpdCBoYXMgbW9yZSByZXN0cmljdGlvbnMuCiAgICAgICAgVGhlIHJlc3RyaWN0aW9ucyBhcmU6IGl0IG9jY3VycyBvbmx5IGFzIGFuIGFycmF5IGVsZW1lbnQgdHlwZTsgaXQgaGFzCiAgICAgICAgZXhhY3RseSB0d28gc2luZ2xlIGNvbXBsZXRlIHR5cGVzIGluc2lkZSB0aGUgY3VybHkgYnJhY2VzOyB0aGUgZmlyc3QKICAgICAgICBzaW5nbGUgY29tcGxldGUgdHlwZSAodGhlICJrZXkiKSBtdXN0IGJlIGEgYmFzaWMgdHlwZSByYXRoZXIgdGhhbiBhCiAgICAgICAgY29udGFpbmVyIHR5cGUuIEltcGxlbWVudGF0aW9ucyBtdXN0IG5vdCBhY2NlcHQgZGljdCBlbnRyaWVzIG91dHNpZGUgb2YKICAgICAgICBhcnJheXMsIG11c3Qgbm90IGFjY2VwdCBkaWN0IGVudHJpZXMgd2l0aCB6ZXJvLCBvbmUsIG9yIG1vcmUgdGhhbiB0d28KICAgICAgICBmaWVsZHMsIGFuZCBtdXN0IG5vdCBhY2NlcHQgZGljdCBlbnRyaWVzIHdpdGggbm9uLWJhc2ljLXR5cGVkIGtleXMuIEEKICAgICAgICBkaWN0IGVudHJ5IGlzIGFsd2F5cyBhIGtleS12YWx1ZSBwYWlyLgogICAgICA8L3A+PHA+CiAgICAgICAgVGhlIGZpcnN0IGZpZWxkIGluIHRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RElDVF9FTlRSWTwvY29kZT4gaXMgYWx3YXlzIHRoZSBrZXkuCiAgICAgICAgQSBtZXNzYWdlIGlzIGNvbnNpZGVyZWQgY29ycnVwdCBpZiB0aGUgc2FtZSBrZXkgb2NjdXJzIHR3aWNlIGluIHRoZSBzYW1lCiAgICAgICAgYXJyYXkgb2YgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRJQ1RfRU5UUlk8L2NvZGU+LiBIb3dldmVyLCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucwogICAgICAgIGltcGxlbWVudGF0aW9ucyBhcmUgbm90IHJlcXVpcmVkIHRvIHJlamVjdCBkaWN0cyB3aXRoIGR1cGxpY2F0ZSBrZXlzLgogICAgICA8L3A+PHA+CiAgICAgICAgSW4gbW9zdCBsYW5ndWFnZXMsIGFuIGFycmF5IG9mIGRpY3QgZW50cnkgd291bGQgYmUgcmVwcmVzZW50ZWQgYXMgYSAKICAgICAgICBtYXAsIGhhc2ggdGFibGUsIG9yIGRpY3Qgb2JqZWN0LgogICAgICA8L3A+PHA+CiAgICAgICAgVGhlIGZvbGxvd2luZyB0YWJsZSBzdW1tYXJpemVzIHRoZSBELUJ1cyB0eXBlcy4KICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGJvcmRlcj0iMSI+PGNvbGdyb3VwPjxjb2w+PGNvbD48Y29sPjwvY29sZ3JvdXA+PHRoZWFkPjx0cj48dGg+Q29udmVudGlvbmFsIE5hbWU8L3RoPjx0aD5Db2RlPC90aD48dGg+RGVzY3JpcHRpb248L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+SU5WQUxJRDwvY29kZT48L3RkPjx0ZD4wIChBU0NJSSBOVUwpPC90ZD48dGQ+Tm90IGEgdmFsaWQgdHlwZSBjb2RlLCB1c2VkIHRvIHRlcm1pbmF0ZSBzaWduYXR1cmVzPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkJZVEU8L2NvZGU+PC90ZD48dGQ+MTIxIChBU0NJSSAneScpPC90ZD48dGQ+OC1iaXQgdW5zaWduZWQgaW50ZWdlcjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5CT09MRUFOPC9jb2RlPjwvdGQ+PHRkPjk4IChBU0NJSSAnYicpPC90ZD48dGQ+Qm9vbGVhbiB2YWx1ZSwgMCBpcyA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+IGFuZCAxIGlzIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPi4gRXZlcnl0aGluZyBlbHNlIGlzIGludmFsaWQuPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPklOVDE2PC9jb2RlPjwvdGQ+PHRkPjExMCAoQVNDSUkgJ24nKTwvdGQ+PHRkPjE2LWJpdCBzaWduZWQgaW50ZWdlcjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5VSU5UMTY8L2NvZGU+PC90ZD48dGQ+MTEzIChBU0NJSSAncScpPC90ZD48dGQ+MTYtYml0IHVuc2lnbmVkIGludGVnZXI8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+SU5UMzI8L2NvZGU+PC90ZD48dGQ+MTA1IChBU0NJSSAnaScpPC90ZD48dGQ+MzItYml0IHNpZ25lZCBpbnRlZ2VyPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlVJTlQzMjwvY29kZT48L3RkPjx0ZD4xMTcgKEFTQ0lJICd1Jyk8L3RkPjx0ZD4zMi1iaXQgdW5zaWduZWQgaW50ZWdlcjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5JTlQ2NDwvY29kZT48L3RkPjx0ZD4xMjAgKEFTQ0lJICd4Jyk8L3RkPjx0ZD42NC1iaXQgc2lnbmVkIGludGVnZXI8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VUlOVDY0PC9jb2RlPjwvdGQ+PHRkPjExNiAoQVNDSUkgJ3QnKTwvdGQ+PHRkPjY0LWJpdCB1bnNpZ25lZCBpbnRlZ2VyPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRPVUJMRTwvY29kZT48L3RkPjx0ZD4xMDAgKEFTQ0lJICdkJyk8L3RkPjx0ZD5JRUVFIDc1NCBkb3VibGU8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+U1RSSU5HPC9jb2RlPjwvdGQ+PHRkPjExNSAoQVNDSUkgJ3MnKTwvdGQ+PHRkPlVURi04IHN0cmluZyAoPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bXVzdDwvZW0+PC9zcGFuPiBiZSB2YWxpZCBVVEYtOCkuIE11c3QgYmUgbnVsIHRlcm1pbmF0ZWQgYW5kIGNvbnRhaW4gbm8gb3RoZXIgbnVsIGJ5dGVzLjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5PQkpFQ1RfUEFUSDwvY29kZT48L3RkPjx0ZD4xMTEgKEFTQ0lJICdvJyk8L3RkPjx0ZD5OYW1lIG9mIGFuIG9iamVjdCBpbnN0YW5jZTwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5TSUdOQVRVUkU8L2NvZGU+PC90ZD48dGQ+MTAzIChBU0NJSSAnZycpPC90ZD48dGQ+QSB0eXBlIHNpZ25hdHVyZTwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5BUlJBWTwvY29kZT48L3RkPjx0ZD45NyAoQVNDSUkgJ2EnKTwvdGQ+PHRkPkFycmF5PC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlNUUlVDVDwvY29kZT48L3RkPjx0ZD4xMTQgKEFTQ0lJICdyJyksIDQwIChBU0NJSSAnKCcpLCA0MSAoQVNDSUkgJyknKTwvdGQ+PHRkPlN0cnVjdDwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5WQVJJQU5UPC9jb2RlPjwvdGQ+PHRkPjExOCAoQVNDSUkgJ3YnKSA8L3RkPjx0ZD5WYXJpYW50IHR5cGUgKHRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBpcyBwYXJ0IG9mIHRoZSB2YWx1ZSBpdHNlbGYpPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRJQ1RfRU5UUlk8L2NvZGU+PC90ZD48dGQ+MTAxIChBU0NJSSAnZScpLCAxMjMgKEFTQ0lJICd7JyksIDEyNSAoQVNDSUkgJ30nKSA8L3RkPjx0ZD5FbnRyeSBpbiBhIGRpY3Qgb3IgbWFwIChhcnJheSBvZiBrZXktdmFsdWUgcGFpcnMpPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlVOSVhfRkQ8L2NvZGU+PC90ZD48dGQ+MTA0IChBU0NJSSAnaCcpPC90ZD48dGQ+VW5peCBmaWxlIGRlc2NyaXB0b3I8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjxwPgogICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSJNYXJzaGFsaW5nIChXaXJlIEZvcm1hdCkiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9Im1lc3NhZ2UtcHJvdG9jb2wtbWFyc2hhbGluZyI+PC9hPk1hcnNoYWxpbmcgKFdpcmUgRm9ybWF0KTwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgR2l2ZW4gYSB0eXBlIHNpZ25hdHVyZSwgYSBibG9jayBvZiBieXRlcyBjYW4gYmUgY29udmVydGVkIGludG8gdHlwZWQKICAgICAgICB2YWx1ZXMuIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIGZvcm1hdCBvZiB0aGUgYmxvY2sgb2YgYnl0ZXMuICBCeXRlCiAgICAgICAgb3JkZXIgYW5kIGFsaWdubWVudCBpc3N1ZXMgYXJlIGhhbmRsZWQgdW5pZm9ybWx5IGZvciBhbGwgRC1CdXMgdHlwZXMuCiAgICAgIDwvcD48cD4KICAgICAgICBBIGJsb2NrIG9mIGJ5dGVzIGhhcyBhbiBhc3NvY2lhdGVkIGJ5dGUgb3JkZXIuIFRoZSBieXRlIG9yZGVyIAogICAgICAgIGhhcyB0byBiZSBkaXNjb3ZlcmVkIGluIHNvbWUgd2F5OyBmb3IgRC1CdXMgbWVzc2FnZXMsIHRoZSAKICAgICAgICBieXRlIG9yZGVyIGlzIHBhcnQgb2YgdGhlIG1lc3NhZ2UgaGVhZGVyIGFzIGRlc2NyaWJlZCBpbiAKICAgICAgICA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI21lc3NhZ2UtcHJvdG9jb2wtbWVzc2FnZXMiIHRpdGxlPSJNZXNzYWdlIEZvcm1hdCI+dGhlIHNlY3Rpb24gY2FsbGVkICYjODIyMDtNZXNzYWdlIEZvcm1hdCYjODIyMTs8L2E+LiBGb3Igbm93LCBhc3N1bWUgCiAgICAgICAgdGhhdCB0aGUgYnl0ZSBvcmRlciBpcyBrbm93biB0byBiZSBlaXRoZXIgbGl0dGxlIGVuZGlhbiBvciBiaWcgCiAgICAgICAgICBlbmRpYW4uCiAgICAgIDwvcD48cD4KICAgICAgICBFYWNoIHZhbHVlIGluIGEgYmxvY2sgb2YgYnl0ZXMgaXMgYWxpZ25lZCAibmF0dXJhbGx5LCIgZm9yIGV4YW1wbGUKICAgICAgICA0LWJ5dGUgdmFsdWVzIGFyZSBhbGlnbmVkIHRvIGEgNC1ieXRlIGJvdW5kYXJ5LCBhbmQgOC1ieXRlIHZhbHVlcyB0byBhbgogICAgICAgIDgtYnl0ZSBib3VuZGFyeS4gVG8gcHJvcGVybHkgYWxpZ24gYSB2YWx1ZSwgPGVtIGNsYXNzPSJmaXJzdHRlcm0iPmFsaWdubWVudAogICAgICAgIHBhZGRpbmc8L2VtPiBtYXkgYmUgbmVjZXNzYXJ5LiBUaGUgYWxpZ25tZW50IHBhZGRpbmcgbXVzdCBhbHdheXMKICAgICAgICBiZSB0aGUgbWluaW11bSByZXF1aXJlZCBwYWRkaW5nIHRvIHByb3Blcmx5IGFsaWduIHRoZSBmb2xsb3dpbmcgdmFsdWU7CiAgICAgICAgYW5kIGl0IG11c3QgYWx3YXlzIGJlIG1hZGUgdXAgb2YgbnVsIGJ5dGVzLiBUaGUgYWxpZ25tZW50IHBhZGRpbmcgbXVzdAogICAgICAgIG5vdCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQgKGl0IGNhbid0IGNvbnRhaW4gZ2FyYmFnZSksIGFuZCBtb3JlIHBhZGRpbmcKICAgICAgICB0aGFuIHJlcXVpcmVkIG11c3Qgbm90IGJlIHVzZWQuCiAgICAgIDwvcD48cD4KICAgICAgICBHaXZlbiBhbGwgdGhpcywgdGhlIHR5cGVzIGFyZSBtYXJzaGFsZWQgb24gdGhlIHdpcmUgYXMgZm9sbG93czoKICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGJvcmRlcj0iMSI+PGNvbGdyb3VwPjxjb2w+PGNvbD48Y29sPjwvY29sZ3JvdXA+PHRoZWFkPjx0cj48dGg+Q29udmVudGlvbmFsIE5hbWU8L3RoPjx0aD5FbmNvZGluZzwvdGg+PHRoPkFsaWdubWVudDwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5JTlZBTElEPC9jb2RlPjwvdGQ+PHRkPk5vdCBhcHBsaWNhYmxlOyBjYW5ub3QgYmUgbWFyc2hhbGVkLjwvdGQ+PHRkPk4vQTwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5CWVRFPC9jb2RlPjwvdGQ+PHRkPkEgc2luZ2xlIDgtYml0IGJ5dGUuPC90ZD48dGQ+MTwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5CT09MRUFOPC9jb2RlPjwvdGQ+PHRkPkFzIGZvciA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VUlOVDMyPC9jb2RlPiwgYnV0IG9ubHkgMCBhbmQgMSBhcmUgdmFsaWQgdmFsdWVzLjwvdGQ+PHRkPjQ8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+SU5UMTY8L2NvZGU+PC90ZD48dGQ+MTYtYml0IHNpZ25lZCBpbnRlZ2VyIGluIHRoZSBtZXNzYWdlJ3MgYnl0ZSBvcmRlci48L3RkPjx0ZD4yPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlVJTlQxNjwvY29kZT48L3RkPjx0ZD4xNi1iaXQgdW5zaWduZWQgaW50ZWdlciBpbiB0aGUgbWVzc2FnZSdzIGJ5dGUgb3JkZXIuPC90ZD48dGQ+MjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5JTlQzMjwvY29kZT48L3RkPjx0ZD4zMi1iaXQgc2lnbmVkIGludGVnZXIgaW4gdGhlIG1lc3NhZ2UncyBieXRlIG9yZGVyLjwvdGQ+PHRkPjQ8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VUlOVDMyPC9jb2RlPjwvdGQ+PHRkPjMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGluIHRoZSBtZXNzYWdlJ3MgYnl0ZSBvcmRlci48L3RkPjx0ZD40PC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPklOVDY0PC9jb2RlPjwvdGQ+PHRkPjY0LWJpdCBzaWduZWQgaW50ZWdlciBpbiB0aGUgbWVzc2FnZSdzIGJ5dGUgb3JkZXIuPC90ZD48dGQ+ODwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5VSU5UNjQ8L2NvZGU+PC90ZD48dGQ+NjQtYml0IHVuc2lnbmVkIGludGVnZXIgaW4gdGhlIG1lc3NhZ2UncyBieXRlIG9yZGVyLjwvdGQ+PHRkPjg8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RE9VQkxFPC9jb2RlPjwvdGQ+PHRkPjY0LWJpdCBJRUVFIDc1NCBkb3VibGUgaW4gdGhlIG1lc3NhZ2UncyBieXRlIG9yZGVyLjwvdGQ+PHRkPjg8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+U1RSSU5HPC9jb2RlPjwvdGQ+PHRkPkEgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPlVJTlQzMjwvY29kZT4gaW5kaWNhdGluZyB0aGUgc3RyaW5nJ3MgCiAgICAgICAgICAgICAgICAgIGxlbmd0aCBpbiBieXRlcyBleGNsdWRpbmcgaXRzIHRlcm1pbmF0aW5nIG51bCwgZm9sbG93ZWQgYnkgCiAgICAgICAgICAgICAgICAgIG5vbi1udWwgc3RyaW5nIGRhdGEgb2YgdGhlIGdpdmVuIGxlbmd0aCwgZm9sbG93ZWQgYnkgYSB0ZXJtaW5hdGluZyBudWwgCiAgICAgICAgICAgICAgICAgIGJ5dGUuCiAgICAgICAgICAgICAgICA8L3RkPjx0ZD4KICAgICAgICAgICAgICAgICAgNCAoZm9yIHRoZSBsZW5ndGgpCiAgICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+T0JKRUNUX1BBVEg8L2NvZGU+PC90ZD48dGQ+RXhhY3RseSB0aGUgc2FtZSBhcyA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+U1RSSU5HPC9jb2RlPiBleGNlcHQgdGhlIAogICAgICAgICAgICAgICAgICBjb250ZW50IG11c3QgYmUgYSB2YWxpZCBvYmplY3QgcGF0aCAoc2VlIGJlbG93KS4KICAgICAgICAgICAgICAgIDwvdGQ+PHRkPgogICAgICAgICAgICAgICAgICA0IChmb3IgdGhlIGxlbmd0aCkKICAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5TSUdOQVRVUkU8L2NvZGU+PC90ZD48dGQ+VGhlIHNhbWUgYXMgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPlNUUklORzwvY29kZT4gZXhjZXB0IHRoZSBsZW5ndGggaXMgYSBzaW5nbGUgCiAgICAgICAgICAgICAgICAgIGJ5dGUgKHRodXMgc2lnbmF0dXJlcyBoYXZlIGEgbWF4aW11bSBsZW5ndGggb2YgMjU1KQogICAgICAgICAgICAgICAgICBhbmQgdGhlIGNvbnRlbnQgbXVzdCBiZSBhIHZhbGlkIHNpZ25hdHVyZSAoc2VlIGJlbG93KS4KICAgICAgICAgICAgICAgIDwvdGQ+PHRkPgogICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+QVJSQVk8L2NvZGU+PC90ZD48dGQ+CiAgICAgICAgICAgICAgICAgIEEgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPlVJTlQzMjwvY29kZT4gZ2l2aW5nIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IGRhdGEgaW4gYnl0ZXMsIGZvbGxvd2VkIGJ5IAogICAgICAgICAgICAgICAgICBhbGlnbm1lbnQgcGFkZGluZyB0byB0aGUgYWxpZ25tZW50IGJvdW5kYXJ5IG9mIHRoZSBhcnJheSBlbGVtZW50IHR5cGUsIAogICAgICAgICAgICAgICAgICBmb2xsb3dlZCBieSBlYWNoIGFycmF5IGVsZW1lbnQuIFRoZSBhcnJheSBsZW5ndGggaXMgZnJvbSB0aGUgCiAgICAgICAgICAgICAgICAgIGVuZCBvZiB0aGUgYWxpZ25tZW50IHBhZGRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgbGFzdCBlbGVtZW50LAogICAgICAgICAgICAgICAgICBpLmUuIGl0IGRvZXMgbm90IGluY2x1ZGUgdGhlIHBhZGRpbmcgYWZ0ZXIgdGhlIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgb3IgYW55IHBhZGRpbmcgYWZ0ZXIgdGhlIGxhc3QgZWxlbWVudC4KICAgICAgICAgICAgICAgICAgQXJyYXlzIGhhdmUgYSBtYXhpbXVtIGxlbmd0aCBkZWZpbmVkIHRvIGJlIDIgdG8gdGhlIDI2dGggcG93ZXIgb3IKICAgICAgICAgICAgICAgICAgNjcxMDg4NjQuIEltcGxlbWVudGF0aW9ucyBtdXN0IG5vdCBzZW5kIG9yIGFjY2VwdCBhcnJheXMgZXhjZWVkaW5nIHRoaXMKICAgICAgICAgICAgICAgICAgbGVuZ3RoLgogICAgICAgICAgICAgICAgPC90ZD48dGQ+CiAgICAgICAgICAgICAgICAgIDQgKGZvciB0aGUgbGVuZ3RoKQogICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlNUUlVDVDwvY29kZT48L3RkPjx0ZD4KICAgICAgICAgICAgICAgICAgQSBzdHJ1Y3QgbXVzdCBzdGFydCBvbiBhbiA4LWJ5dGUgYm91bmRhcnkgcmVnYXJkbGVzcyBvZiB0aGUKICAgICAgICAgICAgICAgICAgdHlwZSBvZiB0aGUgc3RydWN0IGZpZWxkcy4gVGhlIHN0cnVjdCB2YWx1ZSBjb25zaXN0cyBvZiBlYWNoCiAgICAgICAgICAgICAgICAgIGZpZWxkIG1hcnNoYWxlZCBpbiBzZXF1ZW5jZSBzdGFydGluZyBmcm9tIHRoYXQgOC1ieXRlCiAgICAgICAgICAgICAgICAgIGFsaWdubWVudCBib3VuZGFyeS4KICAgICAgICAgICAgICAgIDwvdGQ+PHRkPgogICAgICAgICAgICAgICAgICA4CiAgICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VkFSSUFOVDwvY29kZT48L3RkPjx0ZD4KICAgICAgICAgICAgICAgICAgQSB2YXJpYW50IHR5cGUgaGFzIGEgbWFyc2hhbGVkCiAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5TSUdOQVRVUkU8L2NvZGU+IGZvbGxvd2VkIGJ5IGEgbWFyc2hhbGVkCiAgICAgICAgICAgICAgICAgIHZhbHVlIHdpdGggdGhlIHR5cGUgZ2l2ZW4gaW4gdGhlIHNpZ25hdHVyZS4gIFVubGlrZQogICAgICAgICAgICAgICAgICBhIG1lc3NhZ2Ugc2lnbmF0dXJlLCB0aGUgdmFyaWFudCBzaWduYXR1cmUgY2FuCiAgICAgICAgICAgICAgICAgIGNvbnRhaW4gb25seSBhIHNpbmdsZSBjb21wbGV0ZSB0eXBlLiAgU28gImkiLCAiYWkiCiAgICAgICAgICAgICAgICAgIG9yICIoaWkpIiBpcyBPSywgYnV0ICJpaSIgaXMgbm90LiAgVXNlIG9mIHZhcmlhbnRzIG1heSBub3QKICAgICAgICAgICAgICAgICAgY2F1c2UgYSB0b3RhbCBtZXNzYWdlIGRlcHRoIHRvIGJlIGxhcmdlciB0aGFuIDY0LCBpbmNsdWRpbmcKCQkgIG90aGVyIGNvbnRhaW5lciB0eXBlcyBzdWNoIGFzIHN0cnVjdHVyZXMuCiAgICAgICAgICAgICAgICA8L3RkPjx0ZD4KICAgICAgICAgICAgICAgICAgMSAoYWxpZ25tZW50IG9mIHRoZSBzaWduYXR1cmUpCiAgICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RElDVF9FTlRSWTwvY29kZT48L3RkPjx0ZD4KICAgICAgICAgICAgICAgICAgSWRlbnRpY2FsIHRvIFNUUlVDVC4KICAgICAgICAgICAgICAgIDwvdGQ+PHRkPgogICAgICAgICAgICAgICAgICA4CiAgICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VU5JWF9GRDwvY29kZT48L3RkPjx0ZD4zMi1iaXQgdW5zaWduZWQgaW50ZWdlciBpbiB0aGUgbWVzc2FnZSdzIGJ5dGUKICAgICAgICAgICAgICAgIG9yZGVyLiBUaGUgYWN0dWFsIGZpbGUgZGVzY3JpcHRvcnMgbmVlZCB0byBiZQogICAgICAgICAgICAgICAgdHJhbnNmZXJyZWQgb3V0LW9mLWJhbmQgdmlhIHNvbWUgcGxhdGZvcm0gc3BlY2lmaWMKICAgICAgICAgICAgICAgIG1lY2hhbmlzbS4gT24gdGhlIHdpcmUsIHZhbHVlcyBvZiB0aGlzIHR5cGUgc3RvcmUgdGhlIGluZGV4IHRvIHRoZQogICAgICAgICAgICAgICAgZmlsZSBkZXNjcmlwdG9yIGluIHRoZSBhcnJheSBvZiBmaWxlIGRlc2NyaXB0b3JzIHRoYXQKICAgICAgICAgICAgICAgIGFjY29tcGFueSB0aGUgbWVzc2FnZS48L3RkPjx0ZD40PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L2Rpdj48cD4KICAgICAgPC9wPjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iVmFsaWQgT2JqZWN0IFBhdGhzIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJtZXNzYWdlLXByb3RvY29sLW1hcnNoYWxpbmctb2JqZWN0LXBhdGgiPjwvYT5WYWxpZCBPYmplY3QgUGF0aHM8L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgICAgQW4gb2JqZWN0IHBhdGggaXMgYSBuYW1lIHVzZWQgdG8gcmVmZXIgdG8gYW4gb2JqZWN0IGluc3RhbmNlLgogICAgICAgICAgQ29uY2VwdHVhbGx5LCBlYWNoIHBhcnRpY2lwYW50IGluIGEgRC1CdXMgbWVzc2FnZSBleGNoYW5nZSBtYXkgaGF2ZQogICAgICAgICAgYW55IG51bWJlciBvZiBvYmplY3QgaW5zdGFuY2VzICh0aGluayBvZiBDKysgb3IgSmF2YSBvYmplY3RzKSBhbmQgZWFjaAogICAgICAgICAgc3VjaCBpbnN0YW5jZSB3aWxsIGhhdmUgYSBwYXRoLiBMaWtlIGEgZmlsZXN5c3RlbSwgdGhlIG9iamVjdAogICAgICAgICAgaW5zdGFuY2VzIGluIGFuIGFwcGxpY2F0aW9uIGZvcm0gYSBoaWVyYXJjaGljYWwgdHJlZS4KICAgICAgICA8L3A+PHA+CiAgICAgICAgICBUaGUgZm9sbG93aW5nIHJ1bGVzIGRlZmluZSBhIHZhbGlkIG9iamVjdCBwYXRoLiBJbXBsZW1lbnRhdGlvbnMgbXVzdCAKICAgICAgICAgIG5vdCBzZW5kIG9yIGFjY2VwdCBtZXNzYWdlcyB3aXRoIGludmFsaWQgb2JqZWN0IHBhdGhzLgogICAgICAgICAgPC9wPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgVGhlIHBhdGggbWF5IGJlIG9mIGFueSBsZW5ndGguCiAgICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgICBUaGUgcGF0aCBtdXN0IGJlZ2luIHdpdGggYW4gQVNDSUkgJy8nIChpbnRlZ2VyIDQ3KSBjaGFyYWN0ZXIsIAogICAgICAgICAgICAgICAgYW5kIG11c3QgY29uc2lzdCBvZiBlbGVtZW50cyBzZXBhcmF0ZWQgYnkgc2xhc2ggY2hhcmFjdGVycy4KICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICAgIEVhY2ggZWxlbWVudCBtdXN0IG9ubHkgY29udGFpbiB0aGUgQVNDSUkgY2hhcmFjdGVycyAKICAgICAgICAgICAgICAgICJbQS1aXVthLXpdWzAtOV1fIgogICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgTm8gZWxlbWVudCBtYXkgYmUgdGhlIGVtcHR5IHN0cmluZy4KICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICAgIE11bHRpcGxlICcvJyBjaGFyYWN0ZXJzIGNhbm5vdCBvY2N1ciBpbiBzZXF1ZW5jZS4KICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICAgIEEgdHJhaWxpbmcgJy8nIGNoYXJhY3RlciBpcyBub3QgYWxsb3dlZCB1bmxlc3MgdGhlIAogICAgICAgICAgICAgICAgcGF0aCBpcyB0aGUgcm9vdCBwYXRoIChhIHNpbmdsZSAnLycgY2hhcmFjdGVyKS4KICAgICAgICAgICAgICA8L3A+PC9saT48L3VsPjwvZGl2PjxwPgogICAgICAgIDwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MyIgdGl0bGU9IlZhbGlkIFNpZ25hdHVyZXMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9Im1lc3NhZ2UtcHJvdG9jb2wtbWFyc2hhbGluZy1zaWduYXR1cmUiPjwvYT5WYWxpZCBTaWduYXR1cmVzPC9oND48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICAgIEFuIGltcGxlbWVudGF0aW9uIG11c3Qgbm90IHNlbmQgb3IgYWNjZXB0IGludmFsaWQgc2lnbmF0dXJlcy4KICAgICAgICAgIFZhbGlkIHNpZ25hdHVyZXMgd2lsbCBjb25mb3JtIHRvIHRoZSBmb2xsb3dpbmcgcnVsZXM6CiAgICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgICBUaGUgc2lnbmF0dXJlIGVuZHMgd2l0aCBhIG51bCBieXRlLgogICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgVGhlIHNpZ25hdHVyZSBpcyBhIGxpc3Qgb2Ygc2luZ2xlIGNvbXBsZXRlIHR5cGVzLiAKICAgICAgICAgICAgICAgIEFycmF5cyBtdXN0IGhhdmUgZWxlbWVudCB0eXBlcywgYW5kIHN0cnVjdHMgbXVzdCAKICAgICAgICAgICAgICAgIGhhdmUgYm90aCBvcGVuIGFuZCBjbG9zZSBwYXJlbnRoZXNlcy4KICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICAgIE9ubHkgdHlwZSBjb2RlcyBhbmQgb3BlbiBhbmQgY2xvc2UgcGFyZW50aGVzZXMgYXJlIAogICAgICAgICAgICAgICAgYWxsb3dlZCBpbiB0aGUgc2lnbmF0dXJlLiBUaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPlNUUlVDVDwvY29kZT4gdHlwZSBjb2RlCiAgICAgICAgICAgICAgICBpcyBub3QgYWxsb3dlZCBpbiBzaWduYXR1cmVzLCBiZWNhdXNlIHBhcmVudGhlc2VzCiAgICAgICAgICAgICAgICBhcmUgdXNlZCBpbnN0ZWFkLgogICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgVGhlIG1heGltdW0gZGVwdGggb2YgY29udGFpbmVyIHR5cGUgbmVzdGluZyBpcyAzMiBhcnJheSB0eXBlCiAgICAgICAgICAgICAgICBjb2RlcyBhbmQgMzIgb3BlbiBwYXJlbnRoZXNlcy4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIG1heGltdW0KICAgICAgICAgICAgICAgIHRvdGFsIGRlcHRoIG9mIHJlY3Vyc2lvbiBpcyA2NCwgZm9yIGFuICJhcnJheSBvZiBhcnJheSBvZiBhcnJheQogICAgICAgICAgICAgICAgb2YgLi4uIHN0cnVjdCBvZiBzdHJ1Y3Qgb2Ygc3RydWN0IG9mIC4uLiIgIHdoZXJlIHRoZXJlIGFyZSAzMgogICAgICAgICAgICAgICAgYXJyYXkgYW5kIDMyIHN0cnVjdC4KICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICAgIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIHNpZ25hdHVyZSBpcyAyNTUuCiAgICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgICBTaWduYXR1cmVzIG11c3QgYmUgbnVsLXRlcm1pbmF0ZWQuCiAgICAgICAgICAgICAgPC9wPjwvbGk+PC91bD48L2Rpdj48cD4KICAgICAgICA8L3A+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSJNZXNzYWdlIEZvcm1hdCI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0ibWVzc2FnZS1wcm90b2NvbC1tZXNzYWdlcyI+PC9hPk1lc3NhZ2UgRm9ybWF0PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBBIG1lc3NhZ2UgY29uc2lzdHMgb2YgYSBoZWFkZXIgYW5kIGEgYm9keS4gVGhlIGhlYWRlciBpcyBhIGJsb2NrIG9mCiAgICAgICAgdmFsdWVzIHdpdGggYSBmaXhlZCBzaWduYXR1cmUgYW5kIG1lYW5pbmcuICBUaGUgYm9keSBpcyBhIHNlcGFyYXRlIGJsb2NrCiAgICAgICAgb2YgdmFsdWVzLCB3aXRoIGEgc2lnbmF0dXJlIHNwZWNpZmllZCBpbiB0aGUgaGVhZGVyLgogICAgICA8L3A+PHA+CiAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgaGVhZGVyIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4LCBhbGxvd2luZyB0aGUgYm9keSB0bwogICAgICAgIGJlZ2luIG9uIGFuIDgtYnl0ZSBib3VuZGFyeSB3aGVuIHN0b3JpbmcgdGhlIGVudGlyZSBtZXNzYWdlIGluIGEgc2luZ2xlCiAgICAgICAgYnVmZmVyLiBJZiB0aGUgaGVhZGVyIGRvZXMgbm90IG5hdHVyYWxseSBlbmQgb24gYW4gOC1ieXRlIGJvdW5kYXJ5IAogICAgICAgIHVwIHRvIDcgYnl0ZXMgb2YgbnVsLWluaXRpYWxpemVkIGFsaWdubWVudCBwYWRkaW5nIG11c3QgYmUgYWRkZWQuCiAgICAgIDwvcD48cD4KICAgICAgICBUaGUgbWVzc2FnZSBib2R5IG5lZWQgbm90IGVuZCBvbiBhbiA4LWJ5dGUgYm91bmRhcnkuCiAgICAgIDwvcD48cD4KICAgICAgICBUaGUgbWF4aW11bSBsZW5ndGggb2YgYSBtZXNzYWdlLCBpbmNsdWRpbmcgaGVhZGVyLCBoZWFkZXIgYWxpZ25tZW50IHBhZGRpbmcsIAogICAgICAgIGFuZCBib2R5IGlzIDIgdG8gdGhlIDI3dGggcG93ZXIgb3IgMTM0MjE3NzI4LiBJbXBsZW1lbnRhdGlvbnMgbXVzdCBub3QgCiAgICAgICAgc2VuZCBvciBhY2NlcHQgbWVzc2FnZXMgZXhjZWVkaW5nIHRoaXMgc2l6ZS4KICAgICAgPC9wPjxwPgogICAgICAgIFRoZSBzaWduYXR1cmUgb2YgdGhlIGhlYWRlciBpczoKICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogICAgICAgICAgInl5eXl1dWEoeXYpIgogICAgICAgIDwvcHJlPjxwPgogICAgICAgIFdyaXR0ZW4gb3V0IG1vcmUgcmVhZGFibHksIHRoaXMgaXM6CiAgICAgICAgPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgIEJZVEUsIEJZVEUsIEJZVEUsIEJZVEUsIFVJTlQzMiwgVUlOVDMyLCBBUlJBWSBvZiBTVFJVQ1Qgb2YgKEJZVEUsVkFSSUFOVCkKICAgICAgICA8L3ByZT48cD4KICAgICAgPC9wPjxwPgogICAgICAgIFRoZXNlIHZhbHVlcyBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZ3M6CiAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBib3JkZXI9IjEiPjxjb2xncm91cD48Y29sPjxjb2w+PC9jb2xncm91cD48dGhlYWQ+PHRyPjx0aD5WYWx1ZTwvdGg+PHRoPkRlc2NyaXB0aW9uPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGQ+MXN0IDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5CWVRFPC9jb2RlPjwvdGQ+PHRkPkVuZGlhbm5lc3MgZmxhZzsgQVNDSUkgJ2wnIGZvciBsaXR0bGUtZW5kaWFuIAogICAgICAgICAgICAgICAgICBvciBBU0NJSSAnQicgZm9yIGJpZy1lbmRpYW4uIEJvdGggaGVhZGVyIGFuZCBib2R5IGFyZSAKICAgICAgICAgICAgICAgIGluIHRoaXMgZW5kaWFubmVzcy48L3RkPjwvdHI+PHRyPjx0ZD4ybmQgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkJZVEU8L2NvZGU+PC90ZD48dGQ+PGVtIGNsYXNzPSJmaXJzdHRlcm0iPk1lc3NhZ2UgdHlwZTwvZW0+LiBVbmtub3duIHR5cGVzIG11c3QgYmUgaWdub3JlZC4gCiAgICAgICAgICAgICAgICAgIEN1cnJlbnRseS1kZWZpbmVkIHR5cGVzIGFyZSBkZXNjcmliZWQgYmVsb3cuCiAgICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyPjx0ZD4zcmQgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkJZVEU8L2NvZGU+PC90ZD48dGQ+Qml0d2lzZSBPUiBvZiBmbGFncy4gVW5rbm93biBmbGFncwogICAgICAgICAgICAgICAgICBtdXN0IGJlIGlnbm9yZWQuIEN1cnJlbnRseS1kZWZpbmVkIGZsYWdzIGFyZSBkZXNjcmliZWQgYmVsb3cuCiAgICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyPjx0ZD40dGggPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkJZVEU8L2NvZGU+PC90ZD48dGQ+TWFqb3IgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgc2VuZGluZyBhcHBsaWNhdGlvbi4gIElmCiAgICAgICAgICAgICAgICB0aGUgbWFqb3IgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcmVjZWl2aW5nIGFwcGxpY2F0aW9uIGRvZXMgbm90CiAgICAgICAgICAgICAgICBtYXRjaCwgdGhlIGFwcGxpY2F0aW9ucyB3aWxsIG5vdCBiZSBhYmxlIHRvIGNvbW11bmljYXRlIGFuZCB0aGUKICAgICAgICAgICAgICAgIEQtQnVzIGNvbm5lY3Rpb24gbXVzdCBiZSBkaXNjb25uZWN0ZWQuIFRoZSBtYWpvciBwcm90b2NvbAogICAgICAgICAgICAgICAgdmVyc2lvbiBmb3IgdGhpcyB2ZXJzaW9uIG9mIHRoZSBzcGVjaWZpY2F0aW9uIGlzIDEuCiAgICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyPjx0ZD4xc3QgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPlVJTlQzMjwvY29kZT48L3RkPjx0ZD5MZW5ndGggaW4gYnl0ZXMgb2YgdGhlIG1lc3NhZ2UgYm9keSwgc3RhcnRpbmcgCiAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGVuZCBvZiB0aGUgaGVhZGVyLiBUaGUgaGVhZGVyIGVuZHMgYWZ0ZXIgCiAgICAgICAgICAgICAgICAgIGl0cyBhbGlnbm1lbnQgcGFkZGluZyB0byBhbiA4LWJvdW5kYXJ5LgogICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0cj48dGQ+Mm5kIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5VSU5UMzI8L2NvZGU+PC90ZD48dGQ+VGhlIHNlcmlhbCBvZiB0aGlzIG1lc3NhZ2UsIHVzZWQgYXMgYSBjb29raWUgCiAgICAgICAgICAgICAgICAgIGJ5IHRoZSBzZW5kZXIgdG8gaWRlbnRpZnkgdGhlIHJlcGx5IGNvcnJlc3BvbmRpbmcKICAgICAgICAgICAgICAgICAgdG8gdGhpcyByZXF1ZXN0LiBUaGlzIG11c3Qgbm90IGJlIHplcm8uCiAgICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+QVJSQVk8L2NvZGU+IG9mIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5TVFJVQ1Q8L2NvZGU+IG9mICg8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+QllURTwvY29kZT4sPGNvZGUgY2xhc3M9ImxpdGVyYWwiPlZBUklBTlQ8L2NvZGU+KTwvdGQ+PHRkPkFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+aGVhZGVyCiAgICAgICAgICAgICAgICAgIGZpZWxkczwvZW0+IHdoZXJlIHRoZSBieXRlIGlzIHRoZSBmaWVsZCBjb2RlLCBhbmQgdGhlCiAgICAgICAgICAgICAgICAgIHZhcmlhbnQgaXMgdGhlIGZpZWxkIHZhbHVlLiBUaGUgbWVzc2FnZSB0eXBlIGRldGVybWluZXMgCiAgICAgICAgICAgICAgICAgIHdoaWNoIGZpZWxkcyBhcmUgcmVxdWlyZWQuCiAgICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjxwPgogICAgICA8L3A+PHA+CiAgICAgICAgPGVtIGNsYXNzPSJmaXJzdHRlcm0iPk1lc3NhZ2UgdHlwZXM8L2VtPiB0aGF0IGNhbiBhcHBlYXIgaW4gdGhlIHNlY29uZCBieXRlCiAgICAgICAgb2YgdGhlIGhlYWRlciBhcmU6CiAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBib3JkZXI9IjEiPjxjb2xncm91cD48Y29sPjxjb2w+PGNvbD48L2NvbGdyb3VwPjx0aGVhZD48dHI+PHRoPkNvbnZlbnRpb25hbCBuYW1lPC90aD48dGg+RGVjaW1hbCB2YWx1ZTwvdGg+PHRoPkRlc2NyaXB0aW9uPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPklOVkFMSUQ8L2NvZGU+PC90ZD48dGQ+MDwvdGQ+PHRkPlRoaXMgaXMgYW4gaW52YWxpZCB0eXBlLjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5NRVRIT0RfQ0FMTDwvY29kZT48L3RkPjx0ZD4xPC90ZD48dGQ+TWV0aG9kIGNhbGwuPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk1FVEhPRF9SRVRVUk48L2NvZGU+PC90ZD48dGQ+MjwvdGQ+PHRkPk1ldGhvZCByZXBseSB3aXRoIHJldHVybmVkIGRhdGEuPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkVSUk9SPC9jb2RlPjwvdGQ+PHRkPjM8L3RkPjx0ZD5FcnJvciByZXBseS4gSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGV4aXN0cyBhbmQgaXMgYQogICAgICAgICAgICAgICAgc3RyaW5nLCBpdCBpcyBhbiBlcnJvciBtZXNzYWdlLjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5TSUdOQUw8L2NvZGU+PC90ZD48dGQ+NDwvdGQ+PHRkPlNpZ25hbCBlbWlzc2lvbi48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjxwPgogICAgICA8L3A+PHA+CiAgICAgICAgRmxhZ3MgdGhhdCBjYW4gYXBwZWFyIGluIHRoZSB0aGlyZCBieXRlIG9mIHRoZSBoZWFkZXI6CiAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBib3JkZXI9IjEiPjxjb2xncm91cD48Y29sPjxjb2w+PGNvbD48L2NvbGdyb3VwPjx0aGVhZD48dHI+PHRoPkNvbnZlbnRpb25hbCBuYW1lPC90aD48dGg+SGV4IHZhbHVlPC90aD48dGg+RGVzY3JpcHRpb248L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Tk9fUkVQTFlfRVhQRUNURUQ8L2NvZGU+PC90ZD48dGQ+MHgxPC90ZD48dGQ+VGhpcyBtZXNzYWdlIGRvZXMgbm90IGV4cGVjdCBtZXRob2QgcmV0dXJuIHJlcGxpZXMgb3IKICAgICAgICAgICAgICAgIGVycm9yIHJlcGxpZXM7IHRoZSByZXBseSBjYW4gYmUgb21pdHRlZCBhcyBhbgogICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uLiBIb3dldmVyLCBpdCBpcyBjb21wbGlhbnQgd2l0aCB0aGlzIHNwZWNpZmljYXRpb24KICAgICAgICAgICAgICAgIHRvIHJldHVybiB0aGUgcmVwbHkgZGVzcGl0ZSB0aGlzIGZsYWcgYW5kIHRoZSBvbmx5IGhhcm0gCiAgICAgICAgICAgICAgICAgIGZyb20gZG9pbmcgc28gaXMgZXh0cmEgbmV0d29yayB0cmFmZmljLgogICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5PX0FVVE9fU1RBUlQ8L2NvZGU+PC90ZD48dGQ+MHgyPC90ZD48dGQ+VGhlIGJ1cyBtdXN0IG5vdCBsYXVuY2ggYW4gb3duZXIKICAgICAgICAgICAgICAgICAgZm9yIHRoZSBkZXN0aW5hdGlvbiBuYW1lIGluIHJlc3BvbnNlIHRvIHRoaXMgbWVzc2FnZS4KICAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PHA+CiAgICAgIDwvcD48ZGl2IGNsYXNzPSJzZWN0MyIgdGl0bGU9IkhlYWRlciBGaWVsZHMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9Im1lc3NhZ2UtcHJvdG9jb2wtaGVhZGVyLWZpZWxkcyI+PC9hPkhlYWRlciBGaWVsZHM8L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgICAgVGhlIGFycmF5IGF0IHRoZSBlbmQgb2YgdGhlIGhlYWRlciBjb250YWlucyA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+aGVhZGVyCiAgICAgICAgICBmaWVsZHM8L2VtPiwgd2hlcmUgZWFjaCBmaWVsZCBpcyBhIDEtYnl0ZSBmaWVsZCBjb2RlIGZvbGxvd2VkCiAgICAgICAgICBieSBhIGZpZWxkIHZhbHVlLiBBIGhlYWRlciBtdXN0IGNvbnRhaW4gdGhlIHJlcXVpcmVkIGhlYWRlciBmaWVsZHMgZm9yCiAgICAgICAgICBpdHMgbWVzc2FnZSB0eXBlLCBhbmQgemVybyBvciBtb3JlIG9mIGFueSBvcHRpb25hbCBoZWFkZXIKICAgICAgICAgIGZpZWxkcy4gRnV0dXJlIHZlcnNpb25zIG9mIHRoaXMgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiBtYXkgYWRkIG5ldwogICAgICAgICAgZmllbGRzLiBJbXBsZW1lbnRhdGlvbnMgbXVzdCBpZ25vcmUgZmllbGRzIHRoZXkgZG8gbm90CiAgICAgICAgICB1bmRlcnN0YW5kLiBJbXBsZW1lbnRhdGlvbnMgbXVzdCBub3QgaW52ZW50IHRoZWlyIG93biBoZWFkZXIgZmllbGRzOwogICAgICAgICAgb25seSBjaGFuZ2VzIHRvIHRoaXMgc3BlY2lmaWNhdGlvbiBtYXkgaW50cm9kdWNlIG5ldyBoZWFkZXIgZmllbGRzLgogICAgICAgIDwvcD48cD4KICAgICAgICAgIEFnYWluLCBpZiBhbiBpbXBsZW1lbnRhdGlvbiBzZWVzIGEgaGVhZGVyIGZpZWxkIGNvZGUgdGhhdCBpdCBkb2VzIG5vdAogICAgICAgICAgZXhwZWN0LCBpdCBtdXN0IGlnbm9yZSB0aGF0IGZpZWxkLCBhcyBpdCB3aWxsIGJlIHBhcnQgb2YgYSBuZXcKICAgICAgICAgIChidXQgY29tcGF0aWJsZSkgdmVyc2lvbiBvZiB0aGlzIHNwZWNpZmljYXRpb24uIFRoaXMgYWxzbyBhcHBsaWVzIAogICAgICAgICAgdG8ga25vd24gaGVhZGVyIGZpZWxkcyBhcHBlYXJpbmcgaW4gdW5leHBlY3RlZCBtZXNzYWdlcywgZm9yIAogICAgICAgICAgZXhhbXBsZTogaWYgYSBzaWduYWwgaGFzIGEgcmVwbHkgc2VyaWFsIGl0IG11c3QgYmUgaWdub3JlZAogICAgICAgICAgZXZlbiB0aG91Z2ggaXQgaGFzIG5vIG1lYW5pbmcgYXMgb2YgdGhpcyB2ZXJzaW9uIG9mIHRoZSBzcGVjLgogICAgICAgIDwvcD48cD4KICAgICAgICAgIEhvd2V2ZXIsIGltcGxlbWVudGF0aW9ucyBtdXN0IG5vdCBzZW5kIG9yIGFjY2VwdCBrbm93biBoZWFkZXIgZmllbGRzCiAgICAgICAgICB3aXRoIHRoZSB3cm9uZyB0eXBlIHN0b3JlZCBpbiB0aGUgZmllbGQgdmFsdWUuIFNvIGZvciBleGFtcGxlIGEKICAgICAgICAgIG1lc3NhZ2Ugd2l0aCBhbiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+SU5URVJGQUNFPC9jb2RlPiBmaWVsZCBvZiB0eXBlCiAgICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VUlOVDMyPC9jb2RlPiB3b3VsZCBiZSBjb25zaWRlcmVkIGNvcnJ1cHQuCiAgICAgICAgPC9wPjxwPgogICAgICAgICAgSGVyZSBhcmUgdGhlIGN1cnJlbnRseS1kZWZpbmVkIGhlYWRlciBmaWVsZHM6CiAgICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGJvcmRlcj0iMSI+PGNvbGdyb3VwPjxjb2w+PGNvbD48Y29sPjxjb2w+PGNvbD48L2NvbGdyb3VwPjx0aGVhZD48dHI+PHRoPkNvbnZlbnRpb25hbCBOYW1lPC90aD48dGg+RGVjaW1hbCBDb2RlPC90aD48dGg+VHlwZTwvdGg+PHRoPlJlcXVpcmVkIEluPC90aD48dGg+RGVzY3JpcHRpb248L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+SU5WQUxJRDwvY29kZT48L3RkPjx0ZD4wPC90ZD48dGQ+Ti9BPC90ZD48dGQ+bm90IGFsbG93ZWQ8L3RkPjx0ZD5Ob3QgYSB2YWxpZCBmaWVsZCBuYW1lIChlcnJvciBpZiBpdCBhcHBlYXJzIGluIGEgbWVzc2FnZSk8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UEFUSDwvY29kZT48L3RkPjx0ZD4xPC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk9CSkVDVF9QQVRIPC9jb2RlPjwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5NRVRIT0RfQ0FMTDwvY29kZT4sIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5TSUdOQUw8L2NvZGU+PC90ZD48dGQ+VGhlIG9iamVjdCB0byBzZW5kIGEgY2FsbCB0bywKICAgICAgICAgICAgICAgICAgICBvciB0aGUgb2JqZWN0IGEgc2lnbmFsIGlzIGVtaXR0ZWQgZnJvbS4KICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lhbCBwYXRoCiAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPi9vcmcvZnJlZWRlc2t0b3AvREJ1cy9Mb2NhbDwvY29kZT4gaXMgcmVzZXJ2ZWQ7CiAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zIHNob3VsZCBub3Qgc2VuZCBtZXNzYWdlcyB3aXRoIHRoaXMgcGF0aCwKICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYnVzIGRhZW1vbiB3aWxsCiAgICAgICAgICAgICAgICAgICAgZGlzY29ubmVjdCBhbnkgYXBwbGljYXRpb24gdGhhdCBhdHRlbXB0cyB0byBkbyBzby4KICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPklOVEVSRkFDRTwvY29kZT48L3RkPjx0ZD4yPC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlNUUklORzwvY29kZT48L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+U0lHTkFMPC9jb2RlPjwvdGQ+PHRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBpbnRlcmZhY2UgdG8gaW52b2tlIGEgbWV0aG9kIGNhbGwgb24sIG9yIAogICAgICAgICAgICAgICAgICAgIHRoYXQgYSBzaWduYWwgaXMgZW1pdHRlZCBmcm9tLiBPcHRpb25hbCBmb3IgCiAgICAgICAgICAgICAgICAgICAgbWV0aG9kIGNhbGxzLCByZXF1aXJlZCBmb3Igc2lnbmFscy4KICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lhbCBpbnRlcmZhY2UKICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkRCdXMuTG9jYWw8L2NvZGU+IGlzIHJlc2VydmVkOwogICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucyBzaG91bGQgbm90IHNlbmQgbWVzc2FnZXMgd2l0aCB0aGlzCiAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLCBhbmQgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYnVzCiAgICAgICAgICAgICAgICAgICAgZGFlbW9uIHdpbGwgZGlzY29ubmVjdCBhbnkgYXBwbGljYXRpb24gdGhhdCBhdHRlbXB0cyB0bwogICAgICAgICAgICAgICAgICAgIGRvIHNvLgogICAgICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TUVNQkVSPC9jb2RlPjwvdGQ+PHRkPjM8L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+U1RSSU5HPC9jb2RlPjwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5NRVRIT0RfQ0FMTDwvY29kZT4sIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5TSUdOQUw8L2NvZGU+PC90ZD48dGQ+VGhlIG1lbWJlciwgZWl0aGVyIHRoZSBtZXRob2QgbmFtZSBvciBzaWduYWwgbmFtZS48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RVJST1JfTkFNRTwvY29kZT48L3RkPjx0ZD40PC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlNUUklORzwvY29kZT48L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RVJST1I8L2NvZGU+PC90ZD48dGQ+VGhlIG5hbWUgb2YgdGhlIGVycm9yIHRoYXQgb2NjdXJyZWQsIGZvciBlcnJvcnM8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UkVQTFlfU0VSSUFMPC9jb2RlPjwvdGQ+PHRkPjU8L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VUlOVDMyPC9jb2RlPjwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5FUlJPUjwvY29kZT4sIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5NRVRIT0RfUkVUVVJOPC9jb2RlPjwvdGQ+PHRkPlRoZSBzZXJpYWwgbnVtYmVyIG9mIHRoZSBtZXNzYWdlIHRoaXMgbWVzc2FnZSBpcyBhIHJlcGx5CiAgICAgICAgICAgICAgICAgICAgdG8uIChUaGUgc2VyaWFsIG51bWJlciBpcyB0aGUgc2Vjb25kIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5VSU5UMzI8L2NvZGU+IGluIHRoZSBoZWFkZXIuKTwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5ERVNUSU5BVElPTjwvY29kZT48L3RkPjx0ZD42PC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlNUUklORzwvY29kZT48L3RkPjx0ZD5vcHRpb25hbDwvdGQ+PHRkPlRoZSBuYW1lIG9mIHRoZSBjb25uZWN0aW9uIHRoaXMgbWVzc2FnZSBpcyBpbnRlbmRlZCBmb3IuCiAgICAgICAgICAgICAgICAgICAgT25seSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIG1lc3NhZ2UgYnVzLCBzZWUgCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InhyZWYiIGhyZWY9IiNtZXNzYWdlLWJ1cyIgdGl0bGU9Ik1lc3NhZ2UgQnVzIFNwZWNpZmljYXRpb24iPnRoZSBzZWN0aW9uIGNhbGxlZCAmIzgyMjA7TWVzc2FnZSBCdXMgU3BlY2lmaWNhdGlvbiYjODIyMTs8L2E+LjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5TRU5ERVI8L2NvZGU+PC90ZD48dGQ+NzwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5TVFJJTkc8L2NvZGU+PC90ZD48dGQ+b3B0aW9uYWw8L3RkPjx0ZD5VbmlxdWUgbmFtZSBvZiB0aGUgc2VuZGluZyBjb25uZWN0aW9uLgogICAgICAgICAgICAgICAgICAgIFRoZSBtZXNzYWdlIGJ1cyBmaWxscyBpbiB0aGlzIGZpZWxkIHNvIGl0IGlzIHJlbGlhYmxlOyB0aGUgZmllbGQgaXMKICAgICAgICAgICAgICAgICAgICBvbmx5IG1lYW5pbmdmdWwgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgbWVzc2FnZSBidXMuPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlNJR05BVFVSRTwvY29kZT48L3RkPjx0ZD44PC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlNJR05BVFVSRTwvY29kZT48L3RkPjx0ZD5vcHRpb25hbDwvdGQ+PHRkPlRoZSBzaWduYXR1cmUgb2YgdGhlIG1lc3NhZ2UgYm9keS4KICAgICAgICAgICAgICAgICAgSWYgb21pdHRlZCwgaXQgaXMgYXNzdW1lZCB0byBiZSB0aGUgCiAgICAgICAgICAgICAgICAgIGVtcHR5IHNpZ25hdHVyZSAiIiAoaS5lLiB0aGUgYm9keSBtdXN0IGJlIDAtbGVuZ3RoKS48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VU5JWF9GRFM8L2NvZGU+PC90ZD48dGQ+OTwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5VSU5UMzI8L2NvZGU+PC90ZD48dGQ+b3B0aW9uYWw8L3RkPjx0ZD5UaGUgbnVtYmVyIG9mIFVuaXggZmlsZSBkZXNjcmlwdG9ycyB0aGF0CiAgICAgICAgICAgICAgICAgIGFjY29tcGFueSB0aGUgbWVzc2FnZS4gIElmIG9taXR0ZWQsIGl0IGlzIGFzc3VtZWQKICAgICAgICAgICAgICAgICAgdGhhdCBubyBVbml4IGZpbGUgZGVzY3JpcHRvcnMgYWNjb21wYW55IHRoZQogICAgICAgICAgICAgICAgICBtZXNzYWdlLiBUaGUgYWN0dWFsIGZpbGUgZGVzY3JpcHRvcnMgbmVlZCB0byBiZQogICAgICAgICAgICAgICAgICB0cmFuc2ZlcnJlZCB2aWEgcGxhdGZvcm0gc3BlY2lmaWMgbWVjaGFuaXNtCiAgICAgICAgICAgICAgICAgIG91dC1vZi1iYW5kLiBUaGV5IG11c3QgYmUgc2VudCBhdCB0aGUgc2FtZSB0aW1lIGFzCiAgICAgICAgICAgICAgICAgIHBhcnQgb2YgdGhlIG1lc3NhZ2UgaXRzZWxmLiBUaGV5IG1heSBub3QgYmUgc2VudAogICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIG1lc3NhZ2UgaXRzZWxmIGlzCiAgICAgICAgICAgICAgICAgIHRyYW5zZmVycmVkIG9yIGFmdGVyIHRoZSBsYXN0IGJ5dGUgb2YgdGhlIG1lc3NhZ2UKICAgICAgICAgICAgICAgICAgaXRzZWxmLjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PHA+CiAgICAgICAgPC9wPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iVmFsaWQgTmFtZXMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9Im1lc3NhZ2UtcHJvdG9jb2wtbmFtZXMiPjwvYT5WYWxpZCBOYW1lczwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgVGhlIHZhcmlvdXMgbmFtZXMgaW4gRC1CdXMgbWVzc2FnZXMgaGF2ZSBzb21lIHJlc3RyaWN0aW9ucy4KICAgICAgPC9wPjxwPgogICAgICAgIFRoZXJlIGlzIGEgPGVtIGNsYXNzPSJmaXJzdHRlcm0iPm1heGltdW0gbmFtZSBsZW5ndGg8L2VtPiAKICAgICAgICBvZiAyNTUgd2hpY2ggYXBwbGllcyB0byBidXMgbmFtZXMsIGludGVyZmFjZXMsIGFuZCBtZW1iZXJzLiAKICAgICAgPC9wPjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iSW50ZXJmYWNlIG5hbWVzIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJtZXNzYWdlLXByb3RvY29sLW5hbWVzLWludGVyZmFjZSI+PC9hPkludGVyZmFjZSBuYW1lczwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgICBJbnRlcmZhY2VzIGhhdmUgbmFtZXMgd2l0aCB0eXBlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5TVFJJTkc8L2NvZGU+LCBtZWFuaW5nIHRoYXQgCiAgICAgICAgICB0aGV5IG11c3QgYmUgdmFsaWQgVVRGLTguIEhvd2V2ZXIsIHRoZXJlIGFyZSBhbHNvIHNvbWUgCiAgICAgICAgICBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucyB0aGF0IGFwcGx5IHRvIGludGVyZmFjZSBuYW1lcyAKICAgICAgICAgIHNwZWNpZmljYWxseToKICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiB0eXBlPSJkaXNjIj48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5JbnRlcmZhY2UgbmFtZXMgYXJlIGNvbXBvc2VkIG9mIDEgb3IgbW9yZSBlbGVtZW50cyBzZXBhcmF0ZWQgYnkKICAgICAgICAgICAgICAgIGEgcGVyaW9kICgnLicpIGNoYXJhY3Rlci4gQWxsIGVsZW1lbnRzIG11c3QgY29udGFpbiBhdCBsZWFzdCAKICAgICAgICAgICAgICAgIG9uZSBjaGFyYWN0ZXIuCiAgICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5FYWNoIGVsZW1lbnQgbXVzdCBvbmx5IGNvbnRhaW4gdGhlIEFTQ0lJIGNoYXJhY3RlcnMgCiAgICAgICAgICAgICAgICAiW0EtWl1bYS16XVswLTldXyIgYW5kIG11c3Qgbm90IGJlZ2luIHdpdGggYSBkaWdpdC4KICAgICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPkludGVyZmFjZSBuYW1lcyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lICcuJyAocGVyaW9kKQogICAgICAgICAgICAgIGNoYXJhY3RlciAoYW5kIHRodXMgYXQgbGVhc3QgdHdvIGVsZW1lbnRzKS4KICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5JbnRlcmZhY2UgbmFtZXMgbXVzdCBub3QgYmVnaW4gd2l0aCBhICcuJyAocGVyaW9kKSBjaGFyYWN0ZXIuPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+SW50ZXJmYWNlIG5hbWVzIG11c3Qgbm90IGV4Y2VlZCB0aGUgbWF4aW11bSBuYW1lIGxlbmd0aC48L3A+PC9saT48L3VsPjwvZGl2PjxwPgogICAgICAgIDwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MyIgdGl0bGU9IkJ1cyBuYW1lcyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0ibWVzc2FnZS1wcm90b2NvbC1uYW1lcy1idXMiPjwvYT5CdXMgbmFtZXM8L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgICAgQ29ubmVjdGlvbnMgaGF2ZSBvbmUgb3IgbW9yZSBidXMgbmFtZXMgYXNzb2NpYXRlZCB3aXRoIHRoZW0uCiAgICAgICAgICBBIGNvbm5lY3Rpb24gaGFzIGV4YWN0bHkgb25lIGJ1cyBuYW1lIHRoYXQgaXMgYSB1bmlxdWUgY29ubmVjdGlvbgogICAgICAgICAgbmFtZS4gVGhlIHVuaXF1ZSBjb25uZWN0aW9uIG5hbWUgcmVtYWlucyB3aXRoIHRoZSBjb25uZWN0aW9uIGZvcgogICAgICAgICAgaXRzIGVudGlyZSBsaWZldGltZS4KICAgICAgICAgIEEgYnVzIG5hbWUgaXMgb2YgdHlwZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+U1RSSU5HPC9jb2RlPiwKICAgICAgICAgIG1lYW5pbmcgdGhhdCBpdCBtdXN0IGJlIHZhbGlkIFVURi04LiBIb3dldmVyLCB0aGVyZSBhcmUgYWxzbwogICAgICAgICAgc29tZSBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucyB0aGF0IGFwcGx5IHRvIGJ1cyBuYW1lcyAKICAgICAgICAgIHNwZWNpZmljYWxseToKICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiB0eXBlPSJkaXNjIj48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5CdXMgbmFtZXMgdGhhdCBzdGFydCB3aXRoIGEgY29sb24gKCc6JykKICAgICAgICAgICAgICAgIGNoYXJhY3RlciBhcmUgdW5pcXVlIGNvbm5lY3Rpb24gbmFtZXMuCiAgICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5CdXMgbmFtZXMgYXJlIGNvbXBvc2VkIG9mIDEgb3IgbW9yZSBlbGVtZW50cyBzZXBhcmF0ZWQgYnkKICAgICAgICAgICAgICAgIGEgcGVyaW9kICgnLicpIGNoYXJhY3Rlci4gQWxsIGVsZW1lbnRzIG11c3QgY29udGFpbiBhdCBsZWFzdCAKICAgICAgICAgICAgICAgIG9uZSBjaGFyYWN0ZXIuCiAgICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5FYWNoIGVsZW1lbnQgbXVzdCBvbmx5IGNvbnRhaW4gdGhlIEFTQ0lJIGNoYXJhY3RlcnMgCiAgICAgICAgICAgICAgICAiW0EtWl1bYS16XVswLTldXy0iLiBPbmx5IGVsZW1lbnRzIHRoYXQgYXJlIHBhcnQgb2YgYSB1bmlxdWUKICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gbmFtZSBtYXkgYmVnaW4gd2l0aCBhIGRpZ2l0LCBlbGVtZW50cyBpbgogICAgICAgICAgICAgICAgb3RoZXIgYnVzIG5hbWVzIG11c3Qgbm90IGJlZ2luIHdpdGggYSBkaWdpdC4KICAgICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPkJ1cyBuYW1lcyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lICcuJyAocGVyaW9kKQogICAgICAgICAgICAgIGNoYXJhY3RlciAoYW5kIHRodXMgYXQgbGVhc3QgdHdvIGVsZW1lbnRzKS4KICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5CdXMgbmFtZXMgbXVzdCBub3QgYmVnaW4gd2l0aCBhICcuJyAocGVyaW9kKSBjaGFyYWN0ZXIuPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+QnVzIG5hbWVzIG11c3Qgbm90IGV4Y2VlZCB0aGUgbWF4aW11bSBuYW1lIGxlbmd0aC48L3A+PC9saT48L3VsPjwvZGl2PjxwPgogICAgICAgIDwvcD48cD4KICAgICAgICAgIE5vdGUgdGhhdCB0aGUgaHlwaGVuICgnLScpIGNoYXJhY3RlciBpcyBhbGxvd2VkIGluIGJ1cyBuYW1lcyBidXQKICAgICAgICAgIG5vdCBpbiBpbnRlcmZhY2UgbmFtZXMuCiAgICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iTWVtYmVyIG5hbWVzIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJtZXNzYWdlLXByb3RvY29sLW5hbWVzLW1lbWJlciI+PC9hPk1lbWJlciBuYW1lczwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgICBNZW1iZXIgKGkuZS4gbWV0aG9kIG9yIHNpZ25hbCkgbmFtZXM6CiAgICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+TXVzdCBvbmx5IGNvbnRhaW4gdGhlIEFTQ0lJIGNoYXJhY3RlcnMKICAgICAgICAgICAgICAgICJbQS1aXVthLXpdWzAtOV1fIiBhbmQgbWF5IG5vdCBiZWdpbiB3aXRoIGEKICAgICAgICAgICAgICAgIGRpZ2l0LjwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPk11c3Qgbm90IGNvbnRhaW4gdGhlICcuJyAocGVyaW9kKSBjaGFyYWN0ZXIuPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+TXVzdCBub3QgZXhjZWVkIHRoZSBtYXhpbXVtIG5hbWUgbGVuZ3RoLjwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPk11c3QgYmUgYXQgbGVhc3QgMSBieXRlIGluIGxlbmd0aC48L3A+PC9saT48L3VsPjwvZGl2PjxwPgogICAgICAgIDwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MyIgdGl0bGU9IkVycm9yIG5hbWVzIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJtZXNzYWdlLXByb3RvY29sLW5hbWVzLWVycm9yIj48L2E+RXJyb3IgbmFtZXM8L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgICAgRXJyb3IgbmFtZXMgaGF2ZSB0aGUgc2FtZSByZXN0cmljdGlvbnMgYXMgaW50ZXJmYWNlIG5hbWVzLgogICAgICAgIDwvcD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9Ik1lc3NhZ2UgVHlwZXMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9Im1lc3NhZ2UtcHJvdG9jb2wtdHlwZXMiPjwvYT5NZXNzYWdlIFR5cGVzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBFYWNoIG9mIHRoZSBtZXNzYWdlIHR5cGVzICg8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TUVUSE9EX0NBTEw8L2NvZGU+LCA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TUVUSE9EX1JFVFVSTjwvY29kZT4sIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5FUlJPUjwvY29kZT4sIGFuZAogICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5TSUdOQUw8L2NvZGU+KSBoYXMgaXRzIG93biBleHBlY3RlZCB1c2FnZSBjb252ZW50aW9ucyBhbmQgaGVhZGVyIGZpZWxkcy4KICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZXNlIGNvbnZlbnRpb25zLgogICAgICA8L3A+PGRpdiBjbGFzcz0ic2VjdDMiIHRpdGxlPSJNZXRob2QgQ2FsbHMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9Im1lc3NhZ2UtcHJvdG9jb2wtdHlwZXMtbWV0aG9kIj48L2E+TWV0aG9kIENhbGxzPC9oND48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICAgIFNvbWUgbWVzc2FnZXMgaW52b2tlIGFuIG9wZXJhdGlvbiBvbiBhIHJlbW90ZSBvYmplY3QuICBUaGVzZSBhcmUKICAgICAgICAgIGNhbGxlZCBtZXRob2QgY2FsbCBtZXNzYWdlcyBhbmQgaGF2ZSB0aGUgdHlwZSB0YWcgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPk1FVEhPRF9DQUxMPC9jb2RlPi4gU3VjaAogICAgICAgICAgbWVzc2FnZXMgbWFwIG5hdHVyYWxseSB0byBtZXRob2RzIG9uIG9iamVjdHMgaW4gYSB0eXBpY2FsIHByb2dyYW0uCiAgICAgICAgPC9wPjxwPgogICAgICAgICAgQSBtZXRob2QgY2FsbCBtZXNzYWdlIGlzIHJlcXVpcmVkIHRvIGhhdmUgYSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TUVNQkVSPC9jb2RlPiBoZWFkZXIgZmllbGQKICAgICAgICAgIGluZGljYXRpbmcgdGhlIG5hbWUgb2YgdGhlIG1ldGhvZC4gT3B0aW9uYWxseSwgdGhlIG1lc3NhZ2UgaGFzIGFuCiAgICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+SU5URVJGQUNFPC9jb2RlPiBmaWVsZCBnaXZpbmcgdGhlIGludGVyZmFjZSB0aGUgbWV0aG9kIGlzIGEgcGFydCBvZi4gSW4gdGhlCiAgICAgICAgICBhYnNlbmNlIG9mIGFuIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5JTlRFUkZBQ0U8L2NvZGU+IGZpZWxkLCBpZiB0d28gaW50ZXJmYWNlcyBvbiB0aGUgc2FtZSBvYmplY3QgaGF2ZQogICAgICAgICAgYSBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lLCBpdCBpcyB1bmRlZmluZWQgd2hpY2ggb2YgdGhlIHR3byBtZXRob2RzCiAgICAgICAgICB3aWxsIGJlIGludm9rZWQuIEltcGxlbWVudGF0aW9ucyBtYXkgYWxzbyBjaG9vc2UgdG8gcmV0dXJuIGFuIGVycm9yIGluCiAgICAgICAgICB0aGlzIGFtYmlndW91cyBjYXNlLiBIb3dldmVyLCBpZiBhIG1ldGhvZCBuYW1lIGlzIHVuaXF1ZQogICAgICAgICAgaW1wbGVtZW50YXRpb25zIG11c3Qgbm90IHJlcXVpcmUgYW4gaW50ZXJmYWNlIGZpZWxkLgogICAgICAgIDwvcD48cD4KICAgICAgICAgIE1ldGhvZCBjYWxsIG1lc3NhZ2VzIGFsc28gaW5jbHVkZSBhIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5QQVRIPC9jb2RlPiBmaWVsZAogICAgICAgICAgaW5kaWNhdGluZyB0aGUgb2JqZWN0IHRvIGludm9rZSB0aGUgbWV0aG9kIG9uLiBJZiB0aGUgY2FsbCBpcyBwYXNzaW5nCiAgICAgICAgICB0aHJvdWdoIGEgbWVzc2FnZSBidXMsIHRoZSBtZXNzYWdlIHdpbGwgYWxzbyBoYXZlIGEKICAgICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5ERVNUSU5BVElPTjwvY29kZT4gZmllbGQgZ2l2aW5nIHRoZSBuYW1lIG9mIHRoZSBjb25uZWN0aW9uCiAgICAgICAgICB0byByZWNlaXZlIHRoZSBtZXNzYWdlLgogICAgICAgIDwvcD48cD4KICAgICAgICAgIFdoZW4gYW4gYXBwbGljYXRpb24gaGFuZGxlcyBhIG1ldGhvZCBjYWxsIG1lc3NhZ2UsIGl0IGlzIHJlcXVpcmVkIHRvCiAgICAgICAgICByZXR1cm4gYSByZXBseS4gVGhlIHJlcGx5IGlzIGlkZW50aWZpZWQgYnkgYSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UkVQTFlfU0VSSUFMPC9jb2RlPiBoZWFkZXIgZmllbGQKICAgICAgICAgIGluZGljYXRpbmcgdGhlIHNlcmlhbCBudW1iZXIgb2YgdGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5NRVRIT0RfQ0FMTDwvY29kZT4gYmVpbmcgcmVwbGllZCB0by4gVGhlCiAgICAgICAgICByZXBseSBjYW4gaGF2ZSBvbmUgb2YgdHdvIHR5cGVzOyBlaXRoZXIgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPk1FVEhPRF9SRVRVUk48L2NvZGU+IG9yIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5FUlJPUjwvY29kZT4uCiAgICAgICAgPC9wPjxwPgogICAgICAgICAgSWYgdGhlIHJlcGx5IGhhcyB0eXBlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5NRVRIT0RfUkVUVVJOPC9jb2RlPiwgdGhlIGFyZ3VtZW50cyB0byB0aGUgcmVwbHkgbWVzc2FnZSAKICAgICAgICAgIGFyZSB0aGUgcmV0dXJuIHZhbHVlKHMpIG9yICJvdXQgcGFyYW1ldGVycyIgb2YgdGhlIG1ldGhvZCBjYWxsLiAKICAgICAgICAgIElmIHRoZSByZXBseSBoYXMgdHlwZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RVJST1I8L2NvZGU+LCB0aGVuIGFuICJleGNlcHRpb24iIGhhcyBiZWVuIHRocm93biwgCiAgICAgICAgICBhbmQgdGhlIGNhbGwgZmFpbHM7IG5vIHJldHVybiB2YWx1ZSB3aWxsIGJlIHByb3ZpZGVkLiBJdCBtYWtlcyAKICAgICAgICAgIG5vIHNlbnNlIHRvIHNlbmQgbXVsdGlwbGUgcmVwbGllcyB0byB0aGUgc2FtZSBtZXRob2QgY2FsbC4KICAgICAgICA8L3A+PHA+CiAgICAgICAgICBFdmVuIGlmIGEgbWV0aG9kIGNhbGwgaGFzIG5vIHJldHVybiB2YWx1ZXMsIGEgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPk1FVEhPRF9SRVRVUk48L2NvZGU+IAogICAgICAgICAgcmVwbHkgaXMgcmVxdWlyZWQsIHNvIHRoZSBjYWxsZXIgd2lsbCBrbm93IHRoZSBtZXRob2QgCiAgICAgICAgICB3YXMgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZC4KICAgICAgICA8L3A+PHA+CiAgICAgICAgICBUaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPk1FVEhPRF9SRVRVUk48L2NvZGU+IG9yIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5FUlJPUjwvY29kZT4gcmVwbHkgbWVzc2FnZSBtdXN0IGhhdmUgdGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5SRVBMWV9TRVJJQUw8L2NvZGU+IAogICAgICAgICAgaGVhZGVyIGZpZWxkLgogICAgICAgIDwvcD48cD4KICAgICAgICAgIElmIGEgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPk1FVEhPRF9DQUxMPC9jb2RlPiBtZXNzYWdlIGhhcyB0aGUgZmxhZyA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Tk9fUkVQTFlfRVhQRUNURUQ8L2NvZGU+LCAKICAgICAgICAgIHRoZW4gYXMgYW4gb3B0aW1pemF0aW9uIHRoZSBhcHBsaWNhdGlvbiByZWNlaXZpbmcgdGhlIG1ldGhvZCAKICAgICAgICAgIGNhbGwgbWF5IGNob29zZSB0byBvbWl0IHRoZSByZXBseSBtZXNzYWdlIChyZWdhcmRsZXNzIG9mIAogICAgICAgICAgd2hldGhlciB0aGUgcmVwbHkgd291bGQgaGF2ZSBiZWVuIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5NRVRIT0RfUkVUVVJOPC9jb2RlPiBvciA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RVJST1I8L2NvZGU+KS4gCiAgICAgICAgICBIb3dldmVyLCBpdCBpcyBhbHNvIGFjY2VwdGFibGUgdG8gaWdub3JlIHRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Tk9fUkVQTFlfRVhQRUNURUQ8L2NvZGU+CiAgICAgICAgICBmbGFnIGFuZCByZXBseSBhbnl3YXkuCiAgICAgICAgPC9wPjxwPgogICAgICAgICAgVW5sZXNzIGEgbWVzc2FnZSBoYXMgdGhlIGZsYWcgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5PX0FVVE9fU1RBUlQ8L2NvZGU+LCBpZiB0aGUKICAgICAgICAgIGRlc3RpbmF0aW9uIG5hbWUgZG9lcyBub3QgZXhpc3QgdGhlbiBhIHByb2dyYW0gdG8gb3duIHRoZSBkZXN0aW5hdGlvbgogICAgICAgICAgbmFtZSB3aWxsIGJlIHN0YXJ0ZWQgYmVmb3JlIHRoZSBtZXNzYWdlIGlzIGRlbGl2ZXJlZC4gIFRoZSBtZXNzYWdlCiAgICAgICAgICB3aWxsIGJlIGhlbGQgdW50aWwgdGhlIG5ldyBwcm9ncmFtIGlzIHN1Y2Nlc3NmdWxseSBzdGFydGVkIG9yIGhhcwogICAgICAgICAgZmFpbGVkIHRvIHN0YXJ0OyBpbiBjYXNlIG9mIGZhaWx1cmUsIGFuIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQuIFRoaXMKICAgICAgICAgIGZsYWcgaXMgb25seSByZWxldmFudCBpbiB0aGUgY29udGV4dCBvZiBhIG1lc3NhZ2UgYnVzLCBpdCBpcyBpZ25vcmVkCiAgICAgICAgICBkdXJpbmcgb25lLXRvLW9uZSBjb21tdW5pY2F0aW9uIHdpdGggbm8gaW50ZXJtZWRpYXRlIGJ1cy4KICAgICAgICA8L3A+PGRpdiBjbGFzcz0ic2VjdDQiIHRpdGxlPSJNYXBwaW5nIG1ldGhvZCBjYWxscyB0byBuYXRpdmUgQVBJcyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg1IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0ibWVzc2FnZS1wcm90b2NvbC10eXBlcy1tZXRob2QtYXBpcyI+PC9hPk1hcHBpbmcgbWV0aG9kIGNhbGxzIHRvIG5hdGl2ZSBBUElzPC9oNT48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICAgICAgQVBJcyBmb3IgRC1CdXMgbWF5IG1hcCBtZXRob2QgY2FsbHMgdG8gYSBtZXRob2QgY2FsbCBpbiBhIHNwZWNpZmljCiAgICAgICAgICAgIHByb2dyYW1taW5nIGxhbmd1YWdlLCBzdWNoIGFzIEMrKywgb3IgbWF5IG1hcCBhIG1ldGhvZCBjYWxsIHdyaXR0ZW4KICAgICAgICAgICAgaW4gYW4gSURMIHRvIGEgRC1CdXMgbWVzc2FnZS4KICAgICAgICAgIDwvcD48cD4KICAgICAgICAgICAgSW4gQVBJcyBvZiB0aGlzIG5hdHVyZSwgYXJndW1lbnRzIHRvIGEgbWV0aG9kIGFyZSBvZnRlbiB0ZXJtZWQgImluIgogICAgICAgICAgICAod2hpY2ggaW1wbGllcyBzZW50IGluIHRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TUVUSE9EX0NBTEw8L2NvZGU+KSwgb3IgIm91dCIgKHdoaWNoIGltcGxpZXMKICAgICAgICAgICAgcmV0dXJuZWQgaW4gdGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5NRVRIT0RfUkVUVVJOPC9jb2RlPikuIFNvbWUgQVBJcyBzdWNoIGFzIENPUkJBIGFsc28gaGF2ZQogICAgICAgICAgICAiaW5vdXQiIGFyZ3VtZW50cywgd2hpY2ggYXJlIGJvdGggc2VudCBhbmQgcmVjZWl2ZWQsIGkuZS4gdGhlIGNhbGxlcgogICAgICAgICAgICBwYXNzZXMgaW4gYSB2YWx1ZSB3aGljaCBpcyBtb2RpZmllZC4gTWFwcGVkIHRvIEQtQnVzLCBhbiAiaW5vdXQiCiAgICAgICAgICAgIGFyZ3VtZW50IGlzIGVxdWl2YWxlbnQgdG8gYW4gImluIiBhcmd1bWVudCwgZm9sbG93ZWQgYnkgYW4gIm91dCIKICAgICAgICAgICAgYXJndW1lbnQuIFlvdSBjYW4ndCBwYXNzIHRoaW5ncyAiYnkgcmVmZXJlbmNlIiBvdmVyIHRoZSB3aXJlLCBzbwogICAgICAgICAgICAiaW5vdXQiIGlzIHB1cmVseSBhbiBpbGx1c2lvbiBvZiB0aGUgaW4tcHJvY2VzcyBBUEkuCiAgICAgICAgICA8L3A+PHA+CiAgICAgICAgICAgIEdpdmVuIGEgbWV0aG9kIHdpdGggemVybyBvciBvbmUgcmV0dXJuIHZhbHVlcywgZm9sbG93ZWQgYnkgemVybyBvciBtb3JlCiAgICAgICAgICAgIGFyZ3VtZW50cywgd2hlcmUgZWFjaCBhcmd1bWVudCBtYXkgYmUgImluIiwgIm91dCIsIG9yICJpbm91dCIsIHRoZQogICAgICAgICAgICBjYWxsZXIgY29uc3RydWN0cyBhIG1lc3NhZ2UgYnkgYXBwZW5kaW5nIGVhY2ggImluIiBvciAiaW5vdXQiIGFyZ3VtZW50LAogICAgICAgICAgICBpbiBvcmRlci4gIm91dCIgYXJndW1lbnRzIGFyZSBub3QgcmVwcmVzZW50ZWQgaW4gdGhlIGNhbGxlcidzIG1lc3NhZ2UuCiAgICAgICAgICA8L3A+PHA+CiAgICAgICAgICAgIFRoZSByZWNpcGllbnQgY29uc3RydWN0cyBhIHJlcGx5IGJ5IGFwcGVuZGluZyBmaXJzdCB0aGUgcmV0dXJuIHZhbHVlIAogICAgICAgICAgICBpZiBhbnksIHRoZW4gZWFjaCAib3V0IiBvciAiaW5vdXQiIGFyZ3VtZW50LCBpbiBvcmRlci4gCiAgICAgICAgICAgICJpbiIgYXJndW1lbnRzIGFyZSBub3QgcmVwcmVzZW50ZWQgaW4gdGhlIHJlcGx5IG1lc3NhZ2UuCiAgICAgICAgICA8L3A+PHA+CiAgICAgICAgICAgIEVycm9yIHJlcGxpZXMgYXJlIG5vcm1hbGx5IG1hcHBlZCB0byBleGNlcHRpb25zIGluIGxhbmd1YWdlcyB0aGF0IGhhdmUKICAgICAgICAgICAgZXhjZXB0aW9ucy4KICAgICAgICAgIDwvcD48cD4KICAgICAgICAgICAgSW4gY29udmVydGluZyBmcm9tIG5hdGl2ZSBBUElzIHRvIEQtQnVzLCBpdCBpcyBwZXJoYXBzIG5pY2UgdG8gCiAgICAgICAgICAgIG1hcCBELUJ1cyBuYW1pbmcgY29udmVudGlvbnMgKCJGb29CYXIiKSB0byBuYXRpdmUgY29udmVudGlvbnMgCiAgICAgICAgICAgIHN1Y2ggYXMgImZvb0JhciIgb3IgImZvb19iYXIiIGF1dG9tYXRpY2FsbHkuIFRoaXMgaXMgT0sgCiAgICAgICAgICAgIGFzIGxvbmcgYXMgeW91IGNhbiBzYXkgdGhhdCB0aGUgbmF0aXZlIEFQSSBpcyBvbmUgdGhhdCAKICAgICAgICAgICAgd2FzIHNwZWNpZmljYWxseSB3cml0dGVuIGZvciBELUJ1cy4gSXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UKICAgICAgICAgICAgd2hlbiB3cml0aW5nIG9iamVjdCBpbXBsZW1lbnRhdGlvbnMgdGhhdCB3aWxsIGJlIGV4cG9ydGVkIAogICAgICAgICAgICBvdmVyIHRoZSBidXMuIE9iamVjdCBwcm94aWVzIHVzZWQgdG8gaW52b2tlIHJlbW90ZSBELUJ1cyAKICAgICAgICAgICAgb2JqZWN0cyBwcm9iYWJseSBuZWVkIHRoZSBhYmlsaXR5IHRvIGNhbGwgYW55IEQtQnVzIG1ldGhvZCwKICAgICAgICAgICAgYW5kIHRodXMgYSBtYWdpYyBuYW1lIG1hcHBpbmcgbGlrZSB0aGlzIGNvdWxkIGJlIGEgcHJvYmxlbS4KICAgICAgICAgIDwvcD48cD4KICAgICAgICAgICAgVGhpcyBzcGVjaWZpY2F0aW9uIGRvZXNuJ3QgcmVxdWlyZSBhbnl0aGluZyBvZiBuYXRpdmUgQVBJIGJpbmRpbmdzOwogICAgICAgICAgICB0aGUgcHJlY2VkaW5nIGlzIG9ubHkgYSBzdWdnZXN0ZWQgY29udmVudGlvbiBmb3IgY29uc2lzdGVuY3kgCiAgICAgICAgICAgIGFtb25nIGJpbmRpbmdzLgogICAgICAgICAgPC9wPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iU2lnbmFsIEVtaXNzaW9uIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJtZXNzYWdlLXByb3RvY29sLXR5cGVzLXNpZ25hbCI+PC9hPlNpZ25hbCBFbWlzc2lvbjwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgICBVbmxpa2UgbWV0aG9kIGNhbGxzLCBzaWduYWwgZW1pc3Npb25zIGhhdmUgbm8gcmVwbGllcy4gCiAgICAgICAgICBBIHNpZ25hbCBlbWlzc2lvbiBpcyBzaW1wbHkgYSBzaW5nbGUgbWVzc2FnZSBvZiB0eXBlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5TSUdOQUw8L2NvZGU+LgogICAgICAgICAgSXQgbXVzdCBoYXZlIHRocmVlIGhlYWRlciBmaWVsZHM6IDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5QQVRIPC9jb2RlPiBnaXZpbmcgdGhlIG9iamVjdCAKICAgICAgICAgIHRoZSBzaWduYWwgd2FzIGVtaXR0ZWQgZnJvbSwgcGx1cyA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+SU5URVJGQUNFPC9jb2RlPiBhbmQgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPk1FTUJFUjwvY29kZT4gZ2l2aW5nCiAgICAgICAgICB0aGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHNpZ25hbC4gVGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5JTlRFUkZBQ0U8L2NvZGU+IGhlYWRlciBpcyByZXF1aXJlZAogICAgICAgICAgZm9yIHNpZ25hbHMsIHRob3VnaCBpdCBpcyBvcHRpb25hbCBmb3IgbWV0aG9kIGNhbGxzLgogICAgICAgIDwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MyIgdGl0bGU9IkVycm9ycyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0ibWVzc2FnZS1wcm90b2NvbC10eXBlcy1lcnJvcnMiPjwvYT5FcnJvcnM8L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgICAgTWVzc2FnZXMgb2YgdHlwZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RVJST1I8L2NvZGU+IGFyZSBtb3N0IGNvbW1vbmx5IHJlcGxpZXMgCiAgICAgICAgICB0byBhIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5NRVRIT0RfQ0FMTDwvY29kZT4sIGJ1dCBtYXkgYmUgcmV0dXJuZWQgaW4gcmVwbHkgCiAgICAgICAgICB0byBhbnkga2luZCBvZiBtZXNzYWdlLiBUaGUgbWVzc2FnZSBidXMgZm9yIGV4YW1wbGUKICAgICAgICAgIHdpbGwgcmV0dXJuIGFuIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5FUlJPUjwvY29kZT4gaW4gcmVwbHkgdG8gYSBzaWduYWwgZW1pc3Npb24gaWYgCiAgICAgICAgICB0aGUgYnVzIGRvZXMgbm90IGhhdmUgZW5vdWdoIG1lbW9yeSB0byBzZW5kIHRoZSBzaWduYWwuCiAgICAgICAgPC9wPjxwPgogICAgICAgICAgQW4gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkVSUk9SPC9jb2RlPiBtYXkgaGF2ZSBhbnkgYXJndW1lbnRzLCBidXQgaWYgdGhlIGZpcnN0IAogICAgICAgICAgYXJndW1lbnQgaXMgYSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+U1RSSU5HPC9jb2RlPiwgaXQgbXVzdCBiZSBhbiBlcnJvciBtZXNzYWdlLgogICAgICAgICAgVGhlIGVycm9yIG1lc3NhZ2UgbWF5IGJlIGxvZ2dlZCBvciBzaG93biB0byB0aGUgdXNlcgogICAgICAgICAgaW4gc29tZSB3YXkuCiAgICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iTm90YXRpb24gaW4gdGhpcyBkb2N1bWVudCI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0ibWVzc2FnZS1wcm90b2NvbC10eXBlcy1ub3RhdGlvbiI+PC9hPk5vdGF0aW9uIGluIHRoaXMgZG9jdW1lbnQ8L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgICAgVGhpcyBkb2N1bWVudCB1c2VzIGEgc2ltcGxlIHBzZXVkby1JREwgdG8gZGVzY3JpYmUgcGFydGljdWxhciBtZXRob2QgCiAgICAgICAgICBjYWxscyBhbmQgc2lnbmFscy4gSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgbWV0aG9kIGNhbGw6CiAgICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogICAgICAgICAgICBvcmcuZnJlZWRlc2t0b3AuREJ1cy5TdGFydFNlcnZpY2VCeU5hbWUgKGluIFNUUklORyBuYW1lLCBpbiBVSU5UMzIgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IFVJTlQzMiByZXN1bHRjb2RlKQogICAgICAgICAgPC9wcmU+PHA+CiAgICAgICAgICBUaGlzIG1lYW5zIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5JTlRFUkZBQ0U8L2NvZGU+ID0gb3JnLmZyZWVkZXNrdG9wLkRCdXMsIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5NRU1CRVI8L2NvZGU+ID0gU3RhcnRTZXJ2aWNlQnlOYW1lLCAKICAgICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5NRVRIT0RfQ0FMTDwvY29kZT4gYXJndW1lbnRzIGFyZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+U1RSSU5HPC9jb2RlPiBhbmQgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPlVJTlQzMjwvY29kZT4sIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5NRVRIT0RfUkVUVVJOPC9jb2RlPiBhcmd1bWVudAogICAgICAgICAgaXMgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPlVJTlQzMjwvY29kZT4uIFJlbWVtYmVyIHRoYXQgdGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5NRU1CRVI8L2NvZGU+IGZpZWxkIGNhbid0IGNvbnRhaW4gYW55ICcuJyAocGVyaW9kKQogICAgICAgICAgY2hhcmFjdGVycyBzbyBpdCdzIGtub3duIHRoYXQgdGhlIGxhc3QgcGFydCBvZiB0aGUgbmFtZSBpbgogICAgICAgICAgdGhlICJJREwiIGlzIHRoZSBtZW1iZXIgbmFtZS4KICAgICAgICA8L3A+PHA+CiAgICAgICAgICBJbiBDKysgdGhhdCBtaWdodCBlbmQgdXAgbG9va2luZyBsaWtlIHRoaXM6CiAgICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogICAgICAgICAgICB1bnNpZ25lZCBpbnQgb3JnOjpmcmVlZGVza3RvcDo6REJ1czo6U3RhcnRTZXJ2aWNlQnlOYW1lIChjb25zdCBjaGFyICAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKICAgICAgICAgIDwvcHJlPjxwPgogICAgICAgICAgb3IgZXF1YWxseSB2YWxpZCwgdGhlIHJldHVybiB2YWx1ZSBjb3VsZCBiZSBkb25lIGFzIGFuIGFyZ3VtZW50OgogICAgICAgICAgPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgICAgdm9pZCBvcmc6OmZyZWVkZXNrdG9wOjpEQnVzOjpTdGFydFNlcnZpY2VCeU5hbWUgKGNvbnN0IGNoYXIgICAqbmFtZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpyZXN1bHRjb2RlKTsKICAgICAgICAgIDwvcHJlPjxwPgogICAgICAgICAgSXQncyByZWFsbHkgdXAgdG8gdGhlIEFQSSBkZXNpZ25lciBob3cgdGhleSB3YW50IHRvIG1ha2UgCiAgICAgICAgICB0aGlzIGxvb2suIFlvdSBjb3VsZCBkZXNpZ24gYW4gQVBJIHdoZXJlIHRoZSBuYW1lc3BhY2Ugd2Fzbid0IHVzZWQgCiAgICAgICAgICBpbiBDKyssIHVzaW5nIFNUTCBvciBRdCwgdXNpbmcgdmFyYXJncywgb3Igd2hhdGV2ZXIgeW91IHdhbnRlZC4KICAgICAgICA8L3A+PHA+CiAgICAgICAgICBTaWduYWxzIGFyZSB3cml0dGVuIGFzIGZvbGxvd3M6CiAgICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogICAgICAgICAgICBvcmcuZnJlZWRlc2t0b3AuREJ1cy5OYW1lTG9zdCAoU1RSSU5HIG5hbWUpCiAgICAgICAgICA8L3ByZT48cD4KICAgICAgICAgIFNpZ25hbHMgZG9uJ3Qgc3BlY2lmeSAiaW4iIHZzLiAib3V0IiBiZWNhdXNlIG9ubHkgCiAgICAgICAgICBhIHNpbmdsZSBkaXJlY3Rpb24gaXMgcG9zc2libGUuCiAgICAgICAgPC9wPjxwPgogICAgICAgICAgSXQgaXNuJ3QgZXNwZWNpYWxseSBlbmNvdXJhZ2VkIHRvIHVzZSB0aGlzIGxhbWUgcHNldWRvLUlETCBpbiBhY3R1YWwKICAgICAgICAgIEFQSSBpbXBsZW1lbnRhdGlvbnM7IHlvdSBtaWdodCB1c2UgdGhlIG5hdGl2ZSBub3RhdGlvbiBmb3IgdGhlCiAgICAgICAgICBsYW5ndWFnZSB5b3UncmUgdXNpbmcsIG9yIHlvdSBtaWdodCB1c2UgQ09NIG9yIENPUkJBIElETCwgZm9yIGV4YW1wbGUuCiAgICAgICAgPC9wPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iSW52YWxpZCBQcm90b2NvbCBhbmQgU3BlYyBFeHRlbnNpb25zIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJtZXNzYWdlLXByb3RvY29sLWhhbmRsaW5nLWludmFsaWQiPjwvYT5JbnZhbGlkIFByb3RvY29sIGFuZCBTcGVjIEV4dGVuc2lvbnM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgIEZvciBzZWN1cml0eSByZWFzb25zLCB0aGUgRC1CdXMgcHJvdG9jb2wgc2hvdWxkIGJlIHN0cmljdGx5IHBhcnNlZCBhbmQKICAgICAgICB2YWxpZGF0ZWQsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBkZWZpbmVkIGV4dGVuc2lvbiBwb2ludHMuIEFueSBpbnZhbGlkCiAgICAgICAgcHJvdG9jb2wgb3Igc3BlYyB2aW9sYXRpb25zIHNob3VsZCByZXN1bHQgaW4gaW1tZWRpYXRlbHkgZHJvcHBpbmcgdGhlCiAgICAgICAgY29ubmVjdGlvbiB3aXRob3V0IG5vdGljZSB0byB0aGUgb3RoZXIgZW5kLiBFeGNlcHRpb25zIHNob3VsZCBiZQogICAgICAgIGNhcmVmdWxseSBjb25zaWRlcmVkLCBlLmcuIGFuIGV4Y2VwdGlvbiBtYXkgYmUgd2FycmFudGVkIGZvciBhCiAgICAgICAgd2VsbC11bmRlcnN0b29kIGlkaW9zeW5jcmFzeSBvZiBhIHdpZGVseS1kZXBsb3llZCBpbXBsZW1lbnRhdGlvbi4gIEluCiAgICAgICAgY2FzZXMgd2hlcmUgdGhlIG90aGVyIGVuZCBvZiBhIGNvbm5lY3Rpb24gaXMgMTAwJSB0cnVzdGVkIGFuZCBrbm93biB0bwogICAgICAgIGJlIGZyaWVuZGx5LCBza2lwcGluZyB2YWxpZGF0aW9uIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIGNvdWxkIGFsc28gbWFrZQogICAgICAgIHNlbnNlIGluIGNlcnRhaW4gY2FzZXMuCiAgICAgIDwvcD48cD4KICAgICAgICBHZW5lcmFsbHkgc3BlYWtpbmcgdmlvbGF0aW9ucyBvZiB0aGUgIm11c3QiIHJlcXVpcmVtZW50cyBpbiB0aGlzIHNwZWMgCiAgICAgICAgc2hvdWxkIGJlIGNvbnNpZGVyZWQgcG9zc2libGUgYXR0ZW1wdHMgdG8gZXhwbG9pdCBzZWN1cml0eSwgYW5kIHZpb2xhdGlvbnMgCiAgICAgICAgb2YgdGhlICJzaG91bGQiIHN1Z2dlc3Rpb25zIHNob3VsZCBiZSBjb25zaWRlcmVkIGxlZ2l0aW1hdGUgKHRob3VnaCBwZXJoYXBzCiAgICAgICAgdGhleSBzaG91bGQgZ2VuZXJhdGUgYW4gZXJyb3IgaW4gc29tZSBjYXNlcykuCiAgICAgIDwvcD48cD4KICAgICAgICBUaGUgZm9sbG93aW5nIGV4dGVuc2lvbiBwb2ludHMgYXJlIGJ1aWx0IGluIHRvIEQtQnVzIG9uIHB1cnBvc2UgYW5kIG11c3QKICAgICAgICBub3QgYmUgdHJlYXRlZCBhcyBpbnZhbGlkIHByb3RvY29sLiBUaGUgZXh0ZW5zaW9uIHBvaW50cyBhcmUgaW50ZW5kZWQKICAgICAgICBmb3IgdXNlIGJ5IGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGlzIHNwZWMsIHRoZXkgYXJlIG5vdCBpbnRlbmRlZCBmb3IgdGhpcmQKICAgICAgICBwYXJ0aWVzLiAgQXQgdGhlIG1vbWVudCwgdGhlIG9ubHkgd2F5IGEgdGhpcmQgcGFydHkgY291bGQgZXh0ZW5kIEQtQnVzCiAgICAgICAgd2l0aG91dCBicmVha2luZyBpbnRlcm9wZXJhYmlsaXR5IHdvdWxkIGJlIHRvIGludHJvZHVjZSBhIHdheSB0byBuZWdvdGlhdGUgbmV3CiAgICAgICAgZmVhdHVyZSBzdXBwb3J0IGFzIHBhcnQgb2YgdGhlIGF1dGggcHJvdG9jb2wsIHVzaW5nIEVYVEVOU0lPTl8tcHJlZml4ZWQKICAgICAgICBjb21tYW5kcy4gVGhlcmUgaXMgbm90IHlldCBhIHN0YW5kYXJkIHdheSB0byBuZWdvdGlhdGUgZmVhdHVyZXMuCiAgICAgICAgPC9wPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgIEluIHRoZSBhdXRoZW50aWNhdGlvbiBwcm90b2NvbCAoc2VlIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjYXV0aC1wcm90b2NvbCIgdGl0bGU9IkF1dGhlbnRpY2F0aW9uIFByb3RvY29sIj50aGUgc2VjdGlvbiBjYWxsZWQgJiM4MjIwO0F1dGhlbnRpY2F0aW9uIFByb3RvY29sJiM4MjIxOzwvYT4pIHVua25vd24gCiAgICAgICAgICAgICAgICBjb21tYW5kcyByZXN1bHQgaW4gYW4gRVJST1IgcmF0aGVyIHRoYW4gYSBkaXNjb25uZWN0LiBUaGlzIGVuYWJsZXMgCiAgICAgICAgICAgICAgICBmdXR1cmUgZXh0ZW5zaW9ucyB0byB0aGUgcHJvdG9jb2wuIENvbW1hbmRzIHN0YXJ0aW5nIHdpdGggRVhURU5TSU9OXyBhcmUgCiAgICAgICAgICAgICAgICByZXNlcnZlZCBmb3IgdGhpcmQgcGFydGllcy4KICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgVGhlIGF1dGhlbnRpY2F0aW9uIHByb3RvY29sIHN1cHBvcnRzIHBsdWdnYWJsZSBhdXRoIG1lY2hhbmlzbXMuCiAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgIFRoZSBhZGRyZXNzIGZvcm1hdCAoc2VlIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjYWRkcmVzc2VzIiB0aXRsZT0iU2VydmVyIEFkZHJlc3NlcyI+dGhlIHNlY3Rpb24gY2FsbGVkICYjODIyMDtTZXJ2ZXIgQWRkcmVzc2VzJiM4MjIxOzwvYT4pIHN1cHBvcnRzIG5ldwogICAgICAgICAgICAgIGtpbmRzIG9mIHRyYW5zcG9ydC4KICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgTWVzc2FnZXMgd2l0aCBhbiB1bmtub3duIHR5cGUgKHNvbWV0aGluZyBvdGhlciB0aGFuCiAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPk1FVEhPRF9DQUxMPC9jb2RlPiwgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPk1FVEhPRF9SRVRVUk48L2NvZGU+LAogICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5FUlJPUjwvY29kZT4sIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5TSUdOQUw8L2NvZGU+KSBhcmUgaWdub3JlZC4gCiAgICAgICAgICAgICAgVW5rbm93bi10eXBlIG1lc3NhZ2VzIG11c3Qgc3RpbGwgYmUgd2VsbC1mb3JtZWQgaW4gdGhlIHNhbWUgd2F5IAogICAgICAgICAgICAgIGFzIHRoZSBrbm93biBtZXNzYWdlcywgaG93ZXZlci4gVGhleSBzdGlsbCBoYXZlIHRoZSBub3JtYWwgCiAgICAgICAgICAgICAgaGVhZGVyIGFuZCBib2R5LgogICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICBIZWFkZXIgZmllbGRzIHdpdGggYW4gdW5rbm93biBvciB1bmV4cGVjdGVkIGZpZWxkIGNvZGUgbXVzdCBiZSBpZ25vcmVkLCAKICAgICAgICAgICAgICB0aG91Z2ggYWdhaW4gdGhleSBtdXN0IHN0aWxsIGJlIHdlbGwtZm9ybWVkLgogICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICBOZXcgc3RhbmRhcmQgaW50ZXJmYWNlcyAod2l0aCBuZXcgbWV0aG9kcyBhbmQgc2lnbmFscykgY2FuIG9mIGNvdXJzZSBiZSBhZGRlZC4KICAgICAgICAgICAgPC9wPjwvbGk+PC91bD48L2Rpdj48cD4KICAgICAgPC9wPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iQXV0aGVudGljYXRpb24gUHJvdG9jb2wiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iYXV0aC1wcm90b2NvbCI+PC9hPkF1dGhlbnRpY2F0aW9uIFByb3RvY29sPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgQmVmb3JlIHRoZSBmbG93IG9mIG1lc3NhZ2VzIGJlZ2lucywgdHdvIGFwcGxpY2F0aW9ucyBtdXN0CiAgICAgIGF1dGhlbnRpY2F0ZS4gQSBzaW1wbGUgcGxhaW4tdGV4dCBwcm90b2NvbCBpcyB1c2VkIGZvcgogICAgICBhdXRoZW50aWNhdGlvbjsgdGhpcyBwcm90b2NvbCBpcyBhIFNBU0wgcHJvZmlsZSwgYW5kIG1hcHMgZmFpcmx5CiAgICAgIGRpcmVjdGx5IGZyb20gdGhlIFNBU0wgc3BlY2lmaWNhdGlvbi4gVGhlIG1lc3NhZ2UgZW5jb2RpbmcgaXMKICAgICAgTk9UIHVzZWQgaGVyZSwgb25seSBwbGFpbiB0ZXh0IG1lc3NhZ2VzLgogICAgPC9wPjxwPgogICAgICBJbiBleGFtcGxlcywgIkM6IiBhbmQgIlM6IiBpbmRpY2F0ZSBsaW5lcyBzZW50IGJ5IHRoZSBjbGllbnQgYW5kCiAgICAgIHNlcnZlciByZXNwZWN0aXZlbHkuCiAgICA8L3A+PGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSJQcm90b2NvbCBPdmVydmlldyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iYXV0aC1wcm90b2NvbC1vdmVydmlldyI+PC9hPlByb3RvY29sIE92ZXJ2aWV3PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBUaGUgcHJvdG9jb2wgaXMgYSBsaW5lLWJhc2VkIHByb3RvY29sLCB3aGVyZSBlYWNoIGxpbmUgZW5kcyB3aXRoCiAgICAgICAgXHJcbi4gRWFjaCBsaW5lIGJlZ2lucyB3aXRoIGFuIGFsbC1jYXBzIEFTQ0lJIGNvbW1hbmQgbmFtZSBjb250YWluaW5nCiAgICAgICAgb25seSB0aGUgY2hhcmFjdGVyIHJhbmdlIFtBLVpfXSwgYSBzcGFjZSwgdGhlbiBhbnkgYXJndW1lbnRzIGZvciB0aGUKICAgICAgICBjb21tYW5kLCB0aGVuIHRoZSBcclxuIGVuZGluZyB0aGUgbGluZS4gVGhlIHByb3RvY29sIGlzCiAgICAgICAgY2FzZS1zZW5zaXRpdmUuIEFsbCBieXRlcyBtdXN0IGJlIGluIHRoZSBBU0NJSSBjaGFyYWN0ZXIgc2V0LgoKICAgICAgICBDb21tYW5kcyBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlciBhcmUgYXMgZm9sbG93czoKCiAgICAgICAgPC9wPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPkFVVEggW21lY2hhbmlzbV0gW2luaXRpYWwtcmVzcG9uc2VdPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Q0FOQ0VMPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+QkVHSU48L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5EQVRBICZsdDtkYXRhIGluIGhleCBlbmNvZGluZyZndDs8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5FUlJPUiBbaHVtYW4tcmVhZGFibGUgZXJyb3IgZXhwbGFuYXRpb25dPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+TkVHT1RJQVRFX1VOSVhfRkQ8L3A+PC9saT48L3VsPjwvZGl2PjxwPgoKICAgICAgICBGcm9tIHNlcnZlciB0byBjbGllbnQgYXJlIGFzIGZvbGxvd3M6CgogICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiB0eXBlPSJkaXNjIj48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5SRUpFQ1RFRCAmbHQ7c3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgbWVjaGFuaXNtIG5hbWVzJmd0OzwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPk9LICZsdDtHVUlEIGluIGhleCZndDs8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5EQVRBICZsdDtkYXRhIGluIGhleCBlbmNvZGluZyZndDs8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5FUlJPUjwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPkFHUkVFX1VOSVhfRkQ8L3A+PC9saT48L3VsPjwvZGl2PjxwPgogICAgICA8L3A+PHA+CiAgICAgICAgVW5vZmZpY2lhbCBleHRlbnNpb25zIHRvIHRoZSBjb21tYW5kIHNldCBtdXN0IGJlZ2luIHdpdGggdGhlIGxldHRlcnMgCiAgICAgICAgIkVYVEVOU0lPTl8iLCB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBmdXR1cmUgb2ZmaWNpYWwgY29tbWFuZHMuCiAgICAgICAgRm9yIGV4YW1wbGUsICJFWFRFTlNJT05fQ09NX01ZRE9NQUlOX0RPX1NUVUZGIi4KICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iU3BlY2lhbCBjcmVkZW50aWFscy1wYXNzaW5nIG51bCBieXRlIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJhdXRoLW51bC1ieXRlIj48L2E+U3BlY2lhbCBjcmVkZW50aWFscy1wYXNzaW5nIG51bCBieXRlPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBJbW1lZGlhdGVseSBhZnRlciBjb25uZWN0aW5nIHRvIHRoZSBzZXJ2ZXIsIHRoZSBjbGllbnQgbXVzdCBzZW5kIGEKICAgICAgICBzaW5nbGUgbnVsIGJ5dGUuIFRoaXMgYnl0ZSBtYXkgYmUgYWNjb21wYW5pZWQgYnkgY3JlZGVudGlhbHMKICAgICAgICBpbmZvcm1hdGlvbiBvbiBzb21lIG9wZXJhdGluZyBzeXN0ZW1zIHRoYXQgdXNlIHNlbmRtc2coKSB3aXRoCiAgICAgICAgU0NNX0NSRURTIG9yIFNDTV9DUkVERU5USUFMUyB0byBwYXNzIGNyZWRlbnRpYWxzIG92ZXIgVU5JWCBkb21haW4KICAgICAgICBzb2NrZXRzLiBIb3dldmVyLCB0aGUgbnVsIGJ5dGUgbXVzdCBiZSBzZW50IGV2ZW4gb24gb3RoZXIga2luZHMgb2YKICAgICAgICBzb2NrZXQsIGFuZCBldmVuIG9uIG9wZXJhdGluZyBzeXN0ZW1zIHRoYXQgZG8gbm90IHJlcXVpcmUgYSBieXRlIHRvIGJlCiAgICAgICAgc2VudCBpbiBvcmRlciB0byB0cmFuc21pdCBjcmVkZW50aWFscy4gVGhlIHRleHQgcHJvdG9jb2wgZGVzY3JpYmVkIGluCiAgICAgICAgdGhpcyBkb2N1bWVudCBiZWdpbnMgYWZ0ZXIgdGhlIHNpbmdsZSBudWwgYnl0ZS4gSWYgdGhlIGZpcnN0IGJ5dGUKICAgICAgICByZWNlaXZlZCBmcm9tIHRoZSBjbGllbnQgaXMgbm90IGEgbnVsIGJ5dGUsIHRoZSBzZXJ2ZXIgbWF5IGRpc2Nvbm5lY3QgCiAgICAgICAgdGhhdCBjbGllbnQuCiAgICAgIDwvcD48cD4KICAgICAgICBBIG51bCBieXRlIGluIGFueSBjb250ZXh0IG90aGVyIHRoYW4gdGhlIGluaXRpYWwgYnl0ZSBpcyBhbiBlcnJvcjsgCiAgICAgICAgdGhlIHByb3RvY29sIGlzIEFTQ0lJLW9ubHkuCiAgICAgIDwvcD48cD4KICAgICAgICBUaGUgY3JlZGVudGlhbHMgc2VudCBhbG9uZyB3aXRoIHRoZSBudWwgYnl0ZSBtYXkgYmUgdXNlZCB3aXRoIHRoZSAKICAgICAgICBTQVNMIG1lY2hhbmlzbSBFWFRFUk5BTC4KICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iQVVUSCBjb21tYW5kIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJhdXRoLWNvbW1hbmQtYXV0aCI+PC9hPkFVVEggY29tbWFuZDwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgSWYgYW4gQVVUSCBjb21tYW5kIGhhcyBubyBhcmd1bWVudHMsIGl0IGlzIGEgcmVxdWVzdCB0byBsaXN0CiAgICAgICAgYXZhaWxhYmxlIG1lY2hhbmlzbXMuIFRoZSBzZXJ2ZXIgbXVzdCByZXNwb25kIHdpdGggYSBSRUpFQ1RFRAogICAgICAgIGNvbW1hbmQgbGlzdGluZyB0aGUgbWVjaGFuaXNtcyBpdCB1bmRlcnN0YW5kcywgb3Igd2l0aCBhbiBlcnJvci4KICAgICAgPC9wPjxwPgogICAgICAgIElmIGFuIEFVVEggY29tbWFuZCBzcGVjaWZpZXMgYSBtZWNoYW5pc20sIGFuZCB0aGUgc2VydmVyIHN1cHBvcnRzCiAgICAgICAgc2FpZCBtZWNoYW5pc20sIHRoZSBzZXJ2ZXIgc2hvdWxkIGJlZ2luIGV4Y2hhbmdpbmcgU0FTTAogICAgICAgIGNoYWxsZW5nZS1yZXNwb25zZSBkYXRhIHdpdGggdGhlIGNsaWVudCB1c2luZyBEQVRBIGNvbW1hbmRzLgogICAgICA8L3A+PHA+CiAgICAgICAgSWYgdGhlIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBtZWNoYW5pc20gZ2l2ZW4gaW4gdGhlIEFVVEgKICAgICAgICBjb21tYW5kLCBpdCBtdXN0IHNlbmQgZWl0aGVyIGEgUkVKRUNURUQgY29tbWFuZCBsaXN0aW5nIHRoZSBtZWNoYW5pc21zCiAgICAgICAgaXQgZG9lcyBzdXBwb3J0LCBvciBhbiBlcnJvci4KICAgICAgPC9wPjxwPgogICAgICAgIElmIHRoZSBbaW5pdGlhbC1yZXNwb25zZV0gYXJndW1lbnQgaXMgcHJvdmlkZWQsIGl0IGlzIGludGVuZGVkIGZvciB1c2UKICAgICAgICB3aXRoIG1lY2hhbmlzbXMgdGhhdCBoYXZlIG5vIGluaXRpYWwgY2hhbGxlbmdlIChvciBhbiBlbXB0eSBpbml0aWFsCiAgICAgICAgY2hhbGxlbmdlKSwgYXMgaWYgaXQgd2VyZSB0aGUgYXJndW1lbnQgdG8gYW4gaW5pdGlhbCBEQVRBIGNvbW1hbmQuIElmCiAgICAgICAgdGhlIHNlbGVjdGVkIG1lY2hhbmlzbSBoYXMgYW4gaW5pdGlhbCBjaGFsbGVuZ2UgYW5kIFtpbml0aWFsLXJlc3BvbnNlXQogICAgICAgIHdhcyBwcm92aWRlZCwgdGhlIHNlcnZlciBzaG91bGQgcmVqZWN0IGF1dGhlbnRpY2F0aW9uIGJ5IHNlbmRpbmcKICAgICAgICBSRUpFQ1RFRC4KICAgICAgPC9wPjxwPgogICAgICAgIElmIGF1dGhlbnRpY2F0aW9uIHN1Y2NlZWRzIGFmdGVyIGV4Y2hhbmdpbmcgREFUQSBjb21tYW5kcywgCiAgICAgICAgYW4gT0sgY29tbWFuZCBtdXN0IGJlIHNlbnQgdG8gdGhlIGNsaWVudC4KICAgICAgPC9wPjxwPgogICAgICAgIFRoZSBmaXJzdCBvY3RldCByZWNlaXZlZCBieSB0aGUgc2VydmVyIGFmdGVyIHRoZSBcclxuIG9mIHRoZSBCRUdJTgogICAgICAgIGNvbW1hbmQgZnJvbSB0aGUgY2xpZW50IG11c3QgYmUgdGhlIGZpcnN0IG9jdGV0IG9mIHRoZQogICAgICAgIGF1dGhlbnRpY2F0ZWQvZW5jcnlwdGVkIHN0cmVhbSBvZiBELUJ1cyBtZXNzYWdlcy4KICAgICAgPC9wPjxwPgogICAgICAgIElmIEJFR0lOIGlzIHJlY2VpdmVkIGJ5IHRoZSBzZXJ2ZXIsIHRoZSBmaXJzdCBvY3RldCByZWNlaXZlZAogICAgICAgIGJ5IHRoZSBjbGllbnQgYWZ0ZXIgdGhlIFxyXG4gb2YgdGhlIE9LIGNvbW1hbmQgbXVzdCBiZSB0aGUKICAgICAgICBmaXJzdCBvY3RldCBvZiB0aGUgYXV0aGVudGljYXRlZC9lbmNyeXB0ZWQgc3RyZWFtIG9mIEQtQnVzCiAgICAgICAgbWVzc2FnZXMuCiAgICAgIDwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IkNBTkNFTCBDb21tYW5kIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJhdXRoLWNvbW1hbmQtY2FuY2VsIj48L2E+Q0FOQ0VMIENvbW1hbmQ8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgIEF0IGFueSB0aW1lIHVwIHRvIHNlbmRpbmcgdGhlIEJFR0lOIGNvbW1hbmQsIHRoZSBjbGllbnQgbWF5IHNlbmQgYQogICAgICAgIENBTkNFTCBjb21tYW5kLiBPbiByZWNlaXZpbmcgdGhlIENBTkNFTCBjb21tYW5kLCB0aGUgc2VydmVyIG11c3QKICAgICAgICBzZW5kIGEgUkVKRUNURUQgY29tbWFuZCBhbmQgYWJvcnQgdGhlIGN1cnJlbnQgYXV0aGVudGljYXRpb24KICAgICAgICBleGNoYW5nZS4KICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iREFUQSBDb21tYW5kIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJhdXRoLWNvbW1hbmQtZGF0YSI+PC9hPkRBVEEgQ29tbWFuZDwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgVGhlIERBVEEgY29tbWFuZCBtYXkgY29tZSBmcm9tIGVpdGhlciBjbGllbnQgb3Igc2VydmVyLCBhbmQgc2ltcGx5IAogICAgICAgIGNvbnRhaW5zIGEgaGV4LWVuY29kZWQgYmxvY2sgb2YgZGF0YSB0byBiZSBpbnRlcnByZXRlZCAKICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIFNBU0wgbWVjaGFuaXNtIGluIHVzZS4KICAgICAgPC9wPjxwPgogICAgICAgIFNvbWUgU0FTTCBtZWNoYW5pc21zIHN1cHBvcnQgc2VuZGluZyBhbiAiZW1wdHkgc3RyaW5nIjsgCiAgICAgICAgRklYTUUgd2UgbmVlZCBzb21lIHdheSB0byBkbyB0aGlzLgogICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSJCRUdJTiBDb21tYW5kIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJhdXRoLWNvbW1hbmQtYmVnaW4iPjwvYT5CRUdJTiBDb21tYW5kPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBUaGUgQkVHSU4gY29tbWFuZCBhY2tub3dsZWRnZXMgdGhhdCB0aGUgY2xpZW50IGhhcyByZWNlaXZlZCBhbiAKICAgICAgICBPSyBjb21tYW5kIGZyb20gdGhlIHNlcnZlciwgYW5kIHRoYXQgdGhlIHN0cmVhbSBvZiBtZXNzYWdlcwogICAgICAgIGlzIGFib3V0IHRvIGJlZ2luLiAKICAgICAgPC9wPjxwPgogICAgICAgIFRoZSBmaXJzdCBvY3RldCByZWNlaXZlZCBieSB0aGUgc2VydmVyIGFmdGVyIHRoZSBcclxuIG9mIHRoZSBCRUdJTgogICAgICAgIGNvbW1hbmQgZnJvbSB0aGUgY2xpZW50IG11c3QgYmUgdGhlIGZpcnN0IG9jdGV0IG9mIHRoZQogICAgICAgIGF1dGhlbnRpY2F0ZWQvZW5jcnlwdGVkIHN0cmVhbSBvZiBELUJ1cyBtZXNzYWdlcy4KICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iUkVKRUNURUQgQ29tbWFuZCI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iYXV0aC1jb21tYW5kLXJlamVjdGVkIj48L2E+UkVKRUNURUQgQ29tbWFuZDwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgVGhlIFJFSkVDVEVEIGNvbW1hbmQgaW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbnQgYXV0aGVudGljYXRpb24KICAgICAgICBleGNoYW5nZSBoYXMgZmFpbGVkLCBhbmQgZnVydGhlciBleGNoYW5nZSBvZiBEQVRBIGlzIGluYXBwcm9wcmlhdGUuCiAgICAgICAgVGhlIGNsaWVudCB3b3VsZCBub3JtYWxseSB0cnkgYW5vdGhlciBtZWNoYW5pc20sIG9yIHRyeSBwcm92aWRpbmcKICAgICAgICBkaWZmZXJlbnQgcmVzcG9uc2VzIHRvIGNoYWxsZW5nZXMuCiAgICAgIDwvcD48cD4KICAgICAgICBPcHRpb25hbGx5LCB0aGUgUkVKRUNURUQgY29tbWFuZCBoYXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZgogICAgICAgIGF2YWlsYWJsZSBhdXRoIG1lY2hhbmlzbXMgYXMgYXJndW1lbnRzLiBJZiBhIHNlcnZlciBldmVyIHByb3ZpZGVzCiAgICAgICAgYSBsaXN0IG9mIHN1cHBvcnRlZCBtZWNoYW5pc21zLCBpdCBtdXN0IHByb3ZpZGUgdGhlIHNhbWUgbGlzdCAKICAgICAgICBlYWNoIHRpbWUgaXQgc2VuZHMgYSBSRUpFQ1RFRCBtZXNzYWdlLiBDbGllbnRzIGFyZSBmcmVlIHRvIAogICAgICAgIGlnbm9yZSBhbGwgbGlzdHMgcmVjZWl2ZWQgYWZ0ZXIgdGhlIGZpcnN0LgogICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSJPSyBDb21tYW5kIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJhdXRoLWNvbW1hbmQtb2siPjwvYT5PSyBDb21tYW5kPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBUaGUgT0sgY29tbWFuZCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2xpZW50IGhhcyBiZWVuCiAgICAgICAgYXV0aGVudGljYXRlZC4gVGhlIGNsaWVudCBtYXkgbm93IHByb2NlZWQgd2l0aCBuZWdvdGlhdGluZwogICAgICAgIFVuaXggZmlsZSBkZXNjcmlwdG9yIHBhc3NpbmcuIFRvIGRvIHRoYXQgaXQgc2hhbGwgc2VuZAogICAgICAgIE5FR09USUFURV9VTklYX0ZEIHRvIHRoZSBzZXJ2ZXIuCiAgICAgIDwvcD48cD4KICAgICAgICBPdGhlcndpc2UsIHRoZSBjbGllbnQgbXVzdCByZXNwb25kIHRvIHRoZSBPSyBjb21tYW5kIGJ5CiAgICAgICAgc2VuZGluZyBhIEJFR0lOIGNvbW1hbmQsIGZvbGxvd2VkIGJ5IGl0cyBzdHJlYW0gb2YgbWVzc2FnZXMsCiAgICAgICAgb3IgYnkgZGlzY29ubmVjdGluZy4gIFRoZSBzZXJ2ZXIgbXVzdCBub3QgYWNjZXB0IGFkZGl0aW9uYWwKICAgICAgICBjb21tYW5kcyB1c2luZyB0aGlzIHByb3RvY29sIGFmdGVyIHRoZSBCRUdJTiBjb21tYW5kIGhhcyBiZWVuCiAgICAgICAgcmVjZWl2ZWQuIEZ1cnRoZXIgY29tbXVuaWNhdGlvbiB3aWxsIGJlIGEgc3RyZWFtIG9mIEQtQnVzCiAgICAgICAgbWVzc2FnZXMgKG9wdGlvbmFsbHkgZW5jcnlwdGVkLCBhcyBuZWdvdGlhdGVkKSByYXRoZXIgdGhhbgogICAgICAgIHRoaXMgcHJvdG9jb2wuCiAgICAgIDwvcD48cD4KICAgICAgICBJZiBhIGNsaWVudCBzZW5kcyBCRUdJTiB0aGUgZmlyc3Qgb2N0ZXQgcmVjZWl2ZWQgYnkgdGhlIGNsaWVudAogICAgICAgIGFmdGVyIHRoZSBcclxuIG9mIHRoZSBPSyBjb21tYW5kIG11c3QgYmUgdGhlIGZpcnN0IG9jdGV0IG9mCiAgICAgICAgdGhlIGF1dGhlbnRpY2F0ZWQvZW5jcnlwdGVkIHN0cmVhbSBvZiBELUJ1cyBtZXNzYWdlcy4KICAgICAgPC9wPjxwPgogICAgICAgIFRoZSBPSyBjb21tYW5kIGhhcyBvbmUgYXJndW1lbnQsIHdoaWNoIGlzIHRoZSBHVUlEIG9mIHRoZSBzZXJ2ZXIuCiAgICAgICAgU2VlIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjYWRkcmVzc2VzIiB0aXRsZT0iU2VydmVyIEFkZHJlc3NlcyI+dGhlIHNlY3Rpb24gY2FsbGVkICYjODIyMDtTZXJ2ZXIgQWRkcmVzc2VzJiM4MjIxOzwvYT4gZm9yIG1vcmUgb24gc2VydmVyIEdVSURzLgogICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSJFUlJPUiBDb21tYW5kIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJhdXRoLWNvbW1hbmQtZXJyb3IiPjwvYT5FUlJPUiBDb21tYW5kPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBUaGUgRVJST1IgY29tbWFuZCBpbmRpY2F0ZXMgdGhhdCBlaXRoZXIgc2VydmVyIG9yIGNsaWVudCBkaWQgbm90CiAgICAgICAga25vdyBhIGNvbW1hbmQsIGRvZXMgbm90IGFjY2VwdCB0aGUgZ2l2ZW4gY29tbWFuZCBpbiB0aGUgY3VycmVudAogICAgICAgIGNvbnRleHQsIG9yIGRpZCBub3QgdW5kZXJzdGFuZCB0aGUgYXJndW1lbnRzIHRvIHRoZSBjb21tYW5kLiBUaGlzCiAgICAgICAgYWxsb3dzIHRoZSBwcm90b2NvbCB0byBiZSBleHRlbmRlZDsgYSBjbGllbnQgb3Igc2VydmVyIGNhbiBzZW5kIGEKICAgICAgICBjb21tYW5kIHByZXNlbnQgb3IgcGVybWl0dGVkIG9ubHkgaW4gbmV3IHByb3RvY29sIHZlcnNpb25zLCBhbmQgaWYKICAgICAgICBhbiBFUlJPUiBpcyByZWNlaXZlZCBpbnN0ZWFkIG9mIGFuIGFwcHJvcHJpYXRlIHJlc3BvbnNlLCBmYWxsIGJhY2sKICAgICAgICB0byB1c2luZyBzb21lIG90aGVyIHRlY2huaXF1ZS4KICAgICAgPC9wPjxwPgogICAgICAgIElmIGFuIEVSUk9SIGlzIHNlbnQsIHRoZSBzZXJ2ZXIgb3IgY2xpZW50IHRoYXQgc2VudCB0aGUKICAgICAgICBlcnJvciBtdXN0IGNvbnRpbnVlIGFzIGlmIHRoZSBjb21tYW5kIGNhdXNpbmcgdGhlIEVSUk9SIGhhZCBuZXZlciBiZWVuCiAgICAgICAgcmVjZWl2ZWQuIEhvd2V2ZXIsIHRoZSB0aGUgc2VydmVyIG9yIGNsaWVudCByZWNlaXZpbmcgdGhlIGVycm9yIAogICAgICAgIHNob3VsZCB0cnkgc29tZXRoaW5nIG90aGVyIHRoYW4gd2hhdGV2ZXIgY2F1c2VkIHRoZSBlcnJvcjsgCiAgICAgICAgaWYgb25seSBjYW5jZWxpbmcvcmVqZWN0aW5nIHRoZSBhdXRoZW50aWNhdGlvbi4KICAgICAgPC9wPjxwPgogICAgICAgIElmIHRoZSBELUJ1cyBwcm90b2NvbCBjaGFuZ2VzIGluY29tcGF0aWJseSBhdCBzb21lIGZ1dHVyZSB0aW1lLAogICAgICAgIGFwcGxpY2F0aW9ucyBpbXBsZW1lbnRpbmcgdGhlIG5ldyBwcm90b2NvbCB3b3VsZCBwcm9iYWJseSBiZSBhYmxlIHRvCiAgICAgICAgY2hlY2sgZm9yIHN1cHBvcnQgb2YgdGhlIG5ldyBwcm90b2NvbCBieSBzZW5kaW5nIGEgbmV3IGNvbW1hbmQgYW5kCiAgICAgICAgcmVjZWl2aW5nIGFuIEVSUk9SIGZyb20gYXBwbGljYXRpb25zIHRoYXQgZG9uJ3QgdW5kZXJzdGFuZCBpdC4gVGh1cyB0aGUKICAgICAgICBFUlJPUiBmZWF0dXJlIG9mIHRoZSBhdXRoIHByb3RvY29sIGlzIGFuIGVzY2FwZSBoYXRjaCB0aGF0IGxldHMgdXMKICAgICAgICBuZWdvdGlhdGUgZXh0ZW5zaW9ucyBvciBjaGFuZ2VzIHRvIHRoZSBELUJ1cyBwcm90b2NvbCBpbiB0aGUgZnV0dXJlLgogICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSJORUdPVElBVEVfVU5JWF9GRCBDb21tYW5kIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJhdXRoLWNvbW1hbmQtbmVnb3RpYXRlLXVuaXgtZmQiPjwvYT5ORUdPVElBVEVfVU5JWF9GRCBDb21tYW5kPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBUaGUgTkVHT1RJQVRFX1VOSVhfRkQgY29tbWFuZCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2xpZW50CiAgICAgICAgc3VwcG9ydHMgVW5peCBmaWxlIGRlc2NyaXB0b3IgcGFzc2luZy4gVGhpcyBjb21tYW5kIG1heSBvbmx5CiAgICAgICAgYmUgc2VudCBhZnRlciB0aGUgY29ubmVjdGlvbiBpcyBhdXRoZW50aWNhdGVkLCBpLmUuIGFmdGVyIE9LCiAgICAgICAgd2FzIHJlY2VpdmVkIGJ5IHRoZSBjbGllbnQuIFRoaXMgY29tbWFuZCBtYXkgb25seSBiZSBzZW50IG9uCiAgICAgICAgdHJhbnNwb3J0cyB0aGF0IHN1cHBvcnQgVW5peCBmaWxlIGRlc2NyaXB0b3IgcGFzc2luZy4KICAgICAgPC9wPjxwPgogICAgICAgIE9uIHJlY2VpdmluZyBORUdPVElBVEVfVU5JWF9GRCB0aGUgc2VydmVyIG11c3QgcmVzcG9uZCB3aXRoCiAgICAgICAgZWl0aGVyIEFHUkVFX1VOSVhfRkQgb3IgRVJST1IuIEl0IHNoYWxsIHJlc3BvbmQgdGhlIGZvcm1lciBpZgogICAgICAgIHRoZSB0cmFuc3BvcnQgY2hvc2VuIHN1cHBvcnRzIFVuaXggZmlsZSBkZXNjcmlwdG9yIHBhc3NpbmcgYW5kCiAgICAgICAgdGhlIHNlcnZlciBzdXBwb3J0cyB0aGlzIGZlYXR1cmUuIEl0IHNoYWxsIHJlc3BvbmQgdGhlIGxhdHRlcgogICAgICAgIGlmIHRoZSB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCBVbml4IGZpbGUgZGVzY3JpcHRvcgogICAgICAgIHBhc3NpbmcsIHRoZSBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUsIG9yIHRoZQogICAgICAgIHNlcnZlciBkZWNpZGVzIG5vdCB0byBlbmFibGUgZmlsZSBkZXNjcmlwdG9yIHBhc3NpbmcgZHVlIHRvCiAgICAgICAgc2VjdXJpdHkgb3Igb3RoZXIgcmVhc29ucy4KICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iQUdSRUVfVU5JWF9GRCBDb21tYW5kIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJhdXRoLWNvbW1hbmQtYWdyZWUtdW5peC1mZCI+PC9hPkFHUkVFX1VOSVhfRkQgQ29tbWFuZDwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgVGhlIEFHUkVFX1VOSVhfRkQgY29tbWFuZCBpbmRpY2F0ZXMgdGhhdCB0aGUgc2VydmVyIHN1cHBvcnRzCiAgICAgICAgVW5peCBmaWxlIGRlc2NyaXB0b3IgcGFzc2luZy4gVGhpcyBjb21tYW5kIG1heSBvbmx5IGJlIHNlbnQKICAgICAgICBhZnRlciB0aGUgY29ubmVjdGlvbiBpcyBhdXRoZW50aWNhdGVkLCBhbmQgdGhlIGNsaWVudCBzZW50CiAgICAgICAgTkVHT1RJQVRFX1VOSVhfRkQgdG8gZW5hYmxlIFVuaXggZmlsZSBkZXNjcmlwdG9yIHBhc3NpbmcuIFRoaXMKICAgICAgICBjb21tYW5kIG1heSBvbmx5IGJlIHNlbnQgb24gdHJhbnNwb3J0cyB0aGF0IHN1cHBvcnQgVW5peCBmaWxlCiAgICAgICAgZGVzY3JpcHRvciBwYXNzaW5nLgogICAgICA8L3A+PHA+CiAgICAgICAgT24gcmVjZWl2aW5nIEFHUkVFX1VOSVhfRkQgdGhlIGNsaWVudCBtdXN0IHJlc3BvbmQgd2l0aCBCRUdJTiwKICAgICAgICBmb2xsb3dlZCBieSBpdHMgc3RyZWFtIG9mIG1lc3NhZ2VzLCBvciBieSBkaXNjb25uZWN0aW5nLiAgVGhlCiAgICAgICAgc2VydmVyIG11c3Qgbm90IGFjY2VwdCBhZGRpdGlvbmFsIGNvbW1hbmRzIHVzaW5nIHRoaXMgcHJvdG9jb2wKICAgICAgICBhZnRlciB0aGUgQkVHSU4gY29tbWFuZCBoYXMgYmVlbiByZWNlaXZlZC4gRnVydGhlcgogICAgICAgIGNvbW11bmljYXRpb24gd2lsbCBiZSBhIHN0cmVhbSBvZiBELUJ1cyBtZXNzYWdlcyAob3B0aW9uYWxseQogICAgICAgIGVuY3J5cHRlZCwgYXMgbmVnb3RpYXRlZCkgcmF0aGVyIHRoYW4gdGhpcyBwcm90b2NvbC4KICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iRnV0dXJlIEV4dGVuc2lvbnMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImF1dGgtY29tbWFuZC1mdXR1cmUiPjwvYT5GdXR1cmUgRXh0ZW5zaW9uczwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgRnV0dXJlIGV4dGVuc2lvbnMgdG8gdGhlIGF1dGhlbnRpY2F0aW9uIGFuZCBuZWdvdGlhdGlvbgogICAgICAgIHByb3RvY29sIGFyZSBwb3NzaWJsZS4gRm9yIHRoYXQgbmV3IGNvbW1hbmRzIG1heSBiZQogICAgICAgIGludHJvZHVjZWQuIElmIGEgY2xpZW50IG9yIHNlcnZlciByZWNlaXZlcyBhbiB1bmtub3duIGNvbW1hbmQKICAgICAgICBpdCBzaGFsbCByZXNwb25kIHdpdGggRVJST1IgYW5kIG5vdCBjb25zaWRlciB0aGlzIGZhdGFsLiBOZXcKICAgICAgICBjb21tYW5kcyBtYXkgYmUgaW50cm9kdWNlZCBib3RoIGJlZm9yZSwgYW5kIGFmdGVyCiAgICAgICAgYXV0aGVudGljYXRpb24sIGkuZS4gYm90aCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBPSyBjb21tYW5kLgogICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSJBdXRoZW50aWNhdGlvbiBleGFtcGxlcyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iYXV0aC1leGFtcGxlcyI+PC9hPkF1dGhlbnRpY2F0aW9uIGV4YW1wbGVzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICA8L3A+PGRpdiBjbGFzcz0iZmlndXJlIj48YSBuYW1lPSJpZHA1MTYxMzQ0Ij48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5GaWd1cmWgMS6gRXhhbXBsZSBvZiBzdWNjZXNzZnVsIG1hZ2ljIGNvb2tpZSBhdXRoZW50aWNhdGlvbjwvYj48L3A+PGRpdiBjbGFzcz0iZmlndXJlLWNvbnRlbnRzIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CiAgICAgICAgICAgIChNQUdJQ19DT09LSUUgaXMgYSBtYWRlIHVwIG1lY2hhbmlzbSkKCiAgICAgICAgICAgIEM6IEFVVEggTUFHSUNfQ09PS0lFIDMxMzgzNjM5MzUzMzMxMzczOTM2MzUzODM2MzQKICAgICAgICAgICAgUzogT0sgMTIzNGRlYWRiZWVmCiAgICAgICAgICAgIEM6IEJFR0lOCiAgICAgICAgICA8L3ByZT48L2Rpdj48L2Rpdj48cD48YnIgY2xhc3M9ImZpZ3VyZS1icmVhayI+CiAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgbmFtZT0iaWRwNTE2MzE2OCI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RmlndXJloDIuoEV4YW1wbGUgb2YgZmluZGluZyBvdXQgbWVjaGFuaXNtcyB0aGVuIHBpY2tpbmcgb25lPC9iPjwvcD48ZGl2IGNsYXNzPSJmaWd1cmUtY29udGVudHMiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgICAgQzogQVVUSAogICAgICAgICAgICBTOiBSRUpFQ1RFRCBLRVJCRVJPU19WNCBTS0VZCiAgICAgICAgICAgIEM6IEFVVEggU0tFWSA3YWI4M2YzMmVlCiAgICAgICAgICAgIFM6IERBVEEgODc5OWNhYmIyZWE5M2UKICAgICAgICAgICAgQzogREFUQSA4YWM4NzZlOGY2OGVlOTgwOWJmYTg3NmU2Zjk4NzZnOGZhOGU3NmU5OGYKICAgICAgICAgICAgUzogT0sgMTIzNGRlYWRiZWVmCiAgICAgICAgICAgIEM6IEJFR0lOCiAgICAgICAgICA8L3ByZT48L2Rpdj48L2Rpdj48cD48YnIgY2xhc3M9ImZpZ3VyZS1icmVhayI+CiAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgbmFtZT0iaWRwNTE2NTA3MiI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RmlndXJloDMuoEV4YW1wbGUgb2YgY2xpZW50IHNlbmRzIHVua25vd24gY29tbWFuZCB0aGVuIGZhbGxzIGJhY2sgdG8gcmVndWxhciBhdXRoPC9iPjwvcD48ZGl2IGNsYXNzPSJmaWd1cmUtY29udGVudHMiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgICAgQzogRk9PQkFSCiAgICAgICAgICAgIFM6IEVSUk9SCiAgICAgICAgICAgIEM6IEFVVEggTUFHSUNfQ09PS0lFIDM3MzYzNDM0MzUzMTMyMzAzMzMwMzkKICAgICAgICAgICAgUzogT0sgMTIzNGRlYWRiZWVmCiAgICAgICAgICAgIEM6IEJFR0lOCiAgICAgICAgICA8L3ByZT48L2Rpdj48L2Rpdj48cD48YnIgY2xhc3M9ImZpZ3VyZS1icmVhayI+CiAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgbmFtZT0iaWRwNTE2Njk2MCI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RmlndXJloDQuoEV4YW1wbGUgb2Ygc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBpbml0aWFsIGF1dGggbWVjaGFuaXNtPC9iPjwvcD48ZGl2IGNsYXNzPSJmaWd1cmUtY29udGVudHMiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgICAgQzogQVVUSCBNQUdJQ19DT09LSUUgMzczNjM0MzQzNTMxMzIzMDMzMzAzOQogICAgICAgICAgICBTOiBSRUpFQ1RFRCBLRVJCRVJPU19WNCBTS0VZCiAgICAgICAgICAgIEM6IEFVVEggU0tFWSA3YWI4M2YzMmVlCiAgICAgICAgICAgIFM6IERBVEEgODc5OWNhYmIyZWE5M2UKICAgICAgICAgICAgQzogREFUQSA4YWM4NzZlOGY2OGVlOTgwOWJmYTg3NmU2Zjk4NzZnOGZhOGU3NmU5OGYKICAgICAgICAgICAgUzogT0sgMTIzNGRlYWRiZWVmCiAgICAgICAgICAgIEM6IEJFR0lOCiAgICAgICAgICA8L3ByZT48L2Rpdj48L2Rpdj48cD48YnIgY2xhc3M9ImZpZ3VyZS1icmVhayI+CiAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgbmFtZT0iaWRwNTE2ODk3NiI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RmlndXJloDUuoEV4YW1wbGUgb2Ygd3JvbmcgcGFzc3dvcmQgb3IgdGhlIGxpa2UgZm9sbG93ZWQgYnkgc3VjY2Vzc2Z1bCByZXRyeTwvYj48L3A+PGRpdiBjbGFzcz0iZmlndXJlLWNvbnRlbnRzIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CiAgICAgICAgICAgIEM6IEFVVEggTUFHSUNfQ09PS0lFIDM3MzYzNDM0MzUzMTMyMzAzMzMwMzkKICAgICAgICAgICAgUzogUkVKRUNURUQgS0VSQkVST1NfVjQgU0tFWQogICAgICAgICAgICBDOiBBVVRIIFNLRVkgN2FiODNmMzJlZQogICAgICAgICAgICBTOiBEQVRBIDg3OTljYWJiMmVhOTNlCiAgICAgICAgICAgIEM6IERBVEEgOGFjODc2ZThmNjhlZTk4MDliZmE4NzZlNmY5ODc2ZzhmYThlNzZlOThmCiAgICAgICAgICAgIFM6IFJFSkVDVEVECiAgICAgICAgICAgIEM6IEFVVEggU0tFWSA3YWI4M2YzMmVlCiAgICAgICAgICAgIFM6IERBVEEgODc5OWNhYmIyZWE5M2UKICAgICAgICAgICAgQzogREFUQSA4YWM4NzZlOGY2OGVlOTgwOWJmYTg3NmU2Zjk4NzZnOGZhOGU3NmU5OGYKICAgICAgICAgICAgUzogT0sgMTIzNGRlYWRiZWVmCiAgICAgICAgICAgIEM6IEJFR0lOCiAgICAgICAgICA8L3ByZT48L2Rpdj48L2Rpdj48cD48YnIgY2xhc3M9ImZpZ3VyZS1icmVhayI+CiAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgbmFtZT0iaWRwNTE3MTE1MiI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RmlndXJloDYuoEV4YW1wbGUgb2Ygc2tleSBjYW5jZWxsZWQgYW5kIHJlc3RhcnRlZDwvYj48L3A+PGRpdiBjbGFzcz0iZmlndXJlLWNvbnRlbnRzIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CiAgICAgICAgICAgIEM6IEFVVEggTUFHSUNfQ09PS0lFIDM3MzYzNDM0MzUzMTMyMzAzMzMwMzkKICAgICAgICAgICAgUzogUkVKRUNURUQgS0VSQkVST1NfVjQgU0tFWQogICAgICAgICAgICBDOiBBVVRIIFNLRVkgN2FiODNmMzJlZQogICAgICAgICAgICBTOiBEQVRBIDg3OTljYWJiMmVhOTNlCiAgICAgICAgICAgIEM6IENBTkNFTAogICAgICAgICAgICBTOiBSRUpFQ1RFRAogICAgICAgICAgICBDOiBBVVRIIFNLRVkgN2FiODNmMzJlZQogICAgICAgICAgICBTOiBEQVRBIDg3OTljYWJiMmVhOTNlCiAgICAgICAgICAgIEM6IERBVEEgOGFjODc2ZThmNjhlZTk4MDliZmE4NzZlNmY5ODc2ZzhmYThlNzZlOThmCiAgICAgICAgICAgIFM6IE9LIDEyMzRkZWFkYmVlZgogICAgICAgICAgICBDOiBCRUdJTgogICAgICAgICAgPC9wcmU+PC9kaXY+PC9kaXY+PHA+PGJyIGNsYXNzPSJmaWd1cmUtYnJlYWsiPgogICAgICAgIDwvcD48ZGl2IGNsYXNzPSJmaWd1cmUiPjxhIG5hbWU9ImlkcDUxNzMyMTYiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkZpZ3VyZaA3LqBFeGFtcGxlIG9mIHN1Y2Nlc3NmdWwgbWFnaWMgY29va2llIGF1dGhlbnRpY2F0aW9uIHdpdGggc3VjY2Vzc2Z1bCBuZWdvdGlhdGlvbiBvZiBVbml4IEZEIHBhc3Npbmc8L2I+PC9wPjxkaXYgY2xhc3M9ImZpZ3VyZS1jb250ZW50cyI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogICAgICAgICAgICAoTUFHSUNfQ09PS0lFIGlzIGEgbWFkZSB1cCBtZWNoYW5pc20pCgogICAgICAgICAgICBDOiBBVVRIIE1BR0lDX0NPT0tJRSAzMTM4MzYzOTM1MzMzMTM3MzkzNjM1MzgzNjM0CiAgICAgICAgICAgIFM6IE9LIDEyMzRkZWFkYmVlZgogICAgICAgICAgICBDOiBORUdPVElBVEVfVU5JWF9GRAogICAgICAgICAgICBTOiBBR1JFRV9VTklYX0ZECiAgICAgICAgICAgIEM6IEJFR0lOCiAgICAgICAgICA8L3ByZT48L2Rpdj48L2Rpdj48cD48YnIgY2xhc3M9ImZpZ3VyZS1icmVhayI+CiAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgbmFtZT0iaWRwNTE3NTIxNiI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RmlndXJloDguoEV4YW1wbGUgb2Ygc3VjY2Vzc2Z1bCBtYWdpYyBjb29raWUgYXV0aGVudGljYXRpb24gd2l0aCB1bnN1Y2Nlc3NmdWwgbmVnb3RpYXRpb24gb2YgVW5peCBGRCBwYXNzaW5nPC9iPjwvcD48ZGl2IGNsYXNzPSJmaWd1cmUtY29udGVudHMiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgICAgKE1BR0lDX0NPT0tJRSBpcyBhIG1hZGUgdXAgbWVjaGFuaXNtKQoKICAgICAgICAgICAgQzogQVVUSCBNQUdJQ19DT09LSUUgMzEzODM2MzkzNTMzMzEzNzM5MzYzNTM4MzYzNAogICAgICAgICAgICBTOiBPSyAxMjM0ZGVhZGJlZWYKICAgICAgICAgICAgQzogTkVHT1RJQVRFX1VOSVhfRkQKICAgICAgICAgICAgUzogRVJST1IKICAgICAgICAgICAgQzogQkVHSU4KICAgICAgICAgIDwvcHJlPjwvZGl2PjwvZGl2PjxwPjxiciBjbGFzcz0iZmlndXJlLWJyZWFrIj4KICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iQXV0aGVudGljYXRpb24gc3RhdGUgZGlhZ3JhbXMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImF1dGgtc3RhdGVzIj48L2E+QXV0aGVudGljYXRpb24gc3RhdGUgZGlhZ3JhbXM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgIFRoaXMgc2VjdGlvbiBkb2N1bWVudHMgdGhlIGF1dGggcHJvdG9jb2wgaW4gdGVybXMgb2YgCiAgICAgICAgYSBzdGF0ZSBtYWNoaW5lIGZvciB0aGUgY2xpZW50IGFuZCB0aGUgc2VydmVyLiBUaGlzIGlzIAogICAgICAgIHByb2JhYmx5IHRoZSBtb3N0IHJvYnVzdCB3YXkgdG8gaW1wbGVtZW50IHRoZSBwcm90b2NvbC4KICAgICAgPC9wPjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iQ2xpZW50IHN0YXRlcyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iYXV0aC1zdGF0ZXMtY2xpZW50Ij48L2E+Q2xpZW50IHN0YXRlczwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgICBUbyBtb3JlIHByZWNpc2VseSBkZXNjcmliZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUKICAgICAgICAgIHByb3RvY29sIHN0YXRlIG1hY2hpbmUgYW5kIHRoZSBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zIHRoZQogICAgICAgICAgZm9sbG93aW5nIG5vdGF0aW9uIGlzIHVzZWQ6IE1FQ0goQ0hBTEwpIG1lYW5zIHRoYXQgdGhlCiAgICAgICAgICBzZXJ2ZXIgY2hhbGxlbmdlIENIQUxMIHdhcyBmZWQgdG8gdGhlIG1lY2hhbmlzbSBNRUNILCB3aGljaAogICAgICAgICAgcmV0dXJucyBvbmUgb2YKCiAgICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgICBDT05USU5VRShSRVNQKSBtZWFucyBjb250aW51ZSB0aGUgYXV0aCBjb252ZXJzYXRpb24KICAgICAgICAgICAgICAgIGFuZCBzZW5kIFJFU1AgYXMgdGhlIHJlc3BvbnNlIHRvIHRoZSBzZXJ2ZXI7CiAgICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgICBPSyhSRVNQKSBtZWFucyB0aGF0IGFmdGVyIHNlbmRpbmcgUkVTUCB0byB0aGUgc2VydmVyCiAgICAgICAgICAgICAgICB0aGUgY2xpZW50IHNpZGUgb2YgdGhlIGF1dGggY29udmVyc2F0aW9uIGlzIGZpbmlzaGVkCiAgICAgICAgICAgICAgICBhbmQgdGhlIHNlcnZlciBzaG91bGQgcmV0dXJuICJPSyI7CiAgICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgICBFUlJPUiBtZWFucyB0aGF0IENIQUxMIHdhcyBpbnZhbGlkIGFuZCBjb3VsZCBub3QgYmUKICAgICAgICAgICAgICAgIHByb2Nlc3NlZC4KICAgICAgICAgICAgICA8L3A+PC9saT48L3VsPjwvZGl2PjxwPgogICAgICAgICAgCiAgICAgICAgICBCb3RoIFJFU1AgYW5kIENIQUxMIG1heSBiZSBlbXB0eS4KICAgICAgICA8L3A+PHA+CiAgICAgICAgICBUaGUgQ2xpZW50IHN0YXJ0cyBieSBnZXR0aW5nIGFuIGluaXRpYWwgcmVzcG9uc2UgZnJvbSB0aGUKICAgICAgICAgIGRlZmF1bHQgbWVjaGFuaXNtIGFuZCBzZW5kcyBBVVRIIE1FQ0ggUkVTUCwgb3IgQVVUSCBNRUNIIGlmCiAgICAgICAgICB0aGUgbWVjaGFuaXNtIGRpZCBub3QgcHJvdmlkZSBhbiBpbml0aWFsIHJlc3BvbnNlLiAgSWYgdGhlCiAgICAgICAgICBtZWNoYW5pc20gcmV0dXJucyBDT05USU5VRSwgdGhlIGNsaWVudCBzdGFydHMgaW4gc3RhdGUKICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPldhaXRpbmdGb3JEYXRhPC9lbT48L3NwYW4+LCBpZiB0aGUgbWVjaGFuaXNtCiAgICAgICAgICByZXR1cm5zIE9LIHRoZSBjbGllbnQgc3RhcnRzIGluIHN0YXRlCiAgICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5XYWl0aW5nRm9yT0s8L2VtPjwvc3Bhbj4uCiAgICAgICAgPC9wPjxwPgogICAgICAgICAgVGhlIGNsaWVudCBzaG91bGQga2VlcCB0cmFjayBvZiBhdmFpbGFibGUgbWVjaGFuaXNtcyBhbmQKICAgICAgICAgIHdoaWNoIGl0IG1lY2hhbmlzbXMgaXQgaGFzIGFscmVhZHkgYXR0ZW1wdGVkLiBUaGlzIGxpc3QgaXMKICAgICAgICAgIHVzZWQgdG8gZGVjaWRlIHdoaWNoIEFVVEggY29tbWFuZCB0byBzZW5kLiBXaGVuIHRoZSBsaXN0IGlzCiAgICAgICAgICBleGhhdXN0ZWQsIHRoZSBjbGllbnQgc2hvdWxkIGdpdmUgdXAgYW5kIGNsb3NlIHRoZQogICAgICAgICAgY29ubmVjdGlvbi4KICAgICAgICA8L3A+PHAgdGl0bGU9IldhaXRpbmdGb3JEYXRhIj48Yj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5XYWl0aW5nRm9yRGF0YTwvZW0+PC9zcGFuPi6gPC9iPgogICAgICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgICAgIFJlY2VpdmUgREFUQSBDSEFMTAogICAgICAgICAgICAgICAgICA8L3A+PHRhYmxlIGJvcmRlcj0iMCIgc3VtbWFyeT0iU2ltcGxlIGxpc3QiIGNsYXNzPSJzaW1wbGVsaXN0Ij48dHI+PHRkPgogICAgICAgICAgICAgICAgICAgICAgTUVDSChDSEFMTCkgcmV0dXJucyBDT05USU5VRShSRVNQKSAmIzg1OTQ7IHNlbmQKICAgICAgICAgICAgICAgICAgICAgIERBVEEgUkVTUCwgZ290bwogICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+V2FpdGluZ0ZvckRhdGE8L2VtPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyPjx0ZD4KICAgICAgICAgICAgICAgICAgICAgIE1FQ0goQ0hBTEwpIHJldHVybnMgT0soUkVTUCkgJiM4NTk0OyBzZW5kIERBVEEKICAgICAgICAgICAgICAgICAgICAgIFJFU1AsIGdvdG8gPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+V2FpdGluZ0Zvck9LPC9lbT48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0cj48dGQ+CiAgICAgICAgICAgICAgICAgICAgICBNRUNIKENIQUxMKSByZXR1cm5zIEVSUk9SICYjODU5NDsgc2VuZCBFUlJPUgogICAgICAgICAgICAgICAgICAgICAgW21zZ10sIGdvdG8gPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+V2FpdGluZ0ZvckRhdGE8L2VtPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48cD4KICAgICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgICBSZWNlaXZlIFJFSkVDVEVEIFttZWNoc10gJiM4NTk0OwogICAgICAgICAgICAgICAgICBzZW5kIEFVVEggW25leHQgbWVjaF0sIGdvdG8KICAgICAgICAgICAgICAgICAgV2FpdGluZ0ZvckRhdGEgb3IgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+V2FpdGluZ0Zvck9LPC9lbT48L3NwYW4+CiAgICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICAgICAgUmVjZWl2ZSBFUlJPUiAmIzg1OTQ7IHNlbmQKICAgICAgICAgICAgICAgICAgQ0FOQ0VMLCBnb3RvCiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPldhaXRpbmdGb3JSZWplY3Q8L2VtPjwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgICBSZWNlaXZlIE9LICYjODU5NDsgc2VuZAogICAgICAgICAgICAgICAgICBCRUdJTiwgdGVybWluYXRlIGF1dGgKICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uLCBhdXRoZW50aWNhdGVkCiAgICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICAgICAgUmVjZWl2ZSBhbnl0aGluZyBlbHNlICYjODU5NDsgc2VuZAogICAgICAgICAgICAgICAgICBFUlJPUiwgZ290bwogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5XYWl0aW5nRm9yRGF0YTwvZW0+PC9zcGFuPgogICAgICAgICAgICAgICAgPC9wPjwvbGk+PC91bD48L2Rpdj48cCB0aXRsZT0iV2FpdGluZ0ZvckRhdGEiPgogICAgICAgICAgPC9wPjxwIHRpdGxlPSJXYWl0aW5nRm9yT0siPjxiPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPldhaXRpbmdGb3JPSzwvZW0+PC9zcGFuPi6gPC9iPgogICAgICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgICAgIFJlY2VpdmUgT0sgJiM4NTk0OyBzZW5kIEJFR0lOLCB0ZXJtaW5hdGUgYXV0aAogICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb24sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmF1dGhlbnRpY2F0ZWQ8L2VtPjwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgICBSZWNlaXZlIFJFSkVDVCBbbWVjaHNdICYjODU5NDsgc2VuZCBBVVRIIFtuZXh0IG1lY2hdLAogICAgICAgICAgICAgICAgICBnb3RvIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPldhaXRpbmdGb3JEYXRhPC9lbT48L3NwYW4+IG9yCiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPldhaXRpbmdGb3JPSzwvZW0+PC9zcGFuPgogICAgICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgICAgIFJlY2VpdmUgREFUQSAmIzg1OTQ7IHNlbmQgQ0FOQ0VMLCBnb3RvCiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPldhaXRpbmdGb3JSZWplY3Q8L2VtPjwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgICBSZWNlaXZlIEVSUk9SICYjODU5NDsgc2VuZCBDQU5DRUwsIGdvdG8KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+V2FpdGluZ0ZvclJlamVjdDwvZW0+PC9zcGFuPgogICAgICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgICAgIFJlY2VpdmUgYW55dGhpbmcgZWxzZSAmIzg1OTQ7IHNlbmQgRVJST1IsIGdvdG8KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+V2FpdGluZ0Zvck9LPC9lbT48L3NwYW4+CiAgICAgICAgICAgICAgICA8L3A+PC9saT48L3VsPjwvZGl2PjxwIHRpdGxlPSJXYWl0aW5nRm9yT0siPgogICAgICAgICAgPC9wPjxwIHRpdGxlPSJXYWl0aW5nRm9yUmVqZWN0Ij48Yj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5XYWl0aW5nRm9yUmVqZWN0PC9lbT48L3NwYW4+LqA8L2I+CiAgICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiB0eXBlPSJkaXNjIj48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICAgICAgUmVjZWl2ZSBSRUpFQ1QgW21lY2hzXSAmIzg1OTQ7IHNlbmQgQVVUSCBbbmV4dCBtZWNoXSwKICAgICAgICAgICAgICAgICAgZ290byA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5XYWl0aW5nRm9yRGF0YTwvZW0+PC9zcGFuPiBvcgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5XYWl0aW5nRm9yT0s8L2VtPjwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgICBSZWNlaXZlIGFueXRoaW5nIGVsc2UgJiM4NTk0OyB0ZXJtaW5hdGUgYXV0aAogICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb24sIGRpc2Nvbm5lY3QKICAgICAgICAgICAgICAgIDwvcD48L2xpPjwvdWw+PC9kaXY+PHAgdGl0bGU9IldhaXRpbmdGb3JSZWplY3QiPgogICAgICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iU2VydmVyIHN0YXRlcyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iYXV0aC1zdGF0ZXMtc2VydmVyIj48L2E+U2VydmVyIHN0YXRlczwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgICBGb3IgdGhlIHNlcnZlciBNRUNIKFJFU1ApIG1lYW5zIHRoYXQgdGhlIGNsaWVudCByZXNwb25zZQogICAgICAgICAgUkVTUCB3YXMgZmVkIHRvIHRoZSB0aGUgbWVjaGFuaXNtIE1FQ0gsIHdoaWNoIHJldHVybnMgb25lIG9mCgogICAgICAgICAgPC9wPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgQ09OVElOVUUoQ0hBTEwpIG1lYW5zIGNvbnRpbnVlIHRoZSBhdXRoIGNvbnZlcnNhdGlvbiBhbmQKICAgICAgICAgICAgICAgIHNlbmQgQ0hBTEwgYXMgdGhlIGNoYWxsZW5nZSB0byB0aGUgY2xpZW50OwogICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgT0sgbWVhbnMgdGhhdCB0aGUgY2xpZW50IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseQogICAgICAgICAgICAgICAgYXV0aGVudGljYXRlZDsKICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICAgIFJFSkVDVCBtZWFucyB0aGF0IHRoZSBjbGllbnQgZmFpbGVkIHRvIGF1dGhlbnRpY2F0ZSBvcgogICAgICAgICAgICAgICAgdGhlcmUgd2FzIGFuIGVycm9yIGluIFJFU1AuCiAgICAgICAgICAgICAgPC9wPjwvbGk+PC91bD48L2Rpdj48cD4KCiAgICAgICAgICBUaGUgc2VydmVyIHN0YXJ0cyBvdXQgaW4gc3RhdGUKICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPldhaXRpbmdGb3JBdXRoPC9lbT48L3NwYW4+LiAgSWYgdGhlIGNsaWVudCBpcwogICAgICAgICAgcmVqZWN0ZWQgdG9vIG1hbnkgdGltZXMgdGhlIHNlcnZlciBtdXN0IGRpc2Nvbm5lY3QgdGhlCiAgICAgICAgICBjbGllbnQuCiAgICAgICAgPC9wPjxwIHRpdGxlPSJXYWl0aW5nRm9yQXV0aCI+PGI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+V2FpdGluZ0ZvckF1dGg8L2VtPjwvc3Bhbj4uoDwvYj4KICAgICAgICAgICAgPC9wPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgICBSZWNlaXZlIEFVVEggJiM4NTk0OyBzZW5kIFJFSkVDVEVEIFttZWNoc10sIGdvdG8KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+V2FpdGluZ0ZvckF1dGg8L2VtPjwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgICBSZWNlaXZlIEFVVEggTUVDSCBSRVNQCgogICAgICAgICAgICAgICAgICA8L3A+PHRhYmxlIGJvcmRlcj0iMCIgc3VtbWFyeT0iU2ltcGxlIGxpc3QiIGNsYXNzPSJzaW1wbGVsaXN0Ij48dHI+PHRkPgogICAgICAgICAgICAgICAgICAgICAgTUVDSCBub3QgdmFsaWQgbWVjaGFuaXNtICYjODU5NDsgc2VuZCBSRUpFQ1RFRAogICAgICAgICAgICAgICAgICAgICAgW21lY2hzXSwgZ290bwogICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+V2FpdGluZ0ZvckF1dGg8L2VtPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyPjx0ZD4KICAgICAgICAgICAgICAgICAgICAgIE1FQ0goUkVTUCkgcmV0dXJucyBDT05USU5VRShDSEFMTCkgJiM4NTk0OyBzZW5kCiAgICAgICAgICAgICAgICAgICAgICBEQVRBIENIQUxMLCBnb3RvCiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5XYWl0aW5nRm9yRGF0YTwvZW0+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHI+PHRkPgogICAgICAgICAgICAgICAgICAgICAgTUVDSChSRVNQKSByZXR1cm5zIE9LICYjODU5NDsgc2VuZCBPSywgZ290bwogICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+V2FpdGluZ0ZvckJlZ2luPC9lbT48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0cj48dGQ+CiAgICAgICAgICAgICAgICAgICAgICBNRUNIKFJFU1ApIHJldHVybnMgUkVKRUNUICYjODU5NDsgc2VuZCBSRUpFQ1RFRAogICAgICAgICAgICAgICAgICAgICAgW21lY2hzXSwgZ290bwogICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+V2FpdGluZ0ZvckF1dGg8L2VtPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48cD4KICAgICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgICBSZWNlaXZlIEJFR0lOICYjODU5NDsgdGVybWluYXRlCiAgICAgICAgICAgICAgICAgIGF1dGggY29udmVyc2F0aW9uLCBkaXNjb25uZWN0CiAgICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICAgICAgUmVjZWl2ZSBFUlJPUiAmIzg1OTQ7IHNlbmQgUkVKRUNURUQgW21lY2hzXSwgZ290bwogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5XYWl0aW5nRm9yQXV0aDwvZW0+PC9zcGFuPgogICAgICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgICAgIFJlY2VpdmUgYW55dGhpbmcgZWxzZSAmIzg1OTQ7IHNlbmQKICAgICAgICAgICAgICAgICAgRVJST1IsIGdvdG8KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+V2FpdGluZ0ZvckF1dGg8L2VtPjwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvcD48L2xpPjwvdWw+PC9kaXY+PHAgdGl0bGU9IldhaXRpbmdGb3JBdXRoIj4KICAgICAgICAgIDwvcD48cCB0aXRsZT0iV2FpdGluZ0ZvckRhdGEiPjxiPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPldhaXRpbmdGb3JEYXRhPC9lbT48L3NwYW4+LqA8L2I+CiAgICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiB0eXBlPSJkaXNjIj48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICAgICAgUmVjZWl2ZSBEQVRBIFJFU1AKICAgICAgICAgICAgICAgICAgPC9wPjx0YWJsZSBib3JkZXI9IjAiIHN1bW1hcnk9IlNpbXBsZSBsaXN0IiBjbGFzcz0ic2ltcGxlbGlzdCI+PHRyPjx0ZD4KICAgICAgICAgICAgICAgICAgICAgIE1FQ0goUkVTUCkgcmV0dXJucyBDT05USU5VRShDSEFMTCkgJiM4NTk0OyBzZW5kCiAgICAgICAgICAgICAgICAgICAgICBEQVRBIENIQUxMLCBnb3RvCiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5XYWl0aW5nRm9yRGF0YTwvZW0+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHI+PHRkPgogICAgICAgICAgICAgICAgICAgICAgTUVDSChSRVNQKSByZXR1cm5zIE9LICYjODU5NDsgc2VuZCBPSywgZ290bwogICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+V2FpdGluZ0ZvckJlZ2luPC9lbT48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0cj48dGQ+CiAgICAgICAgICAgICAgICAgICAgICBNRUNIKFJFU1ApIHJldHVybnMgUkVKRUNUICYjODU5NDsgc2VuZCBSRUpFQ1RFRAogICAgICAgICAgICAgICAgICAgICAgW21lY2hzXSwgZ290bwogICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+V2FpdGluZ0ZvckF1dGg8L2VtPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48cD4KICAgICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgICBSZWNlaXZlIEJFR0lOICYjODU5NDsgdGVybWluYXRlIGF1dGggY29udmVyc2F0aW9uLAogICAgICAgICAgICAgICAgICBkaXNjb25uZWN0CiAgICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICAgICAgUmVjZWl2ZSBDQU5DRUwgJiM4NTk0OyBzZW5kIFJFSkVDVEVEIFttZWNoc10sIGdvdG8KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+V2FpdGluZ0ZvckF1dGg8L2VtPjwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgICBSZWNlaXZlIEVSUk9SICYjODU5NDsgc2VuZCBSRUpFQ1RFRCBbbWVjaHNdLCBnb3RvCiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPldhaXRpbmdGb3JBdXRoPC9lbT48L3NwYW4+CiAgICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICAgICAgUmVjZWl2ZSBhbnl0aGluZyBlbHNlICYjODU5NDsgc2VuZCBFUlJPUiwgZ290bwogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5XYWl0aW5nRm9yRGF0YTwvZW0+PC9zcGFuPgogICAgICAgICAgICAgICAgPC9wPjwvbGk+PC91bD48L2Rpdj48cCB0aXRsZT0iV2FpdGluZ0ZvckRhdGEiPgogICAgICAgICAgPC9wPjxwIHRpdGxlPSJXYWl0aW5nRm9yQmVnaW4iPjxiPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPldhaXRpbmdGb3JCZWdpbjwvZW0+PC9zcGFuPi6gPC9iPgogICAgICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgICAgIFJlY2VpdmUgQkVHSU4gJiM4NTk0OyB0ZXJtaW5hdGUgYXV0aCBjb252ZXJzYXRpb24sCiAgICAgICAgICAgICAgICAgIGNsaWVudCBhdXRoZW50aWNhdGVkCiAgICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICAgICAgUmVjZWl2ZSBDQU5DRUwgJiM4NTk0OyBzZW5kIFJFSkVDVEVEIFttZWNoc10sIGdvdG8KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+V2FpdGluZ0ZvckF1dGg8L2VtPjwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgICBSZWNlaXZlIEVSUk9SICYjODU5NDsgc2VuZCBSRUpFQ1RFRCBbbWVjaHNdLCBnb3RvCiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPldhaXRpbmdGb3JBdXRoPC9lbT48L3NwYW4+CiAgICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICAgICAgUmVjZWl2ZSBhbnl0aGluZyBlbHNlICYjODU5NDsgc2VuZCBFUlJPUiwgZ290bwogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5XYWl0aW5nRm9yQmVnaW48L2VtPjwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvcD48L2xpPjwvdWw+PC9kaXY+PHAgdGl0bGU9IldhaXRpbmdGb3JCZWdpbiI+CiAgICAgICAgICA8L3A+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSJBdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJhdXRoLW1lY2hhbmlzbXMiPjwvYT5BdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHNvbWUgbmV3IGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMuCiAgICAgICAgRC1CdXMgYWxzbyBhbGxvd3MgYW55IHN0YW5kYXJkIFNBU0wgbWVjaGFuaXNtIG9mIGNvdXJzZS4KICAgICAgPC9wPjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iREJVU19DT09LSUVfU0hBMSI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iYXV0aC1tZWNoYW5pc21zLXNoYSI+PC9hPkRCVVNfQ09PS0lFX1NIQTE8L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgICAgVGhlIERCVVNfQ09PS0lFX1NIQTEgbWVjaGFuaXNtIGlzIGRlc2lnbmVkIHRvIGVzdGFibGlzaCB0aGF0IGEgY2xpZW50CiAgICAgICAgICBoYXMgdGhlIGFiaWxpdHkgdG8gcmVhZCBhIHByaXZhdGUgZmlsZSBvd25lZCBieSB0aGUgdXNlciBiZWluZwogICAgICAgICAgYXV0aGVudGljYXRlZC4gSWYgdGhlIGNsaWVudCBjYW4gcHJvdmUgdGhhdCBpdCBoYXMgYWNjZXNzIHRvIGEgc2VjcmV0CiAgICAgICAgICBjb29raWUgc3RvcmVkIGluIHRoaXMgZmlsZSwgdGhlbiB0aGUgY2xpZW50IGlzIGF1dGhlbnRpY2F0ZWQuIAogICAgICAgICAgVGh1cyB0aGUgc2VjdXJpdHkgb2YgREJVU19DT09LSUVfU0hBMSBkZXBlbmRzIG9uIGEgc2VjdXJlIGhvbWUgCiAgICAgICAgICBkaXJlY3RvcnkuCiAgICAgICAgPC9wPjxwPgogICAgICAgICAgVGhyb3VnaG91dCB0aGlzIGRlc2NyaXB0aW9uLCAiaGV4IGVuY29kaW5nIiBtdXN0IG91dHB1dCB0aGUgZGlnaXRzCiAgICAgICAgICBmcm9tIGEgdG8gZiBpbiBsb3dlci1jYXNlOyB0aGUgZGlnaXRzIEEgdG8gRiBtdXN0IG5vdCBiZSB1c2VkCiAgICAgICAgICBpbiB0aGUgREJVU19DT09LSUVfU0hBMSBtZWNoYW5pc20uCiAgICAgICAgPC9wPjxwPgogICAgICAgICAgQXV0aGVudGljYXRpb24gcHJvY2VlZHMgYXMgZm9sbG93czoKICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiB0eXBlPSJkaXNjIj48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICAgIFRoZSBjbGllbnQgc2VuZHMgdGhlIHVzZXJuYW1lIGl0IHdvdWxkIGxpa2UgdG8gYXV0aGVudGljYXRlIAogICAgICAgICAgICAgICAgYXMsIGhleC1lbmNvZGVkLgogICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgVGhlIHNlcnZlciBzZW5kcyB0aGUgbmFtZSBvZiBpdHMgImNvb2tpZSBjb250ZXh0IiAoc2VlIGJlbG93KTsgYQogICAgICAgICAgICAgICAgc3BhY2UgY2hhcmFjdGVyOyB0aGUgaW50ZWdlciBJRCBvZiB0aGUgc2VjcmV0IGNvb2tpZSB0aGUgY2xpZW50CiAgICAgICAgICAgICAgICBtdXN0IGRlbW9uc3RyYXRlIGtub3dsZWRnZSBvZjsgYSBzcGFjZSBjaGFyYWN0ZXI7IHRoZW4gYQogICAgICAgICAgICAgICAgcmFuZG9tbHktZ2VuZXJhdGVkIGNoYWxsZW5nZSBzdHJpbmcsIGFsbCBvZiB0aGlzIGhleC1lbmNvZGVkIGludG8KICAgICAgICAgICAgICAgIG9uZSwgc2luZ2xlIHN0cmluZy4KICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICAgIFRoZSBjbGllbnQgbG9jYXRlcyB0aGUgY29va2llIGFuZCBnZW5lcmF0ZXMgaXRzIG93bgogICAgICAgICAgICAgICAgcmFuZG9tbHktZ2VuZXJhdGVkIGNoYWxsZW5nZSBzdHJpbmcuIFRoZSBjbGllbnQgdGhlbiBjb25jYXRlbmF0ZXMKICAgICAgICAgICAgICAgIHRoZSBzZXJ2ZXIncyBkZWNvZGVkIGNoYWxsZW5nZSwgYSAiOiIgY2hhcmFjdGVyLCBpdHMgb3duIGNoYWxsZW5nZSwKICAgICAgICAgICAgICAgIGFub3RoZXIgIjoiIGNoYXJhY3RlciwgYW5kIHRoZSBjb29raWUuIEl0IGNvbXB1dGVzIHRoZSBTSEEtMSBoYXNoCiAgICAgICAgICAgICAgICBvZiB0aGlzIGNvbXBvc2l0ZSBzdHJpbmcgYXMgYSBoZXggZGlnZXN0LiBJdCBjb25jYXRlbmF0ZXMgdGhlCiAgICAgICAgICAgICAgICBjbGllbnQncyBjaGFsbGVuZ2Ugc3RyaW5nLCBhIHNwYWNlIGNoYXJhY3RlciwgYW5kIHRoZSBTSEEtMSBoZXgKICAgICAgICAgICAgICAgIGRpZ2VzdCwgaGV4LWVuY29kZXMgdGhlIHJlc3VsdCBhbmQgc2VuZHMgaXQgYmFjayB0byB0aGUgc2VydmVyLgogICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgVGhlIHNlcnZlciBnZW5lcmF0ZXMgdGhlIHNhbWUgY29uY2F0ZW5hdGVkIHN0cmluZyB1c2VkIGJ5IHRoZQogICAgICAgICAgICAgICAgY2xpZW50IGFuZCBjb21wdXRlcyBpdHMgU0hBLTEgaGFzaC4gSXQgY29tcGFyZXMgdGhlIGhhc2ggd2l0aAogICAgICAgICAgICAgICAgdGhlIGhhc2ggcmVjZWl2ZWQgZnJvbSB0aGUgY2xpZW50OyBpZiB0aGUgdHdvIGhhc2hlcyBtYXRjaCwgdGhlCiAgICAgICAgICAgICAgICBjbGllbnQgaXMgYXV0aGVudGljYXRlZC4KICAgICAgICAgICAgICA8L3A+PC9saT48L3VsPjwvZGl2PjxwPgogICAgICAgIDwvcD48cD4KICAgICAgICAgIEVhY2ggc2VydmVyIGhhcyBhICJjb29raWUgY29udGV4dCwiIHdoaWNoIGlzIGEgbmFtZSB0aGF0IGlkZW50aWZpZXMgYQogICAgICAgICAgc2V0IG9mIGNvb2tpZXMgdGhhdCBhcHBseSB0byB0aGF0IHNlcnZlci4gQSBzYW1wbGUgY29udGV4dCBtaWdodCBiZQogICAgICAgICAgIm9yZ19mcmVlZGVza3RvcF9zZXNzaW9uX2J1cyIuIENvbnRleHQgbmFtZXMgbXVzdCBiZSB2YWxpZCBBU0NJSSwKICAgICAgICAgIG5vbnplcm8gbGVuZ3RoLCBhbmQgbWF5IG5vdCBjb250YWluIHRoZSBjaGFyYWN0ZXJzIHNsYXNoICgiLyIpLAogICAgICAgICAgYmFja3NsYXNoICgiXCIpLCBzcGFjZSAoIiAiKSwgbmV3bGluZSAoIlxuIiksIGNhcnJpYWdlIHJldHVybiAoIlxyIiksCiAgICAgICAgICB0YWIgKCJcdCIpLCBvciBwZXJpb2QgKCIuIikuIFRoZXJlIGlzIGEgZGVmYXVsdCBjb250ZXh0LAogICAgICAgICAgIm9yZ19mcmVlZGVza3RvcF9nZW5lcmFsIiB0aGF0J3MgdXNlZCBieSBzZXJ2ZXJzIHRoYXQgZG8gbm90IHNwZWNpZnkKICAgICAgICAgIG90aGVyd2lzZS4KICAgICAgICA8L3A+PHA+CiAgICAgICAgICBDb29raWVzIGFyZSBzdG9yZWQgaW4gYSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnksIGluIHRoZSBkaXJlY3RvcnkKICAgICAgICAgIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+fi8uZGJ1cy1rZXlyaW5ncy88L2NvZGU+LiBUaGlzIGRpcmVjdG9yeSBtdXN0IAogICAgICAgICAgbm90IGJlIHJlYWRhYmxlIG9yIHdyaXRhYmxlIGJ5IG90aGVyIHVzZXJzLiBJZiBpdCBpcywgCiAgICAgICAgICBjbGllbnRzIGFuZCBzZXJ2ZXJzIG11c3QgaWdub3JlIGl0LiBUaGUgZGlyZWN0b3J5IAogICAgICAgICAgY29udGFpbnMgY29va2llIGZpbGVzIG5hbWVkIGFmdGVyIHRoZSBjb29raWUgY29udGV4dC4KICAgICAgICA8L3A+PHA+CiAgICAgICAgICBBIGNvb2tpZSBmaWxlIGNvbnRhaW5zIG9uZSBjb29raWUgcGVyIGxpbmUuIEVhY2ggbGluZSAKICAgICAgICAgIGhhcyB0aHJlZSBzcGFjZS1zZXBhcmF0ZWQgZmllbGRzOgogICAgICAgICAgPC9wPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgVGhlIGNvb2tpZSBJRCBudW1iZXIsIHdoaWNoIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlciBhbmQKICAgICAgICAgICAgICAgIG1heSBub3QgYmUgdXNlZCB0d2ljZSBpbiB0aGUgc2FtZSBmaWxlLgogICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgVGhlIGNvb2tpZSdzIGNyZWF0aW9uIHRpbWUsIGluIFVOSVggc2Vjb25kcy1zaW5jZS10aGUtZXBvY2gKICAgICAgICAgICAgICAgIGZvcm1hdC4KICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICAgIFRoZSBjb29raWUgaXRzZWxmLCBhIGhleC1lbmNvZGVkIHJhbmRvbSBibG9jayBvZiBieXRlcy4gVGhlIGNvb2tpZQogICAgICAgICAgICAgICAgbWF5IGJlIG9mIGFueSBsZW5ndGgsIHRob3VnaCBvYnZpb3VzbHkgc2VjdXJpdHkgaW5jcmVhc2VzIAogICAgICAgICAgICAgICAgYXMgdGhlIGxlbmd0aCBpbmNyZWFzZXMuCiAgICAgICAgICAgICAgPC9wPjwvbGk+PC91bD48L2Rpdj48cD4KICAgICAgICA8L3A+PHA+CiAgICAgICAgICBPbmx5IHNlcnZlciBwcm9jZXNzZXMgbW9kaWZ5IHRoZSBjb29raWUgZmlsZS4KICAgICAgICAgIFRoZXkgbXVzdCBkbyBzbyB3aXRoIHRoaXMgcHJvY2VkdXJlOgogICAgICAgICAgPC9wPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgQ3JlYXRlIGEgbG9ja2ZpbGUgbmFtZSBieSBhcHBlbmRpbmcgIi5sb2NrIiB0byB0aGUgbmFtZSBvZiB0aGUKICAgICAgICAgICAgICAgIGNvb2tpZSBmaWxlLiAgVGhlIHNlcnZlciBzaG91bGQgYXR0ZW1wdCB0byBjcmVhdGUgdGhpcyBmaWxlCiAgICAgICAgICAgICAgICB1c2luZyA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+T19DUkVBVCB8IE9fRVhDTDwvY29kZT4uICBJZiBmaWxlIGNyZWF0aW9uCiAgICAgICAgICAgICAgICBmYWlscywgdGhlIGxvY2sgZmFpbHMuIFNlcnZlcnMgc2hvdWxkIHJldHJ5IGZvciBhIHJlYXNvbmFibGUKICAgICAgICAgICAgICAgIHBlcmlvZCBvZiB0aW1lLCB0aGVuIHRoZXkgbWF5IGNob29zZSB0byBkZWxldGUgYW4gZXhpc3RpbmcgbG9jawogICAgICAgICAgICAgICAgdG8ga2VlcCB1c2VycyBmcm9tIGhhdmluZyB0byBtYW51YWxseSBkZWxldGUgYSBzdGFsZQogICAgICAgICAgICAgICAgbG9jay4gPHN1cD5bPGEgbmFtZT0iaWRwNTI2MDU3NiIgaHJlZj0iI2Z0bi5pZHA1MjYwNTc2IiBjbGFzcz0iZm9vdG5vdGUiPjE8L2E+XTwvc3VwPgogICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgT25jZSB0aGUgbG9ja2ZpbGUgaGFzIGJlZW4gY3JlYXRlZCwgdGhlIHNlcnZlciBsb2FkcyB0aGUgY29va2llCiAgICAgICAgICAgICAgICBmaWxlLiBJdCBzaG91bGQgdGhlbiBkZWxldGUgYW55IGNvb2tpZXMgdGhhdCBhcmUgb2xkICh0aGUKICAgICAgICAgICAgICAgIHRpbWVvdXQgY2FuIGJlIGZhaXJseSBzaG9ydCksIG9yIG1vcmUgdGhhbiBhIHJlYXNvbmFibGUKICAgICAgICAgICAgICAgIHRpbWUgaW4gdGhlIGZ1dHVyZSAoc28gdGhhdCBjb29raWVzIG5ldmVyIGFjY2lkZW50YWxseSAKICAgICAgICAgICAgICAgIGJlY29tZSBwZXJtYW5lbnQsIGlmIHRoZSBjbG9jayB3YXMgc2V0IGZhciBpbnRvIHRoZSBmdXR1cmUgCiAgICAgICAgICAgICAgICBhdCBzb21lIHBvaW50KS4gSWYgbm8gcmVjZW50IGtleXMgcmVtYWluLCB0aGUgCiAgICAgICAgICAgICAgICBzZXJ2ZXIgbWF5IGdlbmVyYXRlIGEgbmV3IGtleS4KICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICAgIFRoZSBwcnVuZWQgYW5kIHBvc3NpYmx5IGFkZGVkLXRvIGNvb2tpZSBmaWxlIAogICAgICAgICAgICAgICAgbXVzdCBiZSByZXNhdmVkIGF0b21pY2FsbHkgKHVzaW5nIGEgdGVtcG9yYXJ5IAogICAgICAgICAgICAgICAgZmlsZSB3aGljaCBpcyByZW5hbWUoKSdkKS4KICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICAgIFRoZSBsb2NrIG11c3QgYmUgZHJvcHBlZCBieSBkZWxldGluZyB0aGUgbG9ja2ZpbGUuCiAgICAgICAgICAgICAgPC9wPjwvbGk+PC91bD48L2Rpdj48cD4KICAgICAgICA8L3A+PHA+CiAgICAgICAgICBDbGllbnRzIG5lZWQgbm90IGxvY2sgdGhlIGZpbGUgaW4gb3JkZXIgdG8gbG9hZCBpdCwgCiAgICAgICAgICBiZWNhdXNlIHNlcnZlcnMgYXJlIHJlcXVpcmVkIHRvIHNhdmUgdGhlIGZpbGUgYXRvbWljYWxseS4gICAgICAgICAgCiAgICAgICAgPC9wPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iU2VydmVyIEFkZHJlc3NlcyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJhZGRyZXNzZXMiPjwvYT5TZXJ2ZXIgQWRkcmVzc2VzPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgU2VydmVyIGFkZHJlc3NlcyBjb25zaXN0IG9mIGEgdHJhbnNwb3J0IG5hbWUgZm9sbG93ZWQgYnkgYSBjb2xvbiwgYW5kCiAgICAgIHRoZW4gYW4gb3B0aW9uYWwsIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGtleXMgYW5kIHZhbHVlcyBpbiB0aGUgZm9ybSBrZXk9dmFsdWUuCiAgICAgIEVhY2ggdmFsdWUgaXMgZXNjYXBlZC4KICAgIDwvcD48cD4KICAgICAgRm9yIGV4YW1wbGU6IAogICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnVuaXg6cGF0aD0vdG1wL2RidXMtdGVzdDwvcHJlPjxwPgogICAgICBXaGljaCBpcyB0aGUgYWRkcmVzcyB0byBhIHVuaXggc29ja2V0IHdpdGggdGhlIHBhdGggL3RtcC9kYnVzLXRlc3QuCiAgICA8L3A+PHA+CiAgICAgIFZhbHVlIGVzY2FwaW5nIGlzIHNpbWlsYXIgdG8gVVJJIGVzY2FwaW5nIGJ1dCBzaW1wbGVyLgogICAgICA8L3A+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgIFRoZSBzZXQgb2Ygb3B0aW9uYWxseS1lc2NhcGVkIGJ5dGVzIGlzOgogICAgICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+WzAtOUEtWmEtel8tLy5cXTwvY29kZT4uIFRvIGVzY2FwZSwgZWFjaAogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5ieXRlPC9lbT48L3NwYW4+IChub3RlLCBub3QgY2hhcmFjdGVyKSB3aGljaCBpcyBub3QgaW4gdGhlCiAgICAgICAgICAgIHNldCBvZiBvcHRpb25hbGx5LWVzY2FwZWQgYnl0ZXMgbXVzdCBiZSByZXBsYWNlZCB3aXRoIGFuIEFTQ0lJCiAgICAgICAgICAgIHBlcmNlbnQgKDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4lPC9jb2RlPikgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgYnl0ZSBpbiBoZXguCiAgICAgICAgICAgIFRoZSBoZXggdmFsdWUgbXVzdCBhbHdheXMgYmUgdHdvIGRpZ2l0cywgZXZlbiBpZiB0aGUgZmlyc3QgZGlnaXQgaXMKICAgICAgICAgICAgemVyby4gVGhlIG9wdGlvbmFsbHktZXNjYXBlZCBieXRlcyBtYXkgYmUgZXNjYXBlZCBpZiBkZXNpcmVkLgogICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgIFRvIHVuZXNjYXBlLCBhcHBlbmQgZWFjaCBieXRlIGluIHRoZSB2YWx1ZTsgaWYgYSBieXRlIGlzIGFuIEFTQ0lJCiAgICAgICAgICAgIHBlcmNlbnQgKDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4lPC9jb2RlPikgY2hhcmFjdGVyIHRoZW4gYXBwZW5kIHRoZSBmb2xsb3dpbmcKICAgICAgICAgICAgaGV4IHZhbHVlIGluc3RlYWQuIEl0IGlzIGFuIGVycm9yIGlmIGEgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiU8L2NvZGU+IGJ5dGUKICAgICAgICAgICAgZG9lcyBub3QgaGF2ZSB0d28gaGV4IGRpZ2l0cyBmb2xsb3dpbmcuIEl0IGlzIGFuIGVycm9yIGlmIGEKICAgICAgICAgICAgbm9uLW9wdGlvbmFsbHktZXNjYXBlZCBieXRlIGlzIHNlZW4gdW5lc2NhcGVkLgogICAgICAgICAgPC9wPjwvbGk+PC91bD48L2Rpdj48cD4KICAgICAgVGhlIHNldCBvZiBvcHRpb25hbGx5LWVzY2FwZWQgYnl0ZXMgaXMgaW50ZW5kZWQgdG8gcHJlc2VydmUgYWRkcmVzcyAKICAgICAgcmVhZGFiaWxpdHkgYW5kIGNvbnZlbmllbmNlLgogICAgPC9wPjxwPgogICAgICBBIHNlcnZlciBtYXkgc3BlY2lmeSBhIGtleS12YWx1ZSBwYWlyIHdpdGggdGhlIGtleSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Z3VpZDwvY29kZT4KICAgICAgYW5kIHRoZSB2YWx1ZSBhIGhleC1lbmNvZGVkIDE2LWJ5dGUgc2VxdWVuY2UuIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjdXVpZHMiIHRpdGxlPSJVVUlEcyI+dGhlIHNlY3Rpb24gY2FsbGVkICYjODIyMDtVVUlEcyYjODIyMTs8L2E+CiAgICAgIGRlc2NyaWJlcyB0aGUgZm9ybWF0IG9mIHRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Z3VpZDwvY29kZT4gZmllbGQuICBJZiBwcmVzZW50LAogICAgICB0aGlzIFVVSUQgbWF5IGJlIHVzZWQgdG8gZGlzdGluZ3Vpc2ggb25lIHNlcnZlciBhZGRyZXNzIGZyb20gYW5vdGhlci4gQQogICAgICBzZXJ2ZXIgc2hvdWxkIHVzZSBhIGRpZmZlcmVudCBVVUlEIGZvciBlYWNoIGFkZHJlc3MgaXQgbGlzdGVucyBvbi4gRm9yCiAgICAgIGV4YW1wbGUsIGlmIGEgbWVzc2FnZSBidXMgZGFlbW9uIG9mZmVycyBib3RoIFVOSVggZG9tYWluIHNvY2tldCBhbmQgVENQCiAgICAgIGNvbm5lY3Rpb25zLCBidXQgdHJlYXRzIGNsaWVudHMgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBjb25uZWN0LAogICAgICB0aG9zZSB0d28gY29ubmVjdGlvbnMgYXJlIGVxdWl2YWxlbnQgcG9zdC1jb25uZWN0aW9uIGJ1dCBzaG91bGQgaGF2ZQogICAgICBkaXN0aW5jdCBVVUlEcyB0byBkaXN0aW5ndWlzaCB0aGUga2luZHMgb2YgY29ubmVjdGlvbi4KICAgIDwvcD48cD4KICAgICAgVGhlIGludGVudCBvZiB0aGUgYWRkcmVzcyBVVUlEIGZlYXR1cmUgaXMgdG8gYWxsb3cgYSBjbGllbnQgdG8gYXZvaWQKICAgICAgb3BlbmluZyBtdWx0aXBsZSBpZGVudGljYWwgY29ubmVjdGlvbnMgdG8gdGhlIHNhbWUgc2VydmVyLCBieSBhbGxvd2luZyB0aGUKICAgICAgY2xpZW50IHRvIGNoZWNrIHdoZXRoZXIgYW4gYWRkcmVzcyBjb3JyZXNwb25kcyB0byBhbiBhbHJlYWR5LWV4aXN0aW5nCiAgICAgIGNvbm5lY3Rpb24uICBDb21wYXJpbmcgdHdvIGFkZHJlc3NlcyBpcyBpbnN1ZmZpY2llbnQsIGJlY2F1c2UgYWRkcmVzc2VzCiAgICAgIGNhbiBiZSByZWN5Y2xlZCBieSBkaXN0aW5jdCBzZXJ2ZXJzLCBhbmQgZXF1aXZhbGVudCBhZGRyZXNzZXMgbWF5IGxvb2sKICAgICAgZGlmZmVyZW50IGlmIHNpbXBseSBjb21wYXJlZCBhcyBzdHJpbmdzIChmb3IgZXhhbXBsZSwgdGhlIGhvc3QgaW4gYSBUQ1AKICAgICAgYWRkcmVzcyBjYW4gYmUgZ2l2ZW4gYXMgYW4gSVAgYWRkcmVzcyBvciBhcyBhIGhvc3RuYW1lKS4KICAgIDwvcD48cD4KICAgICAgTm90ZSB0aGF0IHRoZSBhZGRyZXNzIGtleSBpcyA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Z3VpZDwvY29kZT4gZXZlbiB0aG91Z2ggdGhlIAogICAgICByZXN0IG9mIHRoZSBBUEkgYW5kIGRvY3VtZW50YXRpb24gc2F5cyAiVVVJRCwiIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuCiAgICA8L3A+PHA+CiAgICAgIFtGSVhNRSBjbGFyaWZ5IGlmIGF0dGVtcHRpbmcgdG8gY29ubmVjdCB0byBlYWNoIGlzIGEgcmVxdWlyZW1lbnQgCiAgICAgIG9yIGp1c3QgYSBzdWdnZXN0aW9uXQogICAgICBXaGVuIGNvbm5lY3RpbmcgdG8gYSBzZXJ2ZXIsIG11bHRpcGxlIHNlcnZlciBhZGRyZXNzZXMgY2FuIGJlCiAgICAgIHNlcGFyYXRlZCBieSBhIHNlbWktY29sb24uIFRoZSBsaWJyYXJ5IHdpbGwgdGhlbiB0cnkgdG8gY29ubmVjdAogICAgICB0byB0aGUgZmlyc3QgYWRkcmVzcyBhbmQgaWYgdGhhdCBmYWlscywgaXQnbGwgdHJ5IHRvIGNvbm5lY3QgdG8KICAgICAgdGhlIG5leHQgb25lIHNwZWNpZmllZCwgYW5kIHNvIGZvcnRoLiBGb3IgZXhhbXBsZQogICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnVuaXg6cGF0aD0vdG1wL2RidXMtdGVzdDt1bml4OnBhdGg9L3RtcC9kYnVzLXRlc3QyPC9wcmU+PHA+CiAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDEiIHRpdGxlPSJUcmFuc3BvcnRzIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9InRyYW5zcG9ydHMiPjwvYT5UcmFuc3BvcnRzPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgW0ZJWE1FIHdlIG5lZWQgdG8gc3BlY2lmeSBpbiBkZXRhaWwgZWFjaCB0cmFuc3BvcnQgYW5kIGl0cyBwb3NzaWJsZSBhcmd1bWVudHNdCiAgICAKICAgICAgQ3VycmVudCB0cmFuc3BvcnRzIGluY2x1ZGU6IHVuaXggZG9tYWluIHNvY2tldHMgKGluY2x1ZGluZyAKICAgICAgYWJzdHJhY3QgbmFtZXNwYWNlIG9uIGxpbnV4KSwgbGF1bmNoZCwgVENQL0lQLCBhbmQgYSBkZWJ1Zy90ZXN0aW5nIHRyYW5zcG9ydAogICAgICB1c2luZyBpbi1wcm9jZXNzIHBpcGVzLiBGdXR1cmUgcG9zc2libGUgdHJhbnNwb3J0cyBpbmNsdWRlIG9uZSB0aGF0CiAgICAgIHR1bm5lbHMgb3ZlciBYMTEgcHJvdG9jb2wuCiAgICA8L3A+PGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSJVbml4IERvbWFpbiBTb2NrZXRzIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJ0cmFuc3BvcnRzLXVuaXgtZG9tYWluLXNvY2tldHMiPjwvYT5Vbml4IERvbWFpbiBTb2NrZXRzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBVbml4IGRvbWFpbiBzb2NrZXRzIGNhbiBiZSBlaXRoZXIgcGF0aHMgaW4gdGhlIGZpbGUgc3lzdGVtIG9yIG9uIExpbnV4IAoJa2VybmVscywgdGhleSBjYW4gYmUgYWJzdHJhY3Qgd2hpY2ggYXJlIHNpbWlsYXIgdG8gcGF0aHMgYnV0CglkbyBub3Qgc2hvdyB1cCBpbiB0aGUgZmlsZSBzeXN0ZW0uICAKICAgICAgPC9wPjxwPgogICAgICAgIFdoZW4gYSBzb2NrZXQgaXMgb3BlbmVkIGJ5IHRoZSBELUJ1cyBsaWJyYXJ5IGl0IHRydW5jYXRlcyB0aGUgcGF0aCAKCW5hbWUgcmlnaHQgYmVmb3JlIHRoZSBmaXJzdCB0cmFpbGluZyBOdWwgYnl0ZS4gIFRoaXMgaXMgdHJ1ZSBmb3IgYm90aAoJbm9ybWFsIHBhdGhzIGFuZCBhYnN0cmFjdCBwYXRocy4gIE5vdGUgdGhhdCB0aGlzIGlzIGEgZGVwYXJ0dXJlIGZyb20KCXByZXZpb3VzIHZlcnNpb25zIG9mIEQtQnVzIHRoYXQgd291bGQgY3JlYXRlIHNvY2tldHMgd2l0aCBhIGZpeGVkIAoJbGVuZ3RoIHBhdGggbmFtZS4gIE5hbWVzIHdoaWNoIHdlcmUgc2hvcnRlciB0aGFuIHRoZSBmaXhlZCBsZW5ndGgKCXdvdWxkIGJlIHBhZGRlZCBieSBOdWwgYnl0ZXMuCiAgICAgIDwvcD48cD4KICAgICAgICBVbml4IGRvbWFpbiBzb2NrZXRzIGFyZSBub3QgYXZhaWxhYmxlIG9uIHdpbmRvd3MuIAogICAgICA8L3A+PGRpdiBjbGFzcz0ic2VjdDMiIHRpdGxlPSJTZXJ2ZXIgQWRkcmVzcyBGb3JtYXQiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9InRyYW5zcG9ydHMtdW5peC1kb21haW4tc29ja2V0cy1hZGRyZXNzZXMiPjwvYT5TZXJ2ZXIgQWRkcmVzcyBGb3JtYXQ8L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPiAKICAgICAgICAgIFVuaXggZG9tYWluIHNvY2tldCBhZGRyZXNzZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlICJ1bml4OiIgcHJlZml4IAogICAgICAgICAgYW5kIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBrZXkvdmFsdWUgcGFpcnM6CiAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBib3JkZXI9IjEiPjxjb2xncm91cD48Y29sPjxjb2w+PGNvbD48L2NvbGdyb3VwPjx0aGVhZD48dHI+PHRoPk5hbWU8L3RoPjx0aD5WYWx1ZXM8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkPnBhdGg8L3RkPjx0ZD4ocGF0aCk8L3RkPjx0ZD5wYXRoIG9mIHRoZSB1bml4IGRvbWFpbiBzb2NrZXQuIElmIHNldCwgdGhlICJ0bXBkaXIiIGFuZCAiYWJzdHJhY3QiIGtleSBtdXN0IG5vdCBiZSBzZXQuPC90ZD48L3RyPjx0cj48dGQ+dG1wZGlyPC90ZD48dGQ+KHBhdGgpPC90ZD48dGQ+dGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiB3aGljaCBhIHNvY2tldCBmaWxlIHdpdGggYSByYW5kb20gZmlsZSBuYW1lIHN0YXJ0aW5nIHdpdGggJ2RidXMtJyB3aWxsIGJlIGNyZWF0ZWQgYnkgdGhlIHNlcnZlci4gVGhpcyBrZXkgY2FuIG9ubHkgYmUgdXNlZCBpbiBzZXJ2ZXIgYWRkcmVzc2VzLCBub3QgaW4gY2xpZW50IGFkZHJlc3Nlcy4gSWYgc2V0LCB0aGUgInBhdGgiIGFuZCAiYWJzdHJhY3QiIGtleSBtdXN0IG5vdCBiZSBzZXQuPC90ZD48L3RyPjx0cj48dGQ+YWJzdHJhY3Q8L3RkPjx0ZD4oc3RyaW5nKTwvdGQ+PHRkPnVuaXF1ZSBzdHJpbmcgKHBhdGgpIGluIHRoZSBhYnN0cmFjdCBuYW1lc3BhY2UuIElmIHNldCwgdGhlICJwYXRoIiBvciAidGVtcGRpciIga2V5IG11c3Qgbm90IGJlIHNldC48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0ibGF1bmNoZCI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0idHJhbnNwb3J0cy1sYXVuY2hkIj48L2E+bGF1bmNoZDwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgbGF1bmNoZCBpcyBhIG9wZW4tc291cmNlIHNlcnZlciBtYW5hZ2VtZW50IHN5c3RlbSB0aGF0IHJlcGxhY2VzIGluaXQsIGluZXRkCiAgICAgICAgYW5kIGNyb24gb24gQXBwbGUgTWFjIE9TIFggdmVyc2lvbnMgMTAuNCBhbmQgYWJvdmUuIEl0IHByb3ZpZGVzIGEgY29tbW9uIHNlc3Npb24KICAgICAgICBidXMgYWRkcmVzcyBmb3IgZWFjaCB1c2VyIGFuZCBkZXByZWNhdGVzIHRoZSBYMTEtZW5hYmxlZCBELUJ1cyBsYXVuY2hlciBvbiBPU1guCiAgICAgIDwvcD48cD4KICAgICAgICBsYXVuY2hkIGFsbG9jYXRlcyBhIHNvY2tldCBhbmQgcHJvdmlkZXMgaXQgd2l0aCB0aGUgdW5peCBwYXRoIHRocm91Z2ggdGhlCiAgICAgICAgREJVU19MQVVOQ0hEX1NFU1NJT05fQlVTX1NPQ0tFVCB2YXJpYWJsZSBpbiBsYXVuY2hkJ3MgZW52aXJvbm1lbnQuIEV2ZXJ5IHByb2Nlc3MKICAgICAgICBzcGF3bmVkIGJ5IGxhdW5jaGQgKG9yIGRidXMtZGFlbW9uLCBpZiBpdCB3YXMgc3RhcnRlZCBieSBsYXVuY2hkKSBjYW4gYWNjZXNzCiAgICAgICAgaXQgdGhyb3VnaCBpdHMgZW52aXJvbm1lbnQuCiAgICAgICAgT3RoZXIgcHJvY2Vzc2VzIGNhbiBxdWVyeSBmb3IgdGhlIGxhdW5jaGQgc29ja2V0IGJ5IGV4ZWN1dGluZzoKICAgICAgICAkIGxhdW5jaGN0bCBnZXRlbnYgREJVU19MQVVOQ0hEX1NFU1NJT05fQlVTX1NPQ0tFVAogICAgICAgIFRoaXMgaXMgbm9ybWFsbHkgZG9uZSBieSB0aGUgRC1CdXMgY2xpZW50IGxpYnJhcnkgc28gZG9lc24ndCBoYXZlIHRvIGJlIGRvbmUKICAgICAgICBtYW51YWxseS4KICAgICAgPC9wPjxwPgogICAgICAgIGxhdW5jaGQgaXMgbm90IGF2YWlsYWJsZSBvbiBNaWNyb3NvZnQgV2luZG93cy4KICAgICAgPC9wPjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iU2VydmVyIEFkZHJlc3MgRm9ybWF0Ij48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJ0cmFuc3BvcnRzLWxhdW5jaGQtYWRkcmVzc2VzIj48L2E+U2VydmVyIEFkZHJlc3MgRm9ybWF0PC9oND48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICAgIGxhdW5jaGQgYWRkcmVzc2VzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZSAibGF1bmNoZDoiIHByZWZpeAogICAgICAgICAgYW5kIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBrZXkvdmFsdWUgcGFpcnM6CiAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBib3JkZXI9IjEiPjxjb2xncm91cD48Y29sPjxjb2w+PGNvbD48L2NvbGdyb3VwPjx0aGVhZD48dHI+PHRoPk5hbWU8L3RoPjx0aD5WYWx1ZXM8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkPmVudjwvdGQ+PHRkPihlbnZpcm9ubWVudCB2YXJpYWJsZSk8L3RkPjx0ZD5wYXRoIG9mIHRoZSB1bml4IGRvbWFpbiBzb2NrZXQgZm9yIHRoZSBsYXVuY2hkIGNyZWF0ZWQgZGJ1cy1kYWVtb24uPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IlRDUCBTb2NrZXRzIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJ0cmFuc3BvcnRzLXRjcC1zb2NrZXRzIj48L2E+VENQIFNvY2tldHM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgIFRoZSB0Y3AgdHJhbnNwb3J0IHByb3ZpZGVzIFRDUC9JUCBiYXNlZCBjb25uZWN0aW9ucyBiZXR3ZWVuIGNsaWVudHMKICAgICAgICBsb2NhdGVkIG9uIHRoZSBzYW1lIG9yIGRpZmZlcmVudCBob3N0cy4gCiAgICAgIDwvcD48cD4KICAgICAgICBVc2luZyB0Y3AgdHJhbnNwb3J0IHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgc2VjdXJlIGF1dGhlbnRpZmljYXRpb24gbWVjaGFuaXNtdXMgCiAgICAgICAgb3ZlciBhIG5ldHdvcmsgaXMgdW5zZWN1cmUuIAogICAgICA8L3A+PHA+ICAKICAgICAgICBXaW5kb3dzIG5vdGVzOiBCZWNhdXNlIG9mIHRoZSB0Y3Agc3RhY2sgb24gd2luZG93cyBkb2VzIG5vdCBwcm92aWRlIHNlbmRpbmcgCiAgICAgICAgY3JlZGVudGlhbHMgb3ZlciBhIHRjcCBjb25uZWN0aW9uLCB0aGUgRVhURVJOQUwgYXV0aGVudGlmaWNhdGlvbiAKICAgICAgICBtZWNoYW5pc211cyBkb2VzIG5vdCB3b3JrLiAKICAgICAgPC9wPjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iU2VydmVyIEFkZHJlc3MgRm9ybWF0Ij48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJ0cmFuc3BvcnRzLXRjcC1zb2NrZXRzLWFkZHJlc3NlcyI+PC9hPlNlcnZlciBBZGRyZXNzIEZvcm1hdDwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+IAogICAgICAgICBUQ1AvSVAgc29ja2V0IGFkZHJlc3NlcyBhcmUgaWRlbnRpZmllZCBieSB0aGUgInRjcDoiIHByZWZpeCAKICAgICAgICAgYW5kIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBrZXkvdmFsdWUgcGFpcnM6CiAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBib3JkZXI9IjEiPjxjb2xncm91cD48Y29sPjxjb2w+PGNvbD48L2NvbGdyb3VwPjx0aGVhZD48dHI+PHRoPk5hbWU8L3RoPjx0aD5WYWx1ZXM8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkPmhvc3Q8L3RkPjx0ZD4oc3RyaW5nKTwvdGQ+PHRkPmRucyBuYW1lIG9yIGlwIGFkZHJlc3M8L3RkPjwvdHI+PHRyPjx0ZD5wb3J0PC90ZD48dGQ+KG51bWJlcik8L3RkPjx0ZD5UaGUgdGNwIHBvcnQgdGhlIHNlcnZlciB3aWxsIG9wZW4uIEEgemVybyB2YWx1ZSBsZXQgdGhlIHNlcnZlciAKICAgICAgICAgICAgY2hvb3NlIGEgZnJlZSBwb3J0IHByb3ZpZGVkIGZyb20gdGhlIHVuZGVybGF5aW5nIG9wZXJhdGluZyBzeXN0ZW0uIAogICAgICAgICAgICBsaWJkYnVzIGlzIGFibGUgdG8gcmV0cmlldmUgdGhlIHJlYWwgdXNlZCBwb3J0IGZyb20gdGhlIHNlcnZlci4gIAogICAgICAgICAgIDwvdGQ+PC90cj48dHI+PHRkPmZhbWlseTwvdGQ+PHRkPihzdHJpbmcpPC90ZD48dGQ+SWYgc2V0LCBwcm92aWRlIHRoZSB0eXBlIG9mIHNvY2tldCBmYW1pbHkgZWl0aGVyICJpcHY0IiBvciAiaXB2NiIuIElmIHVuc2V0LCB0aGUgZmFtaWx5IGlzIHVuc3BlY2lmaWVkLjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSJOb25jZS1zZWN1cmVkIFRDUCBTb2NrZXRzIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJ0cmFuc3BvcnRzLW5vbmNlLXRjcC1zb2NrZXRzIj48L2E+Tm9uY2Utc2VjdXJlZCBUQ1AgU29ja2V0czwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgVGhlIG5vbmNlLXRjcCB0cmFuc3BvcnQgcHJvdmlkZXMgYSBzZWN1cmVkIFRDUCB0cmFuc3BvcnQsIHVzaW5nIGEKICAgICAgICBzaW1wbGUgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIHRvIGVuc3VyZSB0aGF0IG9ubHkgY2xpZW50cyB3aXRoIHJlYWQKICAgICAgICBhY2Nlc3MgdG8gYSBjZXJ0YWluIGxvY2F0aW9uIGluIHRoZSBmaWxlc3lzdGVtIGNhbiBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIuCiAgICAgICAgVGhlIHNlcnZlciB3cml0ZXMgYSBzZWNyZXQsIHRoZSBub25jZSwgdG8gYSBmaWxlIGFuZCBhbiBpbmNvbWluZyBjbGllbnQKICAgICAgICBjb25uZWN0aW9uIGlzIG9ubHkgYWNjZXB0ZWQgaWYgdGhlIGNsaWVudCBzZW5kcyB0aGUgbm9uY2UgcmlnaHQgYWZ0ZXIKICAgICAgICB0aGUgY29ubmVjdC4gVGhlIG5vbmNlIG1lY2hhbmlzbSByZXF1aXJlcyBubyBzZXR1cCBhbmQgaXMgb3J0aG9nb25hbCB0bwogICAgICAgIHRoZSBoaWdoZXItbGV2ZWwgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcyBkZXNjcmliZWQgaW4gdGhlCiAgICAgICAgQXV0aGVudGljYXRpb24gc2VjdGlvbi4KICAgICAgPC9wPjxwPgogICAgICAgIE9uIHN0YXJ0LCB0aGUgc2VydmVyIGdlbmVyYXRlcyBhIHJhbmRvbSAxNiBieXRlIG5vbmNlIGFuZCB3cml0ZXMgaXQKICAgICAgICB0byBhIGZpbGUgaW4gdGhlIHVzZXIncyB0ZW1wb3JhcnkgZGlyZWN0b3J5LiBUaGUgbm9uY2UgZmlsZSBsb2NhdGlvbgogICAgICAgIGlzIHB1Ymxpc2hlZCBhcyBwYXJ0IG9mIHRoZSBzZXJ2ZXIncyBELUJ1cyBhZGRyZXNzIHVzaW5nIHRoZQogICAgICAgICJub25jZWZpbGUiIGtleS12YWx1ZSBwYWlyLgoKICAgICAgICBBZnRlciBhbiBhY2NlcHQsIHRoZSBzZXJ2ZXIgcmVhZHMgMTYgYnl0ZXMgZnJvbSB0aGUgc29ja2V0LiBJZiB0aGUKICAgICAgICByZWFkIGJ5dGVzIGRvIG5vdCBtYXRjaCB0aGUgbm9uY2Ugc3RvcmVkIGluIHRoZSBub25jZSBmaWxlLCB0aGUKICAgICAgICBzZXJ2ZXIgTVVTVCBpbW1lZGlhdGVseSBkcm9wIHRoZSBjb25uZWN0aW9uLgogICAgICAgIElmIHRoZSBub25jZSBtYXRjaCB0aGUgcmVjZWl2ZWQgYnl0ZSBzZXF1ZW5jZSwgdGhlIGNsaWVudCBpcyBhY2NlcHRlZAogICAgICAgIGFuZCB0aGUgdHJhbnNwb3J0IGJlaGF2ZXMgbGlrZSBhbiB1bnNlY3VyZWQgdGNwIHRyYW5zcG9ydC4KICAgICAgPC9wPjxwPgogICAgICAgIEFmdGVyIGEgc3VjY2Vzc2Z1bCBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIgc29ja2V0LCB0aGUgY2xpZW50IE1VU1QgcmVhZAogICAgICAgIHRoZSBub25jZSBmcm9tIHRoZSBmaWxlIHB1Ymxpc2hlZCBieSB0aGUgc2VydmVyIHZpYSB0aGUgbm9uY2VmaWxlPQogICAgICAgIGtleS12YWx1ZSBwYWlyIGFuZCBzZW5kIGl0IG92ZXIgdGhlIHNvY2tldC4gQWZ0ZXIgdGhhdCwgdGhlCiAgICAgICAgdHJhbnNwb3J0IGJlaGF2ZXMgbGlrZSBhbiB1bnNlY3VyZWQgdGNwIHRyYW5zcG9ydC4KICAgICAgPC9wPjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iU2VydmVyIEFkZHJlc3MgRm9ybWF0Ij48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJ0cmFuc3BvcnRzLW5vbmNlLXRjcC1zb2NrZXRzLWFkZHJlc3NlcyI+PC9hPlNlcnZlciBBZGRyZXNzIEZvcm1hdDwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+IAogICAgICAgICBOb25jZSBUQ1AvSVAgc29ja2V0IGFkZHJlc3NlcyB1c2VzIHRoZSAibm9uY2UtdGNwOiIgcHJlZml4IAogICAgICAgICBhbmQgc3VwcG9ydCB0aGUgZm9sbG93aW5nIGtleS92YWx1ZSBwYWlyczoKICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGJvcmRlcj0iMSI+PGNvbGdyb3VwPjxjb2w+PGNvbD48Y29sPjwvY29sZ3JvdXA+PHRoZWFkPjx0cj48dGg+TmFtZTwvdGg+PHRoPlZhbHVlczwvdGg+PHRoPkRlc2NyaXB0aW9uPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGQ+aG9zdDwvdGQ+PHRkPihzdHJpbmcpPC90ZD48dGQ+ZG5zIG5hbWUgb3IgaXAgYWRkcmVzczwvdGQ+PC90cj48dHI+PHRkPnBvcnQ8L3RkPjx0ZD4obnVtYmVyKTwvdGQ+PHRkPlRoZSB0Y3AgcG9ydCB0aGUgc2VydmVyIHdpbGwgb3Blbi4gQSB6ZXJvIHZhbHVlIGxldCB0aGUgc2VydmVyIAogICAgICAgICAgICBjaG9vc2UgYSBmcmVlIHBvcnQgcHJvdmlkZWQgZnJvbSB0aGUgdW5kZXJsYXlpbmcgb3BlcmF0aW5nIHN5c3RlbS4gCiAgICAgICAgICAgIGxpYmRidXMgaXMgYWJsZSB0byByZXRyaWV2ZSB0aGUgcmVhbCB1c2VkIHBvcnQgZnJvbSB0aGUgc2VydmVyLiAgCiAgICAgICAgICAgPC90ZD48L3RyPjx0cj48dGQ+ZmFtaWx5PC90ZD48dGQ+KHN0cmluZyk8L3RkPjx0ZD5JZiBzZXQsIHByb3ZpZGUgdGhlIHR5cGUgb2Ygc29ja2V0IGZhbWlseSBlaXRoZXIgImlwdjQiIG9yICJpcHY2Ii4gSWYgdW5zZXQsIHRoZSBmYW1pbHkgaXMgdW5zcGVjaWZpZWQuPC90ZD48L3RyPjx0cj48dGQ+bm9uY2VmaWxlPC90ZD48dGQ+KHBhdGgpPC90ZD48dGQ+ZmlsZSBsb2NhdGlvbiBjb250YWluaW5nIHRoZSBzZWNyZXQ8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iTWV0YSBUcmFuc3BvcnRzIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9Im1ldGEtdHJhbnNwb3J0cyI+PC9hPk1ldGEgVHJhbnNwb3J0czwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgIE1ldGEgdHJhbnNwb3J0cyBhcmUgYSBraW5kIG9mIHRyYW5zcG9ydCB3aXRoIHNwZWNpYWwgZW5oYW5jZW1lbnRzIG9yCiAgICAgIGJlaGF2aW9yLiBDdXJyZW50bHkgYXZhaWxhYmxlIG1ldGEgdHJhbnNwb3J0cyBpbmNsdWRlOiBhdXRvbGF1bmNoCiAgICA8L3A+PGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSJBdXRvbGF1bmNoIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJtZXRhLXRyYW5zcG9ydHMtYXV0b2xhdW5jaCI+PC9hPkF1dG9sYXVuY2g8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPlRoZSBhdXRvbGF1bmNoIHRyYW5zcG9ydCBwcm92aWRlcyBhIHdheSBmb3IgZGJ1cyBjbGllbnRzIHRvIGF1dG9kZXRlY3QKICAgICAgIGEgcnVubmluZyBkYnVzIHNlc3Npb24gYnVzIGFuZCB0byBhdXRvbGF1bmNoIGEgc2Vzc2lvbiBidXMgaWYgbm90IHByZXNlbnQuCiAgICAgPC9wPjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iU2VydmVyIEFkZHJlc3MgRm9ybWF0Ij48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJtZXRhLXRyYW5zcG9ydHMtYXV0b2xhdW5jaC1hZGRyZXNzZXMiPjwvYT5TZXJ2ZXIgQWRkcmVzcyBGb3JtYXQ8L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgICBBdXRvbGF1bmNoIGFkZHJlc3NlcyB1c2VzIHRoZSAiYXV0b2xhdW5jaDoiIHByZWZpeCBhbmQgc3VwcG9ydCB0aGUKICAgICAgICAgZm9sbG93aW5nIGtleS92YWx1ZSBwYWlyczoKICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgYm9yZGVyPSIxIj48Y29sZ3JvdXA+PGNvbD48Y29sPjxjb2w+PC9jb2xncm91cD48dGhlYWQ+PHRyPjx0aD5OYW1lPC90aD48dGg+VmFsdWVzPC90aD48dGg+RGVzY3JpcHRpb248L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZD5zY29wZTwvdGQ+PHRkPihzdHJpbmcpPC90ZD48dGQ+c2NvcGUgb2YgYXV0b2xhdW5jaCAoV2luZG93cyBvbmx5KQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiB0eXBlPSJkaXNjIj48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICAgIippbnN0YWxsLXBhdGgiIC0gbGltaXQgc2Vzc2lvbiBidXMgdG8gZGJ1cyBpbnN0YWxsYXRpb24gcGF0aC4KICAgICAgICAgICAgICAgVGhlIGRidXMgaW5zdGFsbGF0aW9uIHBhdGggaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZSBsb2NhdGlvbiBvZgogICAgICAgICAgICAgICB0aGUgc2hhcmVkIGRidXMgbGlicmFyeS4gSWYgdGhlIGxpYnJhcnkgaXMgbG9jYXRlZCBpbiBhICdiaW4nCiAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeSB0aGUgaW5zdGFsbGF0aW9uIHJvb3QgaXMgdGhlIGRpcmVjdG9yeSBhYm92ZSwKICAgICAgICAgICAgICAgb3RoZXJ3aXNlIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGxpYnJhcnkgbGl2ZXMgaXMgdGFrZW4gYXMKICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIHJvb3QuCiAgICAgICAgICAgICAgIDwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CiAgICAgICAgICAgICAgICAgICAmbHQ7aW5zdGFsbC1yb290Jmd0Oy9iaW4vW2xpYl1kYnVzLTEuZGxsCiAgICAgICAgICAgICAgICAgICAmbHQ7aW5zdGFsbC1yb290Jmd0Oy9bbGliXWRidXMtMS5kbGwKICAgICAgICAgICAgICAgPC9wcmU+PHA+CiAgICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgICIqdXNlciIgLSBsaW1pdCBzZXNzaW9uIGJ1cyB0byB0aGUgcmVjZW50IHVzZXIuCiAgICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgIG90aGVyIHZhbHVlcyAtIHNwZWNpZnkgZGVkaWNhdGVkIHNlc3Npb24gYnVzIGxpa2UgInJlbGVhc2UiLAogICAgICAgICAgICAgICAiZGVidWciIG9yIG90aGVyCiAgICAgICAgICAgICAgPC9wPjwvbGk+PC91bD48L2Rpdj4KICAgICAgICAgICA8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iV2luZG93cyBpbXBsZW1lbnRhdGlvbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0ibWV0YS10cmFuc3BvcnRzLWF1dG9sYXVuY2gtd2luZG93cy1pbXBsZW1lbnRhdGlvbiI+PC9hPldpbmRvd3MgaW1wbGVtZW50YXRpb248L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgIE9uIHN0YXJ0LCB0aGUgc2VydmVyIG9wZW5zIGEgcGxhdGZvcm0gc3BlY2lmaWMgdHJhbnNwb3J0LCBjcmVhdGVzIGEgbXV0ZXgKICAgICAgICBhbmQgYSBzaGFyZWQgbWVtb3J5IHNlY3Rpb24gY29udGFpbmluZyB0aGUgcmVsYXRlZCBzZXNzaW9uIGJ1cyBhZGRyZXNzLgogICAgICAgIFRoaXMgbXV0ZXggd2lsbCBiZSBpbnNwZWN0ZWQgYnkgdGhlIGRidXMgY2xpZW50IGxpYnJhcnkgdG8gZGV0ZWN0IGEKICAgICAgICBydW5uaW5nIGRidXMgc2Vzc2lvbiBidXMuIFRoZSBhY2Nlc3MgdG8gdGhlIG11dGV4IGFuZCB0aGUgc2hhcmVkIG1lbW9yeQogICAgICAgIHNlY3Rpb24gYXJlIHByb3RlY3RlZCBieSBnbG9iYWwgbG9ja3MuCiAgICAgIDwvcD48cD4KICAgICAgIEluIHRoZSByZWNlbnQgaW1wbGVtZW50YXRpb24gdGhlIGF1dG9sYXVuY2ggdHJhbnNwb3J0IHVzZXMgYSB0Y3AgdHJhbnNwb3J0CiAgICAgICBvbiBsb2NhbGhvc3Qgd2l0aCBhIHBvcnQgY2hvb3NlbiBmcm9tIHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBUaGlzIGRldGFpbCBtYXkKICAgICAgIGNoYW5nZSBpbiB0aGUgZnV0dXJlLgogICAgICA8L3A+PHA+CiAgICAgICAgRGlzY2xhaW1lcjogVGhlIHJlY2VudCBpbXBsZW1lbnRhdGlvbiBpcyBpbiBhbiBlYXJseSBzdGF0ZSBhbmQgbWF5IG5vdAogICAgICAgIHdvcmsgaW4gYWxsIGNpcnVtc3RhbmNlcyBhbmQvb3IgbWF5IGhhdmUgc2VjdXJpdHkgaXNzdWVzLiBCZWNhdXNlIG9mIHRoaXMKICAgICAgICB0aGUgaW1wbGVtZW50YXRpb24gaXMgbm90IGRvY3VtZW50YXRlZCB5ZXQuCiAgICAgIDwvcD48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9Ik5hbWluZyBDb252ZW50aW9ucyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJuYW1pbmctY29udmVudGlvbnMiPjwvYT5OYW1pbmcgQ29udmVudGlvbnM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICBELUJ1cyBuYW1lc3BhY2VzIGFyZSBhbGwgbG93ZXJjYXNlIGFuZCBjb3JyZXNwb25kIHRvIHJldmVyc2VkIGRvbWFpbgogICAgICBuYW1lcywgYXMgd2l0aCBKYXZhLiBlLmcuICJvcmcuZnJlZWRlc2t0b3AiCiAgICA8L3A+PHA+CiAgICAgIEludGVyZmFjZSwgc2lnbmFsLCBtZXRob2QsIGFuZCBwcm9wZXJ0eSBuYW1lcyBhcmUgIldpbmRvd3NTdHlsZUNhcHMiLCBub3RlCiAgICAgIHRoYXQgdGhlIGZpcnN0IGxldHRlciBpcyBjYXBpdGFsaXplZCwgdW5saWtlIEphdmEuCiAgICA8L3A+PHA+CiAgICAgIE9iamVjdCBwYXRocyBhcmUgbm9ybWFsbHkgYWxsIGxvd2VyY2FzZSB3aXRoIHVuZGVyc2NvcmVzIHVzZWQgcmF0aGVyIHRoYW4KICAgICAgaHlwaGVucy4KICAgIDwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IlVVSURzIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9InV1aWRzIj48L2E+VVVJRHM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICBBIHdvcmtpbmcgRC1CdXMgaW1wbGVtZW50YXRpb24gdXNlcyB1bml2ZXJzYWxseS11bmlxdWUgSURzIGluIHR3byBwbGFjZXMuCiAgICAgIEZpcnN0LCBlYWNoIHNlcnZlciBhZGRyZXNzIGhhcyBhIFVVSUQgaWRlbnRpZnlpbmcgdGhlIGFkZHJlc3MsIAogICAgICBhcyBkZXNjcmliZWQgaW4gPGEgY2xhc3M9InhyZWYiIGhyZWY9IiNhZGRyZXNzZXMiIHRpdGxlPSJTZXJ2ZXIgQWRkcmVzc2VzIj50aGUgc2VjdGlvbiBjYWxsZWQgJiM4MjIwO1NlcnZlciBBZGRyZXNzZXMmIzgyMjE7PC9hPi4gU2Vjb25kLCBlYWNoIG9wZXJhdGluZwogICAgICBzeXN0ZW0ga2VybmVsIGluc3RhbmNlIHJ1bm5pbmcgYSBELUJ1cyBjbGllbnQgb3Igc2VydmVyIGhhcyBhIFVVSUQKICAgICAgaWRlbnRpZnlpbmcgdGhhdCBrZXJuZWwsIHJldHJpZXZlZCBieSBpbnZva2luZyB0aGUgbWV0aG9kCiAgICAgIG9yZy5mcmVlZGVza3RvcC5EQnVzLlBlZXIuR2V0TWFjaGluZUlkKCkgKHNlZSA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI3N0YW5kYXJkLWludGVyZmFjZXMtcGVlciIgdGl0bGU9Im9yZy5mcmVlZGVza3RvcC5EQnVzLlBlZXIiPnRoZSBzZWN0aW9uIGNhbGxlZCAmIzgyMjA7PGNvZGUgY2xhc3M9ImxpdGVyYWwiPm9yZy5mcmVlZGVza3RvcC5EQnVzLlBlZXI8L2NvZGU+JiM4MjIxOzwvYT4pLgogICAgPC9wPjxwPgogICAgICBUaGUgdGVybSAiVVVJRCIgaW4gdGhpcyBkb2N1bWVudCBpcyBpbnRlbmRlZCBsaXRlcmFsbHksIGkuZS4gYW4KICAgICAgaWRlbnRpZmllciB0aGF0IGlzIHVuaXZlcnNhbGx5IHVuaXF1ZS4gSXQgaXMgbm90IGludGVuZGVkIHRvIHJlZmVyIHRvCiAgICAgIFJGQzQxMjIsIGFuZCBpbiBmYWN0IHRoZSBELUJ1cyBVVUlEIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhhdCBSRkMuCiAgICA8L3A+PHA+CiAgICAgIFRoZSBVVUlEIG11c3QgY29udGFpbiAxMjggYml0cyBvZiBkYXRhIGFuZCBiZSBoZXgtZW5jb2RlZC4gIFRoZQogICAgICBoZXgtZW5jb2RlZCBzdHJpbmcgbWF5IG5vdCBjb250YWluIGh5cGhlbnMgb3Igb3RoZXIgbm9uLWhleC1kaWdpdAogICAgICBjaGFyYWN0ZXJzLCBhbmQgaXQgbXVzdCBiZSBleGFjdGx5IDMyIGNoYXJhY3RlcnMgbG9uZy4gIFRvIGdlbmVyYXRlIGEKICAgICAgVVVJRCwgdGhlIGN1cnJlbnQgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGNvbmNhdGVuYXRlcyA5NiBiaXRzIG9mIHJhbmRvbQogICAgICBkYXRhIGZvbGxvd2VkIGJ5IHRoZSAzMi1iaXQgdGltZSBpbiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoIChpbiBiaWcKICAgICAgZW5kaWFuIGJ5dGUgb3JkZXIpLgogICAgPC9wPjxwPgogICAgICBJdCB3b3VsZCBhbHNvIGJlIGFjY2VwdGFibGUgYW5kIHByb2JhYmx5IGJldHRlciB0byBzaW1wbHkgZ2VuZXJhdGUgMTI4CiAgICAgIGJpdHMgb2YgcmFuZG9tIGRhdGEsIGFzIGxvbmcgYXMgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGlzIG9mIGhpZ2gKICAgICAgcXVhbGl0eS4gVGhlIHRpbWVzdGFtcCBjb3VsZCBjb25jZWl2YWJseSBoZWxwIGlmIHRoZSByYW5kb20gYml0cyBhcmUgbm90CiAgICAgIHZlcnkgcmFuZG9tLiBXaXRoIGEgcXVhbGl0eSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciwgY29sbGlzaW9ucyBhcmUKICAgICAgZXh0cmVtZWx5IHVubGlrZWx5IGV2ZW4gd2l0aCBvbmx5IDk2IGJpdHMsIHNvIGl0J3Mgc29tZXdoYXQgYWNhZGVtaWMuCiAgICA8L3A+PHA+CiAgICAgIEltcGxlbWVudGF0aW9ucyBzaG91bGQsIGhvd2V2ZXIsIHN0aWNrIHRvIHJhbmRvbSBkYXRhIGZvciB0aGUgZmlyc3QgOTYgYml0cwogICAgICBvZiB0aGUgVVVJRC4KICAgIDwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IlN0YW5kYXJkIEludGVyZmFjZXMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0ic3RhbmRhcmQtaW50ZXJmYWNlcyI+PC9hPlN0YW5kYXJkIEludGVyZmFjZXM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICBTZWUgPGEgY2xhc3M9InhyZWYiIGhyZWY9IiNtZXNzYWdlLXByb3RvY29sLXR5cGVzLW5vdGF0aW9uIiB0aXRsZT0iTm90YXRpb24gaW4gdGhpcyBkb2N1bWVudCI+dGhlIHNlY3Rpb24gY2FsbGVkICYjODIyMDtOb3RhdGlvbiBpbiB0aGlzIGRvY3VtZW50JiM4MjIxOzwvYT4gZm9yIGRldGFpbHMgb24gCiAgICAgICB0aGUgbm90YXRpb24gdXNlZCBpbiB0aGlzIHNlY3Rpb24uIFRoZXJlIGFyZSBzb21lIHN0YW5kYXJkIGludGVyZmFjZXMKICAgICAgdGhhdCBtYXkgYmUgdXNlZnVsIGFjcm9zcyB2YXJpb3VzIEQtQnVzIGFwcGxpY2F0aW9ucy4KICAgIDwvcD48ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9Im9yZy5mcmVlZGVza3RvcC5EQnVzLlBlZXIiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9InN0YW5kYXJkLWludGVyZmFjZXMtcGVlciI+PC9hPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5QZWVyPC9jb2RlPjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgVGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5QZWVyPC9jb2RlPiBpbnRlcmZhY2UgCiAgICAgICAgaGFzIHR3byBtZXRob2RzOgogICAgICAgIDwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CiAgICAgICAgICBvcmcuZnJlZWRlc2t0b3AuREJ1cy5QZWVyLlBpbmcgKCkKICAgICAgICAgIG9yZy5mcmVlZGVza3RvcC5EQnVzLlBlZXIuR2V0TWFjaGluZUlkIChvdXQgU1RSSU5HIG1hY2hpbmVfdXVpZCkKICAgICAgICA8L3ByZT48cD4KICAgICAgPC9wPjxwPgogICAgICAgIE9uIHJlY2VpcHQgb2YgdGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5NRVRIT0RfQ0FMTDwvY29kZT4gbWVzc2FnZQogICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5QZWVyLlBpbmc8L2NvZGU+LCBhbiBhcHBsaWNhdGlvbiBzaG91bGQgZG8KICAgICAgICBub3RoaW5nIG90aGVyIHRoYW4gcmVwbHkgd2l0aCBhIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5NRVRIT0RfUkVUVVJOPC9jb2RlPiBhcwogICAgICAgIHVzdWFsLiAgSXQgZG9lcyBub3QgbWF0dGVyIHdoaWNoIG9iamVjdCBwYXRoIGEgcGluZyBpcyBzZW50IHRvLiAgVGhlCiAgICAgICAgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgdGhpcyBtZXRob2QgYXV0b21hdGljYWxseS4KICAgICAgPC9wPjxwPgogICAgICAgIE9uIHJlY2VpcHQgb2YgdGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5NRVRIT0RfQ0FMTDwvY29kZT4gbWVzc2FnZQogICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5QZWVyLkdldE1hY2hpbmVJZDwvY29kZT4sIGFuIGFwcGxpY2F0aW9uIHNob3VsZCAKICAgICAgICByZXBseSB3aXRoIGEgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPk1FVEhPRF9SRVRVUk48L2NvZGU+IGNvbnRhaW5pbmcgYSBoZXgtZW5jb2RlZCAKICAgICAgICBVVUlEIHJlcHJlc2VudGluZyB0aGUgaWRlbnRpdHkgb2YgdGhlIG1hY2hpbmUgdGhlIHByb2Nlc3MgaXMgcnVubmluZyBvbi4KICAgICAgICBUaGlzIFVVSUQgbXVzdCBiZSB0aGUgc2FtZSBmb3IgYWxsIHByb2Nlc3NlcyBvbiBhIHNpbmdsZSBzeXN0ZW0gYXQgbGVhc3QKICAgICAgICB1bnRpbCB0aGF0IHN5c3RlbSBuZXh0IHJlYm9vdHMuIEl0IHNob3VsZCBiZSB0aGUgc2FtZSBhY3Jvc3MgcmVib290cyAKICAgICAgICBpZiBwb3NzaWJsZSwgYnV0IHRoaXMgaXMgbm90IGFsd2F5cyBwb3NzaWJsZSB0byBpbXBsZW1lbnQgYW5kIGlzIG5vdCAKICAgICAgICBndWFyYW50ZWVkLgogICAgICAgIEl0IGRvZXMgbm90IG1hdHRlciB3aGljaCBvYmplY3QgcGF0aCBhIEdldE1hY2hpbmVJZCBpcyBzZW50IHRvLiAgVGhlCiAgICAgICAgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgdGhpcyBtZXRob2QgYXV0b21hdGljYWxseS4KICAgICAgPC9wPjxwPgogICAgICAgIFRoZSBVVUlEIGlzIGludGVuZGVkIHRvIGJlIHBlci1pbnN0YW5jZS1vZi10aGUtb3BlcmF0aW5nLXN5c3RlbSwgc28gbWF5IHJlcHJlc2VudAogICAgICAgIGEgdmlydHVhbCBtYWNoaW5lIHJ1bm5pbmcgb24gYSBoeXBlcnZpc29yLCByYXRoZXIgdGhhbiBhIHBoeXNpY2FsIG1hY2hpbmUuCiAgICAgICAgQmFzaWNhbGx5IGlmIHR3byBwcm9jZXNzZXMgc2VlIHRoZSBzYW1lIFVVSUQsIHRoZXkgc2hvdWxkIGFsc28gc2VlIHRoZSBzYW1lCiAgICAgICAgc2hhcmVkIG1lbW9yeSwgVU5JWCBkb21haW4gc29ja2V0cywgcHJvY2VzcyBJRHMsIGFuZCBvdGhlciBmZWF0dXJlcyB0aGF0IHJlcXVpcmUgCiAgICAgICAgYSBydW5uaW5nIE9TIGtlcm5lbCBpbiBjb21tb24gYmV0d2VlbiB0aGUgcHJvY2Vzc2VzLgogICAgICA8L3A+PHA+CiAgICAgICAgVGhlIFVVSUQgaXMgb2Z0ZW4gdXNlZCB3aGVyZSBvdGhlciBwcm9ncmFtcyBtaWdodCB1c2UgYSBob3N0bmFtZS4gSG9zdG5hbWVzIAogICAgICAgIGNhbiBjaGFuZ2Ugd2l0aG91dCByZWJvb3RpbmcsIGhvd2V2ZXIsIG9yIGp1c3QgYmUgImxvY2FsaG9zdCIgLSBzbyB0aGUgVVVJRAogICAgICAgIGlzIG1vcmUgcm9idXN0LgogICAgICA8L3A+PHA+CiAgICAgICAgPGEgY2xhc3M9InhyZWYiIGhyZWY9IiN1dWlkcyIgdGl0bGU9IlVVSURzIj50aGUgc2VjdGlvbiBjYWxsZWQgJiM4MjIwO1VVSURzJiM4MjIxOzwvYT4gZXhwbGFpbnMgdGhlIGZvcm1hdCBvZiB0aGUgVVVJRC4KICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0ib3JnLmZyZWVkZXNrdG9wLkRCdXMuSW50cm9zcGVjdGFibGUiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9InN0YW5kYXJkLWludGVyZmFjZXMtaW50cm9zcGVjdGFibGUiPjwvYT48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkRCdXMuSW50cm9zcGVjdGFibGU8L2NvZGU+PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBUaGlzIGludGVyZmFjZSBoYXMgb25lIG1ldGhvZDoKICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogICAgICAgICAgb3JnLmZyZWVkZXNrdG9wLkRCdXMuSW50cm9zcGVjdGFibGUuSW50cm9zcGVjdCAob3V0IFNUUklORyB4bWxfZGF0YSkKICAgICAgICA8L3ByZT48cD4KICAgICAgPC9wPjxwPgogICAgICAgIE9iamVjdHMgaW5zdGFuY2VzIG1heSBpbXBsZW1lbnQKICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+SW50cm9zcGVjdDwvY29kZT4gd2hpY2ggcmV0dXJucyBhbiBYTUwgZGVzY3JpcHRpb24gb2YKICAgICAgICB0aGUgb2JqZWN0LCBpbmNsdWRpbmcgaXRzIGludGVyZmFjZXMgKHdpdGggc2lnbmFscyBhbmQgbWV0aG9kcyksIG9iamVjdHMKICAgICAgICBiZWxvdyBpdCBpbiB0aGUgb2JqZWN0IHBhdGggdHJlZSwgYW5kIGl0cyBwcm9wZXJ0aWVzLgogICAgICA8L3A+PHA+CiAgICAgICAgPGEgY2xhc3M9InhyZWYiIGhyZWY9IiNpbnRyb3NwZWN0aW9uLWZvcm1hdCIgdGl0bGU9IkludHJvc3BlY3Rpb24gRGF0YSBGb3JtYXQiPnRoZSBzZWN0aW9uIGNhbGxlZCAmIzgyMjA7SW50cm9zcGVjdGlvbiBEYXRhIEZvcm1hdCYjODIyMTs8L2E+IGRlc2NyaWJlcyB0aGUgZm9ybWF0IG9mIHRoaXMgWE1MIHN0cmluZy4KICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0ib3JnLmZyZWVkZXNrdG9wLkRCdXMuUHJvcGVydGllcyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0ic3RhbmRhcmQtaW50ZXJmYWNlcy1wcm9wZXJ0aWVzIj48L2E+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPm9yZy5mcmVlZGVza3RvcC5EQnVzLlByb3BlcnRpZXM8L2NvZGU+PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBNYW55IG5hdGl2ZSBBUElzIHdpbGwgaGF2ZSBhIGNvbmNlcHQgb2Ygb2JqZWN0IDxlbSBjbGFzcz0iZmlyc3R0ZXJtIj5wcm9wZXJ0aWVzPC9lbT4gCiAgICAgICAgb3IgPGVtIGNsYXNzPSJmaXJzdHRlcm0iPmF0dHJpYnV0ZXM8L2VtPi4gVGhlc2UgY2FuIGJlIGV4cG9zZWQgdmlhIHRoZSAKICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkRCdXMuUHJvcGVydGllczwvY29kZT4gaW50ZXJmYWNlLgogICAgICA8L3A+PHA+CiAgICAgICAgPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgICAgICBvcmcuZnJlZWRlc2t0b3AuREJ1cy5Qcm9wZXJ0aWVzLkdldCAoaW4gU1RSSU5HIGludGVyZmFjZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBTVFJJTkcgcHJvcGVydHlfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IFZBUklBTlQgdmFsdWUpOwogICAgICAgICAgICAgIG9yZy5mcmVlZGVza3RvcC5EQnVzLlByb3BlcnRpZXMuU2V0IChpbiBTVFJJTkcgaW50ZXJmYWNlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFNUUklORyBwcm9wZXJ0eV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBWQVJJQU5UIHZhbHVlKTsKICAgICAgICAgICAgICBvcmcuZnJlZWRlc2t0b3AuREJ1cy5Qcm9wZXJ0aWVzLkdldEFsbCAoaW4gU1RSSU5HIGludGVyZmFjZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgRElDVCZsdDtTVFJJTkcsVkFSSUFOVCZndDsgcHJvcHMpOwogICAgICAgIDwvcHJlPjxwPgogICAgICA8L3A+PHA+CiAgICAgICAgVGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGFuZCB3aGV0aGVyIHRoZXkgYXJlIHdyaXRhYmxlIGNhbiBiZSBkZXRlcm1pbmVkCiAgICAgICAgYnkgY2FsbGluZyA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkRCdXMuSW50cm9zcGVjdGFibGUuSW50cm9zcGVjdDwvY29kZT4sCiAgICAgICAgc2VlIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjc3RhbmRhcmQtaW50ZXJmYWNlcy1pbnRyb3NwZWN0YWJsZSIgdGl0bGU9Im9yZy5mcmVlZGVza3RvcC5EQnVzLkludHJvc3BlY3RhYmxlIj50aGUgc2VjdGlvbiBjYWxsZWQgJiM4MjIwOzxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5JbnRyb3NwZWN0YWJsZTwvY29kZT4mIzgyMjE7PC9hPi4KICAgICAgPC9wPjxwPgogICAgICAgIEFuIGVtcHR5IHN0cmluZyBtYXkgYmUgcHJvdmlkZWQgZm9yIHRoZSBpbnRlcmZhY2UgbmFtZTsgaW4gdGhpcyBjYXNlLCAKICAgICAgICBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgcHJvcGVydGllcyBvbiBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBuYW1lLCAKICAgICAgICB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkIChwaWNraW5nIG9uZSBieSBhY2NvcmRpbmcgdG8gYW4gYXJiaXRyYXJ5IAogICAgICAgIGRldGVybWluaXN0aWMgcnVsZSwgb3IgcmV0dXJuaW5nIGFuIGVycm9yLCBhcmUgdGhlIHJlYXNvbmFibGUgCiAgICAgICAgcG9zc2liaWxpdGllcykuCiAgICAgIDwvcD48cD4KICAgICAgICBJZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzIGNoYW5nZSBvbiBhbiBvYmplY3QsIHRoZQogICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5Qcm9wZXJ0aWVzLlByb3BlcnRpZXNDaGFuZ2VkPC9jb2RlPgogICAgICAgIHNpZ25hbCBtYXkgYmUgZW1pdHRlZCAodGhpcyBzaWduYWwgd2FzIGFkZGVkIGluIDAuMTQpOgogICAgICA8L3A+PHA+CiAgICAgICAgPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgICAgICBvcmcuZnJlZWRlc2t0b3AuREJ1cy5Qcm9wZXJ0aWVzLlByb3BlcnRpZXNDaGFuZ2VkIChTVFJJTkcgaW50ZXJmYWNlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRElDVCZsdDtTVFJJTkcsVkFSSUFOVCZndDsgY2hhbmdlZF9wcm9wZXJ0aWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSUkFZJmx0O1NUUklORyZndDsgaW52YWxpZGF0ZWRfcHJvcGVydGllcyk7CiAgICAgICAgPC9wcmU+PHA+CiAgICAgIDwvcD48cD4KICAgICAgICB3aGVyZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Y2hhbmdlZF9wcm9wZXJ0aWVzPC9jb2RlPiBpcyBhIGRpY3Rpb25hcnkKICAgICAgICBjb250YWluaW5nIHRoZSBjaGFuZ2VkIHByb3BlcnRpZXMgd2l0aCB0aGUgbmV3IHZhbHVlcyBhbmQKICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW52YWxpZGF0ZWRfcHJvcGVydGllczwvY29kZT4gaXMgYW4gYXJyYXkgb2YKICAgICAgICBwcm9wZXJ0aWVzIHRoYXQgY2hhbmdlZCBidXQgdGhlIHZhbHVlIGlzIG5vdCBjb252ZXllZC4KICAgICAgPC9wPjxwPgogICAgICAgIFdoZXRoZXIgdGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5Qcm9wZXJ0aWVzQ2hhbmdlZDwvY29kZT4gc2lnbmFsIGlzCiAgICAgICAgc3VwcG9ydGVkIGNhbiBiZSBkZXRlcm1pbmVkIGJ5IGNhbGxpbmcKICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkRCdXMuSW50cm9zcGVjdGFibGUuSW50cm9zcGVjdDwvY29kZT4uIE5vdGUKICAgICAgICB0aGF0IHRoZSBzaWduYWwgbWF5IGJlIHN1cHBvcnRlZCBmb3IgYW4gb2JqZWN0IGJ1dCBpdCBtYXkKICAgICAgICBkaWZmZXIgaG93IHdoZXRoZXIgYW5kIGhvdyBpdCBpcyB1c2VkIG9uIGEgcGVyLXByb3BlcnR5IGJhc2lzCiAgICAgICAgKGZvciBlLmcuIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5IHJlYXNvbnMpLiBFYWNoIHByb3BlcnR5IChvcgogICAgICAgIHRoZSBwYXJlbnQgaW50ZXJmYWNlKSBtdXN0IGJlIGFubm90YXRlZCB3aXRoIHRoZQogICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5Qcm9wZXJ0eS5FbWl0c0NoYW5nZWRTaWduYWw8L2NvZGU+CiAgICAgICAgYW5ub3RhdGlvbiB0byBjb252ZXkgdGhpcyAodXN1YWxseSB0aGUgZGVmYXVsdCB2YWx1ZQogICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj50cnVlPC9jb2RlPiBpcyBzdWZmaWNpZW50IG1lYW5pbmcgdGhhdCB0aGUKICAgICAgICBhbm5vdGF0aW9uIGRvZXMgbm90IG5lZWQgdG8gYmUgdXNlZCkuIFNlZSA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI2ludHJvc3BlY3Rpb24tZm9ybWF0IiB0aXRsZT0iSW50cm9zcGVjdGlvbiBEYXRhIEZvcm1hdCI+dGhlIHNlY3Rpb24gY2FsbGVkICYjODIyMDtJbnRyb3NwZWN0aW9uIERhdGEgRm9ybWF0JiM4MjIxOzwvYT4gZm9yIGRldGFpbHMgb24gdGhpcwogICAgICAgIGFubm90YXRpb24uCiAgICAgIDwvcD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IkludHJvc3BlY3Rpb24gRGF0YSBGb3JtYXQiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iaW50cm9zcGVjdGlvbi1mb3JtYXQiPjwvYT5JbnRyb3NwZWN0aW9uIERhdGEgRm9ybWF0PC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgQXMgZGVzY3JpYmVkIGluIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjc3RhbmRhcmQtaW50ZXJmYWNlcy1pbnRyb3NwZWN0YWJsZSIgdGl0bGU9Im9yZy5mcmVlZGVza3RvcC5EQnVzLkludHJvc3BlY3RhYmxlIj50aGUgc2VjdGlvbiBjYWxsZWQgJiM4MjIwOzxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5JbnRyb3NwZWN0YWJsZTwvY29kZT4mIzgyMjE7PC9hPiwgCiAgICAgIG9iamVjdHMgbWF5IGJlIGludHJvc3BlY3RlZCBhdCBydW50aW1lLCByZXR1cm5pbmcgYW4gWE1MIHN0cmluZyAKICAgICAgdGhhdCBkZXNjcmliZXMgdGhlIG9iamVjdC4gVGhlIHNhbWUgWE1MIGZvcm1hdCBtYXkgYmUgdXNlZCBpbiAKICAgICAgb3RoZXIgY29udGV4dHMgYXMgd2VsbCwgZm9yIGV4YW1wbGUgYXMgYW4gIklETCIgZm9yIGdlbmVyYXRpbmcgCiAgICAgIHN0YXRpYyBsYW5ndWFnZSBiaW5kaW5ncy4KICAgIDwvcD48cD4KICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIG9mIGludHJvc3BlY3Rpb24gZGF0YToKICAgICAgPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAmbHQ7IURPQ1RZUEUgbm9kZSBQVUJMSUMgIi0vL2ZyZWVkZXNrdG9wLy9EVEQgRC1CVVMgT2JqZWN0IEludHJvc3BlY3Rpb24gMS4wLy9FTiIKICAgICAgICAgImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3N0YW5kYXJkcy9kYnVzLzEuMC9pbnRyb3NwZWN0LmR0ZCImZ3Q7CiAgICAgICAgJmx0O25vZGUgbmFtZT0iL29yZy9mcmVlZGVza3RvcC9zYW1wbGVfb2JqZWN0IiZndDsKICAgICAgICAgICZsdDtpbnRlcmZhY2UgbmFtZT0ib3JnLmZyZWVkZXNrdG9wLlNhbXBsZUludGVyZmFjZSImZ3Q7CiAgICAgICAgICAgICZsdDttZXRob2QgbmFtZT0iRnJvYmF0ZSImZ3Q7CiAgICAgICAgICAgICAgJmx0O2FyZyBuYW1lPSJmb28iIHR5cGU9ImkiIGRpcmVjdGlvbj0iaW4iLyZndDsKICAgICAgICAgICAgICAmbHQ7YXJnIG5hbWU9ImJhciIgdHlwZT0icyIgZGlyZWN0aW9uPSJvdXQiLyZndDsKICAgICAgICAgICAgICAmbHQ7YXJnIG5hbWU9ImJheiIgdHlwZT0iYXt1c30iIGRpcmVjdGlvbj0ib3V0Ii8mZ3Q7CiAgICAgICAgICAgICAgJmx0O2Fubm90YXRpb24gbmFtZT0ib3JnLmZyZWVkZXNrdG9wLkRCdXMuRGVwcmVjYXRlZCIgdmFsdWU9InRydWUiLyZndDsKICAgICAgICAgICAgJmx0Oy9tZXRob2QmZ3Q7CiAgICAgICAgICAgICZsdDttZXRob2QgbmFtZT0iQmF6aWZ5IiZndDsKICAgICAgICAgICAgICAmbHQ7YXJnIG5hbWU9ImJhciIgdHlwZT0iKGlpdSkiIGRpcmVjdGlvbj0iaW4iLyZndDsKICAgICAgICAgICAgICAmbHQ7YXJnIG5hbWU9ImJhciIgdHlwZT0idiIgZGlyZWN0aW9uPSJvdXQiLyZndDsKICAgICAgICAgICAgJmx0Oy9tZXRob2QmZ3Q7CiAgICAgICAgICAgICZsdDttZXRob2QgbmFtZT0iTW9ncmlmeSImZ3Q7CiAgICAgICAgICAgICAgJmx0O2FyZyBuYW1lPSJiYXIiIHR5cGU9IihpaWF2KSIgZGlyZWN0aW9uPSJpbiIvJmd0OwogICAgICAgICAgICAmbHQ7L21ldGhvZCZndDsKICAgICAgICAgICAgJmx0O3NpZ25hbCBuYW1lPSJDaGFuZ2VkIiZndDsKICAgICAgICAgICAgICAmbHQ7YXJnIG5hbWU9Im5ld192YWx1ZSIgdHlwZT0iYiIvJmd0OwogICAgICAgICAgICAmbHQ7L3NpZ25hbCZndDsKICAgICAgICAgICAgJmx0O3Byb3BlcnR5IG5hbWU9IkJhciIgdHlwZT0ieSIgYWNjZXNzPSJyZWFkd3JpdGUiLyZndDsKICAgICAgICAgICZsdDsvaW50ZXJmYWNlJmd0OwogICAgICAgICAgJmx0O25vZGUgbmFtZT0iY2hpbGRfb2Zfc2FtcGxlX29iamVjdCIvJmd0OwogICAgICAgICAgJmx0O25vZGUgbmFtZT0iYW5vdGhlcl9jaGlsZF9vZl9zYW1wbGVfb2JqZWN0Ii8mZ3Q7CiAgICAgICAmbHQ7L25vZGUmZ3Q7CiAgICAgIDwvcHJlPjxwPgogICAgPC9wPjxwPgogICAgICBBIG1vcmUgZm9ybWFsIERURCBhbmQgc3BlYyBuZWVkcyB3cml0aW5nLCBidXQgaGVyZSBhcmUgc29tZSBxdWljayBub3Rlcy4KICAgICAgPC9wPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICBPbmx5IHRoZSByb290ICZsdDtub2RlJmd0OyBlbGVtZW50IGNhbiBvbWl0IHRoZSBub2RlIG5hbWUsIGFzIGl0J3MKICAgICAgICAgICAga25vd24gdG8gYmUgdGhlIG9iamVjdCB0aGF0IHdhcyBpbnRyb3NwZWN0ZWQuICBJZiB0aGUgcm9vdAogICAgICAgICAgICAmbHQ7bm9kZSZndDsgZG9lcyBoYXZlIGEgbmFtZSBhdHRyaWJ1dGUsIGl0IG11c3QgYmUgYW4gYWJzb2x1dGUKICAgICAgICAgICAgb2JqZWN0IHBhdGguIElmIGNoaWxkICZsdDtub2RlJmd0OyBoYXZlIG9iamVjdCBwYXRocywgdGhleSBtdXN0IGJlCiAgICAgICAgICAgIHJlbGF0aXZlLgogICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgIElmIGEgY2hpbGQgJmx0O25vZGUmZ3Q7IGhhcyBhbnkgc3ViLWVsZW1lbnRzLCB0aGVuIHRoZXkgCiAgICAgICAgICAgIG11c3QgcmVwcmVzZW50IGEgY29tcGxldGUgaW50cm9zcGVjdGlvbiBvZiB0aGUgY2hpbGQuCiAgICAgICAgICAgIElmIGEgY2hpbGQgJmx0O25vZGUmZ3Q7IGlzIGVtcHR5LCB0aGVuIGl0IG1heSBvciBtYXkgCiAgICAgICAgICAgIG5vdCBoYXZlIHN1Yi1lbGVtZW50czsgdGhlIGNoaWxkIG11c3QgYmUgaW50cm9zcGVjdGVkCiAgICAgICAgICAgIGluIG9yZGVyIHRvIGZpbmQgb3V0LiBUaGUgaW50ZW50IGlzIHRoYXQgaWYgYW4gb2JqZWN0IAogICAgICAgICAgICBrbm93cyB0aGF0IGl0cyBjaGlsZHJlbiBhcmUgImZhc3QiIHRvIGludHJvc3BlY3QKICAgICAgICAgICAgaXQgY2FuIGdvIGFoZWFkIGFuZCByZXR1cm4gdGhlaXIgaW5mb3JtYXRpb24sIGJ1dCAKICAgICAgICAgICAgb3RoZXJ3aXNlIGl0IGNhbiBvbWl0IGl0LgogICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgIFRoZSBkaXJlY3Rpb24gZWxlbWVudCBvbiAmbHQ7YXJnJmd0OyBtYXkgYmUgb21pdHRlZCwgCiAgICAgICAgICAgIGluIHdoaWNoIGNhc2UgaXQgZGVmYXVsdHMgdG8gImluIiBmb3IgbWV0aG9kIGNhbGxzIAogICAgICAgICAgICBhbmQgIm91dCIgZm9yIHNpZ25hbHMuIFNpZ25hbHMgb25seSBhbGxvdyAib3V0IiAKICAgICAgICAgICAgc28gd2hpbGUgZGlyZWN0aW9uIG1heSBiZSBzcGVjaWZpZWQsIGl0J3MgcG9pbnRsZXNzLgogICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgIFRoZSBwb3NzaWJsZSBkaXJlY3Rpb25zIGFyZSAiaW4iIGFuZCAib3V0IiwgCiAgICAgICAgICAgIHVubGlrZSBDT1JCQSB0aGVyZSBpcyBubyAiaW5vdXQiCiAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgVGhlIHBvc3NpYmxlIHByb3BlcnR5IGFjY2VzcyBmbGFncyBhcmUgCiAgICAgICAgICAgICJyZWFkd3JpdGUiLCAicmVhZCIsIGFuZCAid3JpdGUiCiAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgTXVsdGlwbGUgaW50ZXJmYWNlcyBjYW4gb2YgY291cnNlIGJlIGxpc3RlZCBmb3IgCiAgICAgICAgICAgIG9uZSAmbHQ7bm9kZSZndDsuCiAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgVGhlICJuYW1lIiBhdHRyaWJ1dGUgb24gYXJndW1lbnRzIGlzIG9wdGlvbmFsLgogICAgICAgICAgPC9wPjwvbGk+PC91bD48L2Rpdj48cD4KICAgIDwvcD48cD4KICAgICAgICBNZXRob2QsIGludGVyZmFjZSwgcHJvcGVydHksIGFuZCBzaWduYWwgZWxlbWVudHMgbWF5IGhhdmUKICAgICAgICAiYW5ub3RhdGlvbnMiLCB3aGljaCBhcmUgZ2VuZXJpYyBrZXkvdmFsdWUgcGFpcnMgb2YgbWV0YWRhdGEuCglUaGV5IGFyZSBzaW1pbGFyIGNvbmNlcHR1YWxseSB0byBKYXZhJ3MgYW5ub3RhdGlvbnMgYW5kIEMjIGF0dHJpYnV0ZXMuCiAgICAgICAgV2VsbC1rbm93biBhbm5vdGF0aW9uczoKICAgICA8L3A+PGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGJvcmRlcj0iMSI+PGNvbGdyb3VwPjxjb2w+PGNvbD48Y29sPjwvY29sZ3JvdXA+PHRoZWFkPjx0cj48dGg+TmFtZTwvdGg+PHRoPlZhbHVlcyAoc2VwYXJhdGVkIGJ5ICwpPC90aD48dGg+RGVzY3JpcHRpb248L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZD5vcmcuZnJlZWRlc2t0b3AuREJ1cy5EZXByZWNhdGVkPC90ZD48dGQ+dHJ1ZSxmYWxzZTwvdGQ+PHRkPldoZXRoZXIgb3Igbm90IHRoZSBlbnRpdHkgaXMgZGVwcmVjYXRlZDsgZGVmYXVsdHMgdG8gZmFsc2U8L3RkPjwvdHI+PHRyPjx0ZD5vcmcuZnJlZWRlc2t0b3AuREJ1cy5HTGliLkNTeW1ib2w8L3RkPjx0ZD4oc3RyaW5nKTwvdGQ+PHRkPlRoZSBDIHN5bWJvbDsgbWF5IGJlIHVzZWQgZm9yIG1ldGhvZHMgYW5kIGludGVyZmFjZXM8L3RkPjwvdHI+PHRyPjx0ZD5vcmcuZnJlZWRlc2t0b3AuREJ1cy5NZXRob2QuTm9SZXBseTwvdGQ+PHRkPnRydWUsZmFsc2U8L3RkPjx0ZD5JZiBzZXQsIGRvbid0IGV4cGVjdCBhIHJlcGx5IHRvIHRoZSBtZXRob2QgY2FsbDsgZGVmYXVsdHMgdG8gZmFsc2UuPC90ZD48L3RyPjx0cj48dGQ+b3JnLmZyZWVkZXNrdG9wLkRCdXMuUHJvcGVydHkuRW1pdHNDaGFuZ2VkU2lnbmFsPC90ZD48dGQ+dHJ1ZSxpbnZhbGlkYXRlcyxmYWxzZTwvdGQ+PHRkPgogICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmZhbHNlPC9jb2RlPiwgdGhlCiAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm9yZy5mcmVlZGVza3RvcC5EQnVzLlByb3BlcnRpZXMuUHJvcGVydGllc0NoYW5nZWQ8L2NvZGU+CiAgICAgICAgICAgICAgICAgc2lnbmFsLCBzZWUgPGEgY2xhc3M9InhyZWYiIGhyZWY9IiNzdGFuZGFyZC1pbnRlcmZhY2VzLXByb3BlcnRpZXMiIHRpdGxlPSJvcmcuZnJlZWRlc2t0b3AuREJ1cy5Qcm9wZXJ0aWVzIj50aGUgc2VjdGlvbiBjYWxsZWQgJiM4MjIwOzxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5Qcm9wZXJ0aWVzPC9jb2RlPiYjODIyMTs8L2E+IGlzIG5vdAogICAgICAgICAgICAgICAgIGd1YXJhbnRlZWQgdG8gYmUgZW1pdHRlZCBpZiB0aGUgcHJvcGVydHkgY2hhbmdlcy4KICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmludmFsaWRhdGVzPC9jb2RlPiB0aGUgc2lnbmFsCiAgICAgICAgICAgICAgICAgaXMgZW1pdHRlZCBidXQgdGhlIHZhbHVlIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUKICAgICAgICAgICAgICAgICBzaWduYWwuCiAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgSWYgc2V0IHRvIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj50cnVlPC9jb2RlPiB0aGUgc2lnbmFsIGlzCiAgICAgICAgICAgICAgICAgZW1pdHRlZCB3aXRoIHRoZSB2YWx1ZSBpbmNsdWRlZC4KICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgZm9yIHRoZSBhbm5vdGF0aW9uIGRlZmF1bHRzIHRvCiAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPnRydWU8L2NvZGU+IGlmIHRoZSBlbmNsb3NpbmcgaW50ZXJmYWNlCiAgICAgICAgICAgICAgICAgZWxlbWVudCBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBhbm5vdGF0aW9uLiBPdGhlcndpc2UgaXQKICAgICAgICAgICAgICAgICBkZWZhdWx0cyB0byB0aGUgdmFsdWUgc3BlY2lmaWVkIGluIHRoZSBlbmNsb3NpbmcKICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgZWxlbWVudC4KICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9Ik1lc3NhZ2UgQnVzIFNwZWNpZmljYXRpb24iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0ibWVzc2FnZS1idXMiPjwvYT5NZXNzYWdlIEJ1cyBTcGVjaWZpY2F0aW9uPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9Ik1lc3NhZ2UgQnVzIE92ZXJ2aWV3Ij48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJtZXNzYWdlLWJ1cy1vdmVydmlldyI+PC9hPk1lc3NhZ2UgQnVzIE92ZXJ2aWV3PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBUaGUgbWVzc2FnZSBidXMgYWNjZXB0cyBjb25uZWN0aW9ucyBmcm9tIG9uZSBvciBtb3JlIGFwcGxpY2F0aW9ucy4gCiAgICAgICAgT25jZSBjb25uZWN0ZWQsIGFwcGxpY2F0aW9ucyBjYW4gZXhjaGFuZ2UgbWVzc2FnZXMgd2l0aCBvdGhlciAKICAgICAgICBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgYWxzbyBjb25uZWN0ZWQgdG8gdGhlIGJ1cy4KICAgICAgPC9wPjxwPgogICAgICAgIEluIG9yZGVyIHRvIHJvdXRlIG1lc3NhZ2VzIGFtb25nIGNvbm5lY3Rpb25zLCB0aGUgbWVzc2FnZSBidXMga2VlcHMgYQogICAgICAgIG1hcHBpbmcgZnJvbSBuYW1lcyB0byBjb25uZWN0aW9ucy4gRWFjaCBjb25uZWN0aW9uIGhhcyBvbmUKICAgICAgICB1bmlxdWUtZm9yLXRoZS1saWZldGltZS1vZi10aGUtYnVzIG5hbWUgYXV0b21hdGljYWxseSBhc3NpZ25lZC4KICAgICAgICBBcHBsaWNhdGlvbnMgbWF5IHJlcXVlc3QgYWRkaXRpb25hbCBuYW1lcyBmb3IgYSBjb25uZWN0aW9uLiBBZGRpdGlvbmFsCiAgICAgICAgbmFtZXMgYXJlIHVzdWFsbHkgIndlbGwta25vd24gbmFtZXMiIHN1Y2ggYXMKICAgICAgICAib3JnLmZyZWVkZXNrdG9wLlRleHRFZGl0b3IiLiBXaGVuIGEgbmFtZSBpcyBib3VuZCB0byBhIGNvbm5lY3Rpb24sCiAgICAgICAgdGhhdCBjb25uZWN0aW9uIGlzIHNhaWQgdG8gPGVtIGNsYXNzPSJmaXJzdHRlcm0iPm93bjwvZW0+IHRoZSBuYW1lLgogICAgICA8L3A+PHA+CiAgICAgICAgVGhlIGJ1cyBpdHNlbGYgb3ducyBhIHNwZWNpYWwgbmFtZSwgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm9yZy5mcmVlZGVza3RvcC5EQnVzPC9jb2RlPi4gCiAgICAgICAgVGhpcyBuYW1lIHJvdXRlcyBtZXNzYWdlcyB0byB0aGUgYnVzLCBhbGxvd2luZyBhcHBsaWNhdGlvbnMgdG8gbWFrZSAKICAgICAgICBhZG1pbmlzdHJhdGl2ZSByZXF1ZXN0cy4gRm9yIGV4YW1wbGUsIGFwcGxpY2F0aW9ucyBjYW4gYXNrIHRoZSBidXMgCiAgICAgICAgdG8gYXNzaWduIGEgbmFtZSB0byBhIGNvbm5lY3Rpb24uCiAgICAgIDwvcD48cD4KICAgICAgICBFYWNoIG5hbWUgbWF5IGhhdmUgPGVtIGNsYXNzPSJmaXJzdHRlcm0iPnF1ZXVlZCBvd25lcnM8L2VtPi4gIFdoZW4gYW4KICAgICAgICBhcHBsaWNhdGlvbiByZXF1ZXN0cyBhIG5hbWUgZm9yIGEgY29ubmVjdGlvbiBhbmQgdGhlIG5hbWUgaXMgYWxyZWFkeSBpbgogICAgICAgIHVzZSwgdGhlIGJ1cyB3aWxsIG9wdGlvbmFsbHkgYWRkIHRoZSBjb25uZWN0aW9uIHRvIGEgcXVldWUgd2FpdGluZyBmb3IgCiAgICAgICAgdGhlIG5hbWUuIElmIHRoZSBjdXJyZW50IG93bmVyIG9mIHRoZSBuYW1lIGRpc2Nvbm5lY3RzIG9yIHJlbGVhc2VzCiAgICAgICAgdGhlIG5hbWUsIHRoZSBuZXh0IGNvbm5lY3Rpb24gaW4gdGhlIHF1ZXVlIHdpbGwgYmVjb21lIHRoZSBuZXcgb3duZXIuCiAgICAgIDwvcD48cD4KICAgICAgICBUaGlzIGZlYXR1cmUgY2F1c2VzIHRoZSByaWdodCB0aGluZyB0byBoYXBwZW4gaWYgeW91IHN0YXJ0IHR3byB0ZXh0CiAgICAgICAgZWRpdG9ycyBmb3IgZXhhbXBsZTsgdGhlIGZpcnN0IG9uZSBtYXkgcmVxdWVzdCAib3JnLmZyZWVkZXNrdG9wLlRleHRFZGl0b3IiLCAKICAgICAgICBhbmQgdGhlIHNlY29uZCB3aWxsIGJlIHF1ZXVlZCBhcyBhIHBvc3NpYmxlIG93bmVyIG9mIHRoYXQgbmFtZS4gV2hlbiAKICAgICAgICB0aGUgZmlyc3QgZXhpdHMsIHRoZSBzZWNvbmQgd2lsbCB0YWtlIG92ZXIuCiAgICAgIDwvcD48cD4KICAgICAgICBNZXNzYWdlcyBtYXkgaGF2ZSBhIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5ERVNUSU5BVElPTjwvY29kZT4gZmllbGQgKHNlZSA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI21lc3NhZ2UtcHJvdG9jb2wtaGVhZGVyLWZpZWxkcyIgdGl0bGU9IkhlYWRlciBGaWVsZHMiPnRoZSBzZWN0aW9uIGNhbGxlZCAmIzgyMjA7SGVhZGVyIEZpZWxkcyYjODIyMTs8L2E+KS4gIElmIHRoZQogICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5ERVNUSU5BVElPTjwvY29kZT4gZmllbGQgaXMgcHJlc2VudCwgaXQgc3BlY2lmaWVzIGEgbWVzc2FnZQogICAgICAgIHJlY2lwaWVudCBieSBuYW1lLiBNZXRob2QgY2FsbHMgYW5kIHJlcGxpZXMgbm9ybWFsbHkgc3BlY2lmeSB0aGlzIGZpZWxkLgogICAgICAgIFRoZSBtZXNzYWdlIGJ1cyBtdXN0IHNlbmQgbWVzc2FnZXMgKG9mIGFueSB0eXBlKSB3aXRoIHRoZQogICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5ERVNUSU5BVElPTjwvY29kZT4gZmllbGQgc2V0IHRvIHRoZSBzcGVjaWZpZWQgcmVjaXBpZW50LAogICAgICAgIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcmVjaXBpZW50IGhhcyBzZXQgdXAgYSBtYXRjaCBydWxlIG1hdGNoaW5nCiAgICAgICAgdGhlIG1lc3NhZ2UuCiAgICAgIDwvcD48cD4KICAgICAgICBTaWduYWxzIG5vcm1hbGx5IGRvIG5vdCBzcGVjaWZ5IGEgZGVzdGluYXRpb247IHRoZXkgYXJlIHNlbnQgdG8gYWxsCiAgICAgICAgYXBwbGljYXRpb25zIHdpdGggPGVtIGNsYXNzPSJmaXJzdHRlcm0iPm1lc3NhZ2UgbWF0Y2hpbmcgcnVsZXM8L2VtPiB0aGF0CiAgICAgICAgbWF0Y2ggdGhlIG1lc3NhZ2UuCiAgICAgIDwvcD48cD4KICAgICAgICBXaGVuIHRoZSBtZXNzYWdlIGJ1cyByZWNlaXZlcyBhIG1ldGhvZCBjYWxsLCBpZiB0aGUKICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+REVTVElOQVRJT048L2NvZGU+IGZpZWxkIGlzIGFic2VudCwgdGhlIGNhbGwgaXMgdGFrZW4gdG8gYmUKICAgICAgICBhIHN0YW5kYXJkIG9uZS10by1vbmUgbWVzc2FnZSBhbmQgaW50ZXJwcmV0ZWQgYnkgdGhlIG1lc3NhZ2UgYnVzCiAgICAgICAgaXRzZWxmLiBGb3IgZXhhbXBsZSwgc2VuZGluZyBhbgogICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5QZWVyLlBpbmc8L2NvZGU+IG1lc3NhZ2Ugd2l0aCBubwogICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5ERVNUSU5BVElPTjwvY29kZT4gd2lsbCBjYXVzZSB0aGUgbWVzc2FnZSBidXMgaXRzZWxmIHRvCiAgICAgICAgcmVwbHkgdG8gdGhlIHBpbmcgaW1tZWRpYXRlbHk7IHRoZSBtZXNzYWdlIGJ1cyB3aWxsIG5vdCBtYWtlIHRoaXMKICAgICAgICBtZXNzYWdlIHZpc2libGUgdG8gb3RoZXIgYXBwbGljYXRpb25zLgogICAgICA8L3A+PHA+CiAgICAgICAgQ29udGludWluZyB0aGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm9yZy5mcmVlZGVza3RvcC5EQnVzLlBlZXIuUGluZzwvY29kZT4gZXhhbXBsZSwgaWYKICAgICAgICB0aGUgcGluZyBtZXNzYWdlIHdlcmUgc2VudCB3aXRoIGEgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRFU1RJTkFUSU9OPC9jb2RlPiBuYW1lIG9mCiAgICAgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmNvbS55b3lvZHluZS5TY3JlZW5zYXZlcjwvY29kZT4sIHRoZW4gdGhlIHBpbmcgd291bGQgYmUKICAgICAgICBmb3J3YXJkZWQsIGFuZCB0aGUgWW95b2R5bmUgQ29ycG9yYXRpb24gc2NyZWVuc2F2ZXIgYXBwbGljYXRpb24gd291bGQgYmUKICAgICAgICBleHBlY3RlZCB0byByZXBseSB0byB0aGUgcGluZy4KICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iTWVzc2FnZSBCdXMgTmFtZXMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9Im1lc3NhZ2UtYnVzLW5hbWVzIj48L2E+TWVzc2FnZSBCdXMgTmFtZXM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgIEVhY2ggY29ubmVjdGlvbiBoYXMgYXQgbGVhc3Qgb25lIG5hbWUsIGFzc2lnbmVkIGF0IGNvbm5lY3Rpb24gdGltZSBhbmQKICAgICAgICByZXR1cm5lZCBpbiByZXNwb25zZSB0byB0aGUKICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkRCdXMuSGVsbG88L2NvZGU+IG1ldGhvZCBjYWxsLiAgVGhpcwogICAgICAgIGF1dG9tYXRpY2FsbHktYXNzaWduZWQgbmFtZSBpcyBjYWxsZWQgdGhlIGNvbm5lY3Rpb24ncyA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+dW5pcXVlCiAgICAgICAgbmFtZTwvZW0+LiAgVW5pcXVlIG5hbWVzIGFyZSBuZXZlciByZXVzZWQgZm9yIHR3byBkaWZmZXJlbnQKICAgICAgICBjb25uZWN0aW9ucyB0byB0aGUgc2FtZSBidXMuCiAgICAgIDwvcD48cD4KICAgICAgICBPd25lcnNoaXAgb2YgYSB1bmlxdWUgbmFtZSBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgaW50ZXJhY3Rpb24gd2l0aCAKICAgICAgICB0aGUgbWVzc2FnZSBidXMuIEl0IGxvZ2ljYWxseSBmb2xsb3dzIHRoYXQgdGhlIHVuaXF1ZSBuYW1lIGlzIGFsd2F5cyAKICAgICAgICB0aGUgZmlyc3QgbmFtZSB0aGF0IGFuIGFwcGxpY2F0aW9uIGNvbWVzIHRvIG93biwgYW5kIHRoZSBsYXN0IAogICAgICAgIG9uZSB0aGF0IGl0IGxvc2VzIG93bmVyc2hpcCBvZi4KICAgICAgPC9wPjxwPgogICAgICAgIFVuaXF1ZSBjb25uZWN0aW9uIG5hbWVzIG11c3QgYmVnaW4gd2l0aCB0aGUgY2hhcmFjdGVyICc6JyAoQVNDSUkgY29sb24KICAgICAgICBjaGFyYWN0ZXIpOyBidXMgbmFtZXMgdGhhdCBhcmUgbm90IHVuaXF1ZSBuYW1lcyBtdXN0IG5vdCBiZWdpbgogICAgICAgIHdpdGggdGhpcyBjaGFyYWN0ZXIuIChUaGUgYnVzIG11c3QgcmVqZWN0IGFueSBhdHRlbXB0IGJ5IGFuIGFwcGxpY2F0aW9uCiAgICAgICAgdG8gbWFudWFsbHkgcmVxdWVzdCBhIG5hbWUgYmVnaW5uaW5nIHdpdGggJzonLikgVGhpcyByZXN0cmljdGlvbgogICAgICAgIGNhdGVnb3JpY2FsbHkgcHJldmVudHMgInNwb29maW5nIjsgbWVzc2FnZXMgc2VudCB0byBhIHVuaXF1ZSBuYW1lCiAgICAgICAgd2lsbCBhbHdheXMgZ28gdG8gdGhlIGV4cGVjdGVkIGNvbm5lY3Rpb24uCiAgICAgIDwvcD48cD4KICAgICAgICBXaGVuIGEgY29ubmVjdGlvbiBpcyBjbG9zZWQsIGFsbCB0aGUgbmFtZXMgdGhhdCBpdCBvd25zIGFyZSBkZWxldGVkIChvcgogICAgICAgIHRyYW5zZmVycmVkIHRvIHRoZSBuZXh0IGNvbm5lY3Rpb24gaW4gdGhlIHF1ZXVlIGlmIGFueSkuCiAgICAgIDwvcD48cD4KICAgICAgICBBIGNvbm5lY3Rpb24gY2FuIHJlcXVlc3QgYWRkaXRpb25hbCBuYW1lcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggaXQgdXNpbmcKICAgICAgICB0aGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm9yZy5mcmVlZGVza3RvcC5EQnVzLlJlcXVlc3ROYW1lPC9jb2RlPiBtZXNzYWdlLiA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI21lc3NhZ2UtcHJvdG9jb2wtbmFtZXMtYnVzIiB0aXRsZT0iQnVzIG5hbWVzIj50aGUgc2VjdGlvbiBjYWxsZWQgJiM4MjIwO0J1cyBuYW1lcyYjODIyMTs8L2E+IGRlc2NyaWJlcyB0aGUgZm9ybWF0IG9mIGEgdmFsaWQKICAgICAgICBuYW1lLiBUaGVzZSBuYW1lcyBjYW4gYmUgcmVsZWFzZWQgYWdhaW4gdXNpbmcgdGhlCiAgICAgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm9yZy5mcmVlZGVza3RvcC5EQnVzLlJlbGVhc2VOYW1lPC9jb2RlPiBtZXNzYWdlLgogICAgICA8L3A+PGRpdiBjbGFzcz0ic2VjdDMiIHRpdGxlPSJvcmcuZnJlZWRlc2t0b3AuREJ1cy5SZXF1ZXN0TmFtZSI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iYnVzLW1lc3NhZ2VzLXJlcXVlc3QtbmFtZSI+PC9hPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5SZXF1ZXN0TmFtZTwvY29kZT48L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgICAgQXMgYSBtZXRob2Q6CiAgICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogICAgICAgICAgICBVSU5UMzIgUmVxdWVzdE5hbWUgKGluIFNUUklORyBuYW1lLCBpbiBVSU5UMzIgZmxhZ3MpCiAgICAgICAgICA8L3ByZT48cD4KICAgICAgICAgIE1lc3NhZ2UgYXJndW1lbnRzOgogICAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBib3JkZXI9IjEiPjxjb2xncm91cD48Y29sPjxjb2w+PGNvbD48L2NvbGdyb3VwPjx0aGVhZD48dHI+PHRoPkFyZ3VtZW50PC90aD48dGg+VHlwZTwvdGg+PHRoPkRlc2NyaXB0aW9uPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGQ+MDwvdGQ+PHRkPlNUUklORzwvdGQ+PHRkPk5hbWUgdG8gcmVxdWVzdDwvdGQ+PC90cj48dHI+PHRkPjE8L3RkPjx0ZD5VSU5UMzI8L3RkPjx0ZD5GbGFnczwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PHA+CiAgICAgICAgICBSZXBseSBhcmd1bWVudHM6CiAgICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGJvcmRlcj0iMSI+PGNvbGdyb3VwPjxjb2w+PGNvbD48Y29sPjwvY29sZ3JvdXA+PHRoZWFkPjx0cj48dGg+QXJndW1lbnQ8L3RoPjx0aD5UeXBlPC90aD48dGg+RGVzY3JpcHRpb248L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZD4wPC90ZD48dGQ+VUlOVDMyPC90ZD48dGQ+UmV0dXJuIHZhbHVlPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L2Rpdj48cD4KICAgICAgICA8L3A+PHA+CiAgICAgICAgICBUaGlzIG1ldGhvZCBjYWxsIHNob3VsZCBiZSBzZW50IHRvCiAgICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkRCdXM8L2NvZGU+IGFuZCBhc2tzIHRoZSBtZXNzYWdlIGJ1cyB0bwogICAgICAgICAgYXNzaWduIHRoZSBnaXZlbiBuYW1lIHRvIHRoZSBtZXRob2QgY2FsbGVyLiBFYWNoIG5hbWUgbWFpbnRhaW5zIGEKICAgICAgICAgIHF1ZXVlIG9mIHBvc3NpYmxlIG93bmVycywgd2hlcmUgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlIGlzIHRoZSBwcmltYXJ5CiAgICAgICAgICBvciBjdXJyZW50IG93bmVyIG9mIHRoZSBuYW1lLiBFYWNoIHBvdGVudGlhbCBvd25lciBpbiB0aGUgcXVldWUKICAgICAgICAgIG1haW50YWlucyB0aGUgREJVU19OQU1FX0ZMQUdfQUxMT1dfUkVQTEFDRU1FTlQgYW5kCiAgICAgICAgICBEQlVTX05BTUVfRkxBR19ET19OT1RfUVVFVUUgc2V0dGluZ3MgZnJvbSBpdHMgbGF0ZXN0IFJlcXVlc3ROYW1lCiAgICAgICAgICBjYWxsLiAgV2hlbiBSZXF1ZXN0TmFtZSBpcyBpbnZva2VkIHRoZSBmb2xsb3dpbmcgb2NjdXJzOgogICAgICAgICAgPC9wPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgSWYgdGhlIG1ldGhvZCBjYWxsZXIgaXMgY3VycmVudGx5IHRoZSBwcmltYXJ5IG93bmVyIG9mIHRoZSBuYW1lLAogICAgICAgICAgICAgICAgdGhlIERCVVNfTkFNRV9GTEFHX0FMTE9XX1JFUExBQ0VNRU5UIGFuZCBEQlVTX05BTUVfRkxBR19ET19OT1RfUVVFVUUKICAgICAgICAgICAgICAgIHZhbHVlcyBhcmUgdXBkYXRlZCB3aXRoIHRoZSB2YWx1ZXMgZnJvbSB0aGUgbmV3IFJlcXVlc3ROYW1lIGNhbGwsIAogICAgICAgICAgICAgICAgYW5kIG5vdGhpbmcgZnVydGhlciBoYXBwZW5zLgogICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgSWYgdGhlIGN1cnJlbnQgcHJpbWFyeSBvd25lciAoaGVhZCBvZiB0aGUgcXVldWUpIGhhcwogICAgICAgICAgICAgICAgREJVU19OQU1FX0ZMQUdfQUxMT1dfUkVQTEFDRU1FTlQgc2V0LCBhbmQgdGhlIFJlcXVlc3ROYW1lCiAgICAgICAgICAgICAgICBpbnZvY2F0aW9uIGhhcyB0aGUgREJVU19OQU1FX0ZMQUdfUkVQTEFDRV9FWElTVElORyBmbGFnLCB0aGVuCiAgICAgICAgICAgICAgICB0aGUgY2FsbGVyIG9mIFJlcXVlc3ROYW1lIHJlcGxhY2VzIHRoZSBjdXJyZW50IHByaW1hcnkgb3duZXIgYXQKICAgICAgICAgICAgICAgIHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSBhbmQgdGhlIGN1cnJlbnQgcHJpbWFyeSBvd25lciBtb3ZlcyB0byB0aGUKICAgICAgICAgICAgICAgIHNlY29uZCBwb3NpdGlvbiBpbiB0aGUgcXVldWUuIElmIHRoZSBjYWxsZXIgb2YgUmVxdWVzdE5hbWUgd2FzIAogICAgICAgICAgICAgICAgaW4gdGhlIHF1ZXVlIHByZXZpb3VzbHkgaXRzIGZsYWdzIGFyZSB1cGRhdGVkIHdpdGggdGhlIHZhbHVlcyBmcm9tIAogICAgICAgICAgICAgICAgdGhlIG5ldyBSZXF1ZXN0TmFtZSBpbiBhZGRpdGlvbiB0byBtb3ZpbmcgaXQgdG8gdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLgogICAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgICAgSWYgcmVwbGFjZW1lbnQgaXMgbm90IHBvc3NpYmxlLCBhbmQgdGhlIG1ldGhvZCBjYWxsZXIgaXMKICAgICAgICAgICAgICAgIGN1cnJlbnRseSBpbiB0aGUgcXVldWUgYnV0IG5vdCB0aGUgcHJpbWFyeSBvd25lciwgaXRzIGZsYWdzIGFyZQogICAgICAgICAgICAgICAgdXBkYXRlZCB3aXRoIHRoZSB2YWx1ZXMgZnJvbSB0aGUgbmV3IFJlcXVlc3ROYW1lIGNhbGwuCiAgICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgICBJZiByZXBsYWNlbWVudCBpcyBub3QgcG9zc2libGUsIGFuZCB0aGUgbWV0aG9kIGNhbGxlciBpcwogICAgICAgICAgICAgICAgY3VycmVudGx5IG5vdCBpbiB0aGUgcXVldWUsIHRoZSBtZXRob2QgY2FsbGVyIGlzIGFwcGVuZGVkIHRvIHRoZQogICAgICAgICAgICAgICAgcXVldWUuCiAgICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgICBJZiBhbnkgY29ubmVjdGlvbiBpbiB0aGUgcXVldWUgaGFzIERCVVNfTkFNRV9GTEFHX0RPX05PVF9RVUVVRQogICAgICAgICAgICAgICAgc2V0IGFuZCBpcyBub3QgdGhlIHByaW1hcnkgb3duZXIsIGl0IGlzIHJlbW92ZWQgZnJvbSB0aGUKICAgICAgICAgICAgICAgIHF1ZXVlLiBUaGlzIGNhbiBhcHBseSB0byB0aGUgcHJldmlvdXMgcHJpbWFyeSBvd25lciAoaWYgaXQKICAgICAgICAgICAgICAgIHdhcyByZXBsYWNlZCkgb3IgdGhlIG1ldGhvZCBjYWxsZXIgKGlmIGl0IHVwZGF0ZWQgdGhlCiAgICAgICAgICAgICAgICBEQlVTX05BTUVfRkxBR19ET19OT1RfUVVFVUUgZmxhZyB3aGlsZSBzdGlsbCBzdHVjayBpbiB0aGUKICAgICAgICAgICAgICAgIHF1ZXVlLCBvciBpZiBpdCB3YXMganVzdCBhZGRlZCB0byB0aGUgcXVldWUgd2l0aCB0aGF0IGZsYWcgc2V0KS4KICAgICAgICAgICAgICA8L3A+PC9saT48L3VsPjwvZGl2PjxwPgogICAgICAgIDwvcD48cD4KICAgICAgICAgIE5vdGUgdGhhdCBEQlVTX05BTUVfRkxBR19SRVBMQUNFX0VYSVNUSU5HIHJlc3VsdHMgaW4gImp1bXBpbmcgdGhlCiAgICAgICAgICBxdWV1ZSwiIGV2ZW4gaWYgYW5vdGhlciBhcHBsaWNhdGlvbiBhbHJlYWR5IGluIHRoZSBxdWV1ZSBoYWQgc3BlY2lmaWVkCiAgICAgICAgICBEQlVTX05BTUVfRkxBR19SRVBMQUNFX0VYSVNUSU5HLiAgVGhpcyBjb21lcyB1cCBpZiBhIHByaW1hcnkgb3duZXIKICAgICAgICAgIHRoYXQgZG9lcyBub3QgYWxsb3cgcmVwbGFjZW1lbnQgZ29lcyBhd2F5LCBhbmQgdGhlIG5leHQgcHJpbWFyeSBvd25lcgogICAgICAgICAgZG9lcyBhbGxvdyByZXBsYWNlbWVudC4gSW4gdGhpcyBjYXNlLCBxdWV1ZWQgaXRlbXMgdGhhdCBzcGVjaWZpZWQKICAgICAgICAgIERCVVNfTkFNRV9GTEFHX1JFUExBQ0VfRVhJU1RJTkcgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+ZG8gbm90PC9lbT48L3NwYW4+CiAgICAgICAgICBhdXRvbWF0aWNhbGx5IHJlcGxhY2UgdGhlIG5ldyBwcmltYXJ5IG93bmVyLiBJbiBvdGhlciB3b3JkcywKICAgICAgICAgIERCVVNfTkFNRV9GTEFHX1JFUExBQ0VfRVhJU1RJTkcgaXMgbm90IHNhdmVkLCBpdCBpcyBvbmx5IHVzZWQgYXQgdGhlCiAgICAgICAgICB0aW1lIFJlcXVlc3ROYW1lIGlzIGNhbGxlZC4gVGhpcyBpcyBkZWxpYmVyYXRlIHRvIGF2b2lkIGFuIGluZmluaXRlIGxvb3AKICAgICAgICAgIGFueXRpbWUgdHdvIGFwcGxpY2F0aW9ucyBhcmUgYm90aCBEQlVTX05BTUVfRkxBR19BTExPV19SRVBMQUNFTUVOVCAKICAgICAgICAgIGFuZCBEQlVTX05BTUVfRkxBR19SRVBMQUNFX0VYSVNUSU5HLgogICAgICAgIDwvcD48cD4KICAgICAgICAgIFRoZSBmbGFncyBhcmd1bWVudCBjb250YWlucyBhbnkgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgbG9naWNhbGx5IE9SZWQKICAgICAgICAgIHRvZ2V0aGVyOgoKICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgYm9yZGVyPSIxIj48Y29sZ3JvdXA+PGNvbD48Y29sPjxjb2w+PC9jb2xncm91cD48dGhlYWQ+PHRyPjx0aD5Db252ZW50aW9uYWwgTmFtZTwvdGg+PHRoPlZhbHVlPC90aD48dGg+RGVzY3JpcHRpb248L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZD5EQlVTX05BTUVfRkxBR19BTExPV19SRVBMQUNFTUVOVDwvdGQ+PHRkPjB4MTwvdGQ+PHRkPgoKICAgICAgICAgICAgICAgICAgICBJZiBhbiBhcHBsaWNhdGlvbiBBIHNwZWNpZmllcyB0aGlzIGZsYWcgYW5kIHN1Y2NlZWRzIGluCiAgICAgICAgICAgICAgICAgICAgYmVjb21pbmcgdGhlIG93bmVyIG9mIHRoZSBuYW1lLCBhbmQgYW5vdGhlciBhcHBsaWNhdGlvbiBCCiAgICAgICAgICAgICAgICAgICAgbGF0ZXIgY2FsbHMgUmVxdWVzdE5hbWUgd2l0aCB0aGUKICAgICAgICAgICAgICAgICAgICBEQlVTX05BTUVfRkxBR19SRVBMQUNFX0VYSVNUSU5HIGZsYWcsIHRoZW4gYXBwbGljYXRpb24gQQogICAgICAgICAgICAgICAgICAgIHdpbGwgbG9zZSBvd25lcnNoaXAgYW5kIHJlY2VpdmUgYQogICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5OYW1lTG9zdDwvY29kZT4gc2lnbmFsLCBhbmQKICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBCIHdpbGwgYmVjb21lIHRoZSBuZXcgb3duZXIuIElmIERCVVNfTkFNRV9GTEFHX0FMTE9XX1JFUExBQ0VNRU5UCiAgICAgICAgICAgICAgICAgICAgaXMgbm90IHNwZWNpZmllZCBieSBhcHBsaWNhdGlvbiBBLCBvciBEQlVTX05BTUVfRkxBR19SRVBMQUNFX0VYSVNUSU5HCiAgICAgICAgICAgICAgICAgICAgaXMgbm90IHNwZWNpZmllZCBieSBhcHBsaWNhdGlvbiBCLCB0aGVuIGFwcGxpY2F0aW9uIEIgd2lsbCBub3QgcmVwbGFjZQogICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIEEgYXMgdGhlIG93bmVyLgoKICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0cj48dGQ+REJVU19OQU1FX0ZMQUdfUkVQTEFDRV9FWElTVElORzwvdGQ+PHRkPjB4MjwvdGQ+PHRkPgoKICAgICAgICAgICAgICAgICAgICBUcnkgdG8gcmVwbGFjZSB0aGUgY3VycmVudCBvd25lciBpZiB0aGVyZSBpcyBvbmUuIElmIHRoaXMKICAgICAgICAgICAgICAgICAgICBmbGFnIGlzIG5vdCBzZXQgdGhlIGFwcGxpY2F0aW9uIHdpbGwgb25seSBiZWNvbWUgdGhlIG93bmVyIG9mCiAgICAgICAgICAgICAgICAgICAgdGhlIG5hbWUgaWYgdGhlcmUgaXMgbm8gY3VycmVudCBvd25lci4gSWYgdGhpcyBmbGFnIGlzIHNldCwKICAgICAgICAgICAgICAgICAgICB0aGUgYXBwbGljYXRpb24gd2lsbCByZXBsYWNlIHRoZSBjdXJyZW50IG93bmVyIGlmCiAgICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgb3duZXIgc3BlY2lmaWVkIERCVVNfTkFNRV9GTEFHX0FMTE9XX1JFUExBQ0VNRU5ULgoKICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0cj48dGQ+REJVU19OQU1FX0ZMQUdfRE9fTk9UX1FVRVVFPC90ZD48dGQ+MHg0PC90ZD48dGQ+CgogICAgICAgICAgICAgICAgICAgIFdpdGhvdXQgdGhpcyBmbGFnLCBpZiBhbiBhcHBsaWNhdGlvbiByZXF1ZXN0cyBhIG5hbWUgdGhhdCBpcwogICAgICAgICAgICAgICAgICAgIGFscmVhZHkgb3duZWQsIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGJlIHBsYWNlZCBpbiBhIHF1ZXVlIHRvCiAgICAgICAgICAgICAgICAgICAgb3duIHRoZSBuYW1lIHdoZW4gdGhlIGN1cnJlbnQgb3duZXIgZ2l2ZXMgaXQgdXAuIElmIHRoaXMKICAgICAgICAgICAgICAgICAgICBmbGFnIGlzIGdpdmVuLCB0aGUgYXBwbGljYXRpb24gd2lsbCBub3QgYmUgcGxhY2VkIGluIHRoZQogICAgICAgICAgICAgICAgICAgIHF1ZXVlLCB0aGUgcmVxdWVzdCBmb3IgdGhlIG5hbWUgd2lsbCBzaW1wbHkgZmFpbC4gIFRoaXMgZmxhZwogICAgICAgICAgICAgICAgICAgIGFsc28gYWZmZWN0cyBiZWhhdmlvciB3aGVuIGFuIGFwcGxpY2F0aW9uIGlzIHJlcGxhY2VkIGFzCiAgICAgICAgICAgICAgICAgICAgbmFtZSBvd25lcjsgYnkgZGVmYXVsdCB0aGUgYXBwbGljYXRpb24gbW92ZXMgYmFjayBpbnRvIHRoZQogICAgICAgICAgICAgICAgICAgIHdhaXRpbmcgcXVldWUsIHVubGVzcyB0aGlzIGZsYWcgd2FzIHByb3ZpZGVkIHdoZW4gdGhlIGFwcGxpY2F0aW9uCiAgICAgICAgICAgICAgICAgICAgYmVjYW1lIHRoZSBuYW1lIG93bmVyLgoKICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L2Rpdj48cD4KCiAgICAgICAgICBUaGUgcmV0dXJuIGNvZGUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKCiAgICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGJvcmRlcj0iMSI+PGNvbGdyb3VwPjxjb2w+PGNvbD48Y29sPjwvY29sZ3JvdXA+PHRoZWFkPjx0cj48dGg+Q29udmVudGlvbmFsIE5hbWU8L3RoPjx0aD5WYWx1ZTwvdGg+PHRoPkRlc2NyaXB0aW9uPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGQ+REJVU19SRVFVRVNUX05BTUVfUkVQTFlfUFJJTUFSWV9PV05FUjwvdGQ+PHRkPjE8L3RkPjx0ZD5UaGUgY2FsbGVyIGlzIG5vdyB0aGUgcHJpbWFyeSBvd25lciBvZgoJCSAgdGhlIG5hbWUsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMgb3duZXIuIEVpdGhlciB0aGUgbmFtZSBoYWQgbm8KCQkgIG93bmVyIGJlZm9yZSwgb3IgdGhlIGNhbGxlciBzcGVjaWZpZWQKCQkgIERCVVNfTkFNRV9GTEFHX1JFUExBQ0VfRVhJU1RJTkcgYW5kIHRoZSBjdXJyZW50IG93bmVyIHNwZWNpZmllZAogICAgICAgICAgICAgICAgICBEQlVTX05BTUVfRkxBR19BTExPV19SRVBMQUNFTUVOVC48L3RkPjwvdHI+PHRyPjx0ZD5EQlVTX1JFUVVFU1RfTkFNRV9SRVBMWV9JTl9RVUVVRTwvdGQ+PHRkPjI8L3RkPjx0ZD5UaGUgbmFtZSBhbHJlYWR5IGhhZCBhbiBvd25lciwKICAgICAgICAgICAgICAgICAgICBEQlVTX05BTUVfRkxBR19ET19OT1RfUVVFVUUgd2FzIG5vdCBzcGVjaWZpZWQsIGFuZCBlaXRoZXIKICAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBvd25lciBkaWQgbm90IHNwZWNpZnkKICAgICAgICAgICAgICAgICAgICBEQlVTX05BTUVfRkxBR19BTExPV19SRVBMQUNFTUVOVCBvciB0aGUgcmVxdWVzdGluZwogICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIGRpZCBub3Qgc3BlY2lmeSBEQlVTX05BTUVfRkxBR19SRVBMQUNFX0VYSVNUSU5HLgogICAgICAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHI+PHRkPkRCVVNfUkVRVUVTVF9OQU1FX1JFUExZX0VYSVNUUzwvdGQ+PHRkPjM8L3RkPjx0ZD5UaGUgbmFtZSBhbHJlYWR5IGhhcyBhbiBvd25lciwKCQkgIERCVVNfTkFNRV9GTEFHX0RPX05PVF9RVUVVRSB3YXMgc3BlY2lmaWVkLCBhbmQgZWl0aGVyCgkJICBEQlVTX05BTUVfRkxBR19BTExPV19SRVBMQUNFTUVOVCB3YXMgbm90IHNwZWNpZmllZCBieSB0aGUKCQkgIGN1cnJlbnQgb3duZXIsIG9yIERCVVNfTkFNRV9GTEFHX1JFUExBQ0VfRVhJU1RJTkcgd2FzIG5vdAoJCSAgc3BlY2lmaWVkIGJ5IHRoZSByZXF1ZXN0aW5nIGFwcGxpY2F0aW9uLjwvdGQ+PC90cj48dHI+PHRkPkRCVVNfUkVRVUVTVF9OQU1FX1JFUExZX0FMUkVBRFlfT1dORVI8L3RkPjx0ZD40PC90ZD48dGQ+VGhlIGFwcGxpY2F0aW9uIHRyeWluZyB0byByZXF1ZXN0IG93bmVyc2hpcCBvZiBhIG5hbWUgaXMgYWxyZWFkeSB0aGUgb3duZXIgb2YgaXQuPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L2Rpdj48cD4KICAgICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDMiIHRpdGxlPSJvcmcuZnJlZWRlc2t0b3AuREJ1cy5SZWxlYXNlTmFtZSI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iYnVzLW1lc3NhZ2VzLXJlbGVhc2UtbmFtZSI+PC9hPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5SZWxlYXNlTmFtZTwvY29kZT48L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgICAgQXMgYSBtZXRob2Q6CiAgICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogICAgICAgICAgICBVSU5UMzIgUmVsZWFzZU5hbWUgKGluIFNUUklORyBuYW1lKQogICAgICAgICAgPC9wcmU+PHA+CiAgICAgICAgICBNZXNzYWdlIGFyZ3VtZW50czoKICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgYm9yZGVyPSIxIj48Y29sZ3JvdXA+PGNvbD48Y29sPjxjb2w+PC9jb2xncm91cD48dGhlYWQ+PHRyPjx0aD5Bcmd1bWVudDwvdGg+PHRoPlR5cGU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkPjA8L3RkPjx0ZD5TVFJJTkc8L3RkPjx0ZD5OYW1lIHRvIHJlbGVhc2U8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjxwPgogICAgICAgICAgUmVwbHkgYXJndW1lbnRzOgogICAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBib3JkZXI9IjEiPjxjb2xncm91cD48Y29sPjxjb2w+PGNvbD48L2NvbGdyb3VwPjx0aGVhZD48dHI+PHRoPkFyZ3VtZW50PC90aD48dGg+VHlwZTwvdGg+PHRoPkRlc2NyaXB0aW9uPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGQ+MDwvdGQ+PHRkPlVJTlQzMjwvdGQ+PHRkPlJldHVybiB2YWx1ZTwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PHA+CiAgICAgICAgPC9wPjxwPgogICAgICAgICAgVGhpcyBtZXRob2QgY2FsbCBzaG91bGQgYmUgc2VudCB0bwogICAgICAgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm9yZy5mcmVlZGVza3RvcC5EQnVzPC9jb2RlPiBhbmQgYXNrcyB0aGUgbWVzc2FnZSBidXMgdG8KICAgICAgICAgIHJlbGVhc2UgdGhlIG1ldGhvZCBjYWxsZXIncyBjbGFpbSB0byB0aGUgZ2l2ZW4gbmFtZS4gSWYgdGhlIGNhbGxlciBpcwogICAgICAgICAgdGhlIHByaW1hcnkgb3duZXIsIGEgbmV3IHByaW1hcnkgb3duZXIgd2lsbCBiZSBzZWxlY3RlZCBmcm9tIHRoZQogICAgICAgICAgcXVldWUgaWYgYW55IG90aGVyIG93bmVycyBhcmUgd2FpdGluZy4gSWYgdGhlIGNhbGxlciBpcyB3YWl0aW5nIGluCiAgICAgICAgICB0aGUgcXVldWUgZm9yIHRoZSBuYW1lLCB0aGUgY2FsbGVyIHdpbGwgcmVtb3ZlZCBmcm9tIHRoZSBxdWV1ZSBhbmQKICAgICAgICAgIHdpbGwgbm90IGJlIG1hZGUgYW4gb3duZXIgb2YgdGhlIG5hbWUgaWYgaXQgbGF0ZXIgYmVjb21lcyBhdmFpbGFibGUuCiAgICAgICAgICBJZiB0aGVyZSBhcmUgbm8gb3RoZXIgb3duZXJzIGluIHRoZSBxdWV1ZSBmb3IgdGhlIG5hbWUsIGl0IHdpbGwgYmUKICAgICAgICAgIHJlbW92ZWQgZnJvbSB0aGUgYnVzIGVudGlyZWx5LgoKICAgICAgICAgIFRoZSByZXR1cm4gY29kZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgoKICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgYm9yZGVyPSIxIj48Y29sZ3JvdXA+PGNvbD48Y29sPjxjb2w+PC9jb2xncm91cD48dGhlYWQ+PHRyPjx0aD5Db252ZW50aW9uYWwgTmFtZTwvdGg+PHRoPlZhbHVlPC90aD48dGg+RGVzY3JpcHRpb248L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZD5EQlVTX1JFTEVBU0VfTkFNRV9SRVBMWV9SRUxFQVNFRDwvdGQ+PHRkPjE8L3RkPjx0ZD5UaGUgY2FsbGVyIGhhcyByZWxlYXNlZCBoaXMgY2xhaW0gb24KICAgICAgICAgICAgICAgICAgdGhlIGdpdmVuIG5hbWUuIEVpdGhlciB0aGUgY2FsbGVyIHdhcyB0aGUgcHJpbWFyeSBvd25lciBvZgogICAgICAgICAgICAgICAgICB0aGUgbmFtZSwgYW5kIHRoZSBuYW1lIGlzIG5vdyB1bnVzZWQgb3IgdGFrZW4gYnkgc29tZWJvZHkKICAgICAgICAgICAgICAgICAgd2FpdGluZyBpbiB0aGUgcXVldWUgZm9yIHRoZSBuYW1lLCBvciB0aGUgY2FsbGVyIHdhcyB3YWl0aW5nCiAgICAgICAgICAgICAgICAgIGluIHRoZSBxdWV1ZSBmb3IgdGhlIG5hbWUgYW5kIGhhcyBub3cgYmVlbiByZW1vdmVkIGZyb20gdGhlCiAgICAgICAgICAgICAgICAgIHF1ZXVlLjwvdGQ+PC90cj48dHI+PHRkPkRCVVNfUkVMRUFTRV9OQU1FX1JFUExZX05PTl9FWElTVEVOVDwvdGQ+PHRkPjI8L3RkPjx0ZD5UaGUgZ2l2ZW4gbmFtZSBkb2VzIG5vdCBleGlzdCBvbiB0aGlzIGJ1cy48L3RkPjwvdHI+PHRyPjx0ZD5EQlVTX1JFTEVBU0VfTkFNRV9SRVBMWV9OT1RfT1dORVI8L3RkPjx0ZD4zPC90ZD48dGQ+VGhlIGNhbGxlciB3YXMgbm90IHRoZSBwcmltYXJ5IG93bmVyIG9mIHRoaXMgbmFtZSwKICAgICAgICAgICAgICAgICAgYW5kIHdhcyBhbHNvIG5vdCB3YWl0aW5nIGluIHRoZSBxdWV1ZSB0byBvd24gdGhpcyBuYW1lLjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PHA+CiAgICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0ib3JnLmZyZWVkZXNrdG9wLkRCdXMuTGlzdFF1ZXVlZE93bmVycyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iYnVzLW1lc3NhZ2VzLWxpc3QtcXVldWVkLW93bmVycyI+PC9hPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5MaXN0UXVldWVkT3duZXJzPC9jb2RlPjwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgICBBcyBhIG1ldGhvZDoKICAgICAgICAgIDwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CiAgICAgICAgICAgIEFSUkFZIG9mIFNUUklORyBMaXN0UXVldWVkT3duZXJzIChpbiBTVFJJTkcgbmFtZSkKICAgICAgICAgIDwvcHJlPjxwPgogICAgICAgICAgTWVzc2FnZSBhcmd1bWVudHM6CiAgICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGJvcmRlcj0iMSI+PGNvbGdyb3VwPjxjb2w+PGNvbD48Y29sPjwvY29sZ3JvdXA+PHRoZWFkPjx0cj48dGg+QXJndW1lbnQ8L3RoPjx0aD5UeXBlPC90aD48dGg+RGVzY3JpcHRpb248L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZD4wPC90ZD48dGQ+U1RSSU5HPC90ZD48dGQ+VGhlIHdlbGwta25vd24gYnVzIG5hbWUgdG8gcXVlcnksIHN1Y2ggYXMKICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Y29tLmV4YW1wbGUuY2FwcHVjY2lubzwvY29kZT48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjxwPgogICAgICAgICAgUmVwbHkgYXJndW1lbnRzOgogICAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBib3JkZXI9IjEiPjxjb2xncm91cD48Y29sPjxjb2w+PGNvbD48L2NvbGdyb3VwPjx0aGVhZD48dHI+PHRoPkFyZ3VtZW50PC90aD48dGg+VHlwZTwvdGg+PHRoPkRlc2NyaXB0aW9uPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGQ+MDwvdGQ+PHRkPkFSUkFZIG9mIFNUUklORzwvdGQ+PHRkPlRoZSB1bmlxdWUgYnVzIG5hbWVzIG9mIGNvbm5lY3Rpb25zIGN1cnJlbnRseSBxdWV1ZWQKICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIG5hbWU8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjxwPgogICAgICAgIDwvcD48cD4KICAgICAgICAgIFRoaXMgbWV0aG9kIGNhbGwgc2hvdWxkIGJlIHNlbnQgdG8KICAgICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1czwvY29kZT4gYW5kIGxpc3RzIHRoZSBjb25uZWN0aW9ucwogICAgICAgICAgY3VycmVudGx5IHF1ZXVlZCBmb3IgYSBidXMgbmFtZSAoc2VlCiAgICAgICAgICA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI3Rlcm0tcXVldWVkLW93bmVyIiB0aXRsZT0iUXVldWVkIE5hbWUgT3duZXIiPlF1ZXVlZCBOYW1lIE93bmVyPC9hPikuCiAgICAgICAgPC9wPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iTWVzc2FnZSBCdXMgTWVzc2FnZSBSb3V0aW5nIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJtZXNzYWdlLWJ1cy1yb3V0aW5nIj48L2E+TWVzc2FnZSBCdXMgTWVzc2FnZSBSb3V0aW5nPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBGSVhNRSAKICAgICAgPC9wPjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iTWF0Y2ggUnVsZXMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9Im1lc3NhZ2UtYnVzLXJvdXRpbmctbWF0Y2gtcnVsZXMiPjwvYT5NYXRjaCBSdWxlczwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CgkgIEFuIGltcG9ydGFudCBwYXJ0IG9mIHRoZSBtZXNzYWdlIGJ1cyByb3V0aW5nIHByb3RvY29sIGlzIG1hdGNoICAKCSAgcnVsZXMuIE1hdGNoIHJ1bGVzIGRlc2NyaWJlIHdoYXQgbWVzc2FnZXMgY2FuIGJlIHNlbnQgdG8gYSBjbGllbnQKICAgICAgICAgIGJhc2VkIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgbWVzc2FnZS4gIFdoZW4gYSBtZXNzYWdlIGlzIHJvdXRlZAogICAgICAgICAgdGhyb3VnaCB0aGUgYnVzIGl0IGlzIGNvbXBhcmVkIHRvIGNsaWVudHMnIG1hdGNoIHJ1bGVzLiAgSWYgYW55CiAgICAgICAgICBvZiB0aGUgcnVsZXMgbWF0Y2gsIHRoZSBtZXNzYWdlIGlzIGRpc3BhdGNoZWQgdG8gdGhlIGNsaWVudC4KICAgICAgICAgIElmIG5vbmUgb2YgdGhlIHJ1bGVzIG1hdGNoIHRoZSBtZXNzYWdlIG5ldmVyIGxlYXZlcyB0aGUgYnVzLiAgVGhpcwogICAgICAgICAgaXMgYW4gZWZmZWN0aXZlIHdheSB0byBjb250cm9sIHRyYWZmaWMgb3ZlciB0aGUgYnVzIGFuZCB0byBtYWtlIHN1cmUKICAgICAgICAgIG9ubHkgcmVsZXZhbnQgbWVzc2FnZSBuZWVkIHRvIGJlIHByb2Nlc3NlZCBieSB0aGUgY2xpZW50LgogICAgICAgIDwvcD48cD4KICAgICAgICAgIE1hdGNoIHJ1bGVzIGFyZSBhZGRlZCB1c2luZyB0aGUgQWRkTWF0Y2ggYnVzIG1ldGhvZCAKICAgICAgICAgIChzZWUgPGEgY2xhc3M9InhyZWYiIGhyZWY9IiNidXMtbWVzc2FnZXMtYWRkLW1hdGNoIiB0aXRsZT0ib3JnLmZyZWVkZXNrdG9wLkRCdXMuQWRkTWF0Y2giPnRoZSBzZWN0aW9uIGNhbGxlZCAmIzgyMjA7PGNvZGUgY2xhc3M9ImxpdGVyYWwiPm9yZy5mcmVlZGVza3RvcC5EQnVzLkFkZE1hdGNoPC9jb2RlPiYjODIyMTs8L2E+KS4gIFJ1bGVzIGFyZQogICAgICAgICAgc3BlY2lmaWVkIGFzIGEgc3RyaW5nIG9mIGNvbW1hIHNlcGFyYXRlZCBrZXkvdmFsdWUgcGFpcnMuIAogICAgICAgICAgRXhjbHVkaW5nIGEga2V5IGZyb20gdGhlIHJ1bGUgaW5kaWNhdGVzIGEgd2lsZGNhcmQgbWF0Y2guICAKICAgICAgICAgIEZvciBpbnN0YW5jZSBleGNsdWRpbmcgdGhlIHRoZSBtZW1iZXIgZnJvbSBhIG1hdGNoIHJ1bGUgYnV0IAogICAgICAgICAgYWRkaW5nIGEgc2VuZGVyIHdvdWxkIGxldCBhbGwgbWVzc2FnZXMgZnJvbSB0aGF0IHNlbmRlciB0aHJvdWdoLgogICAgICAgICAgQW4gZXhhbXBsZSBvZiBhIGNvbXBsZXRlIHJ1bGUgd291bGQgYmUgCiAgICAgICAgICAidHlwZT0nc2lnbmFsJyxzZW5kZXI9J29yZy5mcmVlZGVza3RvcC5EQnVzJyxpbnRlcmZhY2U9J29yZy5mcmVlZGVza3RvcC5EQnVzJyxtZW1iZXI9J0ZvbycscGF0aD0nL2Jhci9mb28nLGRlc3RpbmF0aW9uPSc6NDUyMzQ1LjM0JyxhcmcyPSdiYXInIgogICAgICAgIDwvcD48cD4KICAgICAgICAgIFRoZSBmb2xsb3dpbmcgdGFibGUgZGVzY3JpYmVzIHRoZSBrZXlzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIAogICAgICAgICAgYSBtYXRjaCBydWxlOgogICAgICAgICAgVGhlIGZvbGxvd2luZyB0YWJsZSBzdW1tYXJpemVzIHRoZSBELUJ1cyB0eXBlcy4KICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgYm9yZGVyPSIxIj48Y29sZ3JvdXA+PGNvbD48Y29sPjxjb2w+PC9jb2xncm91cD48dGhlYWQ+PHRyPjx0aD5LZXk8L3RoPjx0aD5Qb3NzaWJsZSBWYWx1ZXM8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj50eXBlPC9jb2RlPjwvdGQ+PHRkPidzaWduYWwnLCAnbWV0aG9kX2NhbGwnLCAnbWV0aG9kX3JldHVybicsICdlcnJvcic8L3RkPjx0ZD5NYXRjaCBvbiB0aGUgbWVzc2FnZSB0eXBlLiAgQW4gZXhhbXBsZSBvZiBhIHR5cGUgbWF0Y2ggaXMgdHlwZT0nc2lnbmFsJzwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5zZW5kZXI8L2NvZGU+PC90ZD48dGQ+QSBidXMgb3IgdW5pcXVlIG5hbWUgKHNlZSA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI3Rlcm0tYnVzLW5hbWUiIHRpdGxlPSJCdXMgTmFtZSI+QnVzIE5hbWU8L2E+CiAgICAgICAgICAgICAgICAgIGFuZCA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI3Rlcm0tdW5pcXVlLW5hbWUiIHRpdGxlPSJVbmlxdWUgQ29ubmVjdGlvbiBOYW1lIj5VbmlxdWUgQ29ubmVjdGlvbiBOYW1lPC9hPiByZXNwZWN0aXZlbHkpCiAgICAgICAgICAgICAgICAgIDwvdGQ+PHRkPk1hdGNoIG1lc3NhZ2VzIHNlbnQgYnkgYSBwYXJ0aWN1bGFyIHNlbmRlci4gIEFuIGV4YW1wbGUgb2YgYSBzZW5kZXIgbWF0Y2gKICAgICAgICAgICAgICAgICAgaXMgc2VuZGVyPSdvcmcuZnJlZWRlc2t0b3AuSGFsJzwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbnRlcmZhY2U8L2NvZGU+PC90ZD48dGQ+QW4gaW50ZXJmYWNlIG5hbWUgKHNlZSA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI21lc3NhZ2UtcHJvdG9jb2wtbmFtZXMtaW50ZXJmYWNlIiB0aXRsZT0iSW50ZXJmYWNlIG5hbWVzIj50aGUgc2VjdGlvbiBjYWxsZWQgJiM4MjIwO0ludGVyZmFjZSBuYW1lcyYjODIyMTs8L2E+KTwvdGQ+PHRkPk1hdGNoIG1lc3NhZ2VzIHNlbnQgb3ZlciBvciB0byBhIHBhcnRpY3VsYXIgaW50ZXJmYWNlLiAgQW4gZXhhbXBsZSBvZiBhbgogICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgbWF0Y2ggaXMgaW50ZXJmYWNlPSdvcmcuZnJlZWRlc2t0b3AuSGFsLk1hbmFnZXInLgogICAgICAgICAgICAgICAgICBJZiBhIG1lc3NhZ2Ugb21pdHMgdGhlIGludGVyZmFjZSBoZWFkZXIsIGl0IG11c3Qgbm90IG1hdGNoIGFueSBydWxlIAogICAgICAgICAgICAgICAgICB0aGF0IHNwZWNpZmllcyB0aGlzIGtleS48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+bWVtYmVyPC9jb2RlPjwvdGQ+PHRkPkFueSB2YWxpZCBtZXRob2Qgb3Igc2lnbmFsIG5hbWU8L3RkPjx0ZD5NYXRjaGVzIG1lc3NhZ2VzIHdoaWNoIGhhdmUgdGhlIGdpdmUgbWV0aG9kIG9yIHNpZ25hbCBuYW1lLiBBbiBleGFtcGxlIG9mCiAgICAgICAgICAgICAgICAgIGEgbWVtYmVyIG1hdGNoIGlzIG1lbWJlcj0nTmFtZU93bmVyQ2hhbmdlZCc8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+cGF0aDwvY29kZT48L3RkPjx0ZD5BbiBvYmplY3QgcGF0aCAoc2VlIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjbWVzc2FnZS1wcm90b2NvbC1tYXJzaGFsaW5nLW9iamVjdC1wYXRoIiB0aXRsZT0iVmFsaWQgT2JqZWN0IFBhdGhzIj50aGUgc2VjdGlvbiBjYWxsZWQgJiM4MjIwO1ZhbGlkIE9iamVjdCBQYXRocyYjODIyMTs8L2E+KTwvdGQ+PHRkPk1hdGNoZXMgbWVzc2FnZXMgd2hpY2ggYXJlIHNlbnQgZnJvbSBvciB0byB0aGUgZ2l2ZW4gb2JqZWN0LiBBbiBleGFtcGxlIG9mIGEKICAgICAgICAgICAgICAgICAgcGF0aCBtYXRjaCBpcyBwYXRoPScvb3JnL2ZyZWVkZXNrdG9wL0hhbC9NYW5hZ2VyJzwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5kZXN0aW5hdGlvbjwvY29kZT48L3RkPjx0ZD5BIHVuaXF1ZSBuYW1lIChzZWUgPGEgY2xhc3M9InhyZWYiIGhyZWY9IiN0ZXJtLXVuaXF1ZS1uYW1lIiB0aXRsZT0iVW5pcXVlIENvbm5lY3Rpb24gTmFtZSI+VW5pcXVlIENvbm5lY3Rpb24gTmFtZTwvYT4pPC90ZD48dGQ+TWF0Y2hlcyBtZXNzYWdlcyB3aGljaCBhcmUgYmVpbmcgc2VudCB0byB0aGUgZ2l2ZW4gdW5pcXVlIG5hbWUuIEFuCiAgICAgICAgICAgICAgICAgIGV4YW1wbGUgb2YgYSBkZXN0aW5hdGlvbiBtYXRjaCBpcyBkZXN0aW5hdGlvbj0nOjEuMCc8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YXJnWzAsIDEsIDIsIDMsIC4uLl08L2NvZGU+PC90ZD48dGQ+QW55IHN0cmluZzwvdGQ+PHRkPkFyZyBtYXRjaGVzIGFyZSBzcGVjaWFsIGFuZCBhcmUgdXNlZCBmb3IgZnVydGhlciByZXN0cmljdGluZyB0aGUgCiAgICAgICAgICAgICAgICAgIG1hdGNoIGJhc2VkIG9uIHRoZSBhcmd1bWVudHMgaW4gdGhlIGJvZHkgb2YgYSBtZXNzYWdlLiAgQXMgb2YgdGhpcyB0aW1lCiAgICAgICAgICAgICAgICAgIG9ubHkgc3RyaW5nIGFyZ3VtZW50cyBjYW4gYmUgbWF0Y2hlZC4gIEFuIGV4YW1wbGUgb2YgYW4gYXJndW1lbnQgbWF0Y2ggCiAgICAgICAgICAgICAgICAgIHdvdWxkIGJlIGFyZzM9J0ZvbycuIE9ubHkgYXJndW1lbnQgaW5kZXhlcyBmcm9tIDAgdG8gNjMgc2hvdWxkIGJlIAogICAgICAgICAgICAgICAgICBhY2NlcHRlZC48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YXJnWzAsIDEsIDIsIDMsIC4uLl1wYXRoPC9jb2RlPjwvdGQ+PHRkPkFueSBzdHJpbmc8L3RkPjx0ZD5Bcmd1bWVudCBwYXRoIG1hdGNoZXMgcHJvdmlkZSBhIHNwZWNpYWxpc2VkIGZvcm0gb2Ygd2lsZGNhcmQKICAgICAgICAgICAgICAgICAgbWF0Y2hpbmcgZm9yIHBhdGgtbGlrZSBuYW1lc3BhY2VzLiBBcyB3aXRoIG5vcm1hbCBhcmd1bWVudCBtYXRjaGVzLAogICAgICAgICAgICAgICAgICBpZiB0aGUgYXJndW1lbnQgaXMgZXhhY3RseSBlcXVhbCB0byB0aGUgc3RyaW5nIGdpdmVuIGluIHRoZSBtYXRjaAogICAgICAgICAgICAgICAgICBydWxlIHRoZW4gdGhlIHJ1bGUgaXMgc2F0aXNmaWVkLiBBZGRpdGlvbmFsbHksIHRoZXJlIGlzIGFsc28gYQogICAgICAgICAgICAgICAgICBtYXRjaCB3aGVuIGVpdGhlciB0aGUgc3RyaW5nIGdpdmVuIGluIHRoZSBtYXRjaCBydWxlIG9yIHRoZQogICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZSBtZXNzYWdlIGFyZ3VtZW50IGVuZHMgd2l0aCAnLycgYW5kIGlzIGEgcHJlZml4IG9mIHRoZQogICAgICAgICAgICAgICAgICBvdGhlci4gQW4gZXhhbXBsZSBhcmd1bWVudCBwYXRoIG1hdGNoIGlzIGFyZzBwYXRoPScvYWEvYmIvJy4gVGhpcwogICAgICAgICAgICAgICAgICB3b3VsZCBtYXRjaCBtZXNzYWdlcyB3aXRoIGZpcnN0IGFyZ3VtZW50cyBvZiAnLycsICcvYWEvJywKICAgICAgICAgICAgICAgICAgJy9hYS9iYi8nLCAnL2FhL2JiL2NjLycgYW5kICcvYWEvYmIvY2MnLiBJdCB3b3VsZCBub3QgbWF0Y2gKICAgICAgICAgICAgICAgICAgbWVzc2FnZXMgd2l0aCBmaXJzdCBhcmd1bWVudHMgb2YgJy9hYS9iJywgJy9hYScgb3IgZXZlbiAnL2FhL2JiJy48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjxwPgogICAgICAgIDwvcD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9Ik1lc3NhZ2UgQnVzIFN0YXJ0aW5nIFNlcnZpY2VzIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJtZXNzYWdlLWJ1cy1zdGFydGluZy1zZXJ2aWNlcyI+PC9hPk1lc3NhZ2UgQnVzIFN0YXJ0aW5nIFNlcnZpY2VzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBUaGUgbWVzc2FnZSBidXMgY2FuIHN0YXJ0IGFwcGxpY2F0aW9ucyBvbiBiZWhhbGYgb2Ygb3RoZXIgYXBwbGljYXRpb25zLgogICAgICAgIEluIENPUkJBIHRlcm1zLCB0aGlzIHdvdWxkIGJlIGNhbGxlZCA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+YWN0aXZhdGlvbjwvZW0+LgogICAgICAgIEFuIGFwcGxpY2F0aW9uIHRoYXQgY2FuIGJlIHN0YXJ0ZWQgaW4gdGhpcyB3YXkgaXMgY2FsbGVkIGEKICAgICAgICA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+c2VydmljZTwvZW0+LgogICAgICA8L3A+PHA+CiAgICAgICAgV2l0aCBELUJ1cywgc3RhcnRpbmcgYSBzZXJ2aWNlIGlzIG5vcm1hbGx5IGRvbmUgYnkgbmFtZS4gVGhhdCBpcywKICAgICAgICBhcHBsaWNhdGlvbnMgYXNrIHRoZSBtZXNzYWdlIGJ1cyB0byBzdGFydCBzb21lIHByb2dyYW0gdGhhdCB3aWxsIG93biBhCiAgICAgICAgd2VsbC1rbm93biBuYW1lLCBzdWNoIGFzIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuVGV4dEVkaXRvcjwvY29kZT4uCiAgICAgICAgVGhpcyBpbXBsaWVzIGEgY29udHJhY3QgZG9jdW1lbnRlZCBhbG9uZyB3aXRoIHRoZSBuYW1lIAogICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuVGV4dEVkaXRvcjwvY29kZT4gZm9yIHdoaWNoIG9iamVjdHMgCiAgICAgICAgdGhlIG93bmVyIG9mIHRoYXQgbmFtZSB3aWxsIHByb3ZpZGUsIGFuZCB3aGF0IGludGVyZmFjZXMgdGhvc2UgCiAgICAgICAgb2JqZWN0cyB3aWxsIGhhdmUuCiAgICAgIDwvcD48cD4KICAgICAgICBUbyBmaW5kIGFuIGV4ZWN1dGFibGUgY29ycmVzcG9uZGluZyB0byBhIHBhcnRpY3VsYXIgbmFtZSwgdGhlIGJ1cyBkYWVtb24KICAgICAgICBsb29rcyBmb3IgPGVtIGNsYXNzPSJmaXJzdHRlcm0iPnNlcnZpY2UgZGVzY3JpcHRpb24gZmlsZXM8L2VtPi4gIFNlcnZpY2UKICAgICAgICBkZXNjcmlwdGlvbiBmaWxlcyBkZWZpbmUgYSBtYXBwaW5nIGZyb20gbmFtZXMgdG8gZXhlY3V0YWJsZXMuIERpZmZlcmVudAogICAgICAgIGtpbmRzIG9mIG1lc3NhZ2UgYnVzIHdpbGwgbG9vayBmb3IgdGhlc2UgZmlsZXMgaW4gZGlmZmVyZW50IHBsYWNlcywgc2VlCiAgICAgICAgPGEgY2xhc3M9InhyZWYiIGhyZWY9IiNtZXNzYWdlLWJ1cy10eXBlcyIgdGl0bGU9IldlbGwta25vd24gTWVzc2FnZSBCdXMgSW5zdGFuY2VzIj50aGUgc2VjdGlvbiBjYWxsZWQgJiM4MjIwO1dlbGwta25vd24gTWVzc2FnZSBCdXMgSW5zdGFuY2VzJiM4MjIxOzwvYT4uCiAgICAgIDwvcD48cD4KICAgICAgICBTZXJ2aWNlIGRlc2NyaXB0aW9uIGZpbGVzIGhhdmUgdGhlICIuc2VydmljZSIgZmlsZQogICAgICAgIGV4dGVuc2lvbi4gVGhlIG1lc3NhZ2UgYnVzIHdpbGwgb25seSBsb2FkIHNlcnZpY2UgZGVzY3JpcHRpb24gZmlsZXMKICAgICAgICBlbmRpbmcgd2l0aCAuc2VydmljZTsgYWxsIG90aGVyIGZpbGVzIHdpbGwgYmUgaWdub3JlZC4gIFRoZSBmaWxlIGZvcm1hdAogICAgICAgIGlzIHNpbWlsYXIgdG8gdGhhdCBvZiA8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly9zdGFuZGFyZHMuZnJlZWRlc2t0b3Aub3JnL2Rlc2t0b3AtZW50cnktc3BlYy9kZXNrdG9wLWVudHJ5LXNwZWMtbGF0ZXN0Lmh0bWwiIHRhcmdldD0iX3RvcCI+ZGVza3RvcAogICAgICAgIGVudHJpZXM8L2E+LiBBbGwgc2VydmljZSBkZXNjcmlwdGlvbiBmaWxlcyBtdXN0IGJlIGluIFVURi04CiAgICAgICAgZW5jb2RpbmcuIFRvIGVuc3VyZSB0aGF0IHRoZXJlIHdpbGwgYmUgbm8gbmFtZSBjb2xsaXNpb25zLCBzZXJ2aWNlIGZpbGVzCiAgICAgICAgbXVzdCBiZSBuYW1lc3BhY2VkIHVzaW5nIHRoZSBzYW1lIG1lY2hhbmlzbSBhcyBtZXNzYWdlcyBhbmQgc2VydmljZQogICAgICAgIG5hbWVzLgogICAgICA8L3A+PHA+CiAgICAgICAgW0ZJWE1FIHRoZSBmaWxlIGZvcm1hdCBzaG91bGQgYmUgbXVjaCBiZXR0ZXIgc3BlY2lmaWVkIHRoYW4gInNpbWlsYXIgdG8KICAgICAgICAuZGVza3RvcCBlbnRyaWVzIiBlc3AuIHNpbmNlIGRlc2t0b3AgZW50cmllcyBhcmUgYWxyZWFkeQogICAgICAgIGJhZGx5LXNwZWNpZmllZC4gOy0pXQogICAgICAgIFRoZXNlIHNlY3Rpb25zIGZyb20gdGhlIHNwZWNpZmljYXRpb24gYXBwbHkgdG8gc2VydmljZSBmaWxlcyBhcyB3ZWxsOgoKICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+R2VuZXJhbCBzeW50YXg8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5Db21tZW50IGZvcm1hdDwvcD48L2xpPjwvdWw+PC9kaXY+PHA+CgogICAgICAgIDwvcD48ZGl2IGNsYXNzPSJmaWd1cmUiPjxhIG5hbWU9ImlkcDU1NjU2MDAiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkZpZ3VyZaA5LqBFeGFtcGxlIHNlcnZpY2UgZGVzY3JpcHRpb24gZmlsZTwvYj48L3A+PGRpdiBjbGFzcz0iZmlndXJlLWNvbnRlbnRzIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CiAgICAgICAgICAgICMgU2FtcGxlIHNlcnZpY2UgZGVzY3JpcHRpb24gZmlsZQogICAgICAgICAgICBbRC1CVVMgU2VydmljZV0KICAgICAgICAgICAgTmFtZXM9b3JnLmZyZWVkZXNrdG9wLkNvbmZpZ3VyYXRpb25EYXRhYmFzZTtvcmcuZ25vbWUuR0NvbmY7CiAgICAgICAgICAgIEV4ZWM9L3Vzci9saWJleGVjL2djb25mZC0yCiAgICAgICAgICA8L3ByZT48L2Rpdj48L2Rpdj48cD48YnIgY2xhc3M9ImZpZ3VyZS1icmVhayI+CiAgICAgIDwvcD48cD4KICAgICAgICBXaGVuIGFuIGFwcGxpY2F0aW9uIGFza3MgdG8gc3RhcnQgYSBzZXJ2aWNlIGJ5IG5hbWUsIHRoZSBidXMgZGFlbW9uIHRyaWVzIHRvCiAgICAgICAgZmluZCBhIHNlcnZpY2UgdGhhdCB3aWxsIG93biB0aGF0IG5hbWUuIEl0IHRoZW4gdHJpZXMgdG8gc3Bhd24gdGhlCiAgICAgICAgZXhlY3V0YWJsZSBhc3NvY2lhdGVkIHdpdGggaXQuIElmIHRoaXMgZmFpbHMsIGl0IHdpbGwgcmVwb3J0IGFuCiAgICAgICAgZXJyb3IuIFtGSVhNRSB3aGF0IGhhcHBlbnMgaWYgdHdvIC5zZXJ2aWNlIGZpbGVzIG9mZmVyIHRoZSBzYW1lIHNlcnZpY2U7CiAgICAgICAgd2hhdCBraW5kIG9mIGVycm9yIGlzIHJlcG9ydGVkLCBzaG91bGQgd2UgaGF2ZSBhIHdheSBmb3IgdGhlIGNsaWVudCB0bwogICAgICAgIGNob29zZSBvbmU/XQogICAgICA8L3A+PHA+CiAgICAgICAgVGhlIGV4ZWN1dGFibGUgbGF1bmNoZWQgd2lsbCBoYXZlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQogICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5EQlVTX1NUQVJURVJfQUREUkVTUzwvY29kZT4gc2V0IHRvIHRoZSBhZGRyZXNzIG9mIHRoZQogICAgICAgIG1lc3NhZ2UgYnVzIHNvIGl0IGNhbiBjb25uZWN0IGFuZCByZXF1ZXN0IHRoZSBhcHByb3ByaWF0ZSBuYW1lcy4KICAgICAgPC9wPjxwPgogICAgICAgIFRoZSBleGVjdXRhYmxlIGJlaW5nIGxhdW5jaGVkIG1heSB3YW50IHRvIGtub3cgd2hldGhlciB0aGUgbWVzc2FnZSBidXMKICAgICAgICBzdGFydGluZyBpdCBpcyBvbmUgb2YgdGhlIHdlbGwta25vd24gbWVzc2FnZSBidXNlcyAoc2VlIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjbWVzc2FnZS1idXMtdHlwZXMiIHRpdGxlPSJXZWxsLWtub3duIE1lc3NhZ2UgQnVzIEluc3RhbmNlcyI+dGhlIHNlY3Rpb24gY2FsbGVkICYjODIyMDtXZWxsLWtub3duIE1lc3NhZ2UgQnVzIEluc3RhbmNlcyYjODIyMTs8L2E+KS4gVG8gZmFjaWxpdGF0ZSB0aGlzLCB0aGUgYnVzIG11c3QgYWxzbyBzZXQKICAgICAgICB0aGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRCVVNfU1RBUlRFUl9CVVNfVFlQRTwvY29kZT4gZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgaXQgaXMgb25lCiAgICAgICAgb2YgdGhlIHdlbGwta25vd24gYnVzZXMuIFRoZSBjdXJyZW50bHktZGVmaW5lZCB2YWx1ZXMgZm9yIHRoaXMgdmFyaWFibGUKICAgICAgICBhcmUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPnN5c3RlbTwvY29kZT4gZm9yIHRoZSBzeXN0ZW13aWRlIG1lc3NhZ2UgYnVzLAogICAgICAgIGFuZCA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+c2Vzc2lvbjwvY29kZT4gZm9yIHRoZSBwZXItbG9naW4tc2Vzc2lvbiBtZXNzYWdlCiAgICAgICAgYnVzLiBUaGUgbmV3IGV4ZWN1dGFibGUgbXVzdCBzdGlsbCBjb25uZWN0IHRvIHRoZSBhZGRyZXNzIGdpdmVuCiAgICAgICAgaW4gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRCVVNfU1RBUlRFUl9BRERSRVNTPC9jb2RlPiwgYnV0IG1heSBhc3N1bWUgdGhhdCB0aGUKICAgICAgICByZXN1bHRpbmcgY29ubmVjdGlvbiBpcyB0byB0aGUgd2VsbC1rbm93biBidXMuCiAgICAgIDwvcD48cD4KICAgICAgICBbRklYTUUgdGhlcmUgc2hvdWxkIGJlIGEgdGltZW91dCBzb21ld2hlcmUsIGVpdGhlciBzcGVjaWZpZWQKICAgICAgICBpbiB0aGUgLnNlcnZpY2UgZmlsZSwgYnkgdGhlIGNsaWVudCwgb3IganVzdCBhIGdsb2JhbCB2YWx1ZQogICAgICAgIGFuZCBpZiB0aGUgY2xpZW50IGJlaW5nIGFjdGl2YXRlZCBmYWlscyB0byBjb25uZWN0IHdpdGhpbiB0aGF0CiAgICAgICAgdGltZW91dCwgYW4gZXJyb3Igc2hvdWxkIGJlIHNlbnQgYmFjay5dCiAgICAgIDwvcD48ZGl2IGNsYXNzPSJzZWN0MyIgdGl0bGU9Ik1lc3NhZ2UgQnVzIFNlcnZpY2UgU2NvcGUiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9Im1lc3NhZ2UtYnVzLXN0YXJ0aW5nLXNlcnZpY2VzLXNjb3BlIj48L2E+TWVzc2FnZSBCdXMgU2VydmljZSBTY29wZTwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgICBUaGUgInNjb3BlIiBvZiBhIHNlcnZpY2UgaXMgaXRzICJwZXItIiwgc3VjaCBhcyBwZXItc2Vzc2lvbiwKICAgICAgICAgIHBlci1tYWNoaW5lLCBwZXItaG9tZS1kaXJlY3RvcnksIG9yIHBlci1kaXNwbGF5LiBUaGUgcmVmZXJlbmNlCiAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHlldCBzdXBwb3J0IHN0YXJ0aW5nIHNlcnZpY2VzIGluIGEgZGlmZmVyZW50CiAgICAgICAgICBzY29wZSBmcm9tIHRoZSBtZXNzYWdlIGJ1cyBpdHNlbGYuIFNvIGUuZy4gaWYgeW91IHN0YXJ0IGEgc2VydmljZQogICAgICAgICAgb24gdGhlIHNlc3Npb24gYnVzIGl0cyBzY29wZSBpcyBwZXItc2Vzc2lvbi4KICAgICAgICA8L3A+PHA+CiAgICAgICAgICBXZSBjb3VsZCBhZGQgYW4gb3B0aW9uYWwgc2NvcGUgdG8gYSBidXMgbmFtZS4gRm9yIGV4YW1wbGUsIGZvcgogICAgICAgICAgcGVyLShkaXNwbGF5LHNlc3Npb24gcGFpciksIHdlIGNvdWxkIGhhdmUgYSB1bmlxdWUgSUQgZm9yIGVhY2ggZGlzcGxheQogICAgICAgICAgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYXQgbG9naW4gYW5kIHNldCBvbiBzY3JlZW4gMCBieSBleGVjdXRpbmcgYQogICAgICAgICAgc3BlY2lhbCAic2V0IGRpc3BsYXkgSUQiIGJpbmFyeS4gVGhlIElEIHdvdWxkIGJlIHN0b3JlZCBpbiBhCiAgICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+X0RCVVNfRElTUExBWV9JRDwvY29kZT4gcHJvcGVydHkgYW5kIHdvdWxkIGJlIGEgc3RyaW5nIG9mCiAgICAgICAgICByYW5kb20gYnl0ZXMuIFRoaXMgSUQgd291bGQgdGhlbiBiZSB1c2VkIHRvIHNjb3BlIG5hbWVzLgogICAgICAgICAgU3RhcnRpbmcvbG9jYXRpbmcgYSBzZXJ2aWNlIGNvdWxkIGJlIGRvbmUgYnkgSUQtbmFtZSBwYWlyIHJhdGhlciB0aGFuCiAgICAgICAgICBvbmx5IGJ5IG5hbWUuCiAgICAgICAgPC9wPjxwPgogICAgICAgICAgQ29udHJhc3QgdGhpcyB3aXRoIGEgcGVyLWRpc3BsYXkgc2NvcGUuIFRvIGFjaGlldmUgdGhhdCwgd2Ugd291bGQgCiAgICAgICAgICB3YW50IGEgc2luZ2xlIGJ1cyBzcGFubmluZyBhbGwgc2Vzc2lvbnMgdXNpbmcgYSBnaXZlbiBkaXNwbGF5LgogICAgICAgICAgU28gd2UgbWlnaHQgc2V0IGEgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPl9EQlVTX0RJU1BMQVlfQlVTX0FERFJFU1M8L2NvZGU+IAogICAgICAgICAgcHJvcGVydHkgb24gc2NyZWVuIDAgb2YgdGhlIGRpc3BsYXksIHBvaW50aW5nIHRvIHRoaXMgYnVzLgogICAgICAgIDwvcD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IldlbGwta25vd24gTWVzc2FnZSBCdXMgSW5zdGFuY2VzIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJtZXNzYWdlLWJ1cy10eXBlcyI+PC9hPldlbGwta25vd24gTWVzc2FnZSBCdXMgSW5zdGFuY2VzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBUd28gc3RhbmRhcmQgbWVzc2FnZSBidXMgaW5zdGFuY2VzIGFyZSBkZWZpbmVkIGhlcmUsIGFsb25nIHdpdGggaG93IAogICAgICAgIHRvIGxvY2F0ZSB0aGVtIGFuZCB3aGVyZSB0aGVpciBzZXJ2aWNlIGZpbGVzIGxpdmUuCiAgICAgIDwvcD48ZGl2IGNsYXNzPSJzZWN0MyIgdGl0bGU9IkxvZ2luIHNlc3Npb24gbWVzc2FnZSBidXMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9Im1lc3NhZ2UtYnVzLXR5cGVzLWxvZ2luIj48L2E+TG9naW4gc2Vzc2lvbiBtZXNzYWdlIGJ1czwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgICBFYWNoIHRpbWUgYSB1c2VyIGxvZ3MgaW4sIGEgPGVtIGNsYXNzPSJmaXJzdHRlcm0iPmxvZ2luIHNlc3Npb24gbWVzc2FnZQogICAgICAgICAgICBidXM8L2VtPiBtYXkgYmUgc3RhcnRlZC4gQWxsIGFwcGxpY2F0aW9ucyBpbiB0aGUgdXNlcidzIGxvZ2luCiAgICAgICAgICBzZXNzaW9uIG1heSBpbnRlcmFjdCB3aXRoIG9uZSBhbm90aGVyIHVzaW5nIHRoaXMgbWVzc2FnZSBidXMuCiAgICAgICAgPC9wPjxwPgogICAgICAgICAgVGhlIGFkZHJlc3Mgb2YgdGhlIGxvZ2luIHNlc3Npb24gbWVzc2FnZSBidXMgaXMgZ2l2ZW4gCiAgICAgICAgICBpbiB0aGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRCVVNfU0VTU0lPTl9CVVNfQUREUkVTUzwvY29kZT4gZW52aXJvbm1lbnQgCiAgICAgICAgICB2YXJpYWJsZS4gSWYgdGhhdCB2YXJpYWJsZSBpcyBub3Qgc2V0LCBhcHBsaWNhdGlvbnMgbWF5IAogICAgICAgICAgYWxzbyB0cnkgdG8gcmVhZCB0aGUgYWRkcmVzcyBmcm9tIHRoZSBYIFdpbmRvdyBTeXN0ZW0gcm9vdCAKICAgICAgICAgIHdpbmRvdyBwcm9wZXJ0eSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+X0RCVVNfU0VTU0lPTl9CVVNfQUREUkVTUzwvY29kZT4uCiAgICAgICAgICBUaGUgcm9vdCB3aW5kb3cgcHJvcGVydHkgbXVzdCBoYXZlIHR5cGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPlNUUklORzwvY29kZT4uCiAgICAgICAgICBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgc2hvdWxkIGhhdmUgcHJlY2VkZW5jZSBvdmVyIHRoZSAKICAgICAgICAgIHJvb3Qgd2luZG93IHByb3BlcnR5LgogICAgICAgIDwvcD48cD5UaGUgYWRkcmVzcyBvZiB0aGUgbG9naW4gc2Vzc2lvbiBtZXNzYWdlIGJ1cyBpcyBnaXZlbiBpbiB0aGUKICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+REJVU19TRVNTSU9OX0JVU19BRERSRVNTPC9jb2RlPiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gSWYKICAgICAgICBEQlVTX1NFU1NJT05fQlVTX0FERFJFU1MgaXMgbm90IHNldCwgb3IgaWYgaXQncyBzZXQgdG8gdGhlIHN0cmluZwogICAgICAgICJhdXRvbGF1bmNoOiIsIHRoZSBzeXN0ZW0gc2hvdWxkIHVzZSBwbGF0Zm9ybS1zcGVjaWZpYyBtZXRob2RzIG9mCiAgICAgICAgbG9jYXRpbmcgYSBydW5uaW5nIEQtQnVzIHNlc3Npb24gc2VydmVyLCBvciBzdGFydGluZyBvbmUgaWYgYSBydW5uaW5nCiAgICAgICAgaW5zdGFuY2UgY2Fubm90IGJlIGZvdW5kLiBOb3RlIHRoYXQgdGhpcyBtZWNoYW5pc20gaXMgbm90IHJlY29tbWVuZGVkCiAgICAgICAgZm9yIGF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIGlmIGEgZGFlbW9uIGlzIHJ1bm5pbmcuIEl0IGlzIGluaGVyZW50bHkKICAgICAgICByYWN5IHRvIGF0dGVtcHQgdG8gbWFrZSB0aGlzIGRldGVybWluYXRpb24sIHNpbmNlIHRoZSBidXMgZGFlbW9uIG1heQogICAgICAgIGJlIHN0YXJ0ZWQganVzdCBiZWZvcmUgb3IganVzdCBhZnRlciB0aGUgZGV0ZXJtaW5hdGlvbiBpcyBtYWRlLgogICAgICAgIFRoZXJlZm9yZSwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhcHBsaWNhdGlvbnMgZG8gbm90IHRyeSB0byBtYWtlIHRoaXMKICAgICAgICBkZXRlcm1pbmF0aW9uIGZvciB0aGVpciBmdW5jdGlvbmFsaXR5IHB1cnBvc2VzLCBhbmQgaW5zdGVhZCB0aGV5CiAgICAgICAgc2hvdWxkIGF0dGVtcHQgdG8gc3RhcnQgdGhlIHNlcnZlci48L3A+PGRpdiBjbGFzcz0ic2VjdDQiIHRpdGxlPSJYIFdpbmRvd2luZyBTeXN0ZW0iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNSBjbGFzcz0idGl0bGUiPjxhIG5hbWU9Im1lc3NhZ2UtYnVzLXR5cGVzLWxvZ2luLXgtd2luZG93cyI+PC9hPlggV2luZG93aW5nIFN5c3RlbTwvaDU+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgICAgIEZvciB0aGUgWCBXaW5kb3dpbmcgU3lzdGVtLCB0aGUgYXBwbGljYXRpb24gbXVzdCBsb2NhdGUgdGhlCiAgICAgICAgICAgIHdpbmRvdyBvd25lciBvZiB0aGUgc2VsZWN0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSBhdG9tIGZvcm1lZCBieQogICAgICAgICAgICBjb25jYXRlbmF0aW5nOgogICAgICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+dGhlIGxpdGVyYWwgc3RyaW5nICJfREJVU19TRVNTSU9OX0JVU19TRUxFQ1RJT05fIjwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPnRoZSBjdXJyZW50IHVzZXIncyB1c2VybmFtZTwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPnRoZSBsaXRlcmFsIGNoYXJhY3RlciAnXycgKHVuZGVyc2NvcmUpPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+dGhlIG1hY2hpbmUncyBJRDwvcD48L2xpPjwvdWw+PC9kaXY+PHA+CiAgICAgICAgICA8L3A+PHA+CiAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBhcmUgZGVmaW5lZCBmb3IgdGhlIHdpbmRvdyB0aGF0IG93bnMKICAgICAgICAgICAgdGhpcyBYIHNlbGVjdGlvbjoKICAgICAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBib3JkZXI9IjEiPjxjb2xncm91cD48Y29sPjxjb2w+PC9jb2xncm91cD48dGJvZHk+PHRyPjx0ZD4KICAgICAgICAgICAgICAgICAgICAgIDxwPkF0b208L3A+CiAgICAgICAgICAgICAgICAgICAgPC90ZD48dGQ+CiAgICAgICAgICAgICAgICAgICAgICA8cD5tZWFuaW5nPC9wPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHI+PHRkPgogICAgICAgICAgICAgICAgICAgICAgPHA+X0RCVVNfU0VTU0lPTl9CVVNfQUREUkVTUzwvcD4KICAgICAgICAgICAgICAgICAgICA8L3RkPjx0ZD4KICAgICAgICAgICAgICAgICAgICAgIDxwPnRoZSBhY3R1YWwgYWRkcmVzcyBvZiB0aGUgc2VydmVyIHNvY2tldDwvcD4KICAgICAgICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyPjx0ZD4KICAgICAgICAgICAgICAgICAgICAgIDxwPl9EQlVTX1NFU1NJT05fQlVTX1BJRDwvcD4KICAgICAgICAgICAgICAgICAgICA8L3RkPjx0ZD4KICAgICAgICAgICAgICAgICAgICAgIDxwPnRoZSBQSUQgb2YgdGhlIHNlcnZlciBwcm9jZXNzPC9wPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PHA+CiAgICAgICAgICA8L3A+PHA+CiAgICAgICAgICAgIEF0IGxlYXN0IHRoZSBfREJVU19TRVNTSU9OX0JVU19BRERSRVNTIHByb3BlcnR5IE1VU1QgYmUKICAgICAgICAgICAgcHJlc2VudCBpbiB0aGlzIHdpbmRvdy4KICAgICAgICAgIDwvcD48cD4KICAgICAgICAgICAgSWYgdGhlIFggc2VsZWN0aW9uIGNhbm5vdCBiZSBsb2NhdGVkIG9yIGlmIHJlYWRpbmcgdGhlCiAgICAgICAgICAgIHByb3BlcnRpZXMgZnJvbSB0aGUgd2luZG93IGZhaWxzLCB0aGUgaW1wbGVtZW50YXRpb24gTVVTVCBjb25jbHVkZQogICAgICAgICAgICB0aGF0IHRoZXJlIGlzIG5vIEQtQnVzIHNlcnZlciBydW5uaW5nIGFuZCBwcm9jZWVkIHRvIHN0YXJ0IGEgbmV3CiAgICAgICAgICAgIHNlcnZlci4gKFNlZSBiZWxvdyBvbiBjb25jdXJyZW5jeSBpc3N1ZXMpCiAgICAgICAgICA8L3A+PHA+CiAgICAgICAgICAgIEZhaWx1cmUgdG8gY29ubmVjdCB0byB0aGUgRC1CdXMgc2VydmVyIGFkZHJlc3MgdGh1cyBvYnRhaW5lZAogICAgICAgICAgICBNVVNUIGJlIHRyZWF0ZWQgYXMgYSBmYXRhbCBjb25uZWN0aW9uIGVycm9yIGFuZCBzaG91bGQgYmUgcmVwb3J0ZWQKICAgICAgICAgICAgdG8gdGhlIGFwcGxpY2F0aW9uLgogICAgICAgICAgPC9wPjxwPgogICAgICAgICAgICBBcyBhbiBhbHRlcm5hdGl2ZSwgYW4gaW1wbGVtZW50YXRpb24gTUFZIGZpbmQgdGhlIGluZm9ybWF0aW9uCiAgICAgICAgICAgIGluIHRoZSBmb2xsb3dpbmcgZmlsZSBsb2NhdGVkIGluIHRoZSBjdXJyZW50IHVzZXIncyBob21lIGRpcmVjdG9yeSwKICAgICAgICAgICAgaW4gc3ViZGlyZWN0b3J5IC5kYnVzL3Nlc3Npb24tYnVzLzoKICAgICAgICAgICAgPC9wPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPnRoZSBtYWNoaW5lJ3MgSUQ8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD50aGUgbGl0ZXJhbCBjaGFyYWN0ZXIgJy0nIChkYXNoKTwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPnRoZSBYIGRpc3BsYXkgd2l0aG91dCB0aGUgc2NyZWVuIG51bWJlciwgd2l0aCB0aGUKICAgICAgICAgICAgICAgIGZvbGxvd2luZyBwcmVmaXhlcyByZW1vdmVkLCBpZiBwcmVzZW50OiAiOiIsICJsb2NhbGhvc3Q6IgogICAgICAgICAgICAgICAgLiJsb2NhbGhvc3QubG9jYWxkb21haW46Ii4gVGhhdCBpcywgYSBkaXNwbGF5IG9mCiAgICAgICAgICAgICAgICAibG9jYWxob3N0OjEwLjAiIHByb2R1Y2VzIGp1c3QgdGhlIG51bWJlciAiMTAiPC9wPjwvbGk+PC91bD48L2Rpdj48cD4KICAgICAgICAgIDwvcD48cD4KICAgICAgICAgICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBOQU1FPXZhbHVlIGFzc2lnbm1lbnQgcGFpcnMgYW5kCiAgICAgICAgICAgIGxpbmVzIHN0YXJ0aW5nIHdpdGggIyBhcmUgY29tbWVudHMgKG5vIGNvbW1lbnRzIGFyZSBhbGxvd2VkCiAgICAgICAgICAgIG90aGVyd2lzZSkuIFRoZSBmb2xsb3dpbmcgdmFyaWFibGUgbmFtZXMgYXJlIGRlZmluZWQ6CiAgICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgYm9yZGVyPSIxIj48Y29sZ3JvdXA+PGNvbD48Y29sPjwvY29sZ3JvdXA+PHRib2R5Pjx0cj48dGQ+CiAgICAgICAgICAgICAgICAgICAgICA8cD5WYXJpYWJsZTwvcD4KICAgICAgICAgICAgICAgICAgICA8L3RkPjx0ZD4KICAgICAgICAgICAgICAgICAgICAgIDxwPm1lYW5pbmc8L3A+CiAgICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0cj48dGQ+CiAgICAgICAgICAgICAgICAgICAgICA8cD5EQlVTX1NFU1NJT05fQlVTX0FERFJFU1M8L3A+CiAgICAgICAgICAgICAgICAgICAgPC90ZD48dGQ+CiAgICAgICAgICAgICAgICAgICAgICA8cD50aGUgYWN0dWFsIGFkZHJlc3Mgb2YgdGhlIHNlcnZlciBzb2NrZXQ8L3A+CiAgICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0cj48dGQ+CiAgICAgICAgICAgICAgICAgICAgICA8cD5EQlVTX1NFU1NJT05fQlVTX1BJRDwvcD4KICAgICAgICAgICAgICAgICAgICA8L3RkPjx0ZD4KICAgICAgICAgICAgICAgICAgICAgIDxwPnRoZSBQSUQgb2YgdGhlIHNlcnZlciBwcm9jZXNzPC9wPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHI+PHRkPgogICAgICAgICAgICAgICAgICAgICAgPHA+REJVU19TRVNTSU9OX0JVU19XSU5ET1dJRDwvcD4KICAgICAgICAgICAgICAgICAgICA8L3RkPjx0ZD4KICAgICAgICAgICAgICAgICAgICAgIDxwPnRoZSB3aW5kb3cgSUQ8L3A+CiAgICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L2Rpdj48cD4KICAgICAgICAgIDwvcD48cD4KICAgICAgICAgICAgQXQgbGVhc3QgdGhlIERCVVNfU0VTU0lPTl9CVVNfQUREUkVTUyB2YXJpYWJsZSBNVVNUIGJlIHByZXNlbnQKICAgICAgICAgICAgaW4gdGhpcyBmaWxlLgogICAgICAgICAgPC9wPjxwPgogICAgICAgICAgICBGYWlsdXJlIHRvIG9wZW4gdGhpcyBmaWxlIE1VU1QgYmUgaW50ZXJwcmV0ZWQgYXMgYWJzZW5jZSBvZiBhCiAgICAgICAgICAgIHJ1bm5pbmcgc2VydmVyLiBUaGVyZWZvcmUsIHRoZSBpbXBsZW1lbnRhdGlvbiBNVVNUIHByb2NlZWQgdG8KICAgICAgICAgICAgYXR0ZW1wdGluZyB0byBsYXVuY2ggYSBuZXcgYnVzIHNlcnZlciBpZiB0aGUgZmlsZSBjYW5ub3QgYmUKICAgICAgICAgICAgb3BlbmVkLgogICAgICAgICAgPC9wPjxwPgogICAgICAgICAgICBIb3dldmVyLCBzdWNjZXNzIGluIG9wZW5pbmcgdGhpcyBmaWxlIE1VU1QgTk9UIGxlYWQgdG8gdGhlCiAgICAgICAgICAgIGNvbmNsdXNpb24gdGhhdCB0aGUgc2VydmVyIGlzIHJ1bm5pbmcuIFRodXMsIGEgZmFpbHVyZSB0byBjb25uZWN0IHRvCiAgICAgICAgICAgIHRoZSBidXMgYWRkcmVzcyBvYnRhaW5lZCBieSB0aGUgYWx0ZXJuYXRpdmUgbWV0aG9kIE1VU1QgTk9UIGJlCiAgICAgICAgICAgIGNvbnNpZGVyZWQgYSBmYXRhbCBlcnJvci4gSWYgdGhlIGNvbm5lY3Rpb24gY2Fubm90IGJlIGVzdGFibGlzaGVkLAogICAgICAgICAgICB0aGUgaW1wbGVtZW50YXRpb24gTVVTVCBwcm9jZWVkIHRvIGNoZWNrIHRoZSBYIHNlbGVjdGlvbiBzZXR0aW5ncyBvcgogICAgICAgICAgICB0byBzdGFydCB0aGUgc2VydmVyIG9uIGl0cyBvd24uCiAgICAgICAgICA8L3A+PHA+CiAgICAgICAgICAgIElmIHRoZSBpbXBsZW1lbnRhdGlvbiBjb25jbHVkZXMgdGhhdCB0aGUgRC1CdXMgc2VydmVyIGlzIG5vdAogICAgICAgICAgICBydW5uaW5nIGl0IE1VU1QgYXR0ZW1wdCB0byBzdGFydCBhIG5ldyBzZXJ2ZXIgYW5kIGl0IE1VU1QgYWxzbwogICAgICAgICAgICBlbnN1cmUgdGhhdCB0aGUgZGFlbW9uIHN0YXJ0ZWQgYXMgYW4gZWZmZWN0IG9mIHRoZSAiYXV0b2xhdW5jaCIKICAgICAgICAgICAgbWVjaGFuaXNtIHByb3ZpZGVzIHRoZSBsb29rdXAgbWVjaGFuaXNtcyBkZXNjcmliZWQgYWJvdmUsIHNvCiAgICAgICAgICAgIHN1YnNlcXVlbnQgY2FsbHMgY2FuIGxvY2F0ZSB0aGUgbmV3bHkgc3RhcnRlZCBzZXJ2ZXIuIFRoZQogICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBNVVNUIGFsc28gZW5zdXJlIHRoYXQgaWYgdHdvIG9yIG1vcmUgY29uY3VycmVudAogICAgICAgICAgICBpbml0aWF0aW9ucyBoYXBwZW4sIG9ubHkgb25lIHNlcnZlciByZW1haW5zIHJ1bm5pbmcgYW5kIGFsbCBvdGhlcgogICAgICAgICAgICBpbml0aWF0aW9ucyBhcmUgYWJsZSB0byBvYnRhaW4gdGhlIGFkZHJlc3Mgb2YgdGhpcyBzZXJ2ZXIgYW5kCiAgICAgICAgICAgIGNvbm5lY3QgdG8gaXQuIEluIG90aGVyIHdvcmRzLCB0aGUgaW1wbGVtZW50YXRpb24gTVVTVCBlbnN1cmUgdGhhdAogICAgICAgICAgICB0aGUgWCBzZWxlY3Rpb24gaXMgbm90IHByZXNlbnQgd2hlbiBpdCBhdHRlbXB0cyB0byBzZXQgaXQsIHdpdGhvdXQKICAgICAgICAgICAgYWxsb3dpbmcgYW5vdGhlciBwcm9jZXNzIHRvIHNldCB0aGUgc2VsZWN0aW9uIGJldHdlZW4gdGhlCiAgICAgICAgICAgIHZlcmlmaWNhdGlvbiBhbmQgdGhlIHNldHRpbmcgKGUuZy4sIGJ5IHVzaW5nIFhHcmFiU2VydmVyIC8KICAgICAgICAgICAgWHVuZ3JhYlNlcnZlcikuCiAgICAgICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDQiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNSBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImlkcDU2MTgzNjgiPjwvYT48L2g1PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgICAgICBbRklYTUUgc3BlY2lmeSBsb2NhdGlvbiBvZiAuc2VydmljZSBmaWxlcywgcHJvYmFibHkgdXNpbmcKICAgICAgICAgICAgREVTS1RPUF9ESVJTIGV0Yy4gZnJvbSBiYXNlZGlyIHNwZWNpZmljYXRpb24sIHRob3VnaCBsb2dpbiBzZXNzaW9uCiAgICAgICAgICAgIGJ1cyBpcyBub3QgcmVhbGx5IGRlc2t0b3Atc3BlY2lmaWNdCiAgICAgICAgICA8L3A+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDMiIHRpdGxlPSJTeXN0ZW0gbWVzc2FnZSBidXMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9Im1lc3NhZ2UtYnVzLXR5cGVzLXN5c3RlbSI+PC9hPlN5c3RlbSBtZXNzYWdlIGJ1czwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgICBBIGNvbXB1dGVyIG1heSBoYXZlIGEgPGVtIGNsYXNzPSJmaXJzdHRlcm0iPnN5c3RlbSBtZXNzYWdlIGJ1czwvZW0+LAogICAgICAgICAgYWNjZXNzaWJsZSB0byBhbGwgYXBwbGljYXRpb25zIG9uIHRoZSBzeXN0ZW0uIFRoaXMgbWVzc2FnZSBidXMgbWF5IGJlCiAgICAgICAgICB1c2VkIHRvIGJyb2FkY2FzdCBzeXN0ZW0gZXZlbnRzLCBzdWNoIGFzIGFkZGluZyBuZXcgaGFyZHdhcmUgZGV2aWNlcywgCiAgICAgICAgICBjaGFuZ2VzIGluIHRoZSBwcmludGVyIHF1ZXVlLCBhbmQgc28gZm9ydGguCiAgICAgICAgPC9wPjxwPgogICAgICAgICAgVGhlIGFkZHJlc3Mgb2YgdGhlIHN5c3RlbSBtZXNzYWdlIGJ1cyBpcyBnaXZlbiAKICAgICAgICAgIGluIHRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+REJVU19TWVNURU1fQlVTX0FERFJFU1M8L2NvZGU+IGVudmlyb25tZW50IAogICAgICAgICAgdmFyaWFibGUuIElmIHRoYXQgdmFyaWFibGUgaXMgbm90IHNldCwgYXBwbGljYXRpb25zIHNob3VsZCB0cnkgCiAgICAgICAgICB0byBjb25uZWN0IHRvIHRoZSB3ZWxsLWtub3duIGFkZHJlc3MKICAgICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj51bml4OnBhdGg9L3Zhci9ydW4vZGJ1cy9zeXN0ZW1fYnVzX3NvY2tldDwvY29kZT4uCiAgICAgICAgICA8c3VwPls8YSBuYW1lPSJpZHA1NjIzMzkyIiBocmVmPSIjZnRuLmlkcDU2MjMzOTIiIGNsYXNzPSJmb290bm90ZSI+MjwvYT5dPC9zdXA+CiAgICAgICAgPC9wPjxwPgogICAgICAgICAgW0ZJWE1FIHNwZWNpZnkgbG9jYXRpb24gb2Ygc3lzdGVtIGJ1cyAuc2VydmljZSBmaWxlc10KICAgICAgICA8L3A+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSJNZXNzYWdlIEJ1cyBNZXNzYWdlcyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0ibWVzc2FnZS1idXMtbWVzc2FnZXMiPjwvYT5NZXNzYWdlIEJ1cyBNZXNzYWdlczwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgVGhlIHNwZWNpYWwgbWVzc2FnZSBidXMgbmFtZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkRCdXM8L2NvZGU+CiAgICAgICAgcmVzcG9uZHMgdG8gYSBudW1iZXIgb2YgYWRkaXRpb25hbCBtZXNzYWdlcy4KICAgICAgPC9wPjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0ib3JnLmZyZWVkZXNrdG9wLkRCdXMuSGVsbG8iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImJ1cy1tZXNzYWdlcy1oZWxsbyI+PC9hPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5IZWxsbzwvY29kZT48L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgICAgQXMgYSBtZXRob2Q6CiAgICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogICAgICAgICAgICBTVFJJTkcgSGVsbG8gKCkKICAgICAgICAgIDwvcHJlPjxwPgogICAgICAgICAgUmVwbHkgYXJndW1lbnRzOgogICAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBib3JkZXI9IjEiPjxjb2xncm91cD48Y29sPjxjb2w+PGNvbD48L2NvbGdyb3VwPjx0aGVhZD48dHI+PHRoPkFyZ3VtZW50PC90aD48dGg+VHlwZTwvdGg+PHRoPkRlc2NyaXB0aW9uPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGQ+MDwvdGQ+PHRkPlNUUklORzwvdGQ+PHRkPlVuaXF1ZSBuYW1lIGFzc2lnbmVkIHRvIHRoZSBjb25uZWN0aW9uPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L2Rpdj48cD4KICAgICAgICA8L3A+PHA+CiAgICAgICAgICBCZWZvcmUgYW4gYXBwbGljYXRpb24gaXMgYWJsZSB0byBzZW5kIG1lc3NhZ2VzIHRvIG90aGVyIGFwcGxpY2F0aW9ucwogICAgICAgICAgaXQgbXVzdCBzZW5kIHRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkRCdXMuSGVsbG88L2NvZGU+IG1lc3NhZ2UKICAgICAgICAgIHRvIHRoZSBtZXNzYWdlIGJ1cyB0byBvYnRhaW4gYSB1bmlxdWUgbmFtZS4gSWYgYW4gYXBwbGljYXRpb24gd2l0aG91dAogICAgICAgICAgYSB1bmlxdWUgbmFtZSB0cmllcyB0byBzZW5kIGEgbWVzc2FnZSB0byBhbm90aGVyIGFwcGxpY2F0aW9uLCBvciBhCiAgICAgICAgICBtZXNzYWdlIHRvIHRoZSBtZXNzYWdlIGJ1cyBpdHNlbGYgdGhhdCBpc24ndCB0aGUKICAgICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5IZWxsbzwvY29kZT4gbWVzc2FnZSwgaXQgd2lsbCBiZQogICAgICAgICAgZGlzY29ubmVjdGVkIGZyb20gdGhlIGJ1cy4KICAgICAgICA8L3A+PHA+CiAgICAgICAgICBUaGVyZSBpcyBubyBjb3JyZXNwb25kaW5nICJkaXNjb25uZWN0IiByZXF1ZXN0OyBpZiBhIGNsaWVudCB3aXNoZXMgdG8KICAgICAgICAgIGRpc2Nvbm5lY3QgZnJvbSB0aGUgYnVzLCBpdCBzaW1wbHkgY2xvc2VzIHRoZSBzb2NrZXQgKG9yIG90aGVyIAogICAgICAgICAgY29tbXVuaWNhdGlvbiBjaGFubmVsKS4KICAgICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDMiIHRpdGxlPSJvcmcuZnJlZWRlc2t0b3AuREJ1cy5MaXN0TmFtZXMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImJ1cy1tZXNzYWdlcy1saXN0LW5hbWVzIj48L2E+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPm9yZy5mcmVlZGVza3RvcC5EQnVzLkxpc3ROYW1lczwvY29kZT48L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgICAgQXMgYSBtZXRob2Q6CiAgICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogICAgICAgICAgICBBUlJBWSBvZiBTVFJJTkcgTGlzdE5hbWVzICgpCiAgICAgICAgICA8L3ByZT48cD4KICAgICAgICAgIFJlcGx5IGFyZ3VtZW50czoKICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgYm9yZGVyPSIxIj48Y29sZ3JvdXA+PGNvbD48Y29sPjxjb2w+PC9jb2xncm91cD48dGhlYWQ+PHRyPjx0aD5Bcmd1bWVudDwvdGg+PHRoPlR5cGU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkPjA8L3RkPjx0ZD5BUlJBWSBvZiBTVFJJTkc8L3RkPjx0ZD5BcnJheSBvZiBzdHJpbmdzIHdoZXJlIGVhY2ggc3RyaW5nIGlzIGEgYnVzIG5hbWU8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjxwPgogICAgICAgIDwvcD48cD4KICAgICAgICAgIFJldHVybnMgYSBsaXN0IG9mIGFsbCBjdXJyZW50bHktb3duZWQgbmFtZXMgb24gdGhlIGJ1cy4KICAgICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDMiIHRpdGxlPSJvcmcuZnJlZWRlc2t0b3AuREJ1cy5MaXN0QWN0aXZhdGFibGVOYW1lcyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iYnVzLW1lc3NhZ2VzLWxpc3QtYWN0aXZhdGFibGUtbmFtZXMiPjwvYT48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkRCdXMuTGlzdEFjdGl2YXRhYmxlTmFtZXM8L2NvZGU+PC9oND48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICAgIEFzIGEgbWV0aG9kOgogICAgICAgICAgPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgICAgQVJSQVkgb2YgU1RSSU5HIExpc3RBY3RpdmF0YWJsZU5hbWVzICgpCiAgICAgICAgICA8L3ByZT48cD4KICAgICAgICAgIFJlcGx5IGFyZ3VtZW50czoKICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgYm9yZGVyPSIxIj48Y29sZ3JvdXA+PGNvbD48Y29sPjxjb2w+PC9jb2xncm91cD48dGhlYWQ+PHRyPjx0aD5Bcmd1bWVudDwvdGg+PHRoPlR5cGU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkPjA8L3RkPjx0ZD5BUlJBWSBvZiBTVFJJTkc8L3RkPjx0ZD5BcnJheSBvZiBzdHJpbmdzIHdoZXJlIGVhY2ggc3RyaW5nIGlzIGEgYnVzIG5hbWU8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjxwPgogICAgICAgIDwvcD48cD4KICAgICAgICAgIFJldHVybnMgYSBsaXN0IG9mIGFsbCBuYW1lcyB0aGF0IGNhbiBiZSBhY3RpdmF0ZWQgb24gdGhlIGJ1cy4KICAgICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDMiIHRpdGxlPSJvcmcuZnJlZWRlc2t0b3AuREJ1cy5OYW1lSGFzT3duZXIiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImJ1cy1tZXNzYWdlcy1uYW1lLWV4aXN0cyI+PC9hPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5OYW1lSGFzT3duZXI8L2NvZGU+PC9oND48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICAgIEFzIGEgbWV0aG9kOgogICAgICAgICAgPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgICAgQk9PTEVBTiBOYW1lSGFzT3duZXIgKGluIFNUUklORyBuYW1lKQogICAgICAgICAgPC9wcmU+PHA+CiAgICAgICAgICBNZXNzYWdlIGFyZ3VtZW50czoKICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgYm9yZGVyPSIxIj48Y29sZ3JvdXA+PGNvbD48Y29sPjxjb2w+PC9jb2xncm91cD48dGhlYWQ+PHRyPjx0aD5Bcmd1bWVudDwvdGg+PHRoPlR5cGU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkPjA8L3RkPjx0ZD5TVFJJTkc8L3RkPjx0ZD5OYW1lIHRvIGNoZWNrPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L2Rpdj48cD4KICAgICAgICAgIFJlcGx5IGFyZ3VtZW50czoKICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgYm9yZGVyPSIxIj48Y29sZ3JvdXA+PGNvbD48Y29sPjxjb2w+PC9jb2xncm91cD48dGhlYWQ+PHRyPjx0aD5Bcmd1bWVudDwvdGg+PHRoPlR5cGU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkPjA8L3RkPjx0ZD5CT09MRUFOPC90ZD48dGQ+UmV0dXJuIHZhbHVlLCB0cnVlIGlmIHRoZSBuYW1lIGV4aXN0czwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PHA+CiAgICAgICAgPC9wPjxwPgogICAgICAgICAgQ2hlY2tzIGlmIHRoZSBzcGVjaWZpZWQgbmFtZSBleGlzdHMgKGN1cnJlbnRseSBoYXMgYW4gb3duZXIpLgogICAgICAgIDwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MyIgdGl0bGU9Im9yZy5mcmVlZGVza3RvcC5EQnVzLk5hbWVPd25lckNoYW5nZWQiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImJ1cy1tZXNzYWdlcy1uYW1lLW93bmVyLWNoYW5nZWQiPjwvYT48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkRCdXMuTmFtZU93bmVyQ2hhbmdlZDwvY29kZT48L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgICAgVGhpcyBpcyBhIHNpZ25hbDoKICAgICAgICAgIDwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CiAgICAgICAgICAgIE5hbWVPd25lckNoYW5nZWQgKFNUUklORyBuYW1lLCBTVFJJTkcgb2xkX293bmVyLCBTVFJJTkcgbmV3X293bmVyKQogICAgICAgICAgPC9wcmU+PHA+CiAgICAgICAgICBNZXNzYWdlIGFyZ3VtZW50czoKICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgYm9yZGVyPSIxIj48Y29sZ3JvdXA+PGNvbD48Y29sPjxjb2w+PC9jb2xncm91cD48dGhlYWQ+PHRyPjx0aD5Bcmd1bWVudDwvdGg+PHRoPlR5cGU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkPjA8L3RkPjx0ZD5TVFJJTkc8L3RkPjx0ZD5OYW1lIHdpdGggYSBuZXcgb3duZXI8L3RkPjwvdHI+PHRyPjx0ZD4xPC90ZD48dGQ+U1RSSU5HPC90ZD48dGQ+T2xkIG93bmVyIG9yIGVtcHR5IHN0cmluZyBpZiBub25lPC90ZD48L3RyPjx0cj48dGQ+MjwvdGQ+PHRkPlNUUklORzwvdGQ+PHRkPk5ldyBvd25lciBvciBlbXB0eSBzdHJpbmcgaWYgbm9uZTwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PHA+CiAgICAgICAgPC9wPjxwPgogICAgICAgICAgVGhpcyBzaWduYWwgaW5kaWNhdGVzIHRoYXQgdGhlIG93bmVyIG9mIGEgbmFtZSBoYXMgY2hhbmdlZC4KICAgICAgICAgIEl0J3MgYWxzbyB0aGUgc2lnbmFsIHRvIHVzZSB0byBkZXRlY3QgdGhlIGFwcGVhcmFuY2Ugb2YgCiAgICAgICAgICBuZXcgbmFtZXMgb24gdGhlIGJ1cy4KICAgICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDMiIHRpdGxlPSJvcmcuZnJlZWRlc2t0b3AuREJ1cy5OYW1lTG9zdCI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iYnVzLW1lc3NhZ2VzLW5hbWUtbG9zdCI+PC9hPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5OYW1lTG9zdDwvY29kZT48L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgICAgVGhpcyBpcyBhIHNpZ25hbDoKICAgICAgICAgIDwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CiAgICAgICAgICAgIE5hbWVMb3N0IChTVFJJTkcgbmFtZSkKICAgICAgICAgIDwvcHJlPjxwPgogICAgICAgICAgTWVzc2FnZSBhcmd1bWVudHM6CiAgICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGJvcmRlcj0iMSI+PGNvbGdyb3VwPjxjb2w+PGNvbD48Y29sPjwvY29sZ3JvdXA+PHRoZWFkPjx0cj48dGg+QXJndW1lbnQ8L3RoPjx0aD5UeXBlPC90aD48dGg+RGVzY3JpcHRpb248L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZD4wPC90ZD48dGQ+U1RSSU5HPC90ZD48dGQ+TmFtZSB3aGljaCB3YXMgbG9zdDwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PHA+CiAgICAgICAgPC9wPjxwPgogICAgICAgICAgVGhpcyBzaWduYWwgaXMgc2VudCB0byBhIHNwZWNpZmljIGFwcGxpY2F0aW9uIHdoZW4gaXQgbG9zZXMKICAgICAgICAgIG93bmVyc2hpcCBvZiBhIG5hbWUuCiAgICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0ib3JnLmZyZWVkZXNrdG9wLkRCdXMuTmFtZUFjcXVpcmVkIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJidXMtbWVzc2FnZXMtbmFtZS1hY3F1aXJlZCI+PC9hPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5OYW1lQWNxdWlyZWQ8L2NvZGU+PC9oND48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICAgIFRoaXMgaXMgYSBzaWduYWw6CiAgICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogICAgICAgICAgICBOYW1lQWNxdWlyZWQgKFNUUklORyBuYW1lKQogICAgICAgICAgPC9wcmU+PHA+CiAgICAgICAgICBNZXNzYWdlIGFyZ3VtZW50czoKICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgYm9yZGVyPSIxIj48Y29sZ3JvdXA+PGNvbD48Y29sPjxjb2w+PC9jb2xncm91cD48dGhlYWQ+PHRyPjx0aD5Bcmd1bWVudDwvdGg+PHRoPlR5cGU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkPjA8L3RkPjx0ZD5TVFJJTkc8L3RkPjx0ZD5OYW1lIHdoaWNoIHdhcyBhY3F1aXJlZDwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PHA+CiAgICAgICAgPC9wPjxwPgogICAgICAgICAgVGhpcyBzaWduYWwgaXMgc2VudCB0byBhIHNwZWNpZmljIGFwcGxpY2F0aW9uIHdoZW4gaXQgZ2FpbnMKICAgICAgICAgIG93bmVyc2hpcCBvZiBhIG5hbWUuCiAgICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0ib3JnLmZyZWVkZXNrdG9wLkRCdXMuU3RhcnRTZXJ2aWNlQnlOYW1lIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJidXMtbWVzc2FnZXMtc3RhcnQtc2VydmljZS1ieS1uYW1lIj48L2E+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPm9yZy5mcmVlZGVza3RvcC5EQnVzLlN0YXJ0U2VydmljZUJ5TmFtZTwvY29kZT48L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgICAgQXMgYSBtZXRob2Q6CiAgICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogICAgICAgICAgICBVSU5UMzIgU3RhcnRTZXJ2aWNlQnlOYW1lIChpbiBTVFJJTkcgbmFtZSwgaW4gVUlOVDMyIGZsYWdzKQogICAgICAgICAgPC9wcmU+PHA+CiAgICAgICAgICBNZXNzYWdlIGFyZ3VtZW50czoKICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgYm9yZGVyPSIxIj48Y29sZ3JvdXA+PGNvbD48Y29sPjxjb2w+PC9jb2xncm91cD48dGhlYWQ+PHRyPjx0aD5Bcmd1bWVudDwvdGg+PHRoPlR5cGU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkPjA8L3RkPjx0ZD5TVFJJTkc8L3RkPjx0ZD5OYW1lIG9mIHRoZSBzZXJ2aWNlIHRvIHN0YXJ0PC90ZD48L3RyPjx0cj48dGQ+MTwvdGQ+PHRkPlVJTlQzMjwvdGQ+PHRkPkZsYWdzIChjdXJyZW50bHkgbm90IHVzZWQpPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L2Rpdj48cD4KICAgICAgICBSZXBseSBhcmd1bWVudHM6CiAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBib3JkZXI9IjEiPjxjb2xncm91cD48Y29sPjxjb2w+PGNvbD48L2NvbGdyb3VwPjx0aGVhZD48dHI+PHRoPkFyZ3VtZW50PC90aD48dGg+VHlwZTwvdGg+PHRoPkRlc2NyaXB0aW9uPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGQ+MDwvdGQ+PHRkPlVJTlQzMjwvdGQ+PHRkPlJldHVybiB2YWx1ZTwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PHA+CiAgICAgICAgICBUcmllcyB0byBsYXVuY2ggdGhlIGV4ZWN1dGFibGUgYXNzb2NpYXRlZCB3aXRoIGEgbmFtZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI21lc3NhZ2UtYnVzLXN0YXJ0aW5nLXNlcnZpY2VzIiB0aXRsZT0iTWVzc2FnZSBCdXMgU3RhcnRpbmcgU2VydmljZXMiPnRoZSBzZWN0aW9uIGNhbGxlZCAmIzgyMjA7TWVzc2FnZSBCdXMgU3RhcnRpbmcgU2VydmljZXMmIzgyMjE7PC9hPi4KCiAgICAgICAgPC9wPjxwPgogICAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBib3JkZXI9IjEiPjxjb2xncm91cD48Y29sPjxjb2w+PGNvbD48L2NvbGdyb3VwPjx0aGVhZD48dHI+PHRoPklkZW50aWZpZXI8L3RoPjx0aD5WYWx1ZTwvdGg+PHRoPkRlc2NyaXB0aW9uPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGQ+REJVU19TVEFSVF9SRVBMWV9TVUNDRVNTPC90ZD48dGQ+MTwvdGQ+PHRkPlRoZSBzZXJ2aWNlIHdhcyBzdWNjZXNzZnVsbHkgc3RhcnRlZC48L3RkPjwvdHI+PHRyPjx0ZD5EQlVTX1NUQVJUX1JFUExZX0FMUkVBRFlfUlVOTklORzwvdGQ+PHRkPjI8L3RkPjx0ZD5BIGNvbm5lY3Rpb24gYWxyZWFkeSBvd25zIHRoZSBnaXZlbiBuYW1lLjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PHA+CiAgICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0ib3JnLmZyZWVkZXNrdG9wLkRCdXMuVXBkYXRlQWN0aXZhdGlvbkVudmlyb25tZW50Ij48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJidXMtbWVzc2FnZXMtdXBkYXRlLWFjdGl2YXRpb24tZW52aXJvbm1lbnQiPjwvYT48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkRCdXMuVXBkYXRlQWN0aXZhdGlvbkVudmlyb25tZW50PC9jb2RlPjwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgICBBcyBhIG1ldGhvZDoKICAgICAgICAgIDwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CiAgICAgICAgICAgIFVwZGF0ZUFjdGl2YXRpb25FbnZpcm9ubWVudCAoaW4gQVJSQVkgb2YgRElDVCZsdDtTVFJJTkcsU1RSSU5HJmd0OyBlbnZpcm9ubWVudCkKICAgICAgICAgIDwvcHJlPjxwPgogICAgICAgICAgTWVzc2FnZSBhcmd1bWVudHM6CiAgICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGJvcmRlcj0iMSI+PGNvbGdyb3VwPjxjb2w+PGNvbD48Y29sPjwvY29sZ3JvdXA+PHRoZWFkPjx0cj48dGg+QXJndW1lbnQ8L3RoPjx0aD5UeXBlPC90aD48dGg+RGVzY3JpcHRpb248L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZD4wPC90ZD48dGQ+QVJSQVkgb2YgRElDVCZsdDtTVFJJTkcsU1RSSU5HJmd0OzwvdGQ+PHRkPkVudmlyb25tZW50IHRvIGFkZCBvciB1cGRhdGU8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjxwPgogICAgICAgICAgICBOb3JtYWxseSwgc2Vzc2lvbiBidXMgYWN0aXZhdGVkIHNlcnZpY2VzIGluaGVyaXQgdGhlIGVudmlyb25tZW50IG9mIHRoZSBidXMgZGFlbW9uLiAgVGhpcyBtZXRob2QgYWRkcyB0byBvciBtb2RpZmllcyB0aGF0IGVudmlyb25tZW50IHdoZW4gYWN0aXZhdGluZyBzZXJ2aWNlcy4KICAgICAgICA8L3A+PHA+CiAgICAgICAgICBTb21lIGJ1cyBpbnN0YW5jZXMsIHN1Y2ggYXMgdGhlIHN0YW5kYXJkIHN5c3RlbSBidXMsIG1heSBkaXNhYmxlIGFjY2VzcyB0byB0aGlzIG1ldGhvZCBmb3Igc29tZSBvciBhbGwgY2FsbGVycy4KICAgICAgICA8L3A+PHA+CiAgICAgICAgICBOb3RlLCBib3RoIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcyBhbmQgdmFsdWVzIG11c3QgYmUgdmFsaWQgVVRGLTguICBUaGVyZSdzIG5vIHdheSB0byB1cGRhdGUgdGhlIGFjdGl2YXRpb24gZW52aXJvbm1lbnQgd2l0aCBkYXRhIHRoYXQgaXMgaW52YWxpZCBVVEYtOC4KICAgICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDMiIHRpdGxlPSJvcmcuZnJlZWRlc2t0b3AuREJ1cy5HZXROYW1lT3duZXIiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImJ1cy1tZXNzYWdlcy1nZXQtbmFtZS1vd25lciI+PC9hPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5HZXROYW1lT3duZXI8L2NvZGU+PC9oND48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICAgIEFzIGEgbWV0aG9kOgogICAgICAgICAgPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgICAgU1RSSU5HIEdldE5hbWVPd25lciAoaW4gU1RSSU5HIG5hbWUpCiAgICAgICAgICA8L3ByZT48cD4KICAgICAgICAgIE1lc3NhZ2UgYXJndW1lbnRzOgogICAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBib3JkZXI9IjEiPjxjb2xncm91cD48Y29sPjxjb2w+PGNvbD48L2NvbGdyb3VwPjx0aGVhZD48dHI+PHRoPkFyZ3VtZW50PC90aD48dGg+VHlwZTwvdGg+PHRoPkRlc2NyaXB0aW9uPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGQ+MDwvdGQ+PHRkPlNUUklORzwvdGQ+PHRkPk5hbWUgdG8gZ2V0IHRoZSBvd25lciBvZjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PHA+CiAgICAgICAgUmVwbHkgYXJndW1lbnRzOgogICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgYm9yZGVyPSIxIj48Y29sZ3JvdXA+PGNvbD48Y29sPjxjb2w+PC9jb2xncm91cD48dGhlYWQ+PHRyPjx0aD5Bcmd1bWVudDwvdGg+PHRoPlR5cGU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkPjA8L3RkPjx0ZD5TVFJJTkc8L3RkPjx0ZD5SZXR1cm4gdmFsdWUsIGEgdW5pcXVlIGNvbm5lY3Rpb24gbmFtZTwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PHA+CiAgICAgICAgUmV0dXJucyB0aGUgdW5pcXVlIGNvbm5lY3Rpb24gbmFtZSBvZiB0aGUgcHJpbWFyeSBvd25lciBvZiB0aGUgbmFtZQogICAgICAgIGdpdmVuLiBJZiB0aGUgcmVxdWVzdGVkIG5hbWUgZG9lc24ndCBoYXZlIGFuIG93bmVyLCByZXR1cm5zIGEKICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkRCdXMuRXJyb3IuTmFtZUhhc05vT3duZXI8L2NvZGU+IGVycm9yLgogICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0ib3JnLmZyZWVkZXNrdG9wLkRCdXMuR2V0Q29ubmVjdGlvblVuaXhVc2VyIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJidXMtbWVzc2FnZXMtZ2V0LWNvbm5lY3Rpb24tdW5peC11c2VyIj48L2E+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPm9yZy5mcmVlZGVza3RvcC5EQnVzLkdldENvbm5lY3Rpb25Vbml4VXNlcjwvY29kZT48L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgICAgQXMgYSBtZXRob2Q6CiAgICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogICAgICAgICAgICBVSU5UMzIgR2V0Q29ubmVjdGlvblVuaXhVc2VyIChpbiBTVFJJTkcgYnVzX25hbWUpCiAgICAgICAgICA8L3ByZT48cD4KICAgICAgICAgIE1lc3NhZ2UgYXJndW1lbnRzOgogICAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBib3JkZXI9IjEiPjxjb2xncm91cD48Y29sPjxjb2w+PGNvbD48L2NvbGdyb3VwPjx0aGVhZD48dHI+PHRoPkFyZ3VtZW50PC90aD48dGg+VHlwZTwvdGg+PHRoPkRlc2NyaXB0aW9uPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGQ+MDwvdGQ+PHRkPlNUUklORzwvdGQ+PHRkPlVuaXF1ZSBvciB3ZWxsLWtub3duIGJ1cyBuYW1lIG9mIHRoZSBjb25uZWN0aW9uIHRvCiAgICAgICAgICAgICAgICAgICAgcXVlcnksIHN1Y2ggYXMgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPjoxMi4zNDwvY29kZT4gb3IKICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Y29tLmV4YW1wbGUudGVhPC9jb2RlPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PHA+CiAgICAgICAgUmVwbHkgYXJndW1lbnRzOgogICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgYm9yZGVyPSIxIj48Y29sZ3JvdXA+PGNvbD48Y29sPjxjb2w+PC9jb2xncm91cD48dGhlYWQ+PHRyPjx0aD5Bcmd1bWVudDwvdGg+PHRoPlR5cGU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkPjA8L3RkPjx0ZD5VSU5UMzI8L3RkPjx0ZD5Vbml4IHVzZXIgSUQ8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjxwPgogICAgICAgIFJldHVybnMgdGhlIFVuaXggdXNlciBJRCBvZiB0aGUgcHJvY2VzcyBjb25uZWN0ZWQgdG8gdGhlIHNlcnZlci4gSWYKICAgICAgICB1bmFibGUgdG8gZGV0ZXJtaW5lIGl0IChmb3IgaW5zdGFuY2UsIGJlY2F1c2UgdGhlIHByb2Nlc3MgaXMgbm90IG9uIHRoZQogICAgICAgIHNhbWUgbWFjaGluZSBhcyB0aGUgYnVzIGRhZW1vbiksIGFuIGVycm9yIGlzIHJldHVybmVkLgogICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0ib3JnLmZyZWVkZXNrdG9wLkRCdXMuR2V0Q29ubmVjdGlvblVuaXhQcm9jZXNzSUQiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImJ1cy1tZXNzYWdlcy1nZXQtY29ubmVjdGlvbi11bml4LXByb2Nlc3MtaWQiPjwvYT48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkRCdXMuR2V0Q29ubmVjdGlvblVuaXhQcm9jZXNzSUQ8L2NvZGU+PC9oND48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICAgIEFzIGEgbWV0aG9kOgogICAgICAgICAgPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgICAgVUlOVDMyIEdldENvbm5lY3Rpb25Vbml4UHJvY2Vzc0lEIChpbiBTVFJJTkcgYnVzX25hbWUpCiAgICAgICAgICA8L3ByZT48cD4KICAgICAgICAgIE1lc3NhZ2UgYXJndW1lbnRzOgogICAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBib3JkZXI9IjEiPjxjb2xncm91cD48Y29sPjxjb2w+PGNvbD48L2NvbGdyb3VwPjx0aGVhZD48dHI+PHRoPkFyZ3VtZW50PC90aD48dGg+VHlwZTwvdGg+PHRoPkRlc2NyaXB0aW9uPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGQ+MDwvdGQ+PHRkPlNUUklORzwvdGQ+PHRkPlVuaXF1ZSBvciB3ZWxsLWtub3duIGJ1cyBuYW1lIG9mIHRoZSBjb25uZWN0aW9uIHRvCiAgICAgICAgICAgICAgICAgICAgcXVlcnksIHN1Y2ggYXMgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPjoxMi4zNDwvY29kZT4gb3IKICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Y29tLmV4YW1wbGUudGVhPC9jb2RlPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PHA+CiAgICAgICAgUmVwbHkgYXJndW1lbnRzOgogICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgYm9yZGVyPSIxIj48Y29sZ3JvdXA+PGNvbD48Y29sPjxjb2w+PC9jb2xncm91cD48dGhlYWQ+PHRyPjx0aD5Bcmd1bWVudDwvdGg+PHRoPlR5cGU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkPjA8L3RkPjx0ZD5VSU5UMzI8L3RkPjx0ZD5Vbml4IHByb2Nlc3MgaWQ8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjxwPgogICAgICAgIFJldHVybnMgdGhlIFVuaXggcHJvY2VzcyBJRCBvZiB0aGUgcHJvY2VzcyBjb25uZWN0ZWQgdG8gdGhlIHNlcnZlci4gSWYKICAgICAgICB1bmFibGUgdG8gZGV0ZXJtaW5lIGl0IChmb3IgaW5zdGFuY2UsIGJlY2F1c2UgdGhlIHByb2Nlc3MgaXMgbm90IG9uIHRoZQogICAgICAgIHNhbWUgbWFjaGluZSBhcyB0aGUgYnVzIGRhZW1vbiksIGFuIGVycm9yIGlzIHJldHVybmVkLgogICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0ib3JnLmZyZWVkZXNrdG9wLkRCdXMuQWRkTWF0Y2giPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImJ1cy1tZXNzYWdlcy1hZGQtbWF0Y2giPjwvYT48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkRCdXMuQWRkTWF0Y2g8L2NvZGU+PC9oND48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICAgIEFzIGEgbWV0aG9kOgogICAgICAgICAgPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgICAgQWRkTWF0Y2ggKGluIFNUUklORyBydWxlKQogICAgICAgICAgPC9wcmU+PHA+CiAgICAgICAgICBNZXNzYWdlIGFyZ3VtZW50czoKICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgYm9yZGVyPSIxIj48Y29sZ3JvdXA+PGNvbD48Y29sPjxjb2w+PC9jb2xncm91cD48dGhlYWQ+PHRyPjx0aD5Bcmd1bWVudDwvdGg+PHRoPlR5cGU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkPjA8L3RkPjx0ZD5TVFJJTkc8L3RkPjx0ZD5NYXRjaCBydWxlIHRvIGFkZCB0byB0aGUgY29ubmVjdGlvbjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PHA+CiAgICAgICAgQWRkcyBhIG1hdGNoIHJ1bGUgdG8gbWF0Y2ggbWVzc2FnZXMgZ29pbmcgdGhyb3VnaCB0aGUgbWVzc2FnZSBidXMgKHNlZSA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI21lc3NhZ2UtYnVzLXJvdXRpbmctbWF0Y2gtcnVsZXMiIHRpdGxlPSJNYXRjaCBSdWxlcyI+dGhlIHNlY3Rpb24gY2FsbGVkICYjODIyMDtNYXRjaCBSdWxlcyYjODIyMTs8L2E+KS4gCglJZiB0aGUgYnVzIGRvZXMgbm90IGhhdmUgZW5vdWdoIHJlc291cmNlcyB0aGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm9yZy5mcmVlZGVza3RvcC5EQnVzLkVycm9yLk9PTTwvY29kZT4KCWVycm9yIGlzIHJldHVybmVkLgogICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0ib3JnLmZyZWVkZXNrdG9wLkRCdXMuUmVtb3ZlTWF0Y2giPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImJ1cy1tZXNzYWdlcy1yZW1vdmUtbWF0Y2giPjwvYT48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkRCdXMuUmVtb3ZlTWF0Y2g8L2NvZGU+PC9oND48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICAgIEFzIGEgbWV0aG9kOgogICAgICAgICAgPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgICAgUmVtb3ZlTWF0Y2ggKGluIFNUUklORyBydWxlKQogICAgICAgICAgPC9wcmU+PHA+CiAgICAgICAgICBNZXNzYWdlIGFyZ3VtZW50czoKICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgYm9yZGVyPSIxIj48Y29sZ3JvdXA+PGNvbD48Y29sPjxjb2w+PC9jb2xncm91cD48dGhlYWQ+PHRyPjx0aD5Bcmd1bWVudDwvdGg+PHRoPlR5cGU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkPjA8L3RkPjx0ZD5TVFJJTkc8L3RkPjx0ZD5NYXRjaCBydWxlIHRvIHJlbW92ZSBmcm9tIHRoZSBjb25uZWN0aW9uPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L2Rpdj48cD4KICAgICAgICBSZW1vdmVzIHRoZSBmaXJzdCBydWxlIHRoYXQgbWF0Y2hlcyAoc2VlIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjbWVzc2FnZS1idXMtcm91dGluZy1tYXRjaC1ydWxlcyIgdGl0bGU9Ik1hdGNoIFJ1bGVzIj50aGUgc2VjdGlvbiBjYWxsZWQgJiM4MjIwO01hdGNoIFJ1bGVzJiM4MjIxOzwvYT4pLiAKCUlmIHRoZSBydWxlIGlzIG5vdCBmb3VuZCB0aGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm9yZy5mcmVlZGVza3RvcC5EQnVzLkVycm9yLk1hdGNoUnVsZU5vdEZvdW5kPC9jb2RlPgoJZXJyb3IgaXMgcmV0dXJuZWQuCiAgICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDMiIHRpdGxlPSJvcmcuZnJlZWRlc2t0b3AuREJ1cy5HZXRJZCI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iYnVzLW1lc3NhZ2VzLWdldC1pZCI+PC9hPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5HZXRJZDwvY29kZT48L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgICAgQXMgYSBtZXRob2Q6CiAgICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogICAgICAgICAgICBHZXRJZCAob3V0IFNUUklORyBpZCkKICAgICAgICAgIDwvcHJlPjxwPgogICAgICAgIFJlcGx5IGFyZ3VtZW50czoKICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGJvcmRlcj0iMSI+PGNvbGdyb3VwPjxjb2w+PGNvbD48Y29sPjwvY29sZ3JvdXA+PHRoZWFkPjx0cj48dGg+QXJndW1lbnQ8L3RoPjx0aD5UeXBlPC90aD48dGg+RGVzY3JpcHRpb248L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZD4wPC90ZD48dGQ+U1RSSU5HPC90ZD48dGQ+VW5pcXVlIElEIGlkZW50aWZ5aW5nIHRoZSBidXMgZGFlbW9uPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L2Rpdj48cD4KICAgICAgICBHZXRzIHRoZSB1bmlxdWUgSUQgb2YgdGhlIGJ1cy4gVGhlIHVuaXF1ZSBJRCBoZXJlIGlzIHNoYXJlZCBhbW9uZyBhbGwgYWRkcmVzc2VzIHRoZSAKICAgICAgICBidXMgZGFlbW9uIGlzIGxpc3RlbmluZyBvbiAoVENQLCBVTklYIGRvbWFpbiBzb2NrZXQsIGV0Yy4pIGFuZCBpdHMgZm9ybWF0IGlzIGRlc2NyaWJlZCBpbiAKICAgICAgICA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI3V1aWRzIiB0aXRsZT0iVVVJRHMiPnRoZSBzZWN0aW9uIGNhbGxlZCAmIzgyMjA7VVVJRHMmIzgyMjE7PC9hPi4gRWFjaCBhZGRyZXNzIHRoZSBidXMgaXMgbGlzdGVuaW5nIG9uIGFsc28gaGFzIGl0cyBvd24gdW5pcXVlIAogICAgICAgIElELCBhcyBkZXNjcmliZWQgaW4gPGEgY2xhc3M9InhyZWYiIGhyZWY9IiNhZGRyZXNzZXMiIHRpdGxlPSJTZXJ2ZXIgQWRkcmVzc2VzIj50aGUgc2VjdGlvbiBjYWxsZWQgJiM4MjIwO1NlcnZlciBBZGRyZXNzZXMmIzgyMjE7PC9hPi4gVGhlIHBlci1idXMgYW5kIHBlci1hZGRyZXNzIElEcyBhcmUgbm90IHJlbGF0ZWQuCiAgICAgICAgVGhlcmUgaXMgYWxzbyBhIHBlci1tYWNoaW5lIElELCBkZXNjcmliZWQgaW4gPGEgY2xhc3M9InhyZWYiIGhyZWY9IiNzdGFuZGFyZC1pbnRlcmZhY2VzLXBlZXIiIHRpdGxlPSJvcmcuZnJlZWRlc2t0b3AuREJ1cy5QZWVyIj50aGUgc2VjdGlvbiBjYWxsZWQgJiM4MjIwOzxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5QZWVyPC9jb2RlPiYjODIyMTs8L2E+IGFuZCByZXR1cm5lZAogICAgICAgIGJ5IG9yZy5mcmVlZGVza3RvcC5EQnVzLlBlZXIuR2V0TWFjaGluZUlkKCkuCiAgICAgICAgRm9yIGEgZGVza3RvcCBzZXNzaW9uIGJ1cywgdGhlIGJ1cyBJRCBjYW4gYmUgdXNlZCBhcyBhIHdheSB0byB1bmlxdWVseSBpZGVudGlmeSBhIHVzZXIncyBzZXNzaW9uLgogICAgICAgIDwvcD48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJnbG9zc2FyeSIgdGl0bGU9Ikdsb3NzYXJ5Ij48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJpZHA1Nzg4OTkyIj48L2E+R2xvc3Nhcnk8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICBUaGlzIGdsb3NzYXJ5IGRlZmluZXMgc29tZSBvZiB0aGUgdGVybXMgdXNlZCBpbiB0aGlzIHNwZWNpZmljYXRpb24uCiAgICA8L3A+PGRsPjxkdD48YSBuYW1lPSJ0ZXJtLWJ1cy1uYW1lIj48L2E+QnVzIE5hbWU8L2R0PjxkZD48cD4KICAgICAgICAgIFRoZSBtZXNzYWdlIGJ1cyBtYWludGFpbnMgYW4gYXNzb2NpYXRpb24gYmV0d2VlbiBuYW1lcyBhbmQKICAgICAgICAgIGNvbm5lY3Rpb25zLiAoTm9ybWFsbHksIHRoZXJlJ3Mgb25lIGNvbm5lY3Rpb24gcGVyIGFwcGxpY2F0aW9uLikgIEEKICAgICAgICAgIGJ1cyBuYW1lIGlzIHNpbXBseSBhbiBpZGVudGlmaWVyIHVzZWQgdG8gbG9jYXRlIGNvbm5lY3Rpb25zLiBGb3IKICAgICAgICAgIGV4YW1wbGUsIHRoZSBoeXBvdGhldGljYWwgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmNvbS55b3lvZHluZS5TY3JlZW5zYXZlcjwvY29kZT4KICAgICAgICAgIG5hbWUgbWlnaHQgYmUgdXNlZCB0byBzZW5kIGEgbWVzc2FnZSB0byBhIHNjcmVlbnNhdmVyIGZyb20gWW95b2R5bmUKICAgICAgICAgIENvcnBvcmF0aW9uLiAgQW4gYXBwbGljYXRpb24gaXMgc2FpZCB0byA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+b3duPC9lbT4gYQogICAgICAgICAgbmFtZSBpZiB0aGUgbWVzc2FnZSBidXMgaGFzIGFzc29jaWF0ZWQgdGhlIGFwcGxpY2F0aW9uJ3MgY29ubmVjdGlvbgogICAgICAgICAgd2l0aCB0aGUgbmFtZS4gIE5hbWVzIG1heSBhbHNvIGhhdmUgPGVtIGNsYXNzPSJmaXJzdHRlcm0iPnF1ZXVlZAogICAgICAgICAgb3duZXJzPC9lbT4gKHNlZSA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI3Rlcm0tcXVldWVkLW93bmVyIiB0aXRsZT0iUXVldWVkIE5hbWUgT3duZXIiPlF1ZXVlZCBOYW1lIE93bmVyPC9hPikuCiAgICAgICAgICAgIFRoZSBidXMgYXNzaWducyBhIHVuaXF1ZSBuYW1lIHRvIGVhY2ggY29ubmVjdGlvbiwgCiAgICAgICAgICAgIHNlZSA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI3Rlcm0tdW5pcXVlLW5hbWUiIHRpdGxlPSJVbmlxdWUgQ29ubmVjdGlvbiBOYW1lIj5VbmlxdWUgQ29ubmVjdGlvbiBOYW1lPC9hPi4gT3RoZXIgbmFtZXMgCiAgICAgICAgICAgICAgY2FuIGJlIHRob3VnaHQgb2YgYXMgIndlbGwta25vd24gbmFtZXMiIGFuZCBhcmUgCiAgICAgICAgICAgICAgdXNlZCB0byBmaW5kIGFwcGxpY2F0aW9ucyB0aGF0IG9mZmVyIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkuCiAgICAgICAgPC9wPjwvZGQ+PGR0PjxhIG5hbWU9InRlcm0tbWVzc2FnZSI+PC9hPk1lc3NhZ2U8L2R0PjxkZD48cD4KICAgICAgICAgIEEgbWVzc2FnZSBpcyB0aGUgYXRvbWljIHVuaXQgb2YgY29tbXVuaWNhdGlvbiB2aWEgdGhlIEQtQnVzCiAgICAgICAgICBwcm90b2NvbC4gSXQgY29uc2lzdHMgb2YgYSA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+aGVhZGVyPC9lbT4gYW5kIGEKICAgICAgICAgIDxlbSBjbGFzcz0iZmlyc3R0ZXJtIj5ib2R5PC9lbT47IHRoZSBib2R5IGlzIG1hZGUgdXAgb2YKICAgICAgICAgIDxlbSBjbGFzcz0iZmlyc3R0ZXJtIj5hcmd1bWVudHM8L2VtPi4KICAgICAgICA8L3A+PC9kZD48ZHQ+PGEgbmFtZT0idGVybS1tZXNzYWdlLWJ1cyI+PC9hPk1lc3NhZ2UgQnVzPC9kdD48ZGQ+PHA+CiAgICAgICAgICBUaGUgbWVzc2FnZSBidXMgaXMgYSBzcGVjaWFsIGFwcGxpY2F0aW9uIHRoYXQgZm9yd2FyZHMgCiAgICAgICAgICBvciByb3V0ZXMgbWVzc2FnZXMgYmV0d2VlbiBhIGdyb3VwIG9mIGFwcGxpY2F0aW9ucwogICAgICAgICAgY29ubmVjdGVkIHRvIHRoZSBtZXNzYWdlIGJ1cy4gSXQgYWxzbyBtYW5hZ2VzIAogICAgICAgICAgPGVtIGNsYXNzPSJmaXJzdHRlcm0iPm5hbWVzPC9lbT4gdXNlZCBmb3Igcm91dGluZwogICAgICAgICAgbWVzc2FnZXMuCiAgICAgICAgPC9wPjwvZGQ+PGR0PjxhIG5hbWU9InRlcm0tbmFtZSI+PC9hPk5hbWU8L2R0PjxkZD48cD4KICAgICAgICAgIFNlZSA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI3Rlcm0tYnVzLW5hbWUiIHRpdGxlPSJCdXMgTmFtZSI+QnVzIE5hbWU8L2E+LiAiTmFtZSIgbWF5IAogICAgICAgICAgICBhbHNvIGJlIHVzZWQgdG8gcmVmZXIgdG8gc29tZSBvZiB0aGUgb3RoZXIgbmFtZXMKICAgICAgICAgICAgaW4gRC1CdXMsIHN1Y2ggYXMgaW50ZXJmYWNlIG5hbWVzLgogICAgICAgIDwvcD48L2RkPjxkdD48YSBuYW1lPSJuYW1lc3BhY2UiPjwvYT5OYW1lc3BhY2U8L2R0PjxkZD48cD4KICAgICAgICAgIFVzZWQgdG8gcHJldmVudCBjb2xsaXNpb25zIHdoZW4gZGVmaW5pbmcgbmV3IGludGVyZmFjZXMgb3IgYnVzCgkgIG5hbWVzLiBUaGUgY29udmVudGlvbiB1c2VkIGlzIHRoZSBzYW1lIG9uZSBKYXZhIHVzZXMgZm9yIGRlZmluaW5nCgkgIGNsYXNzZXM6IGEgcmV2ZXJzZWQgZG9tYWluIG5hbWUuCiAgICAgICAgPC9wPjwvZGQ+PGR0PjxhIG5hbWU9InRlcm0tb2JqZWN0Ij48L2E+T2JqZWN0PC9kdD48ZGQ+PHA+CiAgICAgICAgICBFYWNoIGFwcGxpY2F0aW9uIGNvbnRhaW5zIDxlbSBjbGFzcz0iZmlyc3R0ZXJtIj5vYmplY3RzPC9lbT4sIHdoaWNoIGhhdmUKICAgICAgICAgIDxlbSBjbGFzcz0iZmlyc3R0ZXJtIj5pbnRlcmZhY2VzPC9lbT4gYW5kCiAgICAgICAgICA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+bWV0aG9kczwvZW0+LiBPYmplY3RzIGFyZSByZWZlcnJlZCB0byBieSBhIG5hbWUsCiAgICAgICAgICBjYWxsZWQgYSA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+cGF0aDwvZW0+LgogICAgICAgIDwvcD48L2RkPjxkdD48YSBuYW1lPSJvbmUtdG8tb25lIj48L2E+T25lLXRvLU9uZTwvZHQ+PGRkPjxwPgogICAgICAgICAgQW4gYXBwbGljYXRpb24gdGFsa2luZyBkaXJlY3RseSB0byBhbm90aGVyIGFwcGxpY2F0aW9uLCB3aXRob3V0IGdvaW5nCiAgICAgICAgICB0aHJvdWdoIGEgbWVzc2FnZSBidXMuIE9uZS10by1vbmUgY29ubmVjdGlvbnMgbWF5IGJlICJwZWVyIHRvIHBlZXIiIG9yCiAgICAgICAgICAiY2xpZW50IHRvIHNlcnZlci4iIFRoZSBELUJ1cyBwcm90b2NvbCBoYXMgbm8gY29uY2VwdCBvZiBjbGllbnQKICAgICAgICAgIHZzLiBzZXJ2ZXIgYWZ0ZXIgYSBjb25uZWN0aW9uIGhhcyBhdXRoZW50aWNhdGVkOyB0aGUgZmxvdyBvZiBtZXNzYWdlcwogICAgICAgICAgaXMgc3ltbWV0cmljYWwgKGZ1bGwgZHVwbGV4KS4KICAgICAgICA8L3A+PC9kZD48ZHQ+PGEgbmFtZT0idGVybS1wYXRoIj48L2E+UGF0aDwvZHQ+PGRkPjxwPgogICAgICAgICAgT2JqZWN0IHJlZmVyZW5jZXMgKG9iamVjdCBuYW1lcykgaW4gRC1CdXMgYXJlIG9yZ2FuaXplZCBpbnRvIGEKICAgICAgICAgIGZpbGVzeXN0ZW0tc3R5bGUgaGllcmFyY2h5LCBzbyBlYWNoIG9iamVjdCBpcyBuYW1lZCBieSBhIHBhdGguIEFzIGluCiAgICAgICAgICBMREFQLCB0aGVyZSdzIG5vIGRpZmZlcmVuY2UgYmV0d2VlbiAiZmlsZXMiIGFuZCAiZGlyZWN0b3JpZXMiOyBhIHBhdGgKICAgICAgICAgIGNhbiByZWZlciB0byBhbiBvYmplY3QsIHdoaWxlIHN0aWxsIGhhdmluZyBjaGlsZCBvYmplY3RzIGJlbG93IGl0LgogICAgICAgIDwvcD48L2RkPjxkdD48YSBuYW1lPSJ0ZXJtLXF1ZXVlZC1vd25lciI+PC9hPlF1ZXVlZCBOYW1lIE93bmVyPC9kdD48ZGQ+PHA+CiAgICAgICAgICBFYWNoIGJ1cyBuYW1lIGhhcyBhIHByaW1hcnkgb3duZXI7IG1lc3NhZ2VzIHNlbnQgdG8gdGhlIG5hbWUgZ28gdG8gdGhlCiAgICAgICAgICBwcmltYXJ5IG93bmVyLiBIb3dldmVyLCBjZXJ0YWluIG5hbWVzIGFsc28gbWFpbnRhaW4gYSBxdWV1ZSBvZgogICAgICAgICAgc2Vjb25kYXJ5IG93bmVycyAid2FpdGluZyBpbiB0aGUgd2luZ3MuIiBJZiB0aGUgcHJpbWFyeSBvd25lciByZWxlYXNlcwogICAgICAgICAgdGhlIG5hbWUsIHRoZW4gdGhlIGZpcnN0IHNlY29uZGFyeSBvd25lciBpbiB0aGUgcXVldWUgYXV0b21hdGljYWxseQogICAgICAgICAgYmVjb21lcyB0aGUgbmV3IG93bmVyIG9mIHRoZSBuYW1lLgogICAgICAgIDwvcD48L2RkPjxkdD48YSBuYW1lPSJ0ZXJtLXNlcnZpY2UiPjwvYT5TZXJ2aWNlPC9kdD48ZGQ+PHA+CiAgICAgICAgICBBIHNlcnZpY2UgaXMgYW4gZXhlY3V0YWJsZSB0aGF0IGNhbiBiZSBsYXVuY2hlZCBieSB0aGUgYnVzIGRhZW1vbi4KICAgICAgICAgIFNlcnZpY2VzIG5vcm1hbGx5IGd1YXJhbnRlZSBzb21lIHBhcnRpY3VsYXIgZmVhdHVyZXMsIGZvciBleGFtcGxlIHRoZXkKICAgICAgICAgIG1heSBndWFyYW50ZWUgdGhhdCB0aGV5IHdpbGwgcmVxdWVzdCBhIHNwZWNpZmljIG5hbWUgc3VjaCBhcwogICAgICAgICAgIm9yZy5mcmVlZGVza3RvcC5TY3JlZW5zYXZlciIsIGhhdmUgYSBzaW5nbGV0b24gb2JqZWN0CiAgICAgICAgICAiL29yZy9mcmVlZGVza3RvcC9BcHBsaWNhdGlvbiIsIGFuZCB0aGF0IG9iamVjdCB3aWxsIGltcGxlbWVudCB0aGUKICAgICAgICAgIGludGVyZmFjZSAib3JnLmZyZWVkZXNrdG9wLlNjcmVlbnNhdmVyQ29udHJvbCIuCiAgICAgICAgPC9wPjwvZGQ+PGR0PjxhIG5hbWU9InRlcm0tc2VydmljZS1kZXNjcmlwdGlvbi1maWxlcyI+PC9hPlNlcnZpY2UgRGVzY3JpcHRpb24gRmlsZXM8L2R0PjxkZD48cD4KICAgICAgICAgICIuc2VydmljZSBmaWxlcyIgdGVsbCB0aGUgYnVzIGFib3V0IHNlcnZpY2UgYXBwbGljYXRpb25zIHRoYXQgY2FuIGJlCiAgICAgICAgICBsYXVuY2hlZCAoc2VlIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjdGVybS1zZXJ2aWNlIiB0aXRsZT0iU2VydmljZSI+U2VydmljZTwvYT4pLiBNb3N0IGltcG9ydGFudGx5IHRoZXkKICAgICAgICAgIHByb3ZpZGUgYSBtYXBwaW5nIGZyb20gYnVzIG5hbWVzIHRvIHNlcnZpY2VzIHRoYXQgd2lsbCByZXF1ZXN0IHRob3NlCiAgICAgICAgICAgIG5hbWVzIHdoZW4gdGhleSBzdGFydCB1cC4KICAgICAgICA8L3A+PC9kZD48ZHQ+PGEgbmFtZT0idGVybS11bmlxdWUtbmFtZSI+PC9hPlVuaXF1ZSBDb25uZWN0aW9uIE5hbWU8L2R0PjxkZD48cD4KICAgICAgICAgIFRoZSBzcGVjaWFsIG5hbWUgYXV0b21hdGljYWxseSBhc3NpZ25lZCB0byBlYWNoIGNvbm5lY3Rpb24gYnkgdGhlCiAgICAgICAgICBtZXNzYWdlIGJ1cy4gVGhpcyBuYW1lIHdpbGwgbmV2ZXIgY2hhbmdlIG93bmVyLCBhbmQgd2lsbCBiZSB1bmlxdWUKICAgICAgICAgIChuZXZlciByZXVzZWQgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGUgbWVzc2FnZSBidXMpLgogICAgICAgICAgSXQgd2lsbCBiZWdpbiB3aXRoIGEgJzonIGNoYXJhY3Rlci4KICAgICAgICA8L3A+PC9kZD48L2RsPjwvZGl2PjxkaXYgY2xhc3M9ImZvb3Rub3RlcyI+PGJyPjxociB3aWR0aD0iMTAwIiBhbGlnbj0ibGVmdCI+PGRpdiBjbGFzcz0iZm9vdG5vdGUiPjxwPjxzdXA+WzxhIG5hbWU9ImZ0bi5pZHA1MjYwNTc2IiBocmVmPSIjaWRwNTI2MDU3NiIgY2xhc3M9InBhcmEiPjE8L2E+XSA8L3N1cD5Mb2NrZmlsZXMgYXJlIHVzZWQgaW5zdGVhZCBvZiByZWFsIGZpbGUKICAgICAgICAgICAgICAgIGxvY2tpbmcgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmZjbnRsKCk8L2NvZGU+IGJlY2F1c2UgcmVhbCBsb2NraW5nCiAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMgYXJlIHN0aWxsIGZsYWt5IG9uIG5ldHdvcmsKICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW1zLjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJmb290bm90ZSI+PHA+PHN1cD5bPGEgbmFtZT0iZnRuLmlkcDU2MjMzOTIiIGhyZWY9IiNpZHA1NjIzMzkyIiBjbGFzcz0icGFyYSI+MjwvYT5dIDwvc3VwPgogICAgICAgICAgICAgIFRoZSBELUJ1cyByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gYWN0dWFsbHkgaG9ub3JzIHRoZSAKICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+JChsb2NhbHN0YXRlZGlyKTwvY29kZT4gY29uZmlndXJlIG9wdGlvbiAKICAgICAgICAgICAgICBmb3IgdGhpcyBhZGRyZXNzLCBvbiBib3RoIGNsaWVudCBhbmQgc2VydmVyIHNpZGUuCiAgICAgICAgICAgIDwvcD48L2Rpdj48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPgo=