PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5TdGFydGluZyBBcGFjaGUgLSBBcGFjaGUgSFRUUCBTZXJ2ZXIgVmVyc2lvbiAyLjU8L3RpdGxlPgo8bGluayBocmVmPSIuL3N0eWxlL2Nzcy9tYW51YWwuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTWFpbiBzdHlsZXNoZWV0IiAvPgo8bGluayBocmVmPSIuL3N0eWxlL2Nzcy9tYW51YWwtbG9vc2UtMTAwcGMuY3NzIiByZWw9ImFsdGVybmF0ZSBzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik5vIFNpZGViYXIgLSBEZWZhdWx0IGZvbnQgc2l6ZSIgLz4KPGxpbmsgaHJlZj0iLi9zdHlsZS9jc3MvbWFudWFsLXByaW50LmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0icHJpbnQiIHR5cGU9InRleHQvY3NzIiAvPjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4vc3R5bGUvY3NzL3ByZXR0aWZ5LmNzcyIgLz4KPHNjcmlwdCBzcmM9Ii4vc3R5bGUvc2NyaXB0cy9wcmV0dGlmeS5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cjwvc2NyaXB0PgoKPGxpbmsgaHJlZj0iLi9pbWFnZXMvZmF2aWNvbi5pY28iIHJlbD0ic2hvcnRjdXQgaWNvbiIgLz48L2hlYWQ+Cjxib2R5IGlkPSJtYW51YWwtcGFnZSI+PGRpdiBpZD0icGFnZS1oZWFkZXIiPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4vbW9kL3F1aWNrcmVmZXJlbmNlLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3dpa2kuYXBhY2hlLm9yZy9odHRwZC9GQVEiPkZBUTwvYT4gfCA8YSBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD4KPHAgY2xhc3M9ImFwYWNoZSI+QXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi41PC9wPgo8aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2ZlYXRoZXIucG5nIiAvPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ1cCI+PGEgaHJlZj0iLi8iPjxpbWcgdGl0bGU9IiZsdDstIiBhbHQ9IiZsdDstIiBzcmM9Ii4vaW1hZ2VzL2xlZnQuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBpZD0icGF0aCI+CjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iPkFwYWNoZTwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy8iPkhUVFAgU2VydmVyPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvIj5Eb2N1bWVudGF0aW9uPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4vIj5WZXJzaW9uIDIuNTwvYT48L2Rpdj48ZGl2IGlkPSJwYWdlLWNvbnRlbnQiPjxkaXYgaWQ9InByZWFtYmxlIj48aDE+U3RhcnRpbmcgQXBhY2hlPC9oMT4KPGRpdiBjbGFzcz0idG9wbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuL2RlL2ludm9raW5nLmh0bWwiIGhyZWZsYW5nPSJkZSIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJEZXV0c2NoIj4mbmJzcDtkZSZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2VuL2ludm9raW5nLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2VzL2ludm9raW5nLmh0bWwiIGhyZWZsYW5nPSJlcyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJFc3Bh8W9sIj4mbmJzcDtlcyZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2ZyL2ludm9raW5nLmh0bWwiIGhyZWZsYW5nPSJmciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJGcmFu52FpcyI+Jm5ic3A7ZnImbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9qYS9pbnZva2luZy5odG1sIiBocmVmbGFuZz0iamEiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iSmFwYW5lc2UiPiZuYnNwO2phJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4va28vaW52b2tpbmcuaHRtbCIgaHJlZmxhbmc9ImtvIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IktvcmVhbiI+Jm5ic3A7a28mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi90ci9pbnZva2luZy5odG1sIiBocmVmbGFuZz0idHIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iVPxya+dlIj4mbmJzcDt0ciZuYnNwOzwvYT48L3A+CjwvZGl2PgoKICAgIDxwPk9uIFdpbmRvd3MsIEFwYWNoZSBpcyBub3JtYWxseSBydW4gYXMgYSBzZXJ2aWNlLgogICAgRm9yIGRldGFpbHMsIHNlZSA8YSBocmVmPSJwbGF0Zm9ybS93aW5kb3dzLmh0bWwjd2luc3ZjIj5SdW5uaW5nIEFwYWNoZSBhcyBhIFNlcnZpY2U8L2E+LgogICAgPC9wPgoKICAgIDxwPk9uIFVuaXgsIHRoZSA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi9wcm9ncmFtcy9odHRwZC5odG1sIj5odHRwZDwvYT48L2NvZGU+IHByb2dyYW0KICAgIGlzIHJ1biBhcyBhIGRhZW1vbiB0aGF0IGV4ZWN1dGVzIGNvbnRpbnVvdXNseSBpbiB0aGUKICAgIGJhY2tncm91bmQgdG8gaGFuZGxlIHJlcXVlc3RzLiAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgaG93CiAgICB0byBpbnZva2UgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4vcHJvZ3JhbXMvaHR0cGQuaHRtbCI+aHR0cGQ8L2E+PC9jb2RlPi48L3A+CjwvZGl2Pgo8ZGl2IGlkPSJxdWlja3ZpZXciPjx1bCBpZD0idG9jIj48bGk+PGltZyBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3N0YXJ0dXAiPkhvdyBBcGFjaGUgU3RhcnRzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZXJyb3JzIj5FcnJvcnMgRHVyaW5nIFN0YXJ0LXVwPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjYm9vdCI+U3RhcnRpbmcgYXQgQm9vdC1UaW1lPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjaW5mbyI+QWRkaXRpb25hbCBJbmZvcm1hdGlvbjwvYT48L2xpPgo8L3VsPjxoMz5TZWUgYWxzbzwvaDM+PHVsIGNsYXNzPSJzZWVhbHNvIj48bGk+PGEgaHJlZj0ic3RvcHBpbmcuaHRtbCI+U3RvcHBpbmcgYW5kIFJlc3RhcnRpbmc8L2E+PC9saT48bGk+PGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4vcHJvZ3JhbXMvaHR0cGQuaHRtbCI+aHR0cGQ8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuL3Byb2dyYW1zL2FwYWNoZWN0bC5odG1sIj5hcGFjaGVjdGw8L2E+PC9jb2RlPjwvbGk+PGxpPjxhIGhyZWY9IiNjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2xpPjwvdWw+PC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0ic3RhcnR1cCIgaWQ9InN0YXJ0dXAiPkhvdyBBcGFjaGUgU3RhcnRzPC9hPjwvaDI+CgogICAgPHA+SWYgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21wbV9jb21tb24uaHRtbCNsaXN0ZW4iPkxpc3RlbjwvYT48L2NvZGU+CiAgICBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBkZWZhdWx0IG9mIDgwIChvciBhbnkgb3RoZXIKICAgIHBvcnQgYmVsb3cgMTAyNCksIHRoZW4gaXQgaXMgbmVjZXNzYXJ5IHRvIGhhdmUgcm9vdCBwcml2aWxlZ2VzIGluCiAgICBvcmRlciB0byBzdGFydCBhcGFjaGUsIHNvIHRoYXQgaXQgY2FuIGJpbmQgdG8gdGhpcyBwcml2aWxlZ2VkCiAgICBwb3J0LiBPbmNlIHRoZSBzZXJ2ZXIgaGFzIHN0YXJ0ZWQgYW5kIHBlcmZvcm1lZCBhIGZldyBwcmVsaW1pbmFyeQogICAgYWN0aXZpdGllcyBzdWNoIGFzIG9wZW5pbmcgaXRzIGxvZyBmaWxlcywgaXQgd2lsbCBsYXVuY2ggc2V2ZXJhbAogICAgPGVtPmNoaWxkPC9lbT4gcHJvY2Vzc2VzIHdoaWNoIGRvIHRoZSB3b3JrIG9mIGxpc3RlbmluZyBmb3IgYW5kCiAgICBhbnN3ZXJpbmcgcmVxdWVzdHMgZnJvbSBjbGllbnRzLiBUaGUgbWFpbiA8Y29kZT5odHRwZDwvY29kZT4KICAgIHByb2Nlc3MgY29udGludWVzIHRvIHJ1biBhcyB0aGUgcm9vdCB1c2VyLCBidXQgdGhlIGNoaWxkIHByb2Nlc3NlcwogICAgcnVuIGFzIGEgbGVzcyBwcml2aWxlZ2VkIHVzZXIuIFRoaXMgaXMgY29udHJvbGxlZCBieSB0aGUgc2VsZWN0ZWQKICAgIDxhIGhyZWY9Im1wbS5odG1sIj5NdWx0aS1Qcm9jZXNzaW5nIE1vZHVsZTwvYT4uPC9wPgoKICAgIDxwPlRoZSByZWNvbW1lbmRlZCBtZXRob2Qgb2YgaW52b2tpbmcgdGhlIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuL3Byb2dyYW1zL2h0dHBkLmh0bWwiPmh0dHBkPC9hPjwvY29kZT4KICAgIGV4ZWN1dGFibGUgaXMgdG8gdXNlIHRoZSA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi9wcm9ncmFtcy9hcGFjaGVjdGwuaHRtbCI+YXBhY2hlY3RsPC9hPjwvY29kZT4gY29udHJvbCBzY3JpcHQuIFRoaXMKICAgIHNjcmlwdCBzZXRzIGNlcnRhaW4gZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgYXJlIG5lY2Vzc2FyeSBmb3IKICAgIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuL3Byb2dyYW1zL2h0dHBkLmh0bWwiPmh0dHBkPC9hPjwvY29kZT4gdG8gZnVuY3Rpb24gY29ycmVjdGx5IHVuZGVyIHNvbWUgb3BlcmF0aW5nCiAgICBzeXN0ZW1zLCBhbmQgdGhlbiBpbnZva2VzIHRoZSA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi9wcm9ncmFtcy9odHRwZC5odG1sIj5odHRwZDwvYT48L2NvZGU+IGJpbmFyeS4KICAgIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuL3Byb2dyYW1zL2FwYWNoZWN0bC5odG1sIj5hcGFjaGVjdGw8L2E+PC9jb2RlPiB3aWxsIHBhc3MgdGhyb3VnaCBhbnkgY29tbWFuZCBsaW5lCiAgICBhcmd1bWVudHMsIHNvIGFueSA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi9wcm9ncmFtcy9odHRwZC5odG1sIj5odHRwZDwvYT48L2NvZGU+IG9wdGlvbnMgbWF5IGFsc28gYmUgdXNlZCB3aXRoCiAgICA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi9wcm9ncmFtcy9hcGFjaGVjdGwuaHRtbCI+YXBhY2hlY3RsPC9hPjwvY29kZT4uICBZb3UgbWF5IGFsc28gZGlyZWN0bHkgZWRpdCB0aGUKICAgIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuL3Byb2dyYW1zL2FwYWNoZWN0bC5odG1sIj5hcGFjaGVjdGw8L2E+PC9jb2RlPiBzY3JpcHQgYnkgY2hhbmdpbmcgdGhlIDxjb2RlPkhUVFBEPC9jb2RlPgogICAgdmFyaWFibGUgbmVhciB0aGUgdG9wIHRvIHNwZWNpZnkgdGhlIGNvcnJlY3QgbG9jYXRpb24gb2YgdGhlCiAgICA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi9wcm9ncmFtcy9odHRwZC5odG1sIj5odHRwZDwvYT48L2NvZGU+IGJpbmFyeSBhbmQgYW55IGNvbW1hbmQtbGluZSBhcmd1bWVudHMgdGhhdCB5b3UKICAgIHdpc2ggdG8gYmUgPGVtPmFsd2F5czwvZW0+IHByZXNlbnQuPC9wPgoKICAgIDxwPlRoZSBmaXJzdCB0aGluZyB0aGF0IDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuL3Byb2dyYW1zL2h0dHBkLmh0bWwiPmh0dHBkPC9hPjwvY29kZT4gZG9lcyB3aGVuIGl0IGlzCiAgICBpbnZva2VkIGlzIHRvIGxvY2F0ZSBhbmQgcmVhZCB0aGUgPGEgaHJlZj0iY29uZmlndXJpbmcuaHRtbCI+Y29uZmlndXJhdGlvbiBmaWxlPC9hPgogICAgPGNvZGU+aHR0cGQuY29uZjwvY29kZT4uIFRoZSBsb2NhdGlvbiBvZiB0aGlzIGZpbGUgaXMgc2V0IGF0CiAgICBjb21waWxlLXRpbWUsIGJ1dCBpdCBpcyBwb3NzaWJsZSB0byBzcGVjaWZ5IGl0cyBsb2NhdGlvbiBhdCBydW4KICAgIHRpbWUgdXNpbmcgdGhlIDxjb2RlPi1mPC9jb2RlPiBjb21tYW5kLWxpbmUgb3B0aW9uIGFzIGluPC9wPgoKPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+L3Vzci9sb2NhbC9hcGFjaGUyL2Jpbi9hcGFjaGVjdGwgLWYKICAgICAgL3Vzci9sb2NhbC9hcGFjaGUyL2NvbmYvaHR0cGQuY29uZjwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+SWYgYWxsIGdvZXMgd2VsbCBkdXJpbmcgc3RhcnR1cCwgdGhlIHNlcnZlciB3aWxsIGRldGFjaCBmcm9tCiAgICB0aGUgdGVybWluYWwgYW5kIHRoZSBjb21tYW5kIHByb21wdCB3aWxsIHJldHVybiBhbG1vc3QKICAgIGltbWVkaWF0ZWx5LiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBzZXJ2ZXIgaXMgdXAgYW5kIHJ1bm5pbmcuCiAgICBZb3UgY2FuIHRoZW4gdXNlIHlvdXIgYnJvd3NlciB0byBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIgYW5kIHZpZXcKICAgIHRoZSB0ZXN0IHBhZ2UgaW4gdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCNkb2N1bWVudHJvb3QiPkRvY3VtZW50Um9vdDwvYT48L2NvZGU+IGRpcmVjdG9yeS48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iZXJyb3JzIiBpZD0iZXJyb3JzIj5FcnJvcnMgRHVyaW5nIFN0YXJ0LXVwPC9hPjwvaDI+CgogICAgPHA+SWYgQXBhY2hlIHN1ZmZlcnMgYSBmYXRhbCBwcm9ibGVtIGR1cmluZyBzdGFydHVwLCBpdCB3aWxsCiAgICB3cml0ZSBhIG1lc3NhZ2UgZGVzY3JpYmluZyB0aGUgcHJvYmxlbSBlaXRoZXIgdG8gdGhlIGNvbnNvbGUgb3IKICAgIHRvIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9jb3JlLmh0bWwjZXJyb3Jsb2ciPkVycm9yTG9nPC9hPjwvY29kZT4gYmVmb3JlCiAgICBleGl0aW5nLiBPbmUgb2YgdGhlIG1vc3QgY29tbW9uIGVycm9yIG1lc3NhZ2VzIGlzICI8Y29kZT5VbmFibGUKICAgIHRvIGJpbmQgdG8gUG9ydCAuLi48L2NvZGU+Ii4gVGhpcyBtZXNzYWdlIGlzIHVzdWFsbHkgY2F1c2VkIGJ5CiAgICBlaXRoZXI6PC9wPgoKICAgIDx1bD4KICAgICAgPGxpPlRyeWluZyB0byBzdGFydCB0aGUgc2VydmVyIG9uIGEgcHJpdmlsZWdlZCBwb3J0IHdoZW4gbm90CiAgICAgIGxvZ2dlZCBpbiBhcyB0aGUgcm9vdCB1c2VyOyBvcjwvbGk+CgogICAgICA8bGk+VHJ5aW5nIHRvIHN0YXJ0IHRoZSBzZXJ2ZXIgd2hlbiB0aGVyZSBpcyBhbm90aGVyIGluc3RhbmNlCiAgICAgIG9mIEFwYWNoZSBvciBzb21lIG90aGVyIHdlYiBzZXJ2ZXIgYWxyZWFkeSBib3VuZCB0byB0aGUgc2FtZQogICAgICBQb3J0LjwvbGk+CiAgICA8L3VsPgoKICAgIDxwPkZvciBmdXJ0aGVyIHRyb3VibGUtc2hvb3RpbmcgaW5zdHJ1Y3Rpb25zLCBjb25zdWx0IHRoZQogICAgQXBhY2hlIDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+LjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJib290IiBpZD0iYm9vdCI+U3RhcnRpbmcgYXQgQm9vdC1UaW1lPC9hPjwvaDI+CgogICAgPHA+SWYgeW91IHdhbnQgeW91ciBzZXJ2ZXIgdG8gY29udGludWUgcnVubmluZyBhZnRlciBhIHN5c3RlbQogICAgcmVib290LCB5b3Ugc2hvdWxkIGFkZCBhIGNhbGwgdG8gPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4vcHJvZ3JhbXMvYXBhY2hlY3RsLmh0bWwiPmFwYWNoZWN0bDwvYT48L2NvZGU+IHRvIHlvdXIKICAgIHN5c3RlbSBzdGFydHVwIGZpbGVzICh0eXBpY2FsbHkgPGNvZGU+cmMubG9jYWw8L2NvZGU+IG9yIGEgZmlsZSBpbgogICAgYW4gPGNvZGU+cmMuTjwvY29kZT4gZGlyZWN0b3J5KS4gVGhpcyB3aWxsIHN0YXJ0IEFwYWNoZSBhcwogICAgcm9vdC4gQmVmb3JlIGRvaW5nIHRoaXMgZW5zdXJlIHRoYXQgeW91ciBzZXJ2ZXIgaXMgcHJvcGVybHkKICAgIGNvbmZpZ3VyZWQgZm9yIHNlY3VyaXR5IGFuZCBhY2Nlc3MgcmVzdHJpY3Rpb25zLjwvcD4KCiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4vcHJvZ3JhbXMvYXBhY2hlY3RsLmh0bWwiPmFwYWNoZWN0bDwvYT48L2NvZGU+IHNjcmlwdCBpcyBkZXNpZ25lZCB0byBhY3QgbGlrZSBhCiAgICBzdGFuZGFyZCBTeXNWIGluaXQgc2NyaXB0OyBpdCBjYW4gdGFrZSB0aGUgYXJndW1lbnRzCiAgICA8Y29kZT5zdGFydDwvY29kZT4sIDxjb2RlPnJlc3RhcnQ8L2NvZGU+LCBhbmQgPGNvZGU+c3RvcDwvY29kZT4KICAgIGFuZCB0cmFuc2xhdGUgdGhlbSBpbnRvIHRoZSBhcHByb3ByaWF0ZSBzaWduYWxzIHRvCiAgICA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi9wcm9ncmFtcy9odHRwZC5odG1sIj5odHRwZDwvYT48L2NvZGU+LiAgU28geW91IGNhbiBvZnRlbiBzaW1wbHkgbGluawogICAgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4vcHJvZ3JhbXMvYXBhY2hlY3RsLmh0bWwiPmFwYWNoZWN0bDwvYT48L2NvZGU+IGludG8gdGhlIGFwcHJvcHJpYXRlIGluaXQgZGlyZWN0b3J5LiBCdXQgYmUKICAgIHN1cmUgdG8gY2hlY2sgdGhlIGV4YWN0IHJlcXVpcmVtZW50cyBvZiB5b3VyIHN5c3RlbS48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iaW5mbyIgaWQ9ImluZm8iPkFkZGl0aW9uYWwgSW5mb3JtYXRpb248L2E+PC9oMj4KCiAgICA8cD5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBvZiA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi9wcm9ncmFtcy9odHRwZC5odG1sIj5odHRwZDwvYT48L2NvZGU+IGFuZCA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi9wcm9ncmFtcy9hcGFjaGVjdGwuaHRtbCI+YXBhY2hlY3RsPC9hPjwvY29kZT4gYXMgd2VsbCBhcyBvdGhlciBzdXBwb3J0CiAgICBwcm9ncmFtcyBpbmNsdWRlZCB3aXRoIHRoZSBzZXJ2ZXIgaXMgYXZhaWxhYmxlIG9uIHRoZQogICAgPGEgaHJlZj0icHJvZ3JhbXMvIj5TZXJ2ZXIgYW5kIFN1cHBvcnRpbmcgUHJvZ3JhbXM8L2E+IHBhZ2UuCiAgICBUaGVyZSBpcyBhbHNvIGRvY3VtZW50YXRpb24gb24gYWxsIHRoZSA8YSBocmVmPSJtb2QvIj5tb2R1bGVzPC9hPiBpbmNsdWRlZCB3aXRoIHRoZSBBcGFjaGUgZGlzdHJpYnV0aW9uCiAgICBhbmQgdGhlIDxhIGhyZWY9Im1vZC9kaXJlY3RpdmVzLmh0bWwiPmRpcmVjdGl2ZXM8L2E+IHRoYXQgdGhleQogICAgcHJvdmlkZS48L3A+CjwvZGl2PjwvZGl2Pgo8ZGl2IGNsYXNzPSJib3R0b21sYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4vZGUvaW52b2tpbmcuaHRtbCIgaHJlZmxhbmc9ImRlIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkRldXRzY2giPiZuYnNwO2RlJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vZW4vaW52b2tpbmcuaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vZXMvaW52b2tpbmcuaHRtbCIgaHJlZmxhbmc9ImVzIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkVzcGHxb2wiPiZuYnNwO2VzJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vZnIvaW52b2tpbmcuaHRtbCIgaHJlZmxhbmc9ImZyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2phL2ludm9raW5nLmh0bWwiIGhyZWZsYW5nPSJqYSIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJKYXBhbmVzZSI+Jm5ic3A7amEmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9rby9pbnZva2luZy5odG1sIiBocmVmbGFuZz0ia28iIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iS29yZWFuIj4mbmJzcDtrbyZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL3RyL2ludm9raW5nLmh0bWwiIGhyZWZsYW5nPSJ0ciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJU/HJr52UiPiZuYnNwO3RyJm5ic3A7PC9hPjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgc3JjPSIuL2ltYWdlcy91cC5naWYiIGFsdD0idG9wIiAvPjwvYT48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDI+PGEgaWQ9ImNvbW1lbnRzX3NlY3Rpb24iIG5hbWU9ImNvbW1lbnRzX3NlY3Rpb24iPkNvbW1lbnRzPC9hPjwvaDI+PGRpdiBjbGFzcz0id2FybmluZyI+PHN0cm9uZz5Ob3RpY2U6PC9zdHJvbmc+PGJyIC8+VGhpcyBpcyBub3QgYSBRJmFtcDtBIHNlY3Rpb24uIENvbW1lbnRzIHBsYWNlZCBoZXJlIHNob3VsZCBiZSBwb2ludGVkIHRvd2FyZHMgc3VnZ2VzdGlvbnMgb24gaW1wcm92aW5nIHRoZSBkb2N1bWVudGF0aW9uIG9yIHNlcnZlciwgYW5kIG1heSBiZSByZW1vdmVkIGFnYWluIGJ5IG91ciBtb2RlcmF0b3JzIGlmIHRoZXkgYXJlIGVpdGhlciBpbXBsZW1lbnRlZCBvciBjb25zaWRlcmVkIGludmFsaWQvb2ZmLXRvcGljLiBRdWVzdGlvbnMgb24gaG93IHRvIG1hbmFnZSB0aGUgQXBhY2hlIEhUVFAgU2VydmVyIHNob3VsZCBiZSBkaXJlY3RlZCBhdCBlaXRoZXIgb3VyIElSQyBjaGFubmVsLCAjaHR0cGQsIG9uIEZyZWVub2RlLCBvciBzZW50IHRvIG91ciA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9saXN0cy5odG1sIj5tYWlsaW5nIGxpc3RzPC9hPi48L2Rpdj4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KdmFyIGNvbW1lbnRzX3Nob3J0bmFtZSA9ICdodHRwZCc7CnZhciBjb21tZW50c19pZGVudGlmaWVyID0gJ2h0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvdHJ1bmsvaW52b2tpbmcuaHRtbCc7CihmdW5jdGlvbih3LCBkKSB7CiAgICBpZiAody5sb2NhdGlvbi5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpID09ICJodHRwZC5hcGFjaGUub3JnIikgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+PFwvZGl2PicpOwogICAgICAgIHZhciBzID0gZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBzLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBzLmFzeW5jID0gdHJ1ZTsKICAgICAgICBzLnNyYyA9ICdodHRwczovL2NvbW1lbnRzLmFwYWNoZS5vcmcvc2hvd19jb21tZW50cy5sdWE/c2l0ZT0nICsgY29tbWVudHNfc2hvcnRuYW1lICsgJyZwYWdlPScgKyBjb21tZW50c19pZGVudGlmaWVyOwogICAgICAgIChkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0gfHwgZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdKS5hcHBlbmRDaGlsZChzKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+Q29tbWVudHMgYXJlIGRpc2FibGVkIGZvciB0aGlzIHBhZ2UgYXQgdGhlIG1vbWVudC48XC9kaXY+Jyk7CiAgICB9Cn0pKHdpbmRvdywgZG9jdW1lbnQpOwovLy0tPjwhXV0+PC9zY3JpcHQ+PC9kaXY+PGRpdiBpZD0iZm9vdGVyIj4KPHAgY2xhc3M9ImFwYWNoZSI+Q29weXJpZ2h0IDIwMTYgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLjxiciAvPkxpY2Vuc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPkFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMDwvYT4uPC9wPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4vbW9kL3F1aWNrcmVmZXJlbmNlLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3dpa2kuYXBhY2hlLm9yZy9odHRwZC9GQVEiPkZBUTwvYT4gfCA8YSBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD48L2Rpdj48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQppZiAodHlwZW9mKHByZXR0eVByaW50KSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgIHByZXR0eVByaW50KCk7Cn0KLy8tLT48IV1dPjwvc2NyaXB0Pgo8L2JvZHk+PC9odG1sPg==