PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5SZXZlcnNlIFByb3h5IEd1aWRlIC0gQXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi41PC90aXRsZT4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJNYWluIHN0eWxlc2hlZXQiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtbG9vc2UtMTAwcGMuY3NzIiByZWw9ImFsdGVybmF0ZSBzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik5vIFNpZGViYXIgLSBEZWZhdWx0IGZvbnQgc2l6ZSIgLz4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC1wcmludC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InByaW50IiB0eXBlPSJ0ZXh0L2NzcyIgLz48bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9zdHlsZS9jc3MvcHJldHRpZnkuY3NzIiAvPgo8c2NyaXB0IHNyYz0iLi4vc3R5bGUvc2NyaXB0cy9wcmV0dGlmeS5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cjwvc2NyaXB0PgoKPGxpbmsgaHJlZj0iLi4vaW1hZ2VzL2Zhdmljb24uaWNvIiByZWw9InNob3J0Y3V0IGljb24iIC8+PC9oZWFkPgo8Ym9keSBpZD0ibWFudWFsLXBhZ2UiPjxkaXYgaWQ9InBhZ2UtaGVhZGVyIj4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL3F1aWNrcmVmZXJlbmNlLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3dpa2kuYXBhY2hlLm9yZy9odHRwZC9GQVEiPkZBUTwvYT4gfCA8YSBocmVmPSIuLi9nbG9zc2FyeS5odG1sIj5HbG9zc2FyeTwvYT4gfCA8YSBocmVmPSIuLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPgo8cCBjbGFzcz0iYXBhY2hlIj5BcGFjaGUgSFRUUCBTZXJ2ZXIgVmVyc2lvbiAyLjU8L3A+CjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2ZlYXRoZXIucG5nIiAvPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ1cCI+PGEgaHJlZj0iLi8iPjxpbWcgdGl0bGU9IiZsdDstIiBhbHQ9IiZsdDstIiBzcmM9Ii4uL2ltYWdlcy9sZWZ0LmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgaWQ9InBhdGgiPgo8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvIj5BcGFjaGU8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvIj5IVFRQIFNlcnZlcjwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLyI+RG9jdW1lbnRhdGlvbjwvYT4gJmd0OyA8YSBocmVmPSIuLi8iPlZlcnNpb24gMi41PC9hPiAmZ3Q7IDxhIGhyZWY9Ii4vIj5Ib3ctVG8gLyBUdXRvcmlhbHM8L2E+PC9kaXY+PGRpdiBpZD0icGFnZS1jb250ZW50Ij48ZGl2IGlkPSJwcmVhbWJsZSI+PGgxPlJldmVyc2UgUHJveHkgR3VpZGU8L2gxPgo8ZGl2IGNsYXNzPSJ0b3BsYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4uL2VuL2hvd3RvL3JldmVyc2VfcHJveHkuaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2VzL2hvd3RvL3JldmVyc2VfcHJveHkuaHRtbCIgaHJlZmxhbmc9ImVzIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkVzcGHxb2wiPiZuYnNwO2VzJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2ZyL2hvd3RvL3JldmVyc2VfcHJveHkuaHRtbCIgaHJlZmxhbmc9ImZyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT48L3A+CjwvZGl2PgoKICAgIDxwPkluIGFkZGl0aW9uIHRvIGJlaW5nIGEgImJhc2ljIiB3ZWIgc2VydmVyLCBhbmQgcHJvdmlkaW5nIHN0YXRpYyBhbmQKICAgIGR5bmFtaWMgY29udGVudCB0byBlbmQtdXNlcnMsIEFwYWNoZSBodHRwZCAoYXMgd2VsbCBhcyBtb3N0IG90aGVyIHdlYgogICAgc2VydmVycykgY2FuIGFsc28gYWN0IGFzIGEgcmV2ZXJzZSBwcm94eSBzZXJ2ZXIsIGFsc28ta25vd24tYXMgYQogICAgImdhdGV3YXkiIHNlcnZlci48L3A+CgogICAgPHA+SW4gc3VjaCBzY2VuYXJpb3MsIGh0dHBkIGl0c2VsZiBkb2VzIG5vdCBnZW5lcmF0ZSBvciBob3N0IHRoZSBkYXRhLAogICAgYnV0IHJhdGhlciB0aGUgY29udGVudCBpcyBvYnRhaW5lZCBieSBvbmUgb3Igc2V2ZXJhbCBiYWNrZW5kIHNlcnZlcnMsCiAgICB3aGljaCBub3JtYWxseSBoYXZlIG5vIGRpcmVjdCBjb25uZWN0aW9uIHRvIHRoZSBleHRlcm5hbCBuZXR3b3JrLiBBcwogICAgaHR0cGQgcmVjZWl2ZXMgYSByZXF1ZXN0IGZyb20gYSBjbGllbnQsIHRoZSByZXF1ZXN0IGl0c2VsZiBpcyA8ZW0+cHJveGllZDwvZW0+CiAgICB0byBvbmUgb2YgdGhlc2UgYmFja2VuZCBzZXJ2ZXJzLCB3aGljaCB0aGVuIGhhbmRsZXMgdGhlIHJlcXVlc3QsIGdlbmVyYXRlcwogICAgdGhlIGNvbnRlbnQgYW5kIHRoZW4gc2VuZHMgdGhpcyBjb250ZW50IGJhY2sgdG8gaHR0cGQsIHdoaWNoIHRoZW4KICAgIGdlbmVyYXRlcyB0aGUgYWN0dWFsIEhUVFAgcmVzcG9uc2UgYmFjayB0byB0aGUgY2xpZW50LjwvcD4KCiAgICA8cD5UaGVyZSBhcmUgbnVtZXJvdXMgcmVhc29ucyBmb3Igc3VjaCBhbiBpbXBsZW1lbnRhdGlvbiwgYnV0IGdlbmVyYWxseQogICAgdGhlIHR5cGljYWwgcmF0aW9uYWxlcyBhcmUgZHVlIHRvIHNlY3VyaXR5LCBoaWdoLWF2YWlsYWJpbGl0eSwgbG9hZC1iYWxhbmNpbmcKICAgIGFuZCBjZW50cmFsaXplZCBhdXRoZW50aWNhdGlvbi9hdXRob3JpemF0aW9uLiBJdCBpcyBjcml0aWNhbCBpbiB0aGVzZQogICAgaW1wbGVtZW50YXRpb25zIHRoYXQgdGhlIGxheW91dCwgZGVzaWduIGFuZCBhcmNoaXRlY3R1cmUgb2YgdGhlIGJhY2tlbmQKICAgIGluZnJhc3RydWN0dXJlICh0aG9zZSBzZXJ2ZXJzIHdoaWNoIGFjdHVhbGx5IGhhbmRsZSB0aGUgcmVxdWVzdHMpIGFyZQogICAgaW5zdWxhdGVkIGFuZCBwcm90ZWN0ZWQgZnJvbSB0aGUgb3V0c2lkZTsgYXMgZmFyIGFzIHRoZSBjbGllbnQgaXMgY29uY2VybmVkLAogICAgdGhlIHJldmVyc2UgcHJveHkgc2VydmVyIDxlbT5pczwvZW0+IHRoZSBzb2xlIHNvdXJjZSBvZiBhbGwgY29udGVudC48L3A+CgogICAgPHA+QSB0eXBpY2FsIGltcGxlbWVudGF0aW9uIGlzIGJlbG93OjwvcD4KICAgIDxwIGNsYXNzPSJjZW50ZXJlZCI+PGltZyBzcmM9Ii4uL2ltYWdlcy9yZXZlcnNlLXByb3h5LWFyY2gucG5nIiBhbHQ9InJldmVyc2UtcHJveHktYXJjaCIgLz48L3A+CgogIDwvZGl2Pgo8ZGl2IGlkPSJxdWlja3ZpZXciPjx1bCBpZD0idG9jIj48bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNyZWxhdGVkIj5SZXZlcnNlIFByb3h5PC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3NpbXBsZSI+U2ltcGxlIHJldmVyc2UgcHJveHlpbmc8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjY2x1c3RlciI+Q2x1c3RlcnMgYW5kIEJhbGFuY2VyczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNjb25maWciPkJhbGFuY2VyIGFuZCBCYWxhbmNlck1lbWJlciBjb25maWd1cmF0aW9uPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2ZhaWxvdmVyIj5GYWlsb3ZlcjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNtYW5hZ2VyIj5CYWxhbmNlciBNYW5hZ2VyPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2hlYWx0aC1jaGVjayI+RHluYW1pYyBIZWFsdGggQ2hlY2tzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3N0YXR1cyI+QmFsYW5jZXJNZW1iZXIgc3RhdHVzIGZsYWdzPC9hPjwvbGk+CjwvdWw+PGgzPlNlZSBhbHNvPC9oMz48dWwgY2xhc3M9InNlZWFsc28iPjxsaT48YSBocmVmPSIjY29tbWVudHNfc2VjdGlvbiI+Q29tbWVudHM8L2E+PC9saT48L3VsPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJyZWxhdGVkIiBpZD0icmVsYXRlZCI+UmV2ZXJzZSBQcm94eTwvYT4gPGEgdGl0bGU9IlBlcm1hbmVudCBsaW5rIiBocmVmPSIjcmVsYXRlZCIgY2xhc3M9InBlcm1hbGluayI+JnBhcmE7PC9hPjwvaDI+CiAgCiAgPHRhYmxlIGNsYXNzPSJyZWxhdGVkIj48dHI+PHRoPlJlbGF0ZWQgTW9kdWxlczwvdGg+PHRoPlJlbGF0ZWQgRGlyZWN0aXZlczwvdGg+PC90cj48dHI+PHRkPjx1bD48bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eS5odG1sIj5tb2RfcHJveHk8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHlfYmFsYW5jZXIuaHRtbCI+bW9kX3Byb3h5X2JhbGFuY2VyPC9hPjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5X2hjaGVjay5odG1sIj5tb2RfcHJveHlfaGNoZWNrPC9hPjwvY29kZT48L2xpPjwvdWw+PC90ZD48dGQ+PHVsPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5Lmh0bWwjcHJveHlwYXNzIj5Qcm94eVBhc3M8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHkuaHRtbCNiYWxhbmNlcm1lbWJlciI+QmFsYW5jZXJNZW1iZXI8L2E+PC9jb2RlPjwvbGk+PC91bD48L3RkPjwvdHI+PC90YWJsZT4KICA8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJzaW1wbGUiIGlkPSJzaW1wbGUiPlNpbXBsZSByZXZlcnNlIHByb3h5aW5nPC9hPiA8YSB0aXRsZT0iUGVybWFuZW50IGxpbmsiIGhyZWY9IiNzaW1wbGUiIGNsYXNzPSJwZXJtYWxpbmsiPiZwYXJhOzwvYT48L2gyPgogICAgCgogICAgPHA+CiAgICAgIFRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5Lmh0bWwjcHJveHlwYXNzIj5Qcm94eVBhc3M8L2E+PC9jb2RlPgogICAgICBkaXJlY3RpdmUgc3BlY2lmaWVzIHRoZSBtYXBwaW5nIG9mIGluY29taW5nIHJlcXVlc3RzIHRvIHRoZSBiYWNrZW5kCiAgICAgIHNlcnZlciAob3IgYSBjbHVzdGVyIG9mIHNlcnZlcnMga25vd24gYXMgYSA8Y29kZT5CYWxhbmNlcjwvY29kZT4KICAgICAgZ3JvdXApLiBUaGUgc2ltcGxpZXN0IGV4YW1wbGUgcHJveGllcyBhbGwgcmVxdWVzdHMgKDxjb2RlPiIvIjwvY29kZT4pCiAgICAgIHRvIGEgc2luZ2xlIGJhY2tlbmQ6CiAgICA8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPlByb3h5UGFzcyAiLyIgICJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyI8L3ByZT4KCgogICAgPHA+CiAgICAgIFRvIGVuc3VyZSB0aGF0IGFuZCA8Y29kZT5Mb2NhdGlvbjo8L2NvZGU+IGhlYWRlcnMgZ2VuZXJhdGVkIGZyb20KICAgICAgdGhlIGJhY2tlbmQgYXJlIG1vZGlmaWVkIHRvIHBvaW50IHRvIHRoZSByZXZlcnNlIHByb3h5LCBpbnN0ZWFkIG9mCiAgICAgIGJhY2sgdG8gaXRzZWxmLCB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eS5odG1sI3Byb3h5cGFzc3JldmVyc2UiPlByb3h5UGFzc1JldmVyc2U8L2E+PC9jb2RlPgogICAgICBkaXJlY3RpdmUgaXMgbW9zdCBvZnRlbiByZXF1aXJlZDoKICAgIDwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+UHJveHlQYXNzICIvIiAgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIgpQcm94eVBhc3NSZXZlcnNlICIvIiAgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIjwvcHJlPgoKCiAgICA8cD5Pbmx5IHNwZWNpZmljIFVSSXMgY2FuIGJlIHByb3hpZWQsIGFzIHNob3duIGluIHRoaXMgZXhhbXBsZTo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPlByb3h5UGFzcyAiL2ltYWdlcyIgICJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIKUHJveHlQYXNzUmV2ZXJzZSAiL2ltYWdlcyIgICJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyI8L3ByZT4KCgogICAgPHA+SW4gdGhlIGFib3ZlLCBhbnkgcmVxdWVzdHMgd2hpY2ggc3RhcnQgd2l0aCB0aGUgPGNvZGU+L2ltYWdlczwvY29kZT4KICAgICAgcGF0aCB3aXRoIGJlIHByb3hpZWQgdG8gdGhlIHNwZWNpZmllZCBiYWNrZW5kLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBoYW5kbGVkCiAgICAgIGxvY2FsbHkuCiAgICA8L3A+CiAgPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iY2x1c3RlciIgaWQ9ImNsdXN0ZXIiPkNsdXN0ZXJzIGFuZCBCYWxhbmNlcnM8L2E+IDxhIHRpdGxlPSJQZXJtYW5lbnQgbGluayIgaHJlZj0iI2NsdXN0ZXIiIGNsYXNzPSJwZXJtYWxpbmsiPiZwYXJhOzwvYT48L2gyPgogICAgCgogICAgPHA+CiAgICAgIEFzIHVzZWZ1bCBhcyB0aGUgYWJvdmUgaXMsIGl0IHN0aWxsIGhhcyB0aGUgZGVmaWNpZW5jaWVzIHRoYXQgc2hvdWxkCiAgICAgIHRoZSAoc2luZ2xlKSBiYWNrZW5kIG5vZGUgZ28gZG93biwgb3IgYmVjb21lIGhlYXZpbHkgbG9hZGVkLCB0aGF0IHByb3h5aW5nCiAgICAgIHRob3NlIHJlcXVlc3RzIHByb3ZpZGVzIG5vIHJlYWwgYWR2YW50YWdlLiBXaGF0IGlzIG5lZWRlZCBpcyB0aGUgYWJpbGl0eQogICAgICB0byBkZWZpbmUgYSBzZXQgb3IgZ3JvdXAgb2YgYmFja2VuZCBzZXJ2ZXJzIHdoaWNoIGNhbiBoYW5kbGUgc3VjaAogICAgICByZXF1ZXN0cyBhbmQgZm9yIHRoZSByZXZlcnNlIHByb3h5IHRvIGxvYWQgYmFsYW5jZSBhbmQgZmFpbG92ZXIgYW1vbmcKICAgICAgdGhlbS4gVGhpcyBncm91cCBpcyBzb21ldGltZXMgY2FsbGVkIGEgPGVtPmNsdXN0ZXI8L2VtPiBidXQgQXBhY2hlIGh0dHBkJ3MKICAgICAgdGVybSBpcyBhIDxlbT5iYWxhbmNlcjwvZW0+LiBPbmUgZGVmaW5lcyBhIGJhbGFuY2VyIGJ5IGxldmVyYWdpbmcgdGhlCiAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHkuaHRtbCNwcm94eSI+Jmx0O1Byb3h5Jmd0OzwvYT48L2NvZGU+IGFuZAogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5Lmh0bWwjYmFsYW5jZXJtZW1iZXIiPkJhbGFuY2VyTWVtYmVyPC9hPjwvY29kZT4gZGlyZWN0aXZlcyBhcwogICAgICBzaG93bjoKICAgIDwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+Jmx0O1Byb3h5IGJhbGFuY2VyOi8vbXlzZXQmZ3Q7CiAgICBCYWxhbmNlck1lbWJlciBodHRwOi8vd3d3Mi5leGFtcGxlLmNvbTo4MDgwCiAgICBCYWxhbmNlck1lbWJlciBodHRwOi8vd3d3My5leGFtcGxlLmNvbTo4MDgwCiAgICBQcm94eVNldCBsYm1ldGhvZD1ieXRyYWZmaWMKJmx0Oy9Qcm94eSZndDsKClByb3h5UGFzcyAiL2ltYWdlcy8iICAiYmFsYW5jZXI6Ly9teXNldC8iClByb3h5UGFzc1JldmVyc2UgIi9pbWFnZXMvIiAgImJhbGFuY2VyOi8vbXlzZXQvIjwvcHJlPgoKCiAgICA8cD4KICAgICAgVGhlIDxjb2RlPmJhbGFuY2VyOi8vPC9jb2RlPiBzY2hlbWUgaXMgd2hhdCB0ZWxscyBodHRwZCB0aGF0IHdlIGFyZSBjcmVhdGluZwogICAgICBhIGJhbGFuY2VyIHNldCwgd2l0aCB0aGUgbmFtZSA8ZW0+bXlzZXQ8L2VtPi4gSXQgaW5jbHVkZXMgMiBiYWNrZW5kIHNlcnZlcnMsCiAgICAgIHdoaWNoIGh0dHBkIGNhbGxzIDxlbT5CYWxhbmNlck1lbWJlcnM8L2VtPi4gSW4gdGhpcyBjYXNlLCBhbnkgcmVxdWVzdHMgZm9yCiAgICAgIDxjb2RlPi9pbWFnZXM8L2NvZGU+IHdpbGwgYmUgcHJveGllZCB0byA8ZW0+b25lPC9lbT4gb2YgdGhlIDIgYmFja2VuZHMuCiAgICAgIFRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5Lmh0bWwjcHJveHlzZXQiPlByb3h5U2V0PC9hPjwvY29kZT4gZGlyZWN0aXZlCiAgICAgIHNwZWNpZmllcyB0aGF0IHRoZSA8ZW0+bXlzZXQ8L2VtPiBCYWxhbmNlciB1c2UgYSBsb2FkIGJhbGFuY2luZyBhbGdvcml0aG0KICAgICAgdGhhdCBiYWxhbmNlcyBiYXNlZCBvbiBJL08gYnl0ZXMuCiAgICA8L3A+CgogICAgPGRpdiBjbGFzcz0ibm90ZSI+PGgzPkhpbnQ8L2gzPgogICAgICA8cD4KICAgICAgCTxlbT5CYWxhbmNlck1lbWJlcnM8L2VtPiBhcmUgYWxzbyBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgPGVtPndvcmtlcnM8L2VtPi4KICAgICAgPC9wPgogICA8L2Rpdj4KCiAgPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iY29uZmlnIiBpZD0iY29uZmlnIj5CYWxhbmNlciBhbmQgQmFsYW5jZXJNZW1iZXIgY29uZmlndXJhdGlvbjwvYT4gPGEgdGl0bGU9IlBlcm1hbmVudCBsaW5rIiBocmVmPSIjY29uZmlnIiBjbGFzcz0icGVybWFsaW5rIj4mcGFyYTs8L2E+PC9oMj4KICAgIAoKICAgIDxwPgogICAgICBZb3UgY2FuIGFkanVzdCBudW1lcm91cyBjb25maWd1cmF0aW9uIGRldGFpbHMgb2YgdGhlIDxlbT5iYWxhbmNlcnM8L2VtPgogICAgICBhbmQgdGhlIDxlbT53b3JrZXJzPC9lbT4gdmlhIHRoZSB2YXJpb3VzIHBhcmFtZXRlcnMgZGVmaW5lZCBpbgogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5Lmh0bWwjcHJveHlwYXNzIj5Qcm94eVBhc3M8L2E+PC9jb2RlPi4gRm9yIGV4YW1wbGUsCiAgICAgIGFzc3VtaW5nIHdlIHdvdWxkIHdhbnQgPGNvZGU+aHR0cDovL3d3dzMuZXhhbXBsZS5jb206ODA4MDwvY29kZT4gdG8KICAgICAgaGFuZGxlIDN4IHRoZSB0cmFmZmljIHdpdGggYSB0aW1lb3V0IG9mIDEgc2Vjb25kLCB3ZSB3b3VsZCBhZGp1c3QgdGhlCiAgICAgIGNvbmZpZ3VyYXRpb24gYXMgZm9sbG93czoKICAgIDwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+Jmx0O1Byb3h5IGJhbGFuY2VyOi8vbXlzZXQmZ3Q7CiAgICBCYWxhbmNlck1lbWJlciBodHRwOi8vd3d3Mi5leGFtcGxlLmNvbTo4MDgwCiAgICBCYWxhbmNlck1lbWJlciBodHRwOi8vd3d3My5leGFtcGxlLmNvbTo4MDgwIGxvYWRmYWN0b3I9MyB0aW1lb3V0PTEKICAgIFByb3h5U2V0IGxibWV0aG9kPWJ5dHJhZmZpYwombHQ7L1Byb3h5Jmd0OwoKUHJveHlQYXNzICIvaW1hZ2VzIiAgImJhbGFuY2VyOi8vbXlzZXQvIgpQcm94eVBhc3NSZXZlcnNlICIvaW1hZ2VzIiAgImJhbGFuY2VyOi8vbXlzZXQvIjwvcHJlPgoKCiAgPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iZmFpbG92ZXIiIGlkPSJmYWlsb3ZlciI+RmFpbG92ZXI8L2E+IDxhIHRpdGxlPSJQZXJtYW5lbnQgbGluayIgaHJlZj0iI2ZhaWxvdmVyIiBjbGFzcz0icGVybWFsaW5rIj4mcGFyYTs8L2E+PC9oMj4KICAgIAoKICAgIDxwPgogICAgICBZb3UgY2FuIGFsc28gZmluZS10dW5lIHZhcmlvdXMgZmFpbG92ZXIgc2NlbmFyaW9zLCBkZXRhaWxpbmcgd2hpY2ggd29ya2VycwogICAgICBhbmQgZXZlbiB3aGljaCBiYWxhbmNlcnMgc2hvdWxkIGJlIGFjY2Vzc2VkIGluIHN1Y2ggY2FzZXMuIEZvciBleGFtcGxlLCB0aGUKICAgICAgYmVsb3cgc2V0dXAgaW1wbGVtZW50cyB0aHJlZSBmYWlsb3ZlciBjYXNlczoKICAgIDwvcD4KICAgIDxvbD4KICAgICAgPGxpPgogICAgICAgIDxjb2RlPmh0dHA6Ly9zcGFyZTEuZXhhbXBsZS5jb206ODA4MDwvY29kZT4gYW5kCiAgICAgICAgPGNvZGU+aHR0cDovL3NwYXJlMi5leGFtcGxlLmNvbTo4MDgwPC9jb2RlPiBhcmUgb25seSBzZW50IHRyYWZmaWMgaWYgb25lCiAgICAgICAgb3IgYm90aCBvZiA8Y29kZT5odHRwOi8vd3d3Mi5leGFtcGxlLmNvbTo4MDgwPC9jb2RlPiBvcgogICAgICAgIDxjb2RlPmh0dHA6Ly93d3czLmV4YW1wbGUuY29tOjgwODA8L2NvZGU+IGlzIHVuYXZhaWxhYmxlLiAoT25lIHNwYXJlCiAgICAgICAgd2lsbCBiZSB1c2VkIHRvIHJlcGxhY2Ugb25lIHVudXNhYmxlIG1lbWJlciBvZiB0aGUgc2FtZSBiYWxhbmNlciBzZXQuKQogICAgICA8L2xpPgogICAgICA8bGk+CiAgICAgICAgPGNvZGU+aHR0cDovL2hzdGFuZGJ5LmV4YW1wbGUuY29tOjgwODA8L2NvZGU+IGlzIG9ubHkgc2VudCB0cmFmZmljIGlmCiAgICAgICAgYWxsIG90aGVyIHdvcmtlcnMgaW4gYmFsYW5jZXIgc2V0IDxjb2RlPjA8L2NvZGU+IGFyZSBub3QgYXZhaWxhYmxlLgogICAgICA8L2xpPgogICAgICA8bGk+CiAgICAgICAgSWYgYWxsIGxvYWQgYmFsYW5jZXIgc2V0IDxjb2RlPjA8L2NvZGU+IHdvcmtlcnMsIHNwYXJlcywgYW5kIHRoZSBzdGFuZGJ5CiAgICAgICAgYXJlIHVuYXZhaWxhYmxlLCBvbmx5IHRoZW4gd2lsbCB0aGUKICAgICAgICA8Y29kZT5odHRwOi8vYmt1cDEuZXhhbXBsZS5jb206ODA4MDwvY29kZT4gYW5kCiAgICAgICAgPGNvZGU+aHR0cDovL2JrdXAyLmV4YW1wbGUuY29tOjgwODA8L2NvZGU+IHdvcmtlcnMgZnJvbSBiYWxhbmNlciBzZXQKICAgICAgICA8Y29kZT4xPC9jb2RlPiBiZSBicm91Z2h0IGludG8gcm90YXRpb24uCiAgICAgIDwvbGk+CiAgICA8L29sPgogICAgPHA+CiAgICAgIFRodXMsIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgb25lIG9yIG1vcmUgaG90IHNwYXJlcyBhbmQgaG90IHN0YW5kYnlzIGZvcgogICAgICBlYWNoIGxvYWQgYmFsYW5jZXIgc2V0LgogICAgPC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4mbHQ7UHJveHkgYmFsYW5jZXI6Ly9teXNldCZndDsKICAgIEJhbGFuY2VyTWVtYmVyIGh0dHA6Ly93d3cyLmV4YW1wbGUuY29tOjgwODAKICAgIEJhbGFuY2VyTWVtYmVyIGh0dHA6Ly93d3czLmV4YW1wbGUuY29tOjgwODAgbG9hZGZhY3Rvcj0zIHRpbWVvdXQ9MQogICAgQmFsYW5jZXJNZW1iZXIgaHR0cDovL3NwYXJlMS5leGFtcGxlLmNvbTo4MDgwIHN0YXR1cz0rUgogICAgQmFsYW5jZXJNZW1iZXIgaHR0cDovL3NwYXJlMi5leGFtcGxlLmNvbTo4MDgwIHN0YXR1cz0rUgogICAgQmFsYW5jZXJNZW1iZXIgaHR0cDovL2hzdGFuZGJ5LmV4YW1wbGUuY29tOjgwODAgc3RhdHVzPStICiAgICBCYWxhbmNlck1lbWJlciBodHRwOi8vYmt1cDEuZXhhbXBsZS5jb206ODA4MCBsYnNldD0xCiAgICBCYWxhbmNlck1lbWJlciBodHRwOi8vYmt1cDIuZXhhbXBsZS5jb206ODA4MCBsYnNldD0xCiAgICBQcm94eVNldCBsYm1ldGhvZD1ieXJlcXVlc3RzCiZsdDsvUHJveHkmZ3Q7CgpQcm94eVBhc3MgIi9pbWFnZXMvIiAgImJhbGFuY2VyOi8vbXlzZXQvIgpQcm94eVBhc3NSZXZlcnNlICIvaW1hZ2VzLyIgICJiYWxhbmNlcjovL215c2V0LyI8L3ByZT4KCgogICAgPHA+CiAgICAgIEZvciBmYWlsb3ZlciwgaG90IHNwYXJlcyBhcmUgdXNlZCBhcyByZXBsYWNlbWVudHMgZm9yIHVudXNhYmxlIHdvcmtlcnMgaW4KICAgICAgdGhlIHNhbWUgbG9hZCBiYWxhbmNlciBzZXQuIEEgd29ya2VyIGlzIGNvbnNpZGVyZWQgdW51c2FibGUgaWYgaXQgaXMKICAgICAgZHJhaW5pbmcsIHN0b3BwZWQsIG9yIG90aGVyd2lzZSBpbiBhbiBlcnJvci9mYWlsZWQgc3RhdGUuIEhvdCBzdGFuZGJ5cyBhcmUKICAgICAgdXNlZCBpZiBhbGwgd29ya2VycyBhbmQgc3BhcmVzIGluIHRoZSBsb2FkIGJhbGFuY2VyIHNldCBhcmUKICAgICAgdW5hdmFpbGFibGUuIExvYWQgYmFsYW5jZXIgc2V0cyAod2l0aCB0aGVpciByZXNwZWN0aXZlIGhvdCBzcGFyZXMgYW5kCiAgICAgIHN0YW5kYnlzKSBhcmUgYWx3YXlzIHRyaWVkIGluIG9yZGVyIGZyb20gbG93ZXN0IHRvIGhpZ2hlc3QuCiAgICA8L3A+CgogIDwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9Im1hbmFnZXIiIGlkPSJtYW5hZ2VyIj5CYWxhbmNlciBNYW5hZ2VyPC9hPiA8YSB0aXRsZT0iUGVybWFuZW50IGxpbmsiIGhyZWY9IiNtYW5hZ2VyIiBjbGFzcz0icGVybWFsaW5rIj4mcGFyYTs8L2E+PC9oMj4KICAgIAoKICAgIDxwPgogICAgICBPbmUgb2YgdGhlIG1vc3QgdW5pcXVlIGFuZCB1c2VmdWwgZmVhdHVyZXMgb2YgQXBhY2hlIGh0dHBkJ3MgcmV2ZXJzZSBwcm94eSBpcwoJICB0aGUgZW1iZWRkZWQgPGVtPmJhbGFuY2VyLW1hbmFnZXI8L2VtPiBhcHBsaWNhdGlvbi4gU2ltaWxhciB0bwoJICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3N0YXR1cy5odG1sIj5tb2Rfc3RhdHVzPC9hPjwvY29kZT4sIDxlbT5iYWxhbmNlci1tYW5hZ2VyPC9lbT4gZGlzcGxheXMKCSAgdGhlIGN1cnJlbnQgd29ya2luZyBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMgb2YgdGhlIGVuYWJsZWQKCSAgYmFsYW5jZXJzIGFuZCB3b3JrZXJzIGN1cnJlbnRseSBpbiB1c2UuIEhvd2V2ZXIsIG5vdCBvbmx5IGRvZXMgaXQKCSAgZGlzcGxheSB0aGVzZSBwYXJhbWV0ZXJzLCBpdCBhbHNvIGFsbG93cyBmb3IgZHluYW1pYywgcnVudGltZSwgb24tdGhlLWZseQoJICByZWNvbmZpZ3VyYXRpb24gb2YgYWxtb3N0IGFsbCBvZiB0aGVtLCBpbmNsdWRpbmcgYWRkaW5nIG5ldyA8ZW0+QmFsYW5jZXJNZW1iZXJzPC9lbT4KCSAgKHdvcmtlcnMpIHRvIGFuIGV4aXN0aW5nIGJhbGFuY2VyLiBUbyBlbmFibGUgdGhlc2UgY2FwYWJpbGl0eSwgdGhlIGZvbGxvd2luZwoJICBuZWVkcyB0byBiZSBhZGRlZCB0byB5b3VyIGNvbmZpZ3VyYXRpb246CiAgICA8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiZsdDtMb2NhdGlvbiAiL2JhbGFuY2VyLW1hbmFnZXIiJmd0OwogICAgU2V0SGFuZGxlciBiYWxhbmNlci1tYW5hZ2VyCiAgICBSZXF1aXJlIGhvc3QgbG9jYWxob3N0CiZsdDsvTG9jYXRpb24mZ3Q7PC9wcmU+CgoKICAgIDxkaXYgY2xhc3M9Indhcm5pbmciPjxoMz5XYXJuaW5nPC9oMz4KICAgICAgPHA+RG8gbm90IGVuYWJsZSB0aGUgPGVtPmJhbGFuY2VyLW1hbmFnZXI8L2VtPiB1bnRpbCB5b3UgaGF2ZSA8YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5Lmh0bWwjYWNjZXNzIj5zZWN1cmVkIHlvdXIgc2VydmVyPC9hPi4gSW4KICAgICAgcGFydGljdWxhciwgZW5zdXJlIHRoYXQgYWNjZXNzIHRvIHRoZSBVUkwgaXMgdGlnaHRseQogICAgICByZXN0cmljdGVkLjwvcD4KICAgIDwvZGl2PgoKICAgIDxwPgogICAgICBXaGVuIHRoZSByZXZlcnNlIHByb3h5IHNlcnZlciBpcyBhY2Nlc3NlZCBhdCB0aGF0IHVybAogICAgICAoZWc6IDxjb2RlPmh0dHA6Ly9ycHJveHkuZXhhbXBsZS5jb20vYmFsYW5jZXItbWFuYWdlci88L2NvZGU+LCB5b3Ugd2lsbCBzZWUgYQogICAgICBwYWdlIHNpbWlsYXIgdG8gdGhlIGJlbG93OgogICAgPC9wPgogICAgPHAgY2xhc3M9ImNlbnRlcmVkIj48aW1nIHNyYz0iLi4vaW1hZ2VzL2JhbC1tYW4ucG5nIiBhbHQ9ImJhbGFuY2VyLW1hbmFnZXIgcGFnZSIgLz48L3A+CgogICAgPHA+CiAgICAgIFRoaXMgZm9ybSBhbGxvd3MgdGhlIGRldm9wcyBhZG1pbiB0byBhZGp1c3QgdmFyaW91cyBwYXJhbWV0ZXJzLCB0YWtlCiAgICAgIHdvcmtlcnMgb2ZmbGluZSwgY2hhbmdlIGxvYWQgYmFsYW5jaW5nIG1ldGhvZHMgYW5kIGFkZCBuZXcgd29ya3MuIEZvcgogICAgICBleGFtcGxlLCBjbGlja2luZyBvbiB0aGUgYmFsYW5jZXIgaXRzZWxmLCB5b3Ugd2lsbCBnZXQgdGhlIGZvbGxvd2luZyBwYWdlOgogICAgPC9wPgogICAgPHAgY2xhc3M9ImNlbnRlcmVkIj48aW1nIHNyYz0iLi4vaW1hZ2VzL2JhbC1tYW4tYi5wbmciIGFsdD0iYmFsYW5jZXItbWFuYWdlciBwYWdlIiAvPjwvcD4KCiAgICA8cD4KICAgICAgV2hlcmVhcyBjbGlja2luZyBvbiBhIHdvcmtlciwgZGlzcGxheXMgdGhpcyBwYWdlOgogICAgPC9wPgogICAgPHAgY2xhc3M9ImNlbnRlcmVkIj48aW1nIHNyYz0iLi4vaW1hZ2VzL2JhbC1tYW4tdy5wbmciIGFsdD0iYmFsYW5jZXItbWFuYWdlciBwYWdlIiAvPjwvcD4KCiAgICA8cD4KICAgICAgVG8gaGF2ZSB0aGVzZSBjaGFuZ2VzIHBlcnNpc3QgcmVzdGFydHMgb2YgdGhlIHJldmVyc2UgcHJveHksIGVuc3VyZSB0aGF0CiAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHkuaHRtbCNiYWxhbmNlcnBlcnNpc3QiPkJhbGFuY2VyUGVyc2lzdDwvYT48L2NvZGU+IGlzIGVuYWJsZWQuCiAgICA8L3A+CgogIDwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImhlYWx0aC1jaGVjayIgaWQ9ImhlYWx0aC1jaGVjayI+RHluYW1pYyBIZWFsdGggQ2hlY2tzPC9hPiA8YSB0aXRsZT0iUGVybWFuZW50IGxpbmsiIGhyZWY9IiNoZWFsdGgtY2hlY2siIGNsYXNzPSJwZXJtYWxpbmsiPiZwYXJhOzwvYT48L2gyPgogICAgCgogICAgPHA+CiAgICAgIEJlZm9yZSBodHRwZCBwcm94aWVzIGEgcmVxdWVzdCB0byBhIHdvcmtlciwgaXQgY2FuIDxlbT4idGVzdCI8L2VtPiBpZiB0aGF0IHdvcmtlcgogICAgICBpcyBhdmFpbGFibGUgdmlhIHNldHRpbmcgdGhlIDxjb2RlPnBpbmc8L2NvZGU+IHBhcmFtZXRlciBmb3IgdGhhdCB3b3JrZXIgdXNpbmcKICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eS5odG1sI3Byb3h5cGFzcyI+UHJveHlQYXNzPC9hPjwvY29kZT4uIE9mdGVudGltZXMgaXQgaXMKICAgICAgbW9yZSB1c2VmdWwgdG8gY2hlY2sgdGhlIGhlYWx0aCBvZiB0aGUgd29ya2VycyA8ZW0+b3V0IG9mIGJhbmQ8L2VtPiwgaW4gYQogICAgICBkeW5hbWljIGZhc2hpb24uIFRoaXMgaXMgYWNoaWV2ZWQgaW4gQXBhY2hlIGh0dHBkIGJ5IHRoZQogICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5X2hjaGVjay5odG1sIj5tb2RfcHJveHlfaGNoZWNrPC9hPjwvY29kZT4gbW9kdWxlLgogICAgPC9wPgoKICA8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPkJhbGFuY2VyTWVtYmVyIHN0YXR1cyBmbGFnczwvYT4gPGEgdGl0bGU9IlBlcm1hbmVudCBsaW5rIiBocmVmPSIjc3RhdHVzIiBjbGFzcz0icGVybWFsaW5rIj4mcGFyYTs8L2E+PC9oMj4KICAgIAoKICAgIDxwPgogICAgICBJbiB0aGUgPGVtPmJhbGFuY2VyLW1hbmFnZXI8L2VtPiB0aGUgY3VycmVudCBzdGF0ZSwgb3IgPGVtPnN0YXR1czwvZW0+LCBvZiBhIHdvcmtlcgogICAgICBpcyBkaXNwbGF5ZWQgYW5kIGNhbiBiZSBzZXQvcmVzZXQuIFRoZSBtZWFuaW5ncyBvZiB0aGVzZSBzdGF0dXNlcyBhcmUgYXMgZm9sbG93czoKICAgIDwvcD4KICAgICAgPHRhYmxlIGNsYXNzPSJib3JkZXJlZCI+CiAgICAgIAk8dHI+PHRoPkZsYWc8L3RoPjx0aD5TdHJpbmc8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj4KICAgICAgCTx0cj48dGQ+Jm5ic3A7PC90ZD48dGQ+PGVtPk9rPC9lbT48L3RkPjx0ZD5Xb3JrZXIgaXMgYXZhaWxhYmxlPC90ZD48L3RyPgogICAgICAJPHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZD48ZW0+SW5pdDwvZW0+PC90ZD48dGQ+V29ya2VyIGhhcyBiZWVuIGluaXRpYWxpemVkPC90ZD48L3RyPgogICAgICAgIDx0cj48dGQ+PGNvZGU+RDwvY29kZT48L3RkPjx0ZD48ZW0+RGlzPC9lbT48L3RkPjx0ZD5Xb3JrZXIgaXMgZGlzYWJsZWQgYW5kIHdpbGwgbm90IGFjY2VwdCBhbnkgcmVxdWVzdHM7IHdpbGwgYmUKICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IHJldHJpZWQuPC90ZD48L3RyPgogICAgICAgIDx0cj48dGQ+PGNvZGU+UzwvY29kZT48L3RkPjx0ZD48ZW0+U3RvcDwvZW0+PC90ZD48dGQ+V29ya2VyIGlzIGFkbWluaXN0cmF0aXZlbHkgc3RvcHBlZDsgd2lsbCBub3QgYWNjZXB0IHJlcXVlc3RzCiAgICAgICAgICAgICAgICAgICAgYW5kIHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgcmV0cmllZDwvdGQ+PC90cj4KICAgICAgICA8dHI+PHRkPjxjb2RlPkk8L2NvZGU+PC90ZD48dGQ+PGVtPklnbjwvZW0+PC90ZD48dGQ+V29ya2VyIGlzIGluIGlnbm9yZS1lcnJvcnMgbW9kZSBhbmQgd2lsbCBhbHdheXMgYmUgY29uc2lkZXJlZCBhdmFpbGFibGUuPC90ZD48L3RyPgogICAgICAgIDx0cj48dGQ+PGNvZGU+UjwvY29kZT48L3RkPjx0ZD48ZW0+U3BhcjwvZW0+PC90ZD48dGQ+V29ya2VyIGlzIGEgaG90IHNwYXJlLiBGb3IgZWFjaCB3b3JrZXIgaW4gYSBnaXZlbiBsYnNldCB0aGF0IGlzIHVudXNhYmxlCiAgICAgICAgICAgICAgICAgICAgKGRyYWluaW5nLCBzdG9wcGVkLCBpbiBlcnJvciwgZXRjLiksIGEgdXNhYmxlIGhvdCBzcGFyZSB3aXRoIHRoZSBzYW1lIGxic2V0IHdpbGwgYmUgdXNlZCBpbgogICAgICAgICAgICAgICAgICAgIGl0cyBwbGFjZS4gSG90IHNwYXJlcyBjYW4gaGVscCBlbnN1cmUgdGhhdCBhIHNwZWNpZmljIG51bWJlciBvZiB3b3JrZXJzIGFyZSBhbHdheXMgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAgICAgZm9yIHVzZSBieSBhIGJhbGFuY2VyLjwvdGQ+PC90cj4KICAgICAgICA8dHI+PHRkPjxjb2RlPkg8L2NvZGU+PC90ZD48dGQ+PGVtPlN0Ynk8L2VtPjwvdGQ+PHRkPldvcmtlciBpcyBpbiBob3Qtc3RhbmRieSBtb2RlIGFuZCB3aWxsIG9ubHkgYmUgdXNlZCBpZiBubyBvdGhlcgogICAgICAgICAgICAgICAgICAgIHZpYWJsZSB3b3JrZXJzIG9yIHNwYXJlcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBiYWxhbmNlciBzZXQuPC90ZD48L3RyPgogICAgICAgIDx0cj48dGQ+PGNvZGU+RTwvY29kZT48L3RkPjx0ZD48ZW0+RXJyPC9lbT48L3RkPjx0ZD5Xb3JrZXIgaXMgaW4gYW4gZXJyb3Igc3RhdGUsIHVzdWFsbHkgZHVlIHRvIGZhaWxpbmcgcHJlLXJlcXVlc3QgY2hlY2s7CiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMgd2lsbCBub3QgYmUgcHJveGllZCB0byB0aGlzIHdvcmtlciwgYnV0IGl0IHdpbGwgYmUgcmV0cmllZCBkZXBlbmRpbmcgb24KICAgICAgICAgICAgICAgICAgICB0aGUgPGNvZGU+cmV0cnk8L2NvZGU+IHNldHRpbmcgb2YgdGhlIHdvcmtlci48L3RkPjwvdHI+CiAgICAgICAgPHRyPjx0ZD48Y29kZT5OPC9jb2RlPjwvdGQ+PHRkPjxlbT5Ecm48L2VtPjwvdGQ+PHRkPldvcmtlciBpcyBpbiBkcmFpbiBtb2RlIGFuZCB3aWxsIG9ubHkgYWNjZXB0IGV4aXN0aW5nIHN0aWNreSBzZXNzaW9ucwogICAgICAgICAgICAgICAgICAgIGRlc3RpbmVkIGZvciBpdHNlbGYgYW5kIGlnbm9yZSBhbGwgb3RoZXIgcmVxdWVzdHMuPC90ZD48L3RyPgogICAgICAgIDx0cj48dGQ+PGNvZGU+QzwvY29kZT48L3RkPjx0ZD48ZW0+SGNGbDwvZW0+PC90ZD48dGQ+V29ya2VyIGhhcyBmYWlsZWQgZHluYW1pYyBoZWFsdGggY2hlY2sgYW5kIHdpbGwgbm90IGJlIHVzZWQgdW50aWwgaXQKICAgICAgICAgICAgICAgICAgICBwYXNzZXMgc3Vic2VxdWVudCBoZWFsdGggY2hlY2tzLjwvdGQ+PC90cj4KICAgICAgPC90YWJsZT4KICA8L2Rpdj48L2Rpdj4KPGRpdiBjbGFzcz0iYm90dG9tbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuLi9lbi9ob3d0by9yZXZlcnNlX3Byb3h5Lmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9lcy9ob3d0by9yZXZlcnNlX3Byb3h5Lmh0bWwiIGhyZWZsYW5nPSJlcyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJFc3Bh8W9sIj4mbmJzcDtlcyZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9mci9ob3d0by9yZXZlcnNlX3Byb3h5Lmh0bWwiIGhyZWZsYW5nPSJmciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJGcmFu52FpcyI+Jm5ic3A7ZnImbmJzcDs8L2E+PC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIGFsdD0idG9wIiAvPjwvYT48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDI+PGEgaWQ9ImNvbW1lbnRzX3NlY3Rpb24iIG5hbWU9ImNvbW1lbnRzX3NlY3Rpb24iPkNvbW1lbnRzPC9hPjwvaDI+PGRpdiBjbGFzcz0id2FybmluZyI+PHN0cm9uZz5Ob3RpY2U6PC9zdHJvbmc+PGJyIC8+VGhpcyBpcyBub3QgYSBRJmFtcDtBIHNlY3Rpb24uIENvbW1lbnRzIHBsYWNlZCBoZXJlIHNob3VsZCBiZSBwb2ludGVkIHRvd2FyZHMgc3VnZ2VzdGlvbnMgb24gaW1wcm92aW5nIHRoZSBkb2N1bWVudGF0aW9uIG9yIHNlcnZlciwgYW5kIG1heSBiZSByZW1vdmVkIGFnYWluIGJ5IG91ciBtb2RlcmF0b3JzIGlmIHRoZXkgYXJlIGVpdGhlciBpbXBsZW1lbnRlZCBvciBjb25zaWRlcmVkIGludmFsaWQvb2ZmLXRvcGljLiBRdWVzdGlvbnMgb24gaG93IHRvIG1hbmFnZSB0aGUgQXBhY2hlIEhUVFAgU2VydmVyIHNob3VsZCBiZSBkaXJlY3RlZCBhdCBlaXRoZXIgb3VyIElSQyBjaGFubmVsLCAjaHR0cGQsIG9uIEZyZWVub2RlLCBvciBzZW50IHRvIG91ciA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9saXN0cy5odG1sIj5tYWlsaW5nIGxpc3RzPC9hPi48L2Rpdj4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KdmFyIGNvbW1lbnRzX3Nob3J0bmFtZSA9ICdodHRwZCc7CnZhciBjb21tZW50c19pZGVudGlmaWVyID0gJ2h0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvdHJ1bmsvaG93dG8vcmV2ZXJzZV9wcm94eS5odG1sJzsKKGZ1bmN0aW9uKHcsIGQpIHsKICAgIGlmICh3LmxvY2F0aW9uLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCkgPT0gImh0dHBkLmFwYWNoZS5vcmciKSB7CiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj48XC9kaXY+Jyk7CiAgICAgICAgdmFyIHMgPSBkLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgICAgIHMudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwogICAgICAgIHMuYXN5bmMgPSB0cnVlOwogICAgICAgIHMuc3JjID0gJ2h0dHBzOi8vY29tbWVudHMuYXBhY2hlLm9yZy9zaG93X2NvbW1lbnRzLmx1YT9zaXRlPScgKyBjb21tZW50c19zaG9ydG5hbWUgKyAnJnBhZ2U9JyArIGNvbW1lbnRzX2lkZW50aWZpZXI7CiAgICAgICAgKGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSB8fCBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0pLmFwcGVuZENoaWxkKHMpOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj5Db21tZW50cyBhcmUgZGlzYWJsZWQgZm9yIHRoaXMgcGFnZSBhdCB0aGUgbW9tZW50LjxcL2Rpdj4nKTsKICAgIH0KfSkod2luZG93LCBkb2N1bWVudCk7Ci8vLS0+PCFdXT48L3NjcmlwdD48L2Rpdj48ZGl2IGlkPSJmb290ZXIiPgo8cCBjbGFzcz0iYXBhY2hlIj5Db3B5cmlnaHQgMjAxOSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uPGJyIC8+TGljZW5zZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wPC9hPi48L3A+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4uL21vZC9xdWlja3JlZmVyZW5jZS5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD48L2Rpdj48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQppZiAodHlwZW9mKHByZXR0eVByaW50KSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgIHByZXR0eVByaW50KCk7Cn0KLy8tLT48IV1dPjwvc2NyaXB0Pgo8L2JvZHk+PC9odG1sPg==