PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5HZXR0aW5nIFN0YXJ0ZWQgLSBBcGFjaGUgSFRUUCBTZXJ2ZXIgVmVyc2lvbiAyLjU8L3RpdGxlPgo8bGluayBocmVmPSIuL3N0eWxlL2Nzcy9tYW51YWwuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTWFpbiBzdHlsZXNoZWV0IiAvPgo8bGluayBocmVmPSIuL3N0eWxlL2Nzcy9tYW51YWwtbG9vc2UtMTAwcGMuY3NzIiByZWw9ImFsdGVybmF0ZSBzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik5vIFNpZGViYXIgLSBEZWZhdWx0IGZvbnQgc2l6ZSIgLz4KPGxpbmsgaHJlZj0iLi9zdHlsZS9jc3MvbWFudWFsLXByaW50LmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0icHJpbnQiIHR5cGU9InRleHQvY3NzIiAvPjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4vc3R5bGUvY3NzL3ByZXR0aWZ5LmNzcyIgLz4KPHNjcmlwdCBzcmM9Ii4vc3R5bGUvc2NyaXB0cy9wcmV0dGlmeS5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cjwvc2NyaXB0PgoKPGxpbmsgaHJlZj0iLi9pbWFnZXMvZmF2aWNvbi5pY28iIHJlbD0ic2hvcnRjdXQgaWNvbiIgLz48L2hlYWQ+Cjxib2R5IGlkPSJtYW51YWwtcGFnZSI+PGRpdiBpZD0icGFnZS1oZWFkZXIiPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4vbW9kL3F1aWNrcmVmZXJlbmNlLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3dpa2kuYXBhY2hlLm9yZy9odHRwZC9GQVEiPkZBUTwvYT4gfCA8YSBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD4KPHAgY2xhc3M9ImFwYWNoZSI+QXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi41PC9wPgo8aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2ZlYXRoZXIucG5nIiAvPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ1cCI+PGEgaHJlZj0iLi8iPjxpbWcgdGl0bGU9IiZsdDstIiBhbHQ9IiZsdDstIiBzcmM9Ii4vaW1hZ2VzL2xlZnQuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBpZD0icGF0aCI+CjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iPkFwYWNoZTwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy8iPkhUVFAgU2VydmVyPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvIj5Eb2N1bWVudGF0aW9uPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4vIj5WZXJzaW9uIDIuNTwvYT48L2Rpdj48ZGl2IGlkPSJwYWdlLWNvbnRlbnQiPjxkaXYgaWQ9InByZWFtYmxlIj48aDE+R2V0dGluZyBTdGFydGVkPC9oMT4KPGRpdiBjbGFzcz0idG9wbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuL2VuL2dldHRpbmctc3RhcnRlZC5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9mci9nZXR0aW5nLXN0YXJ0ZWQuaHRtbCIgaHJlZmxhbmc9ImZyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT48L3A+CjwvZGl2PgoKPHA+SWYgeW91J3JlIGNvbXBsZXRlbHkgbmV3IHRvIHRoZSBBcGFjaGUgSFRUUCBTZXJ2ZXIsIG9yIGV2ZW4gdG8gcnVubmluZwphIHdlYnNpdGUgYXQgYWxsLCB5b3UgbWlnaHQgbm90IGtub3cgd2hlcmUgdG8gc3RhcnQsIG9yIHdoYXQgcXVlc3Rpb25zIHRvCmFzay4gVGhpcyBkb2N1bWVudCB3YWxrcyB5b3UgdGhyb3VnaCB0aGUgYmFzaWNzLjwvcD4KPC9kaXY+CjxkaXYgaWQ9InF1aWNrdmlldyI+PHVsIGlkPSJ0b2MiPjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjY2xpZW50c2VydmVyIj5DbGllbnRzLCBTZXJ2ZXJzLCBhbmQgVVJMczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2RucyI+SG9zdG5hbWVzIGFuZCBETlM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNjb25maWd1cmF0aW9uIj5Db25maWd1cmF0aW9uIEZpbGVzIGFuZCBEaXJlY3RpdmVzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjY29udGVudCI+V2ViIFNpdGUgQ29udGVudDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2xvZ3MiPkxvZyBGaWxlcyBhbmQgVHJvdWJsZXNob290aW5nPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjb3RoZXIiPldoYXQncyBuZXh0PzwvYT48L2xpPgo8L3VsPjxoMz5TZWUgYWxzbzwvaDM+PHVsIGNsYXNzPSJzZWVhbHNvIj48bGk+PGEgaHJlZj0iI2NvbW1lbnRzX3NlY3Rpb24iPkNvbW1lbnRzPC9hPjwvbGk+PC91bD48L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJjbGllbnRzZXJ2ZXIiIGlkPSJjbGllbnRzZXJ2ZXIiPkNsaWVudHMsIFNlcnZlcnMsIGFuZCBVUkxzPC9hPjwvaDI+CgoKPHA+CkFkZHJlc3NlcyBvbiB0aGUgV2ViIGFyZSBleHByZXNzZWQgd2l0aCBVUkxzIC0gVW5pZm9ybSBSZXNvdXJjZSBMb2NhdG9ycwotIHdoaWNoIHNwZWNpZnkgYSBwcm90b2NvbCAoZS5nLiA8Y29kZT5odHRwPC9jb2RlPiksIGEgc2VydmVybmFtZSAoZS5nLgo8Y29kZT53d3cuYXBhY2hlLm9yZzwvY29kZT4pLCBhIFVSTC1wYXRoIChlLmcuCjxjb2RlPi9kb2NzL2N1cnJlbnQvZ2V0dGluZy1zdGFydGVkLmh0bWw8L2NvZGU+KSwgYW5kIHBvc3NpYmx5IGEgcXVlcnkKc3RyaW5nIChlLmcuIDxjb2RlPj9hcmc9dmFsdWU8L2NvZGU+KSB1c2VkIHRvIHBhc3MgYWRkaXRpb25hbAphcmd1bWVudHMgdG8gdGhlIHNlcnZlci4KPC9wPgoKPHA+QSBjbGllbnQgKGUuZy4sIGEgd2ViIGJyb3dzZXIpIGNvbm5lY3RzIHRvIGEgc2VydmVyIChlLmcuLCB5b3VyIEFwYWNoZSBIVFRQIFNlcnZlciksCndpdGggdGhlIHNwZWNpZmllZCBwcm90b2NvbCwgYW5kIG1ha2VzIGEgPHN0cm9uZz5yZXF1ZXN0PC9zdHJvbmc+IGZvciBhIHJlc291cmNlIHVzaW5nIHRoZQpVUkwtcGF0aC48L3A+Cgo8cD5UaGUgVVJMLXBhdGggbWF5IHJlcHJlc2VudCBhbnkgbnVtYmVyIG9mIHRoaW5ncyBvbiB0aGUgc2VydmVyLiBJdCBtYXkKYmUgYSBmaWxlIChsaWtlIDxjb2RlPmdldHRpbmctc3RhcnRlZC5odG1sPC9jb2RlPikgYSBoYW5kbGVyIChsaWtlIDxhIGhyZWY9Im1vZC9tb2Rfc3RhdHVzLmh0bWwiPnNlcnZlci1zdGF0dXM8L2E+KSBvciBzb21lIGtpbmQgb2YgcHJvZ3JhbQpmaWxlIChsaWtlIDxjb2RlPmluZGV4LnBocDwvY29kZT4pLiBXZSdsbCBkaXNjdXNzIHRoaXMgbW9yZSBiZWxvdyBpbgp0aGUgPGEgaHJlZj0iI2NvbnRlbnQiPldlYiBTaXRlIENvbnRlbnQ8L2E+IHNlY3Rpb24uPC9wPgoKPHA+ClRoZSBzZXJ2ZXIgd2lsbCBzZW5kIGEgPHN0cm9uZz5yZXNwb25zZTwvc3Ryb25nPiBjb25zaXN0aW5nIG9mIGEgc3RhdHVzCmNvZGUgYW5kLCBvcHRpb25hbGx5LCBhIHJlc3BvbnNlIGJvZHkuClRoZSBzdGF0dXMgY29kZSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bCwgYW5kLCBpZiBub3QsIHdoYXQKa2luZCBvZiBlcnJvciBjb25kaXRpb24gdGhlcmUgd2FzLiBUaGlzIHRlbGxzIHRoZSBjbGllbnQgd2hhdCBpdCBzaG91bGQKZG8gd2l0aCB0aGUgcmVzcG9uc2UuIFlvdSBjYW4gcmVhZCBhYm91dCB0aGUgcG9zc2libGUgcmVzcG9uc2UgY29kZXMgaW4KPGEgaHJlZj0iaHR0cDovL3dpa2kuYXBhY2hlLm9yZy9odHRwZC9Db21tb25IVFRQU3RhdHVzQ29kZXMiPkhUVFAgU2VydmVyCndpa2k8L2E+LjwvcD4KCjxwPkRldGFpbHMgb2YgdGhlIHRyYW5zYWN0aW9uLCBhbmQgYW55IGVycm9yIGNvbmRpdGlvbnMsIGFyZSB3cml0dGVuIHRvCmxvZyBmaWxlcy4gVGhpcyBpcyBkaXNjdXNzZWQgaW4gZ3JlYXRlciBkZXRhaWwgYmVsb3cgaW4gdGhlIDxhIGhyZWY9IiNsb2dzIj5Mb2dzIEZpbGVzIGFuZCBUcm91Ymxlc2hvb3Rpbmc8L2E+IHNlY3Rpb24uPC9wPgoKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJkbnMiIGlkPSJkbnMiPkhvc3RuYW1lcyBhbmQgRE5TPC9hPjwvaDI+CgoKPHA+SW4gb3JkZXIgdG8gY29ubmVjdCB0byBhIHNlcnZlciwgdGhlIGNsaWVudCB3aWxsIGZpcnN0IGhhdmUgdG8gcmVzb2x2ZQp0aGUgc2VydmVybmFtZSB0byBhbiBJUCBhZGRyZXNzIC0gdGhlIGxvY2F0aW9uIG9uIHRoZSBJbnRlcm5ldCB3aGVyZSB0aGUKc2VydmVyIHJlc2lkZXMuIFRodXMsIGluIG9yZGVyIGZvciB5b3VyIHdlYiBzZXJ2ZXIgdG8gYmUgcmVhY2hhYmxlLCBpdAppcyBuZWNlc3NhcnkgdGhhdCB0aGUgc2VydmVybmFtZSBiZSBpbiBETlMuPC9wPgoKPHA+SWYgeW91IGRvbid0IGtub3cgaG93IHRvIGRvIHRoaXMsIHlvdSdsbCBuZWVkIHRvIGNvbnRhY3QgeW91ciBuZXR3b3JrCmFkbWluaXN0cmF0b3IsIG9yIEludGVybmV0IHNlcnZpY2UgcHJvdmlkZXIsIHRvIHBlcmZvcm0gdGhpcyBzdGVwIGZvcgp5b3UuPC9wPgoKPHA+TW9yZSB0aGFuIG9uZSBob3N0bmFtZSBtYXkgcG9pbnQgdG8gdGhlIHNhbWUgSVAgYWRkcmVzcywgYW5kIG1vcmUKdGhhbiBvbmUgSVAgYWRkcmVzcyBjYW4gYmUgYXR0YWNoZWQgdG8gdGhlIHNhbWUgcGh5c2ljYWwgc2VydmVyLiBUaHVzLCB5b3UKY2FuIHJ1biBtb3JlIHRoYW4gb25lIHdlYiBzaXRlIG9uIHRoZSBzYW1lIHBoeXNpY2FsIHNlcnZlciwgdXNpbmcgYQpmZWF0dXJlIGNhbGxlZCA8YSBocmVmPSJ2aG9zdHMvIj52aXJ0dWFsIGhvc3RzPC9hPi48L3A+Cgo8cD5JZiB5b3UgYXJlIHRlc3RpbmcgYSBzZXJ2ZXIgdGhhdCBpcyBub3QgSW50ZXJuZXQtYWNjZXNzaWJsZSwgeW91CmNhbiBwdXQgaG9zdCBuYW1lcyBpbiB5b3VyIGhvc3RzIGZpbGUgaW4gb3JkZXIgdG8gZG8gbG9jYWwgcmVzb2x1dGlvbi4KRm9yIGV4YW1wbGUsIHlvdSBtaWdodCB3YW50IHRvIHB1dCBhIHJlY29yZCBpbiB5b3VyIGhvc3RzIGZpbGUgdG8gbWFwIGEKcmVxdWVzdCBmb3IgPGNvZGU+d3d3LmV4YW1wbGUuY29tPC9jb2RlPiB0byB5b3VyIGxvY2FsIHN5c3RlbSwgZm9yCnRlc3RpbmcgcHVycG9zZXMuIFRoaXMgZW50cnkgd291bGQgbG9vayBsaWtlOjwvcD4KCjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgoxMjcuMC4wLjEgd3d3LmV4YW1wbGUuY29tCjwvY29kZT48L3A+PC9kaXY+Cgo8cD5BIGhvc3RzIGZpbGUgd2lsbCBwcm9iYWJseSBiZSBsb2NhdGVkIGF0IDxjb2RlPi9ldGMvaG9zdHM8L2NvZGU+IG9yCjxjb2RlPkM6XFdpbmRvd3Ncc3lzdGVtMzJcZHJpdmVyc1xldGNcaG9zdHM8L2NvZGU+LjwvcD4KCjxwPllvdSBjYW4gcmVhZCBtb3JlIGFib3V0IHRoZSBob3N0cyBmaWxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSG9zdHNfKGZpbGUpIj5XaWtpcGVkaWEub3JnL3dpa2kvSG9zdHNfKGZpbGUpPC9hPiwgYW5kCm1vcmUgYWJvdXQgRE5TIGF0IDxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRG9tYWluX05hbWVfU3lzdGVtIj5XaWtpcGVkaWEub3JnL3dpa2kvRG9tYWluX05hbWVfU3lzdGVtPC9hPi48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iY29uZmlndXJhdGlvbiIgaWQ9ImNvbmZpZ3VyYXRpb24iPkNvbmZpZ3VyYXRpb24gRmlsZXMgYW5kIERpcmVjdGl2ZXM8L2E+PC9oMj4KCgo8cD5UaGUgQXBhY2hlIEhUVFAgU2VydmVyIGlzIGNvbmZpZ3VyZWQgdmlhIHNpbXBsZSB0ZXh0IGZpbGVzLgpUaGVzZSBmaWxlcyBtYXkgYmUgbG9jYXRlZCBhbnkgb2YgYSB2YXJpZXR5IG9mIHBsYWNlcywgZGVwZW5kaW5nIG9uIGhvdwpleGFjdGx5IHlvdSBpbnN0YWxsZWQgdGhlIHNlcnZlci4gQ29tbW9uIGxvY2F0aW9ucyBmb3IgdGhlc2UgZmlsZXMgbWF5CmJlIGZvdW5kIDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRGlzdHJvc0RlZmF1bHRMYXlvdXQiPmluCnRoZSBodHRwZCB3aWtpPC9hPi4gSWYgeW91IGluc3RhbGxlZCBodHRwZCBmcm9tIHNvdXJjZSwgdGhlIGRlZmF1bHQKbG9jYXRpb24gb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgaXMKPGNvZGU+L3Vzci9sb2NhbC9hcGFjaGUyL2NvbmY8L2NvZGU+LiBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGUgaXMKdXN1YWxseSBjYWxsZWQgPGNvZGU+aHR0cGQuY29uZjwvY29kZT4uIFRoaXMsIHRvbywgY2FuIHZhcnkgaW4KdGhpcmQtcGFydHkgZGlzdHJpYnV0aW9ucyBvZiB0aGUgc2VydmVyLjwvcD4KCjxwPlRoZSBjb25maWd1cmF0aW9uIGlzIGZyZXF1ZW50bHkgYnJva2VuIGludG8gbXVsdGlwbGUgc21hbGxlciBmaWxlcywKZm9yIGVhc2Ugb2YgbWFuYWdlbWVudC4gVGhlc2UgZmlsZXMgYXJlIGxvYWRlZCB2aWEgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCNpbmNsdWRlIj5JbmNsdWRlPC9hPjwvY29kZT4gZGlyZWN0aXZlLiBUaGUgbmFtZXMgb3IgbG9jYXRpb25zIG9mCnRoZXNlIHN1Yi1maWxlcyBhcmUgbm90IG1hZ2ljYWwsIGFuZCBtYXkgdmFyeSBncmVhdGx5IGZyb20gb25lCmluc3RhbGxhdGlvbiB0byBhbm90aGVyLiBBcnJhbmdlIGFuZCBzdWJkaXZpZGUgdGhlc2UgZmlsZXMgYXMKbWFrZXMgdGhlIG1vc3Qgc2Vuc2UgdG8gPHN0cm9uZz55b3U8L3N0cm9uZz4uIElmIHRoZSBmaWxlIGFycmFuZ2VtZW50CnlvdSBoYXZlIGJ5IGRlZmF1bHQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIHlvdSwgZmVlbCBmcmVlIHRvIHJlYXJyYW5nZSBpdC48L3A+Cgo8cD5UaGUgc2VydmVyIGlzIGNvbmZpZ3VyZWQgYnkgcGxhY2luZyA8YSBocmVmPSJtb2QvcXVpY2tyZWZlcmVuY2UuaHRtbCI+Y29uZmlndXJhdGlvbiBkaXJlY3RpdmVzPC9hPiBpbiB0aGVzZQpjb25maWd1cmF0aW9uIGZpbGVzLiBBIGRpcmVjdGl2ZSBpcyBhIGtleXdvcmQgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUKYXJndW1lbnRzIHRoYXQgc2V0IGl0cyB2YWx1ZS48L3A+Cgo8cD5UaGUgcXVlc3Rpb24gb2YgIjxlbT5XaGVyZSBzaG91bGQgSSBwdXQgdGhhdApkaXJlY3RpdmU/PC9lbT4iIGlzIGdlbmVyYWxseSBhbnN3ZXJlZCBieSBjb25zaWRlcmluZyB3aGVyZSB5b3Ugd2FudCBhCmRpcmVjdGl2ZSB0byBiZSBlZmZlY3RpdmUuIElmIGl0IGlzIGEgZ2xvYmFsIHNldHRpbmcsIGl0IHNob3VsZCBhcHBlYXIKaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3V0c2lkZSBvZiBhbnkgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvY29yZS5odG1sI2RpcmVjdG9yeSI+Jmx0O0RpcmVjdG9yeSZndDs8L2E+PC9jb2RlPiwgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvY29yZS5odG1sI2xvY2F0aW9uIj4mbHQ7TG9jYXRpb24mZ3Q7PC9hPjwvY29kZT4sIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCN2aXJ0dWFsaG9zdCI+Jmx0O1ZpcnR1YWxIb3N0Jmd0OzwvYT48L2NvZGU+LCBvciBvdGhlciBzZWN0aW9uLiBJZiBpdCBpcyB0bwphcHBseSBvbmx5IHRvIGEgcGFydGljdWxhciBkaXJlY3RvcnksIHRoZW4gaXQgc2hvdWxkIGdvIGluc2lkZSBhCjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCNkaXJlY3RvcnkiPiZsdDtEaXJlY3RvcnkmZ3Q7PC9hPjwvY29kZT4gc2VjdGlvbiByZWZlcnJpbmcgdG8KdGhhdCBkaXJlY3RvcnksIGFuZCBzbyBvbi4gU2VlIHRoZSA8YSBocmVmPSJzZWN0aW9ucy5odG1sIj5Db25maWd1cmF0aW9uClNlY3Rpb25zPC9hPiBkb2N1bWVudCBmb3IgZnVydGhlciBkaXNjdXNzaW9uIG9mIHRoZXNlIHNlY3Rpb25zLjwvcD4KCjxwPkluIGFkZGl0aW9uIHRvIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGNlcnRhaW4gZGlyZWN0aXZlcyBtYXkgZ28gaW4KPGNvZGU+Lmh0YWNjZXNzPC9jb2RlPiBmaWxlcyBsb2NhdGVkIGluIHRoZSBjb250ZW50IGRpcmVjdG9yaWVzLgo8Y29kZT4uaHRhY2Nlc3M8L2NvZGU+IGZpbGVzIGFyZSBwcmltYXJpbHkgZm9yIHBlb3BsZSB3aG8gZG8gbm90IGhhdmUKYWNjZXNzIHRvIHRoZSBtYWluIHNlcnZlciBjb25maWd1cmF0aW9uIGZpbGUocykuIFlvdSBjYW4gcmVhZCBtb3JlIGFib3V0Cjxjb2RlPi5odGFjY2VzczwvY29kZT4gZmlsZXMgaW4gdGhlIDxhIGhyZWY9Imhvd3RvL2h0YWNjZXNzLmh0bWwiPjxjb2RlPi5odGFjY2VzczwvY29kZT4gaG93dG88L2E+LjwvcD4KCjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iY29udGVudCIgaWQ9ImNvbnRlbnQiPldlYiBTaXRlIENvbnRlbnQ8L2E+PC9oMj4KCgo8cD5XZWIgc2l0ZSBjb250ZW50IGNhbiB0YWtlIG1hbnkgZGlmZmVyZW50IGZvcm1zLCBidXQgbWF5IGJlIGJyb2FkbHkKZGl2aWRlZCBpbnRvIHN0YXRpYyBhbmQgZHluYW1pYyBjb250ZW50LjwvcD4KCjxwPlN0YXRpYyBjb250ZW50IGlzIHRoaW5ncyBsaWtlIEhUTUwgZmlsZXMsIGltYWdlIGZpbGVzLCBDU1MgZmlsZXMsCmFuZCBvdGhlciBmaWxlcyB0aGF0IHJlc2lkZSBpbiB0aGUgZmlsZXN5c3RlbS4gVGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCNkb2N1bWVudHJvb3QiPkRvY3VtZW50Um9vdDwvYT48L2NvZGU+IGRpcmVjdGl2ZSBzcGVjaWZpZXMgd2hlcmUgaW4geW91cgpmaWxlc3lzdGVtIHlvdSBzaG91bGQgcGxhY2UgdGhlc2UgZmlsZXMuIFRoaXMgZGlyZWN0aXZlIGlzIGVpdGhlciBzZXQKZ2xvYmFsbHksIG9yIHBlciB2aXJ0dWFsIGhvc3QuIExvb2sgaW4geW91ciBjb25maWd1cmF0aW9uIGZpbGUocykgdG8KZGV0ZXJtaW5lIGhvdyB0aGlzIGlzIHNldCBmb3IgeW91ciBzZXJ2ZXIuPC9wPgoKPHA+VHlwaWNhbGx5LCBhIGRvY3VtZW50IGNhbGxlZCA8Y29kZT5pbmRleC5odG1sPC9jb2RlPiB3aWxsIGJlIHNlcnZlZAp3aGVuIGEgZGlyZWN0b3J5IGlzIHJlcXVlc3RlZCB3aXRob3V0IGEgZmlsZSBuYW1lIGJlaW5nIHNwZWNpZmllZC4gRm9yCmV4YW1wbGUsIGlmIDxjb2RlPkRvY3VtZW50Um9vdDwvY29kZT4gaXMgc2V0IHRvCjxjb2RlPi92YXIvd3d3L2h0bWw8L2NvZGU+IGFuZCBhIHJlcXVlc3QgaXMgbWFkZSBmb3IKPGNvZGU+aHR0cDovL3d3dy5leGFtcGxlLmNvbS93b3JrLzwvY29kZT4sIHRoZSBmaWxlCjxjb2RlPi92YXIvd3d3L2h0bWwvd29yay9pbmRleC5odG1sPC9jb2RlPiB3aWxsIGJlIHNlcnZlZCB0byB0aGUKY2xpZW50LjwvcD4KCjxwPkR5bmFtaWMgY29udGVudCBpcyBhbnl0aGluZyB0aGF0IGlzIGdlbmVyYXRlZCBhdCByZXF1ZXN0CnRpbWUsIGFuZCBtYXkgY2hhbmdlIGZyb20gb25lIHJlcXVlc3QgdG8gYW5vdGhlci4gVGhlcmUgYXJlIG51bWVyb3VzCndheXMgdGhhdCBkeW5hbWljIGNvbnRlbnQgbWF5IGJlIGdlbmVyYXRlZC4gVmFyaW91cyA8YSBocmVmPSJoYW5kbGVyLmh0bWwiPmhhbmRsZXJzPC9hPiBhcmUgYXZhaWxhYmxlIHRvIGdlbmVyYXRlIGNvbnRlbnQuIDxhIGhyZWY9Imhvd3RvL2NnaS5odG1sIj5DR0kgcHJvZ3JhbXM8L2E+IG1heSBiZSB3cml0dGVuIHRvIGdlbmVyYXRlCmNvbnRlbnQgZm9yIHlvdXIgc2l0ZS48L3A+Cgo8cD5UaGlyZC1wYXJ0eSBtb2R1bGVzIGxpa2UgbW9kX3BocCBtYXkgYmUgdXNlZCB0byB3cml0ZSBjb2RlIHRoYXQgZG9lcyBhCnZhcmlldHkgb2YgdGhpbmdzLiBNYW55IHRoaXJkLXBhcnR5IGFwcGxpY2F0aW9ucywgd3JpdHRlbiB1c2luZyBhCnZhcmlldHkgb2YgbGFuZ3VhZ2VzIGFuZCB0b29scywgYXJlIGF2YWlsYWJsZSBmb3IgZG93bmxvYWQgYW5kCmluc3RhbGxhdGlvbiBvbiB5b3VyIEFwYWNoZSBIVFRQIFNlcnZlci4gU3VwcG9ydCBvZiB0aGVzZSB0aGlyZC1wYXJ0eQp0aGluZ3MgaXMgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIGRvY3VtZW50YXRpb24sIGFuZCB5b3Ugc2hvdWxkIGZpbmQKdGhlaXIgZG9jdW1lbnRhdGlvbiBvciBvdGhlciBzdXBwb3J0IGZvcnVtcyB0byBhbnN3ZXIgeW91ciBxdWVzdGlvbnMKYWJvdXQgdGhlbS48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0ibG9ncyIgaWQ9ImxvZ3MiPkxvZyBGaWxlcyBhbmQgVHJvdWJsZXNob290aW5nPC9hPjwvaDI+Cgo8cD5BcyBhbiBBcGFjaGUgSFRUUCBTZXJ2ZXIgYWRtaW5pc3RyYXRvciwgeW91ciBtb3N0IHZhbHVhYmxlIGFzc2V0cyBhcmUKdGhlIGxvZyBmaWxlcywgYW5kLCBpbiBwYXJ0aWN1bGFyLCB0aGUgZXJyb3IgbG9nLiBUcm91Ymxlc2hvb3RpbmcgYW55CnByb2JsZW0gd2l0aG91dCB0aGUgZXJyb3IgbG9nIGlzIGxpa2UgZHJpdmluZyB3aXRoIHlvdXIgZXllcyBjbG9zZWQuPC9wPgoKPHA+VGhlIGxvY2F0aW9uIG9mIHRoZSBlcnJvciBsb2cgaXMgZGVmaW5lZCBieSB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvY29yZS5odG1sI2Vycm9ybG9nIj5FcnJvckxvZzwvYT48L2NvZGU+IGRpcmVjdGl2ZSwgd2hpY2ggbWF5IGJlIHNldCBnbG9iYWxseSwKb3IgcGVyIHZpcnR1YWwgaG9zdC4gRW50cmllcyBpbiB0aGUgZXJyb3IgbG9nIHRlbGwgeW91IHdoYXQgd2VudCB3cm9uZywKYW5kIHdoZW4uIFRoZXkgb2Z0ZW4gYWxzbyB0ZWxsIHlvdSBob3cgdG8gZml4IGl0LiBFYWNoIGVycm9yIGxvZyBtZXNzYWdlCmNvbnRhaW5zIGFuIGVycm9yIGNvZGUsIHdoaWNoIHlvdSBjYW4gc2VhcmNoIGZvciBvbmxpbmUgZm9yIGV2ZW4gbW9yZQpkZXRhaWxlZCBkZXNjcmlwdGlvbnMgb2YgaG93IHRvIGFkZHJlc3MgdGhlIHByb2JsZW0uIFlvdSBjYW4gYWxzbwpjb25maWd1cmUgeW91ciBlcnJvciBsb2cgdG8gY29udGFpbiBhIGxvZyBJRCB3aGljaCB5b3UgY2FuIHRoZW4KY29ycmVsYXRlIHRvIGFuIGFjY2VzcyBsb2cgZW50cnksIHNvIHRoYXQgeW91IGNhbiBkZXRlcm1pbmUgd2hhdCByZXF1ZXN0CmNhdXNlZCB0aGUgZXJyb3IgY29uZGl0aW9uLjwvcD4KCjxwPllvdSBjYW4gcmVhZCBtb3JlIGFib3V0IGxvZ2dpbmcgaW4gdGhlIDxhIGhyZWY9ImxvZ3MuaHRtbCI+bG9ncwpkb2N1bWVudGF0aW9uPC9hPi48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0ib3RoZXIiIGlkPSJvdGhlciI+V2hhdCdzIG5leHQ/PC9hPjwvaDI+CgoKPHA+T25jZSB5b3UgaGF2ZSB0aGUgcHJlcmVxdWlzaXRlcyB1bmRlciB5b3VyIGJlbHQsIGl0J3MgdGltZSB0byBtb3ZlCm9uLjwvcD4KCjxwPlRoaXMgZG9jdW1lbnQgY292ZXJzIG9ubHkgdGhlIGJhcmUgYmFzaWNzLiBXZSBob3BlIHRoYXQgdGhpcyBnZXRzIHlvdQpzdGFydGVkLCBidXQgdGhlcmUgYXJlIG1hbnkgb3RoZXIgdGhpbmdzIHRoYXQgeW91IG1pZ2h0IG5lZWQgdG8Ka25vdy48L3A+Cgo8dWw+CjxsaT48YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb3dubG9hZC5jZ2kiPkRvd25sb2FkPC9hPjwvbGk+CjxsaT48YSBocmVmPSJpbnN0YWxsLmh0bWwiPkluc3RhbGw8L2E+PC9saT4KPGxpPjxhIGhyZWY9ImNvbmZpZ3VyaW5nLmh0bWwiPkNvbmZpZ3VyZTwvYT48L2xpPgo8bGk+PGEgaHJlZj0iaW52b2tpbmcuaHRtbCI+U3RhcnQ8L2E+PC9saT4KPGxpPjxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9uczwvYT48L2xpPgo8L3VsPgoKPC9kaXY+PC9kaXY+CjxkaXYgY2xhc3M9ImJvdHRvbWxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi9lbi9nZXR0aW5nLXN0YXJ0ZWQuaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vZnIvZ2V0dGluZy1zdGFydGVkLmh0bWwiIGhyZWZsYW5nPSJmciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJGcmFu52FpcyI+Jm5ic3A7ZnImbmJzcDs8L2E+PC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgYWx0PSJ0b3AiIC8+PC9hPjwvZGl2PjxkaXYgY2xhc3M9InNlY3Rpb24iPjxoMj48YSBpZD0iY29tbWVudHNfc2VjdGlvbiIgbmFtZT0iY29tbWVudHNfc2VjdGlvbiI+Q29tbWVudHM8L2E+PC9oMj48ZGl2IGNsYXNzPSJ3YXJuaW5nIj48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz48YnIgLz5UaGlzIGlzIG5vdCBhIFEmYW1wO0Egc2VjdGlvbi4gQ29tbWVudHMgcGxhY2VkIGhlcmUgc2hvdWxkIGJlIHBvaW50ZWQgdG93YXJkcyBzdWdnZXN0aW9ucyBvbiBpbXByb3ZpbmcgdGhlIGRvY3VtZW50YXRpb24gb3Igc2VydmVyLCBhbmQgbWF5IGJlIHJlbW92ZWQgYWdhaW4gYnkgb3VyIG1vZGVyYXRvcnMgaWYgdGhleSBhcmUgZWl0aGVyIGltcGxlbWVudGVkIG9yIGNvbnNpZGVyZWQgaW52YWxpZC9vZmYtdG9waWMuIFF1ZXN0aW9ucyBvbiBob3cgdG8gbWFuYWdlIHRoZSBBcGFjaGUgSFRUUCBTZXJ2ZXIgc2hvdWxkIGJlIGRpcmVjdGVkIGF0IGVpdGhlciBvdXIgSVJDIGNoYW5uZWwsICNodHRwZCwgb24gRnJlZW5vZGUsIG9yIHNlbnQgdG8gb3VyIDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2xpc3RzLmh0bWwiPm1haWxpbmcgbGlzdHM8L2E+LjwvZGl2Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQp2YXIgY29tbWVudHNfc2hvcnRuYW1lID0gJ2h0dHBkJzsKdmFyIGNvbW1lbnRzX2lkZW50aWZpZXIgPSAnaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy90cnVuay9nZXR0aW5nLXN0YXJ0ZWQuaHRtbCc7CihmdW5jdGlvbih3LCBkKSB7CiAgICBpZiAody5sb2NhdGlvbi5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpID09ICJodHRwZC5hcGFjaGUub3JnIikgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+PFwvZGl2PicpOwogICAgICAgIHZhciBzID0gZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBzLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBzLmFzeW5jID0gdHJ1ZTsKICAgICAgICBzLnNyYyA9ICdodHRwczovL2NvbW1lbnRzLmFwYWNoZS5vcmcvc2hvd19jb21tZW50cy5sdWE/c2l0ZT0nICsgY29tbWVudHNfc2hvcnRuYW1lICsgJyZwYWdlPScgKyBjb21tZW50c19pZGVudGlmaWVyOwogICAgICAgIChkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0gfHwgZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdKS5hcHBlbmRDaGlsZChzKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+Q29tbWVudHMgYXJlIGRpc2FibGVkIGZvciB0aGlzIHBhZ2UgYXQgdGhlIG1vbWVudC48XC9kaXY+Jyk7CiAgICB9Cn0pKHdpbmRvdywgZG9jdW1lbnQpOwovLy0tPjwhXV0+PC9zY3JpcHQ+PC9kaXY+PGRpdiBpZD0iZm9vdGVyIj4KPHAgY2xhc3M9ImFwYWNoZSI+Q29weXJpZ2h0IDIwMTcgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLjxiciAvPkxpY2Vuc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPkFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMDwvYT4uPC9wPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4vbW9kL3F1aWNrcmVmZXJlbmNlLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3dpa2kuYXBhY2hlLm9yZy9odHRwZC9GQVEiPkZBUTwvYT4gfCA8YSBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD48L2Rpdj48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQppZiAodHlwZW9mKHByZXR0eVByaW50KSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgIHByZXR0eVByaW50KCk7Cn0KLy8tLT48IV1dPjwvc2NyaXB0Pgo8L2JvZHk+PC9odG1sPg==