PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5BcGFjaGUgbW9kX3Jld3JpdGUgSW50cm9kdWN0aW9uIC0gQXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi41PC90aXRsZT4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJNYWluIHN0eWxlc2hlZXQiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtbG9vc2UtMTAwcGMuY3NzIiByZWw9ImFsdGVybmF0ZSBzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik5vIFNpZGViYXIgLSBEZWZhdWx0IGZvbnQgc2l6ZSIgLz4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC1wcmludC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InByaW50IiB0eXBlPSJ0ZXh0L2NzcyIgLz48bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9zdHlsZS9jc3MvcHJldHRpZnkuY3NzIiAvPgo8c2NyaXB0IHNyYz0iLi4vc3R5bGUvc2NyaXB0cy9wcmV0dGlmeS5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cjwvc2NyaXB0PgoKPGxpbmsgaHJlZj0iLi4vaW1hZ2VzL2Zhdmljb24uaWNvIiByZWw9InNob3J0Y3V0IGljb24iIC8+PC9oZWFkPgo8Ym9keSBpZD0ibWFudWFsLXBhZ2UiPjxkaXYgaWQ9InBhZ2UtaGVhZGVyIj4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL3F1aWNrcmVmZXJlbmNlLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3dpa2kuYXBhY2hlLm9yZy9odHRwZC9GQVEiPkZBUTwvYT4gfCA8YSBocmVmPSIuLi9nbG9zc2FyeS5odG1sIj5HbG9zc2FyeTwvYT4gfCA8YSBocmVmPSIuLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPgo8cCBjbGFzcz0iYXBhY2hlIj5BcGFjaGUgSFRUUCBTZXJ2ZXIgVmVyc2lvbiAyLjU8L3A+CjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2ZlYXRoZXIucG5nIiAvPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ1cCI+PGEgaHJlZj0iLi8iPjxpbWcgdGl0bGU9IiZsdDstIiBhbHQ9IiZsdDstIiBzcmM9Ii4uL2ltYWdlcy9sZWZ0LmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgaWQ9InBhdGgiPgo8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvIj5BcGFjaGU8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvIj5IVFRQIFNlcnZlcjwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLyI+RG9jdW1lbnRhdGlvbjwvYT4gJmd0OyA8YSBocmVmPSIuLi8iPlZlcnNpb24gMi41PC9hPiAmZ3Q7IDxhIGhyZWY9Ii4vIj5SZXdyaXRlPC9hPjwvZGl2PjxkaXYgaWQ9InBhZ2UtY29udGVudCI+PGRpdiBpZD0icHJlYW1ibGUiPjxoMT5BcGFjaGUgbW9kX3Jld3JpdGUgSW50cm9kdWN0aW9uPC9oMT4KPGRpdiBjbGFzcz0idG9wbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuLi9lbi9yZXdyaXRlL2ludHJvLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9mci9yZXdyaXRlL2ludHJvLmh0bWwiIGhyZWZsYW5nPSJmciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJGcmFu52FpcyI+Jm5ic3A7ZnImbmJzcDs8L2E+PC9wPgo8L2Rpdj4KCjxwPlRoaXMgZG9jdW1lbnQgc3VwcGxlbWVudHMgdGhlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcmV3cml0ZS5odG1sIj5tb2RfcmV3cml0ZTwvYT48L2NvZGU+CjxhIGhyZWY9Ii4uL21vZC9tb2RfcmV3cml0ZS5odG1sIj5yZWZlcmVuY2UgZG9jdW1lbnRhdGlvbjwvYT4uIEl0CmRlc2NyaWJlcyB0aGUgYmFzaWMgY29uY2VwdHMgbmVjZXNzYXJ5IGZvciB1c2Ugb2YKPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9yZXdyaXRlLmh0bWwiPm1vZF9yZXdyaXRlPC9hPjwvY29kZT4uIE90aGVyIGRvY3VtZW50cyBnbyBpbnRvIGdyZWF0ZXIgZGV0YWlsLApidXQgdGhpcyBkb2Mgc2hvdWxkIGhlbHAgdGhlIGJlZ2lubmVyIGdldCB0aGVpciBmZWV0IHdldC4KPC9wPgo8L2Rpdj4KPGRpdiBpZD0icXVpY2t2aWV3Ij48dWwgaWQ9InRvYyI+PGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjaW50cm9kdWN0aW9uIj5JbnRyb2R1Y3Rpb248L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjcmVnZXgiPlJlZ3VsYXIgRXhwcmVzc2lvbnM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjcmV3cml0ZXJ1bGUiPlJld3JpdGVSdWxlIEJhc2ljczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNmbGFncyI+UmV3cml0ZSBGbGFnczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNyZXdyaXRlY29uZCI+UmV3cml0ZSBDb25kaXRpb25zPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3Jld3JpdGVtYXAiPlJld3JpdGUgbWFwczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNodGFjY2VzcyI+Lmh0YWNjZXNzIGZpbGVzPC9hPjwvbGk+CjwvdWw+PGgzPlNlZSBhbHNvPC9oMz48dWwgY2xhc3M9InNlZWFsc28iPjxsaT48YSBocmVmPSIuLi9tb2QvbW9kX3Jld3JpdGUuaHRtbCI+TW9kdWxlIGRvY3VtZW50YXRpb248L2E+PC9saT48bGk+PGEgaHJlZj0icmVtYXBwaW5nLmh0bWwiPlJlZGlyZWN0aW9uIGFuZCByZW1hcHBpbmc8L2E+PC9saT48bGk+PGEgaHJlZj0iYWNjZXNzLmh0bWwiPkNvbnRyb2xsaW5nIGFjY2VzczwvYT48L2xpPjxsaT48YSBocmVmPSJ2aG9zdHMuaHRtbCI+VmlydHVhbCBob3N0czwvYT48L2xpPjxsaT48YSBocmVmPSJwcm94eS5odG1sIj5Qcm94eWluZzwvYT48L2xpPjxsaT48YSBocmVmPSJyZXdyaXRlbWFwLmh0bWwiPlVzaW5nIFJld3JpdGVNYXA8L2E+PC9saT48bGk+PGEgaHJlZj0iYWR2YW5jZWQuaHRtbCI+QWR2YW5jZWQgdGVjaG5pcXVlczwvYT48L2xpPjxsaT48YSBocmVmPSJhdm9pZC5odG1sIj5XaGVuIG5vdCB0byB1c2UgbW9kX3Jld3JpdGU8L2E+PC9saT48bGk+PGEgaHJlZj0iI2NvbW1lbnRzX3NlY3Rpb24iPkNvbW1lbnRzPC9hPjwvbGk+PC91bD48L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iaW50cm9kdWN0aW9uIiBpZD0iaW50cm9kdWN0aW9uIj5JbnRyb2R1Y3Rpb248L2E+PC9oMj4KPHA+VGhlIEFwYWNoZSBtb2R1bGUgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9yZXdyaXRlLmh0bWwiPm1vZF9yZXdyaXRlPC9hPjwvY29kZT4gaXMgYSB2ZXJ5IHBvd2VyZnVsIGFuZApzb3BoaXN0aWNhdGVkIG1vZHVsZSB3aGljaCBwcm92aWRlcyBhIHdheSB0byBkbyBVUkwgbWFuaXB1bGF0aW9ucy4gV2l0aAppdCwgeW91IGNhbiBkbyBuZWFybHkgYWxsIHR5cGVzIG9mIFVSTCByZXdyaXRpbmcgdGhhdCB5b3UgbWF5IG5lZWQuIEl0CmlzLCBob3dldmVyLCBzb21ld2hhdCBjb21wbGV4LCBhbmQgbWF5IGJlIGludGltaWRhdGluZyB0byB0aGUgYmVnaW5uZXIuClRoZXJlIGlzIGFsc28gYSB0ZW5kZW5jeSB0byB0cmVhdCByZXdyaXRlIHJ1bGVzIGFzIG1hZ2ljIGluY2FudGF0aW9uLAp1c2luZyB0aGVtIHdpdGhvdXQgYWN0dWFsbHkgdW5kZXJzdGFuZGluZyB3aGF0IHRoZXkgZG8uPC9wPgoKPHA+VGhpcyBkb2N1bWVudCBhdHRlbXB0cyB0byBnaXZlIHN1ZmZpY2llbnQgYmFja2dyb3VuZCBzbyB0aGF0IHdoYXQKZm9sbG93cyBpcyB1bmRlcnN0b29kLCByYXRoZXIgdGhhbiBqdXN0IGNvcGllZCBibGluZGx5Lgo8L3A+Cgo8cD5SZW1lbWJlciB0aGF0IG1hbnkgY29tbW9uIFVSTC1tYW5pcHVsYXRpb24gdGFza3MgZG9uJ3QgcmVxdWlyZSB0aGUKZnVsbCBwb3dlciBhbmQgY29tcGxleGl0eSBvZiA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Jld3JpdGUuaHRtbCI+bW9kX3Jld3JpdGU8L2E+PC9jb2RlPi4gRm9yIHNpbXBsZQp0YXNrcywgc2VlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYWxpYXMuaHRtbCI+bW9kX2FsaWFzPC9hPjwvY29kZT4gYW5kIHRoZSBkb2N1bWVudGF0aW9uCm9uIDxhIGhyZWY9Ii4uL3VybG1hcHBpbmcuaHRtbCI+bWFwcGluZyBVUkxzIHRvIHRoZQpmaWxlc3lzdGVtPC9hPi48L3A+Cgo8cD5GaW5hbGx5LCBiZWZvcmUgcHJvY2VlZGluZywgYmUgc3VyZSB0byBjb25maWd1cmUKPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9yZXdyaXRlLmh0bWwiPm1vZF9yZXdyaXRlPC9hPjwvY29kZT4ncyBsb2cgbGV2ZWwgdG8gb25lIG9mIHRoZSB0cmFjZSBsZXZlbHMgdXNpbmcKdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjbG9nbGV2ZWwiPkxvZ0xldmVsPC9hPjwvY29kZT4gZGlyZWN0aXZlLiBBbHRob3VnaCB0aGlzCmNhbiBnaXZlIGFuIG92ZXJ3aGVsbWluZyBhbW91bnQgb2YgaW5mb3JtYXRpb24sIGl0IGlzIGluZGlzcGVuc2FibGUgaW4KZGVidWdnaW5nIHByb2JsZW1zIHdpdGggPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9yZXdyaXRlLmh0bWwiPm1vZF9yZXdyaXRlPC9hPjwvY29kZT4gY29uZmlndXJhdGlvbiwgc2luY2UKaXQgd2lsbCB0ZWxsIHlvdSBleGFjdGx5IGhvdyBlYWNoIHJ1bGUgaXMgcHJvY2Vzc2VkLjwvcD4KCjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9InJlZ2V4IiBpZD0icmVnZXgiPlJlZ3VsYXIgRXhwcmVzc2lvbnM8L2E+PC9oMj4KCjxwPm1vZF9yZXdyaXRlIHVzZXMgdGhlIDxhIGhyZWY9Imh0dHA6Ly9wY3JlLm9yZy8iPlBlcmwgQ29tcGF0aWJsZQpSZWd1bGFyIEV4cHJlc3Npb248L2E+IHZvY2FidWxhcnkuIEluIHRoaXMgZG9jdW1lbnQsIHdlIGRvIG5vdCBhdHRlbXB0CnRvIHByb3ZpZGUgYSBkZXRhaWxlZCByZWZlcmVuY2UgdG8gcmVndWxhciBleHByZXNzaW9ucy4gRm9yIHRoYXQsIHdlCnJlY29tbWVuZCB0aGUgPGEgaHJlZj0iaHR0cDovL3BjcmUub3JnL3BjcmUudHh0Ij5QQ1JFIG1hbiBwYWdlczwvYT4sIHRoZQo8YSBocmVmPSJodHRwOi8vcGVybGRvYy5wZXJsLm9yZy9wZXJscmUuaHRtbCI+UGVybCByZWd1bGFyCmV4cHJlc3Npb24gbWFuIHBhZ2U8L2E+LCBhbmQgPGEgaHJlZj0iaHR0cDovL3Nob3Aub3JlaWxseS5jb20vcHJvZHVjdC85NzgwNTk2NTI4MTI2LmRvIj5NYXN0ZXJpbmcKUmVndWxhciBFeHByZXNzaW9ucywgYnkgSmVmZnJleSBGcmllZGw8L2E+LjwvcD4KCjxwPkluIHRoaXMgZG9jdW1lbnQsIHdlIGF0dGVtcHQgdG8gcHJvdmlkZSBlbm91Z2ggb2YgYSByZWdleCB2b2NhYnVsYXJ5CnRvIGdldCB5b3Ugc3RhcnRlZCwgd2l0aG91dCBiZWluZyBvdmVyd2hlbG1pbmcsIGluIHRoZSBob3BlIHRoYXQKPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9yZXdyaXRlLmh0bWwjcmV3cml0ZXJ1bGUiPlJld3JpdGVSdWxlPC9hPjwvY29kZT5zIHdpbGwgYmUgc2NpZW50aWZpYwpmb3JtdWxhZSwgcmF0aGVyIHRoYW4gbWFnaWNhbCBpbmNhbnRhdGlvbnMuPC9wPgoKPGgzPjxhIG5hbWU9InJlZ2V4dm9jYWIiIGlkPSJyZWdleHZvY2FiIj5SZWdleCB2b2NhYnVsYXJ5PC9hPjwvaDM+Cgo8cD5UaGUgZm9sbG93aW5nIGFyZSB0aGUgbWluaW1hbCBidWlsZGluZyBibG9ja3MgeW91IHdpbGwgbmVlZCwgaW4gb3JkZXIKdG8gd3JpdGUgcmVndWxhciBleHByZXNzaW9ucyBhbmQgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9yZXdyaXRlLmh0bWwjcmV3cml0ZXJ1bGUiPlJld3JpdGVSdWxlPC9hPjwvY29kZT5zLiBUaGV5IGNlcnRhaW5seSBkbyBub3QKcmVwcmVzZW50IGEgY29tcGxldGUgcmVndWxhciBleHByZXNzaW9uIHZvY2FidWxhcnksIGJ1dCB0aGV5IGFyZSBhIGdvb2QKcGxhY2UgdG8gc3RhcnQsIGFuZCBzaG91bGQgaGVscCB5b3UgcmVhZCBiYXNpYyByZWd1bGFyIGV4cHJlc3Npb25zLCBhcwp3ZWxsIGFzIHdyaXRlIHlvdXIgb3duLjwvcD4KCjx0YWJsZT4KPHRyPgo8dGg+Q2hhcmFjdGVyPC90aD4KPHRoPk1lYW5pbmc8L3RoPgo8dGg+RXhhbXBsZTwvdGg+CjwvdHI+Cgo8dHI+PHRkPjxjb2RlPi48L2NvZGU+PC90ZD48dGQ+TWF0Y2hlcyBhbnkgc2luZ2xlCmNoYXJhY3RlcjwvdGQ+PHRkPjxjb2RlPmMudDwvY29kZT4gd2lsbCBtYXRjaCA8Y29kZT5jYXQ8L2NvZGU+LAo8Y29kZT5jb3Q8L2NvZGU+LCA8Y29kZT5jdXQ8L2NvZGU+LCBldGMuPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPis8L2NvZGU+PC90ZD48dGQ+UmVwZWF0cyB0aGUgcHJldmlvdXMgbWF0Y2ggb25lIG9yIG1vcmUKdGltZXM8L3RkPjx0ZD48Y29kZT5hKzwvY29kZT4gbWF0Y2hlcyA8Y29kZT5hPC9jb2RlPiwgPGNvZGU+YWE8L2NvZGU+LAo8Y29kZT5hYWE8L2NvZGU+LCBldGM8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+KjwvY29kZT48L3RkPjx0ZD5SZXBlYXRzIHRoZSBwcmV2aW91cyBtYXRjaCB6ZXJvIG9yIG1vcmUKdGltZXMuPC90ZD48dGQ+PGNvZGU+YSo8L2NvZGU+IG1hdGNoZXMgYWxsIHRoZSBzYW1lIHRoaW5ncwo8Y29kZT5hKzwvY29kZT4gbWF0Y2hlcywgYnV0IHdpbGwgYWxzbyBtYXRjaCBhbiBlbXB0eSBzdHJpbmcuPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPj88L2NvZGU+PC90ZD48dGQ+TWFrZXMgdGhlIG1hdGNoIG9wdGlvbmFsLjwvdGQ+PHRkPgo8Y29kZT5jb2xvdT9yPC9jb2RlPiB3aWxsIG1hdGNoIDxjb2RlPmNvbG9yPC9jb2RlPiBhbmQgPGNvZGU+Y29sb3VyPC9jb2RlPi48L3RkPgo8L3RyPgo8dHI+PHRkPjxjb2RlPl48L2NvZGU+PC90ZD48dGQ+Q2FsbGVkIGFuIGFuY2hvciwgbWF0Y2hlcyB0aGUgYmVnaW5uaW5nCm9mIHRoZSBzdHJpbmc8L3RkPjx0ZD48Y29kZT5eYTwvY29kZT4gbWF0Y2hlcyBhIHN0cmluZyB0aGF0IGJlZ2lucyB3aXRoCjxjb2RlPmE8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiQ8L2NvZGU+PC90ZD48dGQ+VGhlIG90aGVyIGFuY2hvciwgdGhpcyBtYXRjaGVzIHRoZSBlbmQgb2YKdGhlIHN0cmluZy48L3RkPjx0ZD48Y29kZT5hJDwvY29kZT4gbWF0Y2hlcyBhIHN0cmluZyB0aGF0IGVuZHMgd2l0aAo8Y29kZT5hPC9jb2RlPi48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+KCApPC9jb2RlPjwvdGQ+PHRkPkdyb3VwcyBzZXZlcmFsIGNoYXJhY3RlcnMgaW50byBhIHNpbmdsZQp1bml0LCBhbmQgY2FwdHVyZXMgYSBtYXRjaCBmb3IgdXNlIGluIGEgYmFja3JlZmVyZW5jZS48L3RkPjx0ZD48Y29kZT4oYWIpKzwvY29kZT4KbWF0Y2hlcyA8Y29kZT5hYmFiYWI8L2NvZGU+IC0gdGhhdCBpcywgdGhlIDxjb2RlPis8L2NvZGU+IGFwcGxpZXMgdG8gdGhlIGdyb3VwLgpGb3IgbW9yZSBvbiBiYWNrcmVmZXJlbmNlcyBzZWUgPGEgaHJlZj0iI0ludGVybmFsQmFja1JlZnMiPmJlbG93PC9hPi48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+WyBdPC9jb2RlPjwvdGQ+PHRkPkEgY2hhcmFjdGVyIGNsYXNzIC0gbWF0Y2hlcyBvbmUgb2YgdGhlCmNoYXJhY3RlcnM8L3RkPjx0ZD48Y29kZT5jW3VvYV10PC9jb2RlPiBtYXRjaGVzIDxjb2RlPmN1dDwvY29kZT4sCjxjb2RlPmNvdDwvY29kZT4gb3IgPGNvZGU+Y2F0PC9jb2RlPi48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+W14gXTwvY29kZT48L3RkPjx0ZD5OZWdhdGl2ZSBjaGFyYWN0ZXIgY2xhc3MgLSBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgbm90IHNwZWNpZmllZDwvdGQ+PHRkPjxjb2RlPmNbXi9ddDwvY29kZT4gbWF0Y2hlcyA8Y29kZT5jYXQ8L2NvZGU+IG9yIDxjb2RlPmM9dDwvY29kZT4gYnV0IG5vdCA8Y29kZT5jL3Q8L2NvZGU+PC90ZD48L3RyPgo8L3RhYmxlPgoKPHA+SW4gPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9yZXdyaXRlLmh0bWwiPm1vZF9yZXdyaXRlPC9hPjwvY29kZT4gdGhlIDxjb2RlPiE8L2NvZGU+IGNoYXJhY3RlciBjYW4gYmUKdXNlZCBiZWZvcmUgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbmVnYXRlIGl0LiBUaGlzIGlzLCBhIHN0cmluZyB3aWxsCmJlIGNvbnNpZGVyZWQgdG8gaGF2ZSBtYXRjaGVkIG9ubHkgaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIHJlc3Qgb2YKdGhlIGV4cHJlc3Npb24uPC9wPgoKCgo8aDM+PGEgbmFtZT0iSW50ZXJuYWxCYWNrUmVmcyIgaWQ9IkludGVybmFsQmFja1JlZnMiPlJlZ2V4IEJhY2stUmVmZXJlbmNlIEF2YWlsYWJpbGl0eTwvYT48L2gzPgoKICAgICAgPHA+T25lIGltcG9ydGFudCB0aGluZyBoZXJlIGhhcyB0byBiZSByZW1lbWJlcmVkOiBXaGVuZXZlciB5b3UKICAgICAgdXNlIHBhcmVudGhlc2VzIGluIDxlbT5QYXR0ZXJuPC9lbT4gb3IgaW4gb25lIG9mIHRoZQogICAgICA8ZW0+Q29uZFBhdHRlcm48L2VtPiwgYmFjay1yZWZlcmVuY2VzIGFyZSBpbnRlcm5hbGx5IGNyZWF0ZWQKICAgICAgd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCB0aGUgc3RyaW5ncyA8Y29kZT4kTjwvY29kZT4gYW5kCiAgICAgIDxjb2RlPiVOPC9jb2RlPiAoc2VlIGJlbG93KS4gVGhlc2UgYXJlIGF2YWlsYWJsZSBmb3IgY3JlYXRpbmcKICAgICAgdGhlIDxlbT5TdWJzdGl0dXRpb248L2VtPiBwYXJhbWV0ZXIgb2YgYQogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Jld3JpdGUuaHRtbCNyZXdyaXRlcnVsZSI+UmV3cml0ZVJ1bGU8L2E+PC9jb2RlPiBvcgogICAgICB0aGUgPGVtPlRlc3RTdHJpbmc8L2VtPiBwYXJhbWV0ZXIgb2YgYQogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Jld3JpdGUuaHRtbCNyZXdyaXRlY29uZCI+UmV3cml0ZUNvbmQ8L2E+PC9jb2RlPi48L3A+CiAgICAgIDxwPiAgQ2FwdHVyZXMgaW4gdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcmV3cml0ZS5odG1sI3Jld3JpdGVydWxlIj5SZXdyaXRlUnVsZTwvYT48L2NvZGU+IHBhdHRlcm5zIGFyZSAoY291bnRlcmludHVpdGl2ZWx5KSBhdmFpbGFibGUgdG8KICAgICAgIGFsbCBwcmVjZWRpbmcKICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9yZXdyaXRlLmh0bWwjcmV3cml0ZWNvbmQiPlJld3JpdGVDb25kPC9hPjwvY29kZT4gZGlyZWN0aXZlcywKICAgICAgYmVjYXVzZSB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9yZXdyaXRlLmh0bWwjcmV3cml0ZXJ1bGUiPlJld3JpdGVSdWxlPC9hPjwvY29kZT4KICAgICAgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgYmVmb3JlIHRoZSBpbmRpdmlkdWFsIGNvbmRpdGlvbnMuPC9wPgoKICAgICAgPHA+RmlndXJlIDEgc2hvd3MgdG8gd2hpY2gKICAgICAgbG9jYXRpb25zIHRoZSBiYWNrLXJlZmVyZW5jZXMgYXJlIHRyYW5zZmVycmVkIGZvciBleHBhbnNpb24gYXMKICAgICAgd2VsbCBhcyBpbGx1c3RyYXRpbmcgdGhlIGZsb3cgb2YgdGhlIFJld3JpdGVSdWxlLCBSZXdyaXRlQ29uZAogICAgICBtYXRjaGluZy4gSW4gdGhlIG5leHQgY2hhcHRlcnMsIHdlIHdpbGwgYmUgZXhwbG9yaW5nIGhvdyB0byB1c2UKICAgICAgdGhlc2UgYmFjay1yZWZlcmVuY2VzLCBzbyBkbyBub3QgZnJldCBpZiBpdCBzZWVtcyBhIGJpdCBhbGllbgogICAgICB0byB5b3UgYXQgZmlyc3QuCiAgICAgIDwvcD4KCjxwIGNsYXNzPSJmaWd1cmUiPgogICAgICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3Jld3JpdGVfYmFja3JlZmVyZW5jZXMucG5nIiBhbHQ9IkZsb3cgb2YgUmV3cml0ZVJ1bGUgYW5kIFJld3JpdGVDb25kIG1hdGNoaW5nIiAvPjxiciAvPgogICAgICA8ZGZuPkZpZ3VyZSAxOjwvZGZuPiBUaGUgYmFjay1yZWZlcmVuY2UgZmxvdyB0aHJvdWdoIGEgcnVsZS48YnIgLz4KICAgICAgSW4gdGhpcyBleGFtcGxlLCBhIHJlcXVlc3QgZm9yIDxjb2RlPi90ZXN0LzEyMzQ8L2NvZGU+IHdvdWxkIGJlIHRyYW5zZm9ybWVkIGludG8gPGNvZGU+L2FkbWluLmZvbz9wYWdlPXRlc3QmYW1wO2lkPTEyMzQmYW1wO2hvc3Q9YWRtaW4uZXhhbXBsZS5jb208L2NvZGU+Lgo8L3A+CgoKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0icmV3cml0ZXJ1bGUiIGlkPSJyZXdyaXRlcnVsZSI+UmV3cml0ZVJ1bGUgQmFzaWNzPC9hPjwvaDI+CjxwPkEgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9yZXdyaXRlLmh0bWwjcmV3cml0ZXJ1bGUiPlJld3JpdGVSdWxlPC9hPjwvY29kZT4gY29uc2lzdHMKb2YgdGhyZWUgYXJndW1lbnRzIHNlcGFyYXRlZCBieSBzcGFjZXMuIFRoZSBhcmd1bWVudHMgYXJlPC9wPgo8b2w+CjxsaT48dmFyPlBhdHRlcm48L3Zhcj46IHdoaWNoIGluY29taW5nIFVSTHMgc2hvdWxkIGJlIGFmZmVjdGVkIGJ5IHRoZSBydWxlOzwvbGk+CjxsaT48dmFyPlN1YnN0aXR1dGlvbjwvdmFyPjogd2hlcmUgc2hvdWxkIHRoZSBtYXRjaGluZyByZXF1ZXN0cyBiZSBzZW50OzwvbGk+CjxsaT48dmFyPltmbGFnc108L3Zhcj46IG9wdGlvbnMgYWZmZWN0aW5nIHRoZSByZXdyaXR0ZW4gcmVxdWVzdC48L2xpPgo8L29sPgoKPHA+VGhlIDx2YXI+UGF0dGVybjwvdmFyPiBpcyBhIDxhIGhyZWY9IiNyZWdleCI+cmVndWxhciBleHByZXNzaW9uPC9hPi4KSXQgaXMgaW5pdGlhbGx5IChmb3IgdGhlIGZpcnN0IHJld3JpdGUgcnVsZSBvciB1bnRpbCBhIHN1YnN0aXR1dGlvbiBvY2N1cnMpCm1hdGNoZWQgYWdhaW5zdCB0aGUgVVJMLXBhdGggb2YgdGhlIGluY29taW5nIHJlcXVlc3QgKHRoZSBwYXJ0IGFmdGVyIHRoZQpob3N0bmFtZSBidXQgYmVmb3JlIGFueSBxdWVzdGlvbiBtYXJrIGluZGljYXRpbmcgdGhlIGJlZ2lubmluZyBvZiBhIHF1ZXJ5CnN0cmluZykgb3IsIGluIHBlci1kaXJlY3RvcnkgY29udGV4dCwgYWdhaW5zdCB0aGUgcmVxdWVzdCdzIHBhdGggcmVsYXRpdmUKdG8gdGhlIGRpcmVjdG9yeSBmb3Igd2hpY2ggdGhlIHJ1bGUgaXMgZGVmaW5lZC4gT25jZSBhIHN1YnN0aXR1dGlvbiBoYXMKb2NjdXJyZWQsIHRoZSBydWxlcyB0aGF0IGZvbGxvdyBhcmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBzdWJzdGl0dXRlZAp2YWx1ZS4KPC9wPgoKPHAgY2xhc3M9ImZpZ3VyZSI+CiAgICAgIDxpbWcgc3JjPSIuLi9pbWFnZXMvc3ludGF4X3Jld3JpdGVydWxlLnBuZyIgYWx0PSJTeW50YXggb2YgdGhlIFJld3JpdGVSdWxlIGRpcmVjdGl2ZSIgLz48YnIgLz4KICAgICAgPGRmbj5GaWd1cmUgMjo8L2Rmbj4gU3ludGF4IG9mIHRoZSBSZXdyaXRlUnVsZSBkaXJlY3RpdmUuCjwvcD4KCgo8cD5UaGUgPHZhcj5TdWJzdGl0dXRpb248L3Zhcj4gY2FuIGl0c2VsZiBiZSBvbmUgb2YgdGhyZWUgdGhpbmdzOjwvcD4KCjxkbD4KPGR0PkEgZnVsbCBmaWxlc3lzdGVtIHBhdGggdG8gYSByZXNvdXJjZTwvZHQ+CjxkZD4KPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPlJld3JpdGVSdWxlICJeL2dhbWVzIiAiL3Vzci9sb2NhbC9nYW1lcy93ZWIiPC9wcmU+Cgo8cD5UaGlzIG1hcHMgYSByZXF1ZXN0IHRvIGFuIGFyYml0cmFyeSBsb2NhdGlvbiBvbiB5b3VyIGZpbGVzeXN0ZW0sIG11Y2gKbGlrZSB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hbGlhcy5odG1sI2FsaWFzIj5BbGlhczwvYT48L2NvZGU+IGRpcmVjdGl2ZS48L3A+CjwvZGQ+Cgo8ZHQ+QSB3ZWItcGF0aCB0byBhIHJlc291cmNlPC9kdD4KPGRkPgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+UmV3cml0ZVJ1bGUgIl4vZm9vJCIgIi9iYXIiPC9wcmU+Cgo8cD5JZiA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI2RvY3VtZW50cm9vdCI+RG9jdW1lbnRSb290PC9hPjwvY29kZT4gaXMgc2V0CnRvIDxjb2RlPi91c3IvbG9jYWwvYXBhY2hlMi9odGRvY3M8L2NvZGU+LCB0aGVuIHRoaXMgZGlyZWN0aXZlIHdvdWxkCm1hcCByZXF1ZXN0cyBmb3IgPGNvZGU+aHR0cDovL2V4YW1wbGUuY29tL2ZvbzwvY29kZT4gdG8gdGhlCnBhdGggPGNvZGU+L3Vzci9sb2NhbC9hcGFjaGUyL2h0ZG9jcy9iYXI8L2NvZGU+LjwvcD4KPC9kZD4KCjxkdD5BbiBhYnNvbHV0ZSBVUkw8L2R0Pgo8ZGQ+CjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5SZXdyaXRlUnVsZSAiXi9wcm9kdWN0L3ZpZXckIiAiaHR0cDovL3NpdGUyLmV4YW1wbGUuY29tL3NlZXByb2R1Y3QuaHRtbCIgW1JdPC9wcmU+Cgo8cD5UaGlzIHRlbGxzIHRoZSBjbGllbnQgdG8gbWFrZSBhIG5ldyByZXF1ZXN0IGZvciB0aGUgc3BlY2lmaWVkIFVSTC48L3A+CjwvZGQ+CjwvZGw+Cgo8cD5UaGUgPHZhcj5TdWJzdGl0dXRpb248L3Zhcj4gY2FuIGFsc28KY29udGFpbiA8ZW0+YmFjay1yZWZlcmVuY2VzPC9lbT4gdG8gcGFydHMgb2YgdGhlIGluY29taW5nIFVSTC1wYXRoCm1hdGNoZWQgYnkgdGhlIDx2YXI+UGF0dGVybjwvdmFyPi4gQ29uc2lkZXIgdGhlIGZvbGxvd2luZzo8L3A+CjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5SZXdyaXRlUnVsZSAiXi9wcm9kdWN0LyguKikvdmlldyQiICIvdmFyL3dlYi9wcm9kdWN0ZGIvJDEiPC9wcmU+Cgo8cD5UaGUgdmFyaWFibGUgPGNvZGU+JDE8L2NvZGU+IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB3aGF0ZXZlciB0ZXh0CndhcyBtYXRjaGVkIGJ5IHRoZSBleHByZXNzaW9uIGluc2lkZSB0aGUgcGFyZW50aGVzaXMgaW4KdGhlIDx2YXI+UGF0dGVybjwvdmFyPi4gRm9yIGV4YW1wbGUsIGEgcmVxdWVzdApmb3IgPGNvZGU+aHR0cDovL2V4YW1wbGUuY29tL3Byb2R1Y3QvcjE0ZGYvdmlldzwvY29kZT4gd2lsbCBiZSBtYXBwZWQKdG8gdGhlIHBhdGggPGNvZGU+L3Zhci93ZWIvcHJvZHVjdGRiL3IxNGRmPC9jb2RlPi48L3A+Cgo8cD5JZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGV4cHJlc3Npb24gaW4gcGFyZW50aGVzaXMsIHRoZXkgYXJlCmF2YWlsYWJsZSBpbiBvcmRlciBpbiB0aGUKdmFyaWFibGVzIDxjb2RlPiQxPC9jb2RlPiwgPGNvZGU+JDI8L2NvZGU+LCA8Y29kZT4kMzwvY29kZT4sIGFuZCBzbwpvbi48L3A+CgoKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iZmxhZ3MiIGlkPSJmbGFncyI+UmV3cml0ZSBGbGFnczwvYT48L2gyPgo8cD5UaGUgYmVoYXZpb3Igb2YgYSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Jld3JpdGUuaHRtbCNyZXdyaXRlcnVsZSI+UmV3cml0ZVJ1bGU8L2E+PC9jb2RlPiBjYW4gYmUgbW9kaWZpZWQgYnkgdGhlCmFwcGxpY2F0aW9uIG9mIG9uZSBvciBtb3JlIGZsYWdzIHRvIHRoZSBlbmQgb2YgdGhlIHJ1bGUuIEZvciBleGFtcGxlLCB0aGUKbWF0Y2hpbmcgYmVoYXZpb3Igb2YgYSBydWxlIGNhbiBiZSBtYWRlIGNhc2UtaW5zZW5zaXRpdmUgYnkgdGhlCmFwcGxpY2F0aW9uIG9mIHRoZSA8Y29kZT5bTkNdPC9jb2RlPiBmbGFnOgo8L3A+CjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5SZXdyaXRlUnVsZSAiXnB1cHB5Lmh0bWwiICJzbWFsbGRvZy5odG1sIiBbTkNdPC9wcmU+CgoKPHA+Rm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgYXZhaWxhYmxlIGZsYWdzLCB0aGVpciBtZWFuaW5ncywgYW5kCmV4YW1wbGVzLCBzZWUgdGhlIDxhIGhyZWY9ImZsYWdzLmh0bWwiPlJld3JpdGUgRmxhZ3M8L2E+IGRvY3VtZW50LjwvcD4KCjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9InJld3JpdGVjb25kIiBpZD0icmV3cml0ZWNvbmQiPlJld3JpdGUgQ29uZGl0aW9uczwvYT48L2gyPgo8cD5PbmUgb3IgbW9yZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Jld3JpdGUuaHRtbCNyZXdyaXRlY29uZCI+UmV3cml0ZUNvbmQ8L2E+PC9jb2RlPgpkaXJlY3RpdmVzIGNhbiBiZSB1c2VkIHRvIHJlc3RyaWN0IHRoZSB0eXBlcyBvZiByZXF1ZXN0cyB0aGF0IHdpbGwgYmUKc3ViamVjdCB0byB0aGUKZm9sbG93aW5nIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcmV3cml0ZS5odG1sI3Jld3JpdGVydWxlIj5SZXdyaXRlUnVsZTwvYT48L2NvZGU+LiBUaGUKZmlyc3QgYXJndW1lbnQgaXMgYSB2YXJpYWJsZSBkZXNjcmliaW5nIGEgY2hhcmFjdGVyaXN0aWMgb2YgdGhlCnJlcXVlc3QsIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSA8YSBocmVmPSIjcmVnZXgiPnJlZ3VsYXIKZXhwcmVzc2lvbjwvYT4gdGhhdCBtdXN0IG1hdGNoIHRoZSB2YXJpYWJsZSwgYW5kIGEgdGhpcmQgb3B0aW9uYWwKYXJndW1lbnQgaXMgYSBsaXN0IG9mIGZsYWdzIHRoYXQgbW9kaWZ5IGhvdyB0aGUgbWF0Y2ggaXMgZXZhbHVhdGVkLjwvcD4KCjxwIGNsYXNzPSJmaWd1cmUiPgogICAgICA8aW1nIHNyYz0iLi4vaW1hZ2VzL3N5bnRheF9yZXdyaXRlY29uZC5wbmciIGFsdD0iU3ludGF4IG9mIHRoZSBSZXdyaXRlQ29uZCBkaXJlY3RpdmUiIC8+PGJyIC8+CiAgICAgIDxkZm4+RmlndXJlIDM6PC9kZm4+IFN5bnRheCBvZiB0aGUgUmV3cml0ZUNvbmQgZGlyZWN0aXZlCjwvcD4KCjxwPkZvciBleGFtcGxlLCB0byBzZW5kIGFsbCByZXF1ZXN0cyBmcm9tIGEgcGFydGljdWxhciBJUCByYW5nZSB0byBhCmRpZmZlcmVudCBzZXJ2ZXIsIHlvdSBjb3VsZCB1c2U6PC9wPgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+UmV3cml0ZUNvbmQgIiV7UkVNT1RFX0FERFJ9IiAiXjEwXC4yXC4iClJld3JpdGVSdWxlICIoLiopIiAgICAgICAgICAgImh0dHA6Ly9pbnRyYW5ldC5leGFtcGxlLmNvbSQxIjwvcHJlPgoKCjxwPldoZW4gbW9yZSB0aGFuCm9uZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Jld3JpdGUuaHRtbCNyZXdyaXRlY29uZCI+UmV3cml0ZUNvbmQ8L2E+PC9jb2RlPiBpcwpzcGVjaWZpZWQsIHRoZXkgbXVzdCBhbGwgbWF0Y2ggZm9yCnRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Jld3JpdGUuaHRtbCNyZXdyaXRlcnVsZSI+UmV3cml0ZVJ1bGU8L2E+PC9jb2RlPiB0byBiZQphcHBsaWVkLiBGb3IgZXhhbXBsZSwgdG8gZGVueSByZXF1ZXN0cyB0aGF0IGNvbnRhaW4gdGhlIHdvcmQgImhhY2siIGluCnRoZWlyIHF1ZXJ5IHN0cmluZywgdW5sZXNzIHRoZXkgYWxzbyBjb250YWluIGEgY29va2llIGNvbnRhaW5pbmcKdGhlIHdvcmQgImdvIiwgeW91IGNvdWxkIHVzZTo8L3A+CjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5SZXdyaXRlQ29uZCAiJXtRVUVSWV9TVFJJTkd9IiAiaGFjayIKUmV3cml0ZUNvbmQgIiV7SFRUUF9DT09LSUV9IiAgIWdvClJld3JpdGVSdWxlICIuIiAgICAgICAgICAgICAgICItIiAgIFtGXTwvcHJlPgoKPHA+Tm90aWNlIHRoYXQgdGhlIGV4Y2xhbWF0aW9uIG1hcmsgc3BlY2lmaWVzIGEgbmVnYXRpdmUgbWF0Y2gsIHNvIHRoZSBydWxlIGlzIG9ubHkgYXBwbGllZCBpZiB0aGUgY29va2llIGRvZXMgbm90IGNvbnRhaW4gImdvIi48L3A+Cgo8cD5NYXRjaGVzIGluIHRoZSByZWd1bGFyIGV4cHJlc3Npb25zIGNvbnRhaW5lZCBpbgp0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9yZXdyaXRlLmh0bWwjcmV3cml0ZWNvbmQiPlJld3JpdGVDb25kPC9hPjwvY29kZT5zIGNhbiBiZQp1c2VkIGFzIHBhcnQgb2YgdGhlIDx2YXI+U3Vic3RpdHV0aW9uPC92YXI+IGluCnRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Jld3JpdGUuaHRtbCNyZXdyaXRlcnVsZSI+UmV3cml0ZVJ1bGU8L2E+PC9jb2RlPiB1c2luZyB0aGUKdmFyaWFibGVzIDxjb2RlPiUxPC9jb2RlPiwgPGNvZGU+JTI8L2NvZGU+LCBldGMuIEZvciBleGFtcGxlLCB0aGlzCndpbGwgZGlyZWN0IHRoZSByZXF1ZXN0IHRvIGEgZGlmZmVyZW50IGRpcmVjdG9yeSBkZXBlbmRpbmcgb24gdGhlCmhvc3RuYW1lIHVzZWQgdG8gYWNjZXNzIHRoZSBzaXRlOjwvcD4KPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPlJld3JpdGVDb25kICIle0hUVFBfSE9TVH0iICIoLiopIgpSZXdyaXRlUnVsZSAiXi8oLiopIiAgICAgICAiL3NpdGVzLyUxLyQxIjwvcHJlPgoKPHA+SWYgdGhlIHJlcXVlc3Qgd2FzIGZvciA8Y29kZT5odHRwOi8vZXhhbXBsZS5jb20vZm9vL2JhcjwvY29kZT4sCnRoZW4gPGNvZGU+JTE8L2NvZGU+IHdvdWxkIGNvbnRhaW4gPGNvZGU+ZXhhbXBsZS5jb208L2NvZGU+CmFuZCA8Y29kZT4kMTwvY29kZT4gd291bGQgY29udGFpbiA8Y29kZT5mb28vYmFyPC9jb2RlPi48L3A+CgoKCjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9InJld3JpdGVtYXAiIGlkPSJyZXdyaXRlbWFwIj5SZXdyaXRlIG1hcHM8L2E+PC9oMj4KCjxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Jld3JpdGUuaHRtbCNyZXdyaXRlbWFwIj5SZXdyaXRlTWFwPC9hPjwvY29kZT4gZGlyZWN0aXZlCnByb3ZpZGVzIGEgd2F5IHRvIGNhbGwgYW4gZXh0ZXJuYWwgZnVuY3Rpb24sIHNvIHRvIHNwZWFrLCB0byBkbyB5b3VyCnJld3JpdGluZyBmb3IgeW91LiBUaGlzIGlzIGRpc2N1c3NlZCBpbiBncmVhdGVyIGRldGFpbCBpbiB0aGUgPGEgaHJlZj0icmV3cml0ZW1hcC5odG1sIj5SZXdyaXRlTWFwIHN1cHBsZW1lbnRhcnkgZG9jdW1lbnRhdGlvbjwvYT4uPC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJodGFjY2VzcyIgaWQ9Imh0YWNjZXNzIj4uaHRhY2Nlc3MgZmlsZXM8L2E+PC9oMj4KCjxwPlJld3JpdGluZyBpcyB0eXBpY2FsbHkgY29uZmlndXJlZCBpbiB0aGUgbWFpbiBzZXJ2ZXIgY29uZmlndXJhdGlvbgpzZXR0aW5nIChvdXRzaWRlIGFueSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI2RpcmVjdG9yeSI+Jmx0O0RpcmVjdG9yeSZndDs8L2E+PC9jb2RlPiBzZWN0aW9uKSBvcgppbnNpZGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL2NvcmUuaHRtbCN2aXJ0dWFsaG9zdCI+Jmx0O1ZpcnR1YWxIb3N0Jmd0OzwvYT48L2NvZGU+CmNvbnRhaW5lcnMuIFRoaXMgaXMgdGhlIGVhc2llc3Qgd2F5IHRvIGRvIHJld3JpdGluZyBhbmQgaXMKcmVjb21tZW5kZWQuIEl0IGlzIHBvc3NpYmxlLCBob3dldmVyLCB0byBkbyByZXdyaXRpbmcKaW5zaWRlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjZGlyZWN0b3J5Ij4mbHQ7RGlyZWN0b3J5Jmd0OzwvYT48L2NvZGU+CnNlY3Rpb25zIG9yIDxhIGhyZWY9Ii4uL2hvd3RvL2h0YWNjZXNzLmh0bWwiPjxjb2RlPi5odGFjY2VzczwvY29kZT4KZmlsZXM8L2E+IGF0IHRoZSBleHBlbnNlIG9mIHNvbWUgYWRkaXRpb25hbCBjb21wbGV4aXR5LiBUaGlzIHRlY2huaXF1ZQppcyBjYWxsZWQgcGVyLWRpcmVjdG9yeSByZXdyaXRlcy48L3A+Cgo8cD5UaGUgbWFpbiBkaWZmZXJlbmNlIHdpdGggcGVyLXNlcnZlciByZXdyaXRlcyBpcyB0aGF0IHRoZSBwYXRoCnByZWZpeCBvZiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIDxjb2RlPi5odGFjY2VzczwvY29kZT4gZmlsZSBpcwpzdHJpcHBlZCBiZWZvcmUgbWF0Y2hpbmcgaW4KdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcmV3cml0ZS5odG1sI3Jld3JpdGVydWxlIj5SZXdyaXRlUnVsZTwvYT48L2NvZGU+LiBJbiBhZGRpdGlvbiwgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcmV3cml0ZS5odG1sI3Jld3JpdGViYXNlIj5SZXdyaXRlQmFzZTwvYT48L2NvZGU+IHNob3VsZCBiZSB1c2VkIHRvIGFzc3VyZSB0aGUgcmVxdWVzdCBpcyBwcm9wZXJseSBtYXBwZWQuPC9wPgoKPC9kaXY+PC9kaXY+CjxkaXYgY2xhc3M9ImJvdHRvbWxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi4vZW4vcmV3cml0ZS9pbnRyby5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vZnIvcmV3cml0ZS9pbnRyby5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiBhbHQ9InRvcCIgLz48L2E+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiI+PGgyPjxhIGlkPSJjb21tZW50c19zZWN0aW9uIiBuYW1lPSJjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2gyPjxkaXYgY2xhc3M9Indhcm5pbmciPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPjxiciAvPlRoaXMgaXMgbm90IGEgUSZhbXA7QSBzZWN0aW9uLiBDb21tZW50cyBwbGFjZWQgaGVyZSBzaG91bGQgYmUgcG9pbnRlZCB0b3dhcmRzIHN1Z2dlc3Rpb25zIG9uIGltcHJvdmluZyB0aGUgZG9jdW1lbnRhdGlvbiBvciBzZXJ2ZXIsIGFuZCBtYXkgYmUgcmVtb3ZlZCBhZ2FpbiBieSBvdXIgbW9kZXJhdG9ycyBpZiB0aGV5IGFyZSBlaXRoZXIgaW1wbGVtZW50ZWQgb3IgY29uc2lkZXJlZCBpbnZhbGlkL29mZi10b3BpYy4gUXVlc3Rpb25zIG9uIGhvdyB0byBtYW5hZ2UgdGhlIEFwYWNoZSBIVFRQIFNlcnZlciBzaG91bGQgYmUgZGlyZWN0ZWQgYXQgZWl0aGVyIG91ciBJUkMgY2hhbm5lbCwgI2h0dHBkLCBvbiBGcmVlbm9kZSwgb3Igc2VudCB0byBvdXIgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvbGlzdHMuaHRtbCI+bWFpbGluZyBsaXN0czwvYT4uPC9kaXY+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tLy8tLT48IVtDREFUQVsvLz48IS0tCnZhciBjb21tZW50c19zaG9ydG5hbWUgPSAnaHR0cGQnOwp2YXIgY29tbWVudHNfaWRlbnRpZmllciA9ICdodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzL3RydW5rL3Jld3JpdGUvaW50cm8uaHRtbCc7CihmdW5jdGlvbih3LCBkKSB7CiAgICBpZiAody5sb2NhdGlvbi5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpID09ICJodHRwZC5hcGFjaGUub3JnIikgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+PFwvZGl2PicpOwogICAgICAgIHZhciBzID0gZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBzLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBzLmFzeW5jID0gdHJ1ZTsKICAgICAgICBzLnNyYyA9ICdodHRwczovL2NvbW1lbnRzLmFwYWNoZS5vcmcvc2hvd19jb21tZW50cy5sdWE/c2l0ZT0nICsgY29tbWVudHNfc2hvcnRuYW1lICsgJyZwYWdlPScgKyBjb21tZW50c19pZGVudGlmaWVyOwogICAgICAgIChkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0gfHwgZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdKS5hcHBlbmRDaGlsZChzKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+Q29tbWVudHMgYXJlIGRpc2FibGVkIGZvciB0aGlzIHBhZ2UgYXQgdGhlIG1vbWVudC48XC9kaXY+Jyk7CiAgICB9Cn0pKHdpbmRvdywgZG9jdW1lbnQpOwovLy0tPjwhXV0+PC9zY3JpcHQ+PC9kaXY+PGRpdiBpZD0iZm9vdGVyIj4KPHAgY2xhc3M9ImFwYWNoZSI+Q29weXJpZ2h0IDIwMTYgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLjxiciAvPkxpY2Vuc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPkFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMDwvYT4uPC9wPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuLi9tb2QvcXVpY2tyZWZlcmVuY2UuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+PC9kaXY+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KaWYgKHR5cGVvZihwcmV0dHlQcmludCkgIT09ICd1bmRlZmluZWQnKSB7CiAgICBwcmV0dHlQcmludCgpOwp9Ci8vLS0+PCFdXT48L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=