PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5jb25maWd1cmUgLSBDb25maWd1cmUgdGhlIHNvdXJjZSB0cmVlIC0gQXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi40PC90aXRsZT4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJNYWluIHN0eWxlc2hlZXQiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtbG9vc2UtMTAwcGMuY3NzIiByZWw9ImFsdGVybmF0ZSBzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik5vIFNpZGViYXIgLSBEZWZhdWx0IGZvbnQgc2l6ZSIgLz4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC1wcmludC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InByaW50IiB0eXBlPSJ0ZXh0L2NzcyIgLz48bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9zdHlsZS9jc3MvcHJldHRpZnkuY3NzIiAvPgo8c2NyaXB0IHNyYz0iLi4vc3R5bGUvc2NyaXB0cy9wcmV0dGlmeS5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cjwvc2NyaXB0PgoKPGxpbmsgaHJlZj0iLi4vaW1hZ2VzL2Zhdmljb24uaWNvIiByZWw9InNob3J0Y3V0IGljb24iIC8+PC9oZWFkPgo8Ym9keSBpZD0ibWFudWFsLXBhZ2UiPjxkaXYgaWQ9InBhZ2UtaGVhZGVyIj4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+CjxwIGNsYXNzPSJhcGFjaGUiPkFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNDwvcD4KPGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZmVhdGhlci5wbmciIC8+PC9kaXY+CjxkaXYgY2xhc3M9InVwIj48YSBocmVmPSIuLyI+PGltZyB0aXRsZT0iJmx0Oy0iIGFsdD0iJmx0Oy0iIHNyYz0iLi4vaW1hZ2VzL2xlZnQuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBpZD0icGF0aCI+CjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iPkFwYWNoZTwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy8iPkhUVFAgU2VydmVyPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvIj5Eb2N1bWVudGF0aW9uPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4uLyI+VmVyc2lvbiAyLjQ8L2E+ICZndDsgPGEgaHJlZj0iLi8iPlByb2dyYW1zPC9hPjwvZGl2PjxkaXYgaWQ9InBhZ2UtY29udGVudCI+PGRpdiBpZD0icHJlYW1ibGUiPjxoMT5jb25maWd1cmUgLSBDb25maWd1cmUgdGhlIHNvdXJjZSB0cmVlPC9oMT4KPGRpdiBjbGFzcz0idG9wbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuLi9lbi9wcm9ncmFtcy9jb25maWd1cmUuaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2ZyL3Byb2dyYW1zL2NvbmZpZ3VyZS5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2tvL3Byb2dyYW1zL2NvbmZpZ3VyZS5odG1sIiBocmVmbGFuZz0ia28iIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iS29yZWFuIj4mbmJzcDtrbyZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi90ci9wcm9ncmFtcy9jb25maWd1cmUuaHRtbCIgaHJlZmxhbmc9InRyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlT8cmvnZSI+Jm5ic3A7dHImbmJzcDs8L2E+PC9wPgo8L2Rpdj4KCiAgICA8cD5UaGUgPGNvZGU+Y29uZmlndXJlPC9jb2RlPiBzY3JpcHQgY29uZmlndXJlcyB0aGUgc291cmNlIHRyZWUKICAgIGZvciBjb21waWxpbmcgYW5kIGluc3RhbGxpbmcgdGhlIEFwYWNoZSBIVFRQIFNlcnZlciBvbiB5b3VyCiAgICBwYXJ0aWN1bGFyIHBsYXRmb3JtLiBWYXJpb3VzIG9wdGlvbnMgYWxsb3cgdGhlIGNvbXBpbGF0aW9uIG9mIGEKICAgIHNlcnZlciBjb3JyZXNwb25kaW5nIHRvIHlvdXIgcGVyc29uYWwgcmVxdWlyZW1lbnRzLjwvcD4KCiAgICA8cD5UaGlzIHNjcmlwdCwgaW5jbHVkZWQgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UKICAgIGRpc3RyaWJ1dGlvbiwgaXMgZm9yIGNvbXBpbGF0aW9uIG9uIFVuaXggYW5kIFVuaXgtbGlrZSBzeXN0ZW1zCiAgICBvbmx5LiBGb3Igb3RoZXIgcGxhdGZvcm1zLCBzZWUgdGhlIDxhIGhyZWY9Ii4uL3BsYXRmb3JtLyI+cGxhdGZvcm08L2E+IGRvY3VtZW50YXRpb24uPC9wPgo8L2Rpdj4KPGRpdiBpZD0icXVpY2t2aWV3Ij48YSBocmVmPSJodHRwczovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vY29udHJpYnV0aW5nLmh0bWwiIGNsYXNzPSJiYWRnZSI+PGltZyBzcmM9Imh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvaW1hZ2VzL1N1cHBvcnRBcGFjaGUtc21hbGwucG5nIiBhbHQ9IlN1cHBvcnQgQXBhY2hlISIgLz48L2E+PHVsIGlkPSJ0b2MiPjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3N5bm9wc2lzIj5TeW5vcHNpczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNvcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2VudiI+RW52aXJvbm1lbnQgdmFyaWFibGVzPC9hPjwvbGk+CjwvdWw+PGgzPlNlZSBhbHNvPC9oMz48dWwgY2xhc3M9InNlZWFsc28iPjxsaT48YSBocmVmPSIuLi9pbnN0YWxsLmh0bWwiPkNvbXBpbGluZyBhbmQgSW5zdGFsbGluZzwvYT48L2xpPjxsaT48YSBocmVmPSIjY29tbWVudHNfc2VjdGlvbiI+Q29tbWVudHM8L2E+PC9saT48L3VsPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJzeW5vcHNpcyIgaWQ9InN5bm9wc2lzIj5TeW5vcHNpczwvYT48L2gyPgogICAgPHA+WW91IHNob3VsZCBjYWxsIHRoZSA8Y29kZT5jb25maWd1cmU8L2NvZGU+IHNjcmlwdCBmcm9tIHdpdGhpbiB0aGUKICAgIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBkaXN0cmlidXRpb24uPC9wPgoKICAgIDxwPjxjb2RlPjxzdHJvbmc+Li9jb25maWd1cmU8L3N0cm9uZz4gWzx2YXI+T1BUSU9OPC92YXI+XS4uLgogICAgWzx2YXI+VkFSPC92YXI+PTx2YXI+VkFMVUU8L3Zhcj5dLi4uPC9jb2RlPjwvcD4KCiAgICA8cD5UbyBhc3NpZ24gZW52aXJvbm1lbnQgdmFyaWFibGVzIChlLmcuIDxjb2RlPkNDPC9jb2RlPiwKICAgIDxjb2RlPkNGTEFHUzwvY29kZT4gLi4uKSwgc3BlY2lmeSB0aGVtIGFzCiAgICA8Y29kZT48dmFyPlZBUjwvdmFyPj08dmFyPlZBTFVFPC92YXI+PC9jb2RlPi4gU2VlIDxhIGhyZWY9IiNlbnYiPmJlbG93PC9hPgogICAgZm9yIGRlc2NyaXB0aW9ucyBvZiBzb21lIG9mIHRoZSB1c2VmdWwgdmFyaWFibGVzLjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0ib3B0aW9ucyIgaWQ9Im9wdGlvbnMiPk9wdGlvbnM8L2E+PC9oMj4KICA8dWw+CiAgICA8bGk+PGEgaHJlZj0iI2NvbmZpZ3VyYXRpb25vcHRpb25zIj5Db25maWd1cmF0aW9uIG9wdGlvbnM8L2E+PC9saT4KICAgIDxsaT48YSBocmVmPSIjaW5zdGFsbGF0aW9uZGlyZWN0b3JpZXMiPkluc3RhbGxhdGlvbiBkaXJlY3RvcmllczwvYT48L2xpPgogICAgPGxpPjxhIGhyZWY9IiNzeXN0ZW10eXBlcyI+U3lzdGVtIHR5cGVzPC9hPjwvbGk+CiAgICA8bGk+PGEgaHJlZj0iI29wdGlvbmFsZmVhdHVyZXMiPk9wdGlvbmFsIGZlYXR1cmVzPC9hPjwvbGk+CiAgICA8bGk+PGEgaHJlZj0iI3N1cHBvcnRvcHQiPk9wdGlvbnMgZm9yIHN1cHBvcnQgcHJvZ3JhbXM8L2E+PC9saT4KICA8L3VsPgoKICA8aDM+PGEgbmFtZT0iY29uZmlndXJhdGlvbm9wdGlvbnMiIGlkPSJjb25maWd1cmF0aW9ub3B0aW9ucyI+Q29uZmlndXJhdGlvbiBvcHRpb25zPC9hPjwvaDM+CgogICAgPHA+VGhlIGZvbGxvd2luZyBvcHRpb25zIGluZmx1ZW5jZSB0aGUgYmVoYXZpb3Igb2YKICAgIDxjb2RlPmNvbmZpZ3VyZTwvY29kZT4gaXRzZWxmLjwvcD4KCiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4tQzwvY29kZT48L2R0PgogICAgICA8ZHQ+PGNvZGU+LS1jb25maWctY2FjaGU8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoaXMgaXMgYW4gYWxpYXMgZm9yIDxjb2RlPi0tY2FjaGUtZmlsZT1jb25maWcuY2FjaGU8L2NvZGU+PC9kZD4KCiAgICAgIDxkdD48Y29kZT4tLWNhY2hlLWZpbGU9PHZhcj5GSUxFPC92YXI+PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgdGVzdCByZXN1bHRzIHdpbGwgYmUgY2FjaGVkIGluIGZpbGUgPHZhcj5GSUxFPC92YXI+LgogICAgICAgIFRoaXMgb3B0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuPC9kZD4KCiAgICAgIDxkdD48Y29kZT4taDwvY29kZT48L2R0PgogICAgICA8ZHQ+PGNvZGU+LS1oZWxwIFtzaG9ydHxyZWN1cnNpdmVdPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5PdXRwdXQgdGhlIGhlbHAgYW5kIGV4aXQuIFdpdGggdGhlIGFyZ3VtZW50IDxjb2RlPnNob3J0PC9jb2RlPiBvbmx5CiAgICAgICAgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2Ugd2lsbCBkaXNwbGF5ZWQuIFRoZSBhcmd1bWVudAogICAgICAgIDxjb2RlPnJlY3Vyc2l2ZTwvY29kZT4gZGlzcGxheXMgdGhlIHNob3J0IGhlbHAgb2YgYWxsIHRoZSBpbmNsdWRlZAogICAgICAgIHBhY2thZ2VzLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+LW48L2NvZGU+PC9kdD4KICAgICAgPGR0Pjxjb2RlPi0tbm8tY3JlYXRlPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgPGNvZGU+Y29uZmlndXJlPC9jb2RlPiBzY3JpcHQgaXMgcnVuIG5vcm1hbGx5IGJ1dCBkb2VzCiAgICAgICAgbm90IGNyZWF0ZSBvdXRwdXQgZmlsZXMuIFRoaXMgaXMgdXNlZnVsIHRvIGNoZWNrIHRoZSB0ZXN0IHJlc3VsdHMKICAgICAgICBiZWZvcmUgZ2VuZXJhdGluZyBtYWtlZmlsZXMgZm9yIGNvbXBpbGF0aW9uLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+LXE8L2NvZGU+PC9kdD4KICAgICAgPGR0Pjxjb2RlPi0tcXVpZXQ8L2NvZGU+PC9kdD4KICAgICAgPGRkPkRvIG5vdCBwcmludCA8Y29kZT5jaGVja2luZyAuLi48L2NvZGU+IG1lc3NhZ2VzIGR1cmluZyB0aGUKICAgICAgICBjb25maWd1cmUgcHJvY2Vzcy48L2RkPgoKICAgICAgPGR0Pjxjb2RlPi0tc3JjZGlyPTx2YXI+RElSPC92YXI+PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5EZWZpbmVzIGRpcmVjdG9yeSA8dmFyPkRJUjwvdmFyPiB0byBiZSB0aGUgc291cmNlIGZpbGUgZGlyZWN0b3J5LgogICAgICAgIERlZmF1bHQgaXMgdGhlIGRpcmVjdG9yeSB3aGVyZSA8Y29kZT5jb25maWd1cmU8L2NvZGU+IGlzIGxvY2F0ZWQsIG9yCiAgICAgICAgdGhlIHBhcmVudCBkaXJlY3RvcnkuPC9kZD4KCiAgICAgIDxkdD48Y29kZT4tLXNpbGVudDwvY29kZT48L2R0PgogICAgICA8ZGQ+U2FtZSBhcyA8Y29kZT4tLXF1aWV0PC9jb2RlPjwvZGQ+CgogICAgICA8ZHQ+LVY8L2R0PgogICAgICA8ZHQ+LS12ZXJzaW9uPC9kdD4KICAgICAgPGRkPkRpc3BsYXkgY29weXJpZ2h0IGluZm9ybWF0aW9uIGFuZCBleGl0LjwvZGQ+CiAgICA8L2RsPgogIAoKICA8aDM+PGEgbmFtZT0iaW5zdGFsbGF0aW9uZGlyZWN0b3JpZXMiIGlkPSJpbnN0YWxsYXRpb25kaXJlY3RvcmllcyI+SW5zdGFsbGF0aW9uCiAgICBkaXJlY3RvcmllczwvYT48L2gzPgoKICAgIDxwPlRoZXNlIG9wdGlvbnMgZGVmaW5lIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LiBUaGUgaW5zdGFsbGF0aW9uCiAgICAgIHRyZWUgZGVwZW5kcyBvbiB0aGUgc2VsZWN0ZWQgbGF5b3V0LjwvcD4KCiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4tLXByZWZpeD08dmFyPlBSRUZJWDwvdmFyPjwvY29kZT48L2R0PgogICAgICA8ZGQ+SW5zdGFsbCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMgaW4gPHZhcj5QUkVGSVg8L3Zhcj4uCiAgICAgICAgQnkgZGVmYXVsdCB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBpcyBzZXQgdG8KICAgICAgICA8Y29kZT4vdXNyL2xvY2FsL2FwYWNoZTI8L2NvZGU+LjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+LS1leGVjLXByZWZpeD08dmFyPkVQUkVGSVg8L3Zhcj48L2NvZGU+PC9kdD4KICAgICAgPGRkPkluc3RhbGwgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBmaWxlcyBpbiA8dmFyPkVQUkVGSVg8L3Zhcj4uCiAgICAgICAgQnkgZGVmYXVsdCB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBpcyBzZXQgdG8gdGhlCiAgICAgICAgPHZhcj5QUkVGSVg8L3Zhcj4gZGlyZWN0b3J5LjwvZGQ+CiAgICA8L2RsPgoKICAgIDxwPkJ5IGRlZmF1bHQsIDxjb2RlPm1ha2UgaW5zdGFsbDwvY29kZT4gd2lsbCBpbnN0YWxsIGFsbCB0aGUgZmlsZXMgaW4KICAgICAgPGNvZGU+L3Vzci9sb2NhbC9hcGFjaGUyL2JpbjwvY29kZT4sIDxjb2RlPi91c3IvbG9jYWwvYXBhY2hlMi9saWI8L2NvZGU+CiAgICAgIGV0Yy4gWW91IGNhbiBzcGVjaWZ5IGFuIGluc3RhbGxhdGlvbiBwcmVmaXggb3RoZXIgdGhhbgogICAgICA8Y29kZT4vdXNyL2xvY2FsL2FwYWNoZTI8L2NvZGU+IHVzaW5nIDxjb2RlPi0tcHJlZml4PC9jb2RlPiwKICAgICAgZm9yIGluc3RhbmNlIDxjb2RlPi0tcHJlZml4PSRIT01FPC9jb2RlPi48L3A+CgogICAgPGg0PjxhIG5hbWU9ImxheW91dCIgaWQ9ImxheW91dCI+RGVmaW5lIGEgZGlyZWN0b3J5IGxheW91dDwvYT48L2g0PgogICAgICA8ZGw+CiAgICAgICAgPGR0Pjxjb2RlPi0tZW5hYmxlLWxheW91dD08dmFyPkxBWU9VVDwvdmFyPjwvY29kZT48L2R0PgogICAgICAgIDxkZD5Db25maWd1cmUgdGhlIHNvdXJjZSBjb2RlIGFuZCBidWlsZCBzY3JpcHRzIHRvIGFzc3VtZSBhbgogICAgICAgICAgaW5zdGFsbGF0aW9uIHRyZWUgYmFzZWQgb24gdGhlIGxheW91dCA8dmFyPkxBWU9VVDwvdmFyPi4gVGhpcyBhbGxvd3MKICAgICAgICAgIHlvdSB0byBzZXBhcmF0ZWx5IHNwZWNpZnkgdGhlIGxvY2F0aW9ucyBmb3IgZWFjaCB0eXBlIG9mIGZpbGUgd2l0aGluCiAgICAgICAgICB0aGUgQXBhY2hlIEhUVFAgU2VydmVyIGluc3RhbGxhdGlvbi4gVGhlIDxjb2RlPmNvbmZpZy5sYXlvdXQ8L2NvZGU+CiAgICAgICAgICBmaWxlIGNvbnRhaW5zIHNldmVyYWwgZXhhbXBsZSBjb25maWd1cmF0aW9ucywgYW5kIHlvdSBjYW4gYWxzbyBjcmVhdGUKICAgICAgICAgIHlvdXIgb3duIGN1c3RvbSBjb25maWd1cmF0aW9uIGZvbGxvd2luZyB0aGUgZXhhbXBsZXMuIFRoZSBkaWZmZXJlbnQKICAgICAgICAgIGxheW91dHMgaW4gdGhpcyBmaWxlIGFyZSBncm91cGVkIGludG8gPGNvZGU+Jmx0O0xheW91dAogICAgICAgICAgICBGT08mZ3Q7Li4uJmx0Oy9MYXlvdXQmZ3Q7PC9jb2RlPiBzZWN0aW9ucyBhbmQgcmVmZXJyZWQgdG8gYnkgbmFtZSBhcwogICAgICAgICAgaW4gPGNvZGU+Rk9PPC9jb2RlPi4gVGhlIGRlZmF1bHQgbGF5b3V0IGlzIDxjb2RlPkFwYWNoZTwvY29kZT4uPC9kZD4KICAgICAgPC9kbD4KICAgIAoKICAgIDxoND48YSBuYW1lPSJkaXJlY3RvcnlmaW5ldHVuaW5nIiBpZD0iZGlyZWN0b3J5ZmluZXR1bmluZyI+RmluZSB0dW5pbmcgb2YgdGhlIGluc3RhbGxhdGlvbgogICAgICBkaXJlY3RvcmllczwvYT48L2g0PgoKICAgICAgPHA+Rm9yIGJldHRlciBjb250cm9sIG9mIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3JpZXMsIHVzZSB0aGUgb3B0aW9ucwogICAgICAgIGJlbG93LiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBkaXJlY3RvcnkgZGVmYXVsdHMgYXJlIHNldCBieQogICAgICAgIDxjb2RlPmF1dG9jb25mPC9jb2RlPiBhbmQgYXJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjb3JyZXNwb25kaW5nIGxheW91dAogICAgICAgIHNldHRpbmcuPC9wPgoKICAgICAgPGRsPgogICAgICAgIAogICAgICAgIDxkdD48Y29kZT4tLWJpbmRpcj08dmFyPkRJUjwvdmFyPjwvY29kZT48L2R0PgogICAgICAgIDxkZD5JbnN0YWxsIHVzZXIgZXhlY3V0YWJsZXMgaW4gPHZhcj5ESVI8L3Zhcj4uIFRoZSB1c2VyIGV4ZWN1dGFibGVzCiAgICAgICAgICBhcmUgc3VwcG9ydGluZyBwcm9ncmFtcyBsaWtlIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuLi9wcm9ncmFtcy9odHBhc3N3ZC5odG1sIj5odHBhc3N3ZDwvYT48L2NvZGU+LAogICAgICAgICAgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL2RibW1hbmFnZS5odG1sIj5kYm1tYW5hZ2U8L2E+PC9jb2RlPiwgZXRjLiB3aGljaCBhcmUgdXNlZnVsIGZvciBzaXRlCiAgICAgICAgICBhZG1pbmlzdHJhdG9ycy4gQnkgZGVmYXVsdCA8dmFyPkRJUjwvdmFyPiBpcyBzZXQgdG8KICAgICAgICAgIDxjb2RlPjx2YXI+RVBSRUZJWDwvdmFyPi9iaW48L2NvZGU+LjwvZGQ+CgogICAgICAgIDxkdD48Y29kZT4tLWRhdGFkaXI9PHZhcj5ESVI8L3Zhcj48L2NvZGU+PC9kdD4KICAgICAgICA8ZGQ+SW5zdGFsbCByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgaW4gPHZhcj5ESVI8L3Zhcj4uCiAgICAgICAgICBCeSBkZWZhdWx0IDxjb2RlPmRhdGFkaXI8L2NvZGU+IGlzIHNldCB0bwogICAgICAgICAgPGNvZGU+PHZhcj5QUkVGSVg8L3Zhcj4vc2hhcmU8L2NvZGU+LiBUaGlzIG9wdGlvbiBpcyBvZmZlcmVkIGJ5CiAgICAgICAgICA8Y29kZT5hdXRvY29uZjwvY29kZT4gYW5kIGN1cnJlbnRseSB1bnVzZWQuPC9kZD4KCiAgICAgICAgPGR0Pjxjb2RlPi0taW5jbHVkZWRpcj08dmFyPkRJUjwvdmFyPjwvY29kZT48L2R0PgogICAgICAgIDxkZD5JbnN0YWxsIEMgaGVhZGVyIGZpbGVzIGluIDx2YXI+RElSPC92YXI+LiBCeSBkZWZhdWx0CiAgICAgICAgICA8Y29kZT5pbmNsdWRlZGlyPC9jb2RlPiBpcyBzZXQgdG8KICAgICAgICAgIDxjb2RlPjx2YXI+RVBSRUZJWDwvdmFyPi9pbmNsdWRlPC9jb2RlPi48L2RkPgoKICAgICAgICA8ZHQ+PGNvZGU+LS1pbmZvZGlyPTx2YXI+RElSPC92YXI+PC9jb2RlPjwvZHQ+CiAgICAgICAgPGRkPkluc3RhbGwgaW5mbyBkb2N1bWVudGF0aW9uIGluIDx2YXI+RElSPC92YXI+LgogICAgICAgICAgQnkgZGVmYXVsdCA8Y29kZT5pbmZvZGlyPC9jb2RlPiBpcyBzZXQgdG8KICAgICAgICAgIDxjb2RlPjx2YXI+UFJFRklYPC92YXI+L2luZm88L2NvZGU+LiBUaGlzIG9wdGlvbiBpcyBjdXJyZW50bHkKICAgICAgICAgIHVudXNlZC48L2RkPgoKICAgICAgICA8ZHQ+PGNvZGU+LS1saWJkaXI9PHZhcj5ESVI8L3Zhcj48L2NvZGU+PC9kdD4KICAgICAgICA8ZGQ+SW5zdGFsbCBvYmplY3QgY29kZSBsaWJyYXJpZXMgaW4gPHZhcj5ESVI8L3Zhcj4uIEJ5IGRlZmF1bHQKICAgICAgICAgIDxjb2RlPmxpYmRpcjwvY29kZT4gaXMgc2V0IHRvCiAgICAgICAgICA8Y29kZT48dmFyPkVQUkVGSVg8L3Zhcj4vbGliPC9jb2RlPi48L2RkPgoKICAgICAgICA8ZHQ+PGNvZGU+LS1saWJleGVjZGlyPTx2YXI+RElSPC92YXI+PC9jb2RlPjwvZHQ+CiAgICAgICAgPGRkPkluc3RhbGwgdGhlIHByb2dyYW0gZXhlY3V0YWJsZXMgKGkuZS4sIHNoYXJlZCBtb2R1bGVzKSBpbgogICAgICAgICAgPHZhcj5ESVI8L3Zhcj4uIEJ5IGRlZmF1bHQgPGNvZGU+bGliZXhlY2RpcjwvY29kZT4gaXMgc2V0IHRvCiAgICAgICAgICA8Y29kZT48dmFyPkVQUkVGSVg8L3Zhcj4vbW9kdWxlczwvY29kZT4uPC9kZD4KCiAgICAgICAgPGR0Pjxjb2RlPi0tbG9jYWxzdGF0ZWRpcj08dmFyPkRJUjwvdmFyPjwvY29kZT48L2R0PgogICAgICAgIDxkZD5JbnN0YWxsIG1vZGlmaWFibGUgc2luZ2xlLW1hY2hpbmUgZGF0YSBpbiA8dmFyPkRJUjwvdmFyPi4KICAgICAgICAgIEJ5IGRlZmF1bHQgPGNvZGU+bG9jYWxzdGF0ZWRpcjwvY29kZT4gaXMgc2V0IHRvCiAgICAgICAgICA8Y29kZT48dmFyPlBSRUZJWDwvdmFyPi92YXI8L2NvZGU+LiBUaGlzIG9wdGlvbiBpcyBvZmZlcmVkIGJ5CiAgICAgICAgICA8Y29kZT5hdXRvY29uZjwvY29kZT4gYW5kIGN1cnJlbnRseSB1bnVzZWQuPC9kZD4KCiAgICAgICAgPGR0Pjxjb2RlPi0tbWFuZGlyPTx2YXI+RElSPC92YXI+PC9jb2RlPjwvZHQ+CiAgICAgICAgPGRkPkluc3RhbGwgdGhlIG1hbiBkb2N1bWVudGF0aW9uIGluIDx2YXI+RElSPC92YXI+LiBCeSBkZWZhdWx0CiAgICAgICAgICA8Y29kZT5tYW5kaXI8L2NvZGU+IGlzIHNldCB0bwogICAgICAgICAgPGNvZGU+PHZhcj5FUFJFRklYPC92YXI+L21hbjwvY29kZT4uPC9kZD4KCiAgICAgICAgPGR0Pjxjb2RlPi0tb2xkaW5jbHVkZWRpcj08dmFyPkRJUjwvdmFyPjwvY29kZT48L2R0PgogICAgICAgIDxkZD5JbnN0YWxsIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIGluIDx2YXI+RElSPC92YXI+LgogICAgICAgICAgQnkgZGVmYXVsdCA8Y29kZT5vbGRpbmNsdWRlZGlyPC9jb2RlPiBpcyBzZXQgdG8KICAgICAgICAgIDxjb2RlPi91c3IvaW5jbHVkZTwvY29kZT4uIFRoaXMgb3B0aW9uIGlzIG9mZmVyZWQgYnkKICAgICAgICAgIDxjb2RlPmF1dG9jb25mPC9jb2RlPiBhbmQgY3VycmVudGx5IHVudXNlZC48L2RkPgoKICAgICAgICA8ZHQ+PGNvZGU+LS1zYmluZGlyPTx2YXI+RElSPC92YXI+PC9jb2RlPjwvZHQ+CiAgICAgICAgPGRkPkluc3RhbGwgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGV4ZWN1dGFibGVzIGluIDx2YXI+RElSPC92YXI+LgogICAgICAgICAgVGhvc2UgYXJlIHNlcnZlciBwcm9ncmFtcyBsaWtlIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuLi9wcm9ncmFtcy9odHRwZC5odG1sIj5odHRwZDwvYT48L2NvZGU+LAogICAgICAgICAgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL2FwYWNoZWN0bC5odG1sIj5hcGFjaGVjdGw8L2E+PC9jb2RlPiwgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL3N1ZXhlYy5odG1sIj5zdWV4ZWM8L2E+PC9jb2RlPiwgZXRjLiB3aGljaAogICAgICAgICAgYXJlIG5lY2Vzc2FyeSB0byBydW4gdGhlIEFwYWNoZSBIVFRQIFNlcnZlci4gQnkgZGVmYXVsdAogICAgICAgICAgPGNvZGU+c2JpbmRpcjwvY29kZT4gaXMgc2V0IHRvCiAgICAgICAgICA8Y29kZT48dmFyPkVQUkVGSVg8L3Zhcj4vc2JpbjwvY29kZT4uPC9kZD4KCiAgICAgICAgPGR0Pjxjb2RlPi0tc2hhcmVkc3RhdGVkaXI9PHZhcj5ESVI8L3Zhcj48L2NvZGU+PC9kdD4KICAgICAgICA8ZGQ+SW5zdGFsbCBtb2RpZmlhYmxlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIGluIDx2YXI+RElSPC92YXI+LgogICAgICAgICAgQnkgZGVmYXVsdCA8Y29kZT5zaGFyZWRzdGF0ZWRpcjwvY29kZT4gaXMgc2V0IHRvCiAgICAgICAgICA8Y29kZT48dmFyPlBSRUZJWDwvdmFyPi9jb208L2NvZGU+LiBUaGlzIG9wdGlvbiBpcyBvZmZlcmVkIGJ5CiAgICAgICAgICA8Y29kZT5hdXRvY29uZjwvY29kZT4gYW5kIGN1cnJlbnRseSB1bnVzZWQuPC9kZD4KCiAgICAgICAgPGR0Pjxjb2RlPi0tc3lzY29uZmRpcj08dmFyPkRJUjwvdmFyPjwvY29kZT48L2R0PgogICAgICAgIDxkZD5JbnN0YWxsIHJlYWQtb25seSBzaW5nbGUtbWFjaGluZSBkYXRhIGxpa2UgdGhlIHNlcnZlciBjb25maWd1cmF0aW9uCiAgICAgICAgICBmaWxlcyA8Y29kZT5odHRwZC5jb25mPC9jb2RlPiwgPGNvZGU+bWltZS50eXBlczwvY29kZT4sIGV0Yy4gaW4KICAgICAgICAgIDx2YXI+RElSPC92YXI+LiBCeSBkZWZhdWx0IDxjb2RlPnN5c2NvbmZkaXI8L2NvZGU+IGlzIHNldCB0bwogICAgICAgICAgPGNvZGU+PHZhcj5QUkVGSVg8L3Zhcj4vY29uZjwvY29kZT4uPC9kZD4KICAgICAgPC9kbD4KICAgIAogIAoKICA8aDM+PGEgbmFtZT0ic3lzdGVtdHlwZXMiIGlkPSJzeXN0ZW10eXBlcyI+U3lzdGVtIHR5cGVzPC9hPjwvaDM+CgogICAgPHA+VGhlc2Ugb3B0aW9ucyBhcmUgdXNlZCB0byBjcm9zcy1jb21waWxlIHRoZSBBcGFjaGUgSFRUUCBTZXJ2ZXIgdG8gcnVuIG9uCiAgICAgIGFub3RoZXIgc3lzdGVtLiBJbiBub3JtYWwgY2FzZXMsIHdoZW4gYnVpbGRpbmcgYW5kIHJ1bm5pbmcgdGhlIHNlcnZlciBvbgogICAgICB0aGUgc2FtZSBzeXN0ZW0sIHRoZXNlIG9wdGlvbnMgYXJlIG5vdCB1c2VkLjwvcD4KCiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4tLWJ1aWxkPTx2YXI+QlVJTEQ8L3Zhcj48L2NvZGU+PC9kdD4KICAgICAgPGRkPkRlZmluZXMgdGhlIHN5c3RlbSB0eXBlIG9mIHRoZSBzeXN0ZW0gb24gd2hpY2ggdGhlIHRvb2xzIGFyZSBiZWluZwogICAgICAgIGJ1aWx0LiBJdCBkZWZhdWx0cyB0byB0aGUgcmVzdWx0IG9mIHRoZSBzY3JpcHQKICAgICAgICA8Y29kZT5jb25maWcuZ3Vlc3M8L2NvZGU+LjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+LS1ob3N0PTx2YXI+SE9TVDwvdmFyPjwvY29kZT48L2R0PgogICAgICA8ZGQ+RGVmaW5lcyB0aGUgc3lzdGVtIHR5cGUgb2YgdGhlIHN5c3RlbSBvbiB3aGljaCB0aGUgc2VydmVyIHdpbGwgcnVuLgogICAgICAgIDx2YXI+SE9TVDwvdmFyPiBkZWZhdWx0cyB0byA8dmFyPkJVSUxEPC92YXI+LjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+LS10YXJnZXQ9PHZhcj5UQVJHRVQ8L3Zhcj48L2NvZGU+PC9kdD4KICAgICAgPGRkPkNvbmZpZ3VyZSBmb3IgYnVpbGRpbmcgY29tcGlsZXJzIGZvciB0aGUgc3lzdGVtIHR5cGUKICAgICAgICA8dmFyPlRBUkdFVDwvdmFyPi4gSXQgZGVmYXVsdHMgdG8gPHZhcj5IT1NUPC92YXI+LiBUaGlzIG9wdGlvbiBpcwogICAgICAgIG9mZmVyZWQgYnkgPGNvZGU+YXV0b2NvbmY8L2NvZGU+IGFuZCBub3QgbmVjZXNzYXJ5IGZvciB0aGUgQXBhY2hlIEhUVFAKICAgICAgICBTZXJ2ZXIuPC9kZD4KICAgIDwvZGw+CiAgCgogIDxoMz48YSBuYW1lPSJvcHRpb25hbGZlYXR1cmVzIiBpZD0ib3B0aW9uYWxmZWF0dXJlcyI+T3B0aW9uYWwgRmVhdHVyZXM8L2E+PC9oMz4KCiAgICA8cD5UaGVzZSBvcHRpb25zIGFyZSB1c2VkIHRvIGZpbmUgdHVuZSB0aGUgZmVhdHVyZXMgeW91ciBIVFRQIHNlcnZlciB3aWxsCiAgICAgIGhhdmUuPC9wPgoKICAgIDxoND48YSBuYW1lPSJnZW5lcmFsb3B0ZmVhdCIgaWQ9ImdlbmVyYWxvcHRmZWF0Ij5HZW5lcmFsIHN5bnRheDwvYT48L2g0PgogICAgICA8cD5HZW5lcmFsbHkgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBzeW50YXggdG8gZW5hYmxlIG9yIGRpc2FibGUgYQogICAgICAgIGZlYXR1cmU6PC9wPgoKICAgICAgPGRsPgogICAgICAgIDxkdD48Y29kZT4tLWRpc2FibGUtPHZhcj5GRUFUVVJFPC92YXI+PC9jb2RlPjwvZHQ+CiAgICAgICAgPGRkPkRvIG5vdCBpbmNsdWRlIDx2YXI+RkVBVFVSRTwvdmFyPi4gVGhpcyBpcyB0aGUgc2FtZSBhcwogICAgICAgICAgPGNvZGU+LS1lbmFibGUtPHZhcj5GRUFUVVJFPC92YXI+PW5vPC9jb2RlPi48L2RkPgoKICAgICAgICA8ZHQ+PGNvZGU+LS1lbmFibGUtPHZhcj5GRUFUVVJFPC92YXI+Wz08dmFyPkFSRzwvdmFyPl08L2NvZGU+PC9kdD4KICAgICAgICA8ZGQ+SW5jbHVkZSA8dmFyPkZFQVRVUkU8L3Zhcj4uIFRoZSBkZWZhdWx0IHZhbHVlIGZvciA8dmFyPkFSRzwvdmFyPgogICAgICAgICAgaXMgPGNvZGU+eWVzPC9jb2RlPi48L2RkPgoKICAgICAgICA8ZHQ+PGNvZGU+LS1lbmFibGUtPHZhcj5NT0RVTEU8L3Zhcj49c2hhcmVkPC9jb2RlPjwvZHQ+CiAgICAgICAgPGRkPlRoZSBjb3JyZXNwb25kaW5nIG1vZHVsZSB3aWxsIGJlIGJ1aWxkIGFzIERTTyBtb2R1bGUuCiAgICAgICAgICAgIEJ5IGRlZmF1bHQgZW5hYmxlZCBtb2R1bGVzIGFyZSBsaW5rZWQgZHluYW1pY2FsbHkuPC9kZD4KCiAgICAgICAgPGR0Pjxjb2RlPi0tZW5hYmxlLTx2YXI+TU9EVUxFPC92YXI+PXN0YXRpYzwvY29kZT48L2R0PgogICAgICAgIDxkZD5UaGUgY29ycmVzcG9uZGluZyBtb2R1bGUgd2lsbCBiZSBsaW5rZWQgc3RhdGljYWxseS48L2RkPgogICAgICA8L2RsPgoKICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+PGgzPk5vdGU8L2gzPgogICAgICAgIDxjb2RlPmNvbmZpZ3VyZTwvY29kZT4gd2lsbCBub3QgY29tcGxhaW4gYWJvdXQKICAgICAgICA8Y29kZT4tLWVuYWJsZS08dmFyPmZvbzwvdmFyPjwvY29kZT4gZXZlbiBpZiA8dmFyPmZvbzwvdmFyPiBkb2Vzbid0CiAgICAgICAgZXhpc3QsIHNvIHlvdSBuZWVkIHRvIHR5cGUgY2FyZWZ1bGx5LgogICAgICA8L2Rpdj4KICAgIAoKICAgIDxoND48YSBuYW1lPSJjaG9vc2Vtb2R1bGVzIiBpZD0iY2hvb3NlbW9kdWxlcyI+Q2hvb3NpbmcgbW9kdWxlcyB0byBjb21waWxlPC9hPjwvaDQ+CiAgICAgIDxwPk1vc3QgbW9kdWxlcyBhcmUgY29tcGlsZWQgYnkgZGVmYXVsdCBhbmQgaGF2ZSB0byBiZSBkaXNhYmxlZAogICAgICAgIGV4cGxpY2l0bHkgb3IgYnkgdXNpbmcgdGhlIGtleXdvcmQgPGNvZGU+ZmV3PC9jb2RlPiAKICAgICAgICAoc2VlIDxjb2RlPi0tZW5hYmxlLW1vZHVsZXM8L2NvZGU+LCA8Y29kZT4tLWVuYWJsZS1tb2RzLXNoYXJlZDwvY29kZT4KICAgICAgICBhbmQgPGNvZGU+LS1lbmFibGUtbW9kcy1zdGF0aWM8L2NvZGU+IGJlbG93IGZvciBmdXJ0aGVyIGV4cGxhbmF0aW9uKQogICAgICAgIG9yIDxjb2RlPi0tZW5hYmxlLW1vZHVsZXM9bm9uZTwvY29kZT4gdG8gYmUgcmVtb3ZlZCBhcyBhIGdyb3VwLjwvcD4KCiAgICAgICAgPHA+T3RoZXIgbW9kdWxlcyBhcmUgbm90IGNvbXBpbGVkIGJ5IGRlZmF1bHQgYW5kIGhhdmUgdG8gYmUgZW5hYmxlZAogICAgICAgIGV4cGxpY2l0bHkgb3IgYnkgdXNpbmcgdGhlIGtleXdvcmRzIDxjb2RlPmFsbDwvY29kZT4gb3IKICAgICAgICA8Y29kZT5yZWFsbHlhbGw8L2NvZGU+IHRvIGJlIGF2YWlsYWJsZS48L3A+CgogICAgICAgIDxwPlRvIGZpbmQgb3V0IHdoaWNoIG1vZHVsZXMgYXJlIGNvbXBpbGVkIGJ5IGRlZmF1bHQsIHJ1bgogICAgICAgIDxjb2RlPi4vY29uZmlndXJlIC1oPC9jb2RlPiBvciA8Y29kZT4uL2NvbmZpZ3VyZSAtLWhlbHA8L2NvZGU+CiAgICAgICAgYW5kIGxvb2sgdW5kZXIgPGNvZGU+T3B0aW9uYWwgRmVhdHVyZXM8L2NvZGU+LiAgU3VwcG9zZSB5b3UKICAgICAgICBhcmUgaW50ZXJlc3RlZCBpbiA8Y29kZT5tb2RfZXhhbXBsZTE8L2NvZGU+IGFuZAogICAgICAgIDxjb2RlPm1vZF9leGFtcGxlMjwvY29kZT4sIGFuZCB5b3UKICAgICAgICBzZWUgdGhpczo8L3A+CgogICAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwcmU+T3B0aW9uYWwgRmVhdHVyZXM6CiAgLi4uCiAgLS1kaXNhYmxlLWV4YW1wbGUxICAgICBleGFtcGxlIG1vZHVsZSAxCiAgLS1lbmFibGUtZXhhbXBsZTIgICAgICBleGFtcGxlIG1vZHVsZSAyCiAgLi4uPC9wcmU+PC9kaXY+CgogICAgICAgIDxwPlRoZW4gPGNvZGU+bW9kX2V4YW1wbGUxPC9jb2RlPiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsCiAgICAgICAgYW5kIHlvdSB3b3VsZCB1c2UgPGNvZGU+LS1kaXNhYmxlLWV4YW1wbGUxPC9jb2RlPiB0byBub3QKICAgICAgICBjb21waWxlIGl0LiAgPGNvZGU+bW9kX2V4YW1wbGUyPC9jb2RlPiBpcyBkaXNhYmxlZCBieQogICAgICAgIGRlZmF1bHQsIGFuZCB5b3Ugd291bGQgdXNlIDxjb2RlPi0tZW5hYmxlLWV4YW1wbGUyPC9jb2RlPgogICAgICAgIHRvIGNvbXBpbGUgaXQuPC9wPgogICAgCgogICAgPGg0PjxhIG5hbWU9Im1wbXMiIGlkPSJtcG1zIj5NdWx0aS1Qcm9jZXNzaW5nIE1vZHVsZXM8L2E+PC9oND4KICAgICAgPHA+PGEgaHJlZj0iLi4vbXBtLmh0bWwiPk11bHRpLVByb2Nlc3NpbmcgTW9kdWxlczwvYT4sIG9yIE1QTXMsIGltcGxlbWVudAogICAgICAgIHRoZSBiYXNpYyBiZWhhdmlvciBvZiB0aGUgc2VydmVyLiAgQSBzaW5nbGUgTVBNIG11c3QgYmUgYWN0aXZlIGluIG9yZGVyCiAgICAgICAgZm9yIHRoZSBzZXJ2ZXIgdG8gZnVuY3Rpb24uICBUaGUgbGlzdCBvZiBhdmFpbGFibGUgTVBNcyBhcHBlYXJzIG9uIHRoZQogICAgICAgIDxhIGhyZWY9Ii4uL21vZC8iPm1vZHVsZSBpbmRleCBwYWdlPC9hPi48L3A+CgogICAgICA8cD5NUE1zIGNhbiBiZSBidWlsdCBhcyBEU09zIGZvciBkeW5hbWljIGxvYWRpbmcgb3Igc3RhdGljYWxseSBsaW5rZWQgd2l0aAogICAgICAgIHRoZSBzZXJ2ZXIsIGFuZCBhcmUgZW5hYmxlZCB1c2luZyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6PC9wPgoKICAgICAgPGRsPgogICAgICAgIDxkdD48Y29kZT4tLXdpdGgtbXBtPU1QTTwvY29kZT48L2R0PgogICAgICAgIDxkZD4KICAgICAgICAgIDxwPkNob29zZSB0aGUgZGVmYXVsdCBNUE0gZm9yIHlvdXIgc2VydmVyLiAgSWYgTVBNcyBhcmUgYnVpbHQgYXMgRFNPCiAgICAgICAgICAgIG1vZHVsZXMgKHNlZSA8Y29kZT4tLWVuYWJsZS1tcG1zLXNoYXJlZDwvY29kZT4pLCB0aGlzIGRpcmVjdGl2ZQogICAgICAgICAgICBzZWxlY3RzIHRoZSBNUE0gd2hpY2ggd2lsbCBiZSBsb2FkZWQgaW4gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbgogICAgICAgICAgICBmaWxlLiAgT3RoZXJ3aXNlLCB0aGlzIGRpcmVjdGl2ZSBzZWxlY3RzIHRoZSBvbmx5IGF2YWlsYWJsZSBNUE0sCiAgICAgICAgICAgIHdoaWNoIHdpbGwgYmUgc3RhdGljYWxseSBsaW5rZWQgaW50byB0aGUgc2VydmVyLjwvcD4KICAgICAgICAgIDxwPklmIHRoaXMgb3B0aW9uIGlzIG9taXR0ZWQsIHRoZSA8YSBocmVmPSIuLi9tcG0uaHRtbCNkZWZhdWx0cyI+ZGVmYXVsdAogICAgICAgICAgTVBNPC9hPiBmb3IgeW91ciBvcGVyYXRpbmcgc3lzdGVtIHdpbGwgYmUgdXNlZC48L3A+CiAgICAgICAgPC9kZD4KCiAgICAgICAgPGR0Pjxjb2RlPi0tZW5hYmxlLW1wbXMtc2hhcmVkPTx2YXI+TVBNLUxJU1Q8L3Zhcj48L2NvZGU+PC9kdD4KICAgICAgICA8ZGQ+CiAgICAgICAgICA8cD5FbmFibGUgYSBsaXN0IG9mIE1QTXMgYXMgZHluYW1pYyBzaGFyZWQgbW9kdWxlcy4gIE9uZSBvZiB0aGVzZQogICAgICAgICAgICBtb2R1bGVzIG11c3QgYmUgbG9hZGVkIGR5bmFtaWNhbGx5IHVzaW5nIHRoZQogICAgICAgICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3NvLmh0bWwjbG9hZG1vZHVsZSI+TG9hZE1vZHVsZTwvYT48L2NvZGU+IGRpcmVjdGl2ZS48L3A+CiAgICAgICAgICA8cD48dmFyPk1QTS1MSVNUPC92YXI+IGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgTVBNIG5hbWVzCiAgICAgICAgICAgIGVuY2xvc2VkIGJ5IHF1b3RhdGlvbiBtYXJrcy4gIEZvciBleGFtcGxlOjwvcD4KICAgICAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgICAgICAgICAtLWVuYWJsZS1tcG1zLXNoYXJlZD0ncHJlZm9yayB3b3JrZXInCiAgICAgICAgICA8L2NvZGU+PC9wPjwvZGl2PgogICAgICAgICAgPHA+QWRkaXRpb25hbGx5IHlvdSBjYW4gdXNlIHRoZSBzcGVjaWFsIGtleXdvcmQgPGNvZGU+YWxsPC9jb2RlPiwKICAgICAgICAgICAgd2hpY2ggd2lsbCBzZWxlY3QgYWxsIE1QTXMgd2hpY2ggc3VwcG9ydCBkeW5hbWljIGxvYWRpbmcgb24gdGhlCiAgICAgICAgICAgIGN1cnJlbnQgcGxhdGZvcm0gYW5kIGJ1aWxkIHRoZW0gYXMgRFNPIG1vZHVsZXMuICBGb3IgZXhhbXBsZTo8L3A+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgICAgICAgLS1lbmFibGUtbXBtcy1zaGFyZWQ9YWxsCiAgICAgICAgICA8L2NvZGU+PC9wPjwvZGl2PgoJPC9kZD4KICAgICAgPC9kbD4KICAgIAoKICAgIDxoND48YSBuYW1lPSJtb2R1bGVzIiBpZD0ibW9kdWxlcyI+VGhpcmQtcGFydHkgbW9kdWxlczwvYT48L2g0PgogICAgICA8cD5UbyBhZGQgYWRkaXRpb25hbCB0aGlyZC1wYXJ0eSBtb2R1bGVzIHVzZSB0aGUgZm9sbG93aW5nIG9wdGlvbnM6PC9wPgoKICAgICAgPGRsPgogICAgICAgIDxkdD48Y29kZT4tLXdpdGgtbW9kdWxlPTx2YXI+bW9kdWxlLXR5cGU8L3Zhcj46PHZhcj5tb2R1bGUtZmlsZTwvdmFyPlssCiAgICAgICAgICA8dmFyPm1vZHVsZS10eXBlPC92YXI+Ojx2YXI+bW9kdWxlLWZpbGU8L3Zhcj5dPC9jb2RlPjwvZHQ+CiAgICAgICAgPGRkPjxwPkFkZCBvbmUgb3IgbW9yZSB0aGlyZC1wYXJ0eSBtb2R1bGVzIHRvIHRoZSBsaXN0IG9mIHN0YXRpY2FsbHkgbGlua2VkCiAgICAgICAgICAgIG1vZHVsZXMuIFRoZSBtb2R1bGUgc291cmNlIGZpbGUgPGNvZGU+PHZhcj5tb2R1bGUtZmlsZTwvdmFyPjwvY29kZT4KICAgICAgICAgICAgd2lsbCBiZSBzZWFyY2hlZCBpbiB0aGUgPGNvZGU+bW9kdWxlcy88dmFyPm1vZHVsZS10eXBlPC92YXI+PC9jb2RlPgogICAgICAgICAgICBzdWJkaXJlY3Rvcnkgb2YgeW91ciBBcGFjaGUgSFRUUCBzZXJ2ZXIgc291cmNlIHRyZWUuIElmIGl0IGlzIG5vdCBmb3VuZAogICAgICAgICAgICB0aGVyZSA8Y29kZT5jb25maWd1cmU8L2NvZGU+IGlzIGNvbnNpZGVyaW5nIDx2YXI+bW9kdWxlLWZpbGU8L3Zhcj4gdG8gYmUKICAgICAgICAgICAgYW4gYWJzb2x1dGUgZmlsZSBwYXRoIGFuZCB0cmllcyB0byBjb3B5IHRoZSBzb3VyY2UgZmlsZSBpbnRvIHRoZQogICAgICAgICAgICA8dmFyPm1vZHVsZS10eXBlPC92YXI+IHN1YmRpcmVjdG9yeS4gSWYgdGhlIHN1YmRpcmVjdG9yeSBkb2Vzbid0CiAgICAgICAgICAgIGV4aXN0IGl0IHdpbGwgYmUgY3JlYXRlZCBhbmQgcG9wdWxhdGVkIHdpdGggYSBzdGFuZGFyZAogICAgICAgICAgICA8Y29kZT5NYWtlZmlsZS5pbjwvY29kZT4uPC9wPgogICAgICAgICAgPHA+VGhpcyBvcHRpb24gaXMgdXNlZnVsIHRvIGFkZCBzbWFsbCBleHRlcm5hbCBtb2R1bGVzIGNvbnNpc3Rpbmcgb2YKICAgICAgICAgICAgb25lIHNvdXJjZSBmaWxlLiBGb3IgbW9yZSBjb21wbGV4IG1vZHVsZXMgeW91IHNob3VsZCByZWFkIHRoZQogICAgICAgICAgICB2ZW5kb3IncyBkb2N1bWVudGF0aW9uLjwvcD4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPjxoMz5Ob3RlPC9oMz4KICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gYnVpbGQgYSBEU08gbW9kdWxlIGluc3RlYWQgb2YgYSBzdGF0aWNhbGx5IGxpbmtlZAogICAgICAgICAgICB1c2UgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL2FweHMuaHRtbCI+YXB4czwvYT48L2NvZGU+LjwvZGl2PgogICAgICAgIDwvZGQ+CiAgICAgIDwvZGw+CiAgICAKCiAgICA8aDQ+PGEgbmFtZT0ib3RoZXJvcHRmZWF0IiBpZD0ib3RoZXJvcHRmZWF0Ij5DdW11bGF0aXZlIGFuZCBvdGhlciBvcHRpb25zPC9hPjwvaDQ+CiAgICAgIDxkbD4KICAgICAgICA8ZHQ+PGNvZGU+LS1lbmFibGUtbWFpbnRhaW5lci1tb2RlPC9jb2RlPjwvZHQ+CiAgICAgICAgPGRkPlR1cm4gb24gZGVidWdnaW5nIGFuZCBjb21waWxlIHRpbWUgd2FybmluZ3MKICAgICAgICAgICAgYW5kIGxvYWQgYWxsIGNvbXBpbGVkIG1vZHVsZXMuPC9kZD4KCiAgICAgICAgPGR0Pjxjb2RlPi0tZW5hYmxlLW1vZHMtc2hhcmVkPTx2YXI+TU9EVUxFLUxJU1Q8L3Zhcj48L2NvZGU+PC9kdD4KICAgICAgICA8ZGQ+CiAgICAgICAgICA8cD5EZWZpbmVzIGEgbGlzdCBvZiBtb2R1bGVzIHRvIGJlIGVuYWJsZWQgYW5kIGJ1aWxkIGFzIGR5bmFtaWMKICAgICAgICAgICAgc2hhcmVkIG1vZHVsZXMuIFRoaXMgbWVhbiwgdGhlc2UgbW9kdWxlIGhhdmUgdG8gYmUgbG9hZGVkCiAgICAgICAgICAgIGR5bmFtaWNhbGx5IGJ5IHVzaW5nIHRoZSAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9zby5odG1sI2xvYWRtb2R1bGUiPkxvYWRNb2R1bGU8L2E+PC9jb2RlPiBkaXJlY3RpdmUuPC9wPgogICAgICAgICAgPHA+PHZhcj5NT0RVTEUtTElTVDwvdmFyPiBpcyBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIG1vZHVsZW5hbWVzCiAgICAgICAgICAgIGVuY2xvc2VkIGJ5IHF1b3RhdGlvbiBtYXJrcy4gVGhlIG1vZHVsZSBuYW1lcyBhcmUgZ2l2ZW4gd2l0aG91dCB0aGUKICAgICAgICAgICAgcHJlY2VkaW5nIDxjb2RlPm1vZF88L2NvZGU+LiBGb3IgZXhhbXBsZTo8L3A+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgICAgICAgLS1lbmFibGUtbW9kcy1zaGFyZWQ9J2hlYWRlcnMgcmV3cml0ZSBkYXYnCiAgICAgICAgICA8L2NvZGU+PC9wPjwvZGl2PgogICAgICAgICAgPHA+QWRkaXRpb25hbGx5IHlvdSBjYW4gdXNlIHRoZSBzcGVjaWFsIGtleXdvcmRzIDxjb2RlPnJlYWxseWFsbDwvY29kZT4sCiAgICAgICAgICAgIDxjb2RlPmFsbDwvY29kZT4sIDxjb2RlPm1vc3Q8L2NvZGU+IGFuZCA8Y29kZT5mZXc8L2NvZGU+LgogICAgICAgICAgICBGb3IgZXhhbXBsZSw8L3A+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgICAgICAgLS1lbmFibGUtbW9kcy1zaGFyZWQ9bW9zdAogICAgICAgICAgPC9jb2RlPjwvcD48L2Rpdj4KICAgICAgICAgIDxwPndpbGwgY29tcGlsZSBtb3N0IG1vZHVsZXMgYW5kIGJ1aWxkIHRoZW0gYXMgRFNPIG1vZHVsZXMsPC9wPgogICAgICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgICAgICAgIC0tZW5hYmxlLW1vZHMtc2hhcmVkPWZldwogICAgICAgICAgPC9jb2RlPjwvcD48L2Rpdj4KICAgICAgICAgIDxwPndpbGwgb25seSBjb21waWxlIGEgdmVyeSBiYXNpYyBzZXQgb2YgbW9kdWxlcy48L3A+CiAgICAgICAgICA8cD5UaGUgZGVmYXVsdCBzZXQgaXMgPGNvZGU+bW9zdDwvY29kZT4uPC9wPgogICAgICAgICAgICAKICAgICAgICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3NvLmh0bWwjbG9hZG1vZHVsZSI+TG9hZE1vZHVsZTwvYT48L2NvZGU+IGRpcmVjdGl2ZXMgZm9yCiAgICAgICAgICB0aGUgY2hvc2VuIG1vZHVsZXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBpbiB0aGUgbWFpbgogICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlLiBCeSBkZWZhdWx0LCBhbGwgdGhvc2UgZGlyZWN0aXZlcyB3aWxsIGJlIGNvbW1lbnRlZAogICAgICAgICAgb3V0IGV4Y2VwdCBmb3IgdGhlIG1vZHVsZXMgdGhhdCBhcmUgZWl0aGVyIHJlcXVpcmVkIG9yIGV4cGxpY2l0bHkgc2VsZWN0ZWQKICAgICAgICAgIGJ5IGEgY29uZmlndXJlIDxjb2RlPi0tZW5hYmxlLWZvbzwvY29kZT4gYXJndW1lbnQuIFlvdSBjYW4gY2hhbmdlIHRoZSBzZXQKICAgICAgICAgIG9mIGxvYWRlZCBtb2R1bGVzIGJ5IGFjdGl2YXRpbmcgb3IgZGVhY3RpdmF0aW5nIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3NvLmh0bWwjbG9hZG1vZHVsZSI+TG9hZE1vZHVsZTwvYT48L2NvZGU+IGRpcmVjdGl2ZXMgaW4KICAgICAgICAgIDxjb2RlPmh0dHBkLmNvbmY8L2NvZGU+LiBJbiBhZGRpdGlvbiB0aGUKICAgICAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2Rfc28uaHRtbCNsb2FkbW9kdWxlIj5Mb2FkTW9kdWxlPC9hPjwvY29kZT4gZGlyZWN0aXZlcyBmb3IgYWxsCiAgICAgICAgICBidWlsdCBtb2R1bGVzIGNhbiBiZSBhY3RpdmF0ZWQgdmlhIHRoZSBjb25maWd1cmUgb3B0aW9uCiAgICAgICAgICA8Y29kZT4tLWVuYWJsZS1sb2FkLWFsbC1tb2R1bGVzPC9jb2RlPi48L3A+CiAgICAgICAgPC9kZD4KCiAgICAgICAgPGR0Pjxjb2RlPi0tZW5hYmxlLW1vZHMtc3RhdGljPTx2YXI+TU9EVUxFLUxJU1Q8L3Zhcj48L2NvZGU+PC9kdD4KICAgICAgICA8ZGQ+VGhpcyBvcHRpb24gYmVoYXZlcyBzaW1pbGFyIHRvIDxjb2RlPi0tZW5hYmxlLW1vZHMtc2hhcmVkPC9jb2RlPiwKICAgICAgICAgIGJ1dCB3aWxsIGxpbmsgdGhlIGdpdmVuIG1vZHVsZXMgc3RhdGljYWxseS4gVGhpcyBtZWFuLCB0aGVzZSBtb2R1bGVzCiAgICAgICAgICB3aWxsIGFsd2F5cyBiZSBwcmVzZW50IHdoaWxlIHJ1bm5pbmcgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL2h0dHBkLmh0bWwiPmh0dHBkPC9hPjwvY29kZT4uIFRoZXkgbmVlZAogICAgICAgICAgbm90IGJlIGxvYWRlZCB3aXRoIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2Rfc28uaHRtbCNsb2FkbW9kdWxlIj5Mb2FkTW9kdWxlPC9hPjwvY29kZT4uPC9kZD4KCiAgICAgICAgPGR0Pjxjb2RlPi0tZW5hYmxlLW1vZHVsZXM9PHZhcj5NT0RVTEUtTElTVDwvdmFyPjwvY29kZT48L2R0PgogICAgICAgIDxkZD5UaGlzIG9wdGlvbiBiZWhhdmVzIGxpa2UgdG8gPGNvZGU+LS1lbmFibGUtbW9kcy1zaGFyZWQ8L2NvZGU+LAogICAgICAgICAgYW5kIHdpbGwgYWxzbyBsaW5rIHRoZSBnaXZlbiBtb2R1bGVzIGR5bmFtaWNhbGx5LiBUaGUgc3BlY2lhbAogICAgICAgICAga2V5d29yZCA8Y29kZT5ub25lPC9jb2RlPiBkaXNhYmxlcyB0aGUgYnVpbGQgb2YgYWxsIG1vZHVsZXMuPC9kZD4KCiAgICAgICAgPGR0Pjxjb2RlPi0tZW5hYmxlLXY0LW1hcHBlZDwvY29kZT48L2R0PgogICAgICAgIDxkZD5BbGxvdyBJUHY2IHNvY2tldHMgdG8gaGFuZGxlIElQdjQgY29ubmVjdGlvbnMuPC9kZD4KCiAgICAgICAgPGR0Pjxjb2RlPi0td2l0aC1wb3J0PTx2YXI+UE9SVDwvdmFyPjwvY29kZT48L2R0PgogICAgICAgIDxkZD5UaGlzIGRlZmluZXMgdGhlIHBvcnQgb24gd2hpY2ggPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL2h0dHBkLmh0bWwiPmh0dHBkPC9hPjwvY29kZT4gd2lsbCBsaXN0ZW4uCiAgICAgICAgICBUaGlzIHBvcnQgbnVtYmVyIGlzIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKICAgICAgICAgIDxjb2RlPmh0dHBkLmNvbmY8L2NvZGU+LiBUaGUgZGVmYXVsdCBpcyA4MC48L2RkPgoKICAgICAgICA8ZHQ+PGNvZGU+LS13aXRoLXByb2dyYW0tbmFtZTwvY29kZT48L2R0PgogICAgICAgIDxkZD5EZWZpbmUgYW4gYWx0ZXJuYXRpdmUgZXhlY3V0YWJsZSBuYW1lLiBUaGUgZGVmYXVsdCBpcwogICAgICAgICAgPGNvZGU+aHR0cGQ8L2NvZGU+LjwvZGQ+CiAgICAgIDwvZGw+CiAgICAKICAKCiAgPGgzPjxhIG5hbWU9InBhY2thZ2VzIiBpZD0icGFja2FnZXMiPk9wdGlvbmFsIHBhY2thZ2VzPC9hPjwvaDM+CiAgICA8cD5UaGVzZSBvcHRpb25zIGFyZSB1c2VkIHRvIGRlZmluZSBvcHRpb25hbCBwYWNrYWdlcy48L3A+CgogICAgPGg0PjxhIG5hbWU9ImdlbmVyYWxwYWNrYWdlcyIgaWQ9ImdlbmVyYWxwYWNrYWdlcyI+R2VuZXJhbCBzeW50YXg8L2E+PC9oND4KICAgICAgPHA+R2VuZXJhbGx5IHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgc3ludGF4IHRvIGRlZmluZSBhbiBvcHRpb25hbAogICAgICAgIHBhY2thZ2U6PC9wPgoKICAgICAgPGRsPgogICAgICAgIDxkdD48Y29kZT4tLXdpdGgtPHZhcj5QQUNLQUdFPC92YXI+Wz08dmFyPkFSRzwvdmFyPl08L2NvZGU+PC9kdD4KICAgICAgICA8ZGQ+VXNlIHRoZSBwYWNrYWdlIDx2YXI+UEFDS0FHRTwvdmFyPi4gVGhlIGRlZmF1bHQgdmFsdWUgZm9yCiAgICAgICAgICA8dmFyPkFSRzwvdmFyPiBpcyA8Y29kZT55ZXM8L2NvZGU+LjwvZGQ+CgogICAgICAgIDxkdD48Y29kZT4tLXdpdGhvdXQtPHZhcj5QQUNLQUdFPC92YXI+PC9jb2RlPjwvZHQ+CiAgICAgICAgPGRkPkRvIG5vdCB1c2UgdGhlIHBhY2thZ2UgPHZhcj5QQUNLQUdFPC92YXI+LiBUaGlzIGlzIHRoZSBzYW1lIGFzCiAgICAgICAgICA8Y29kZT4tLXdpdGgtPHZhcj5QQUNLQUdFPC92YXI+PW5vPC9jb2RlPi4gVGhpcyBvcHRpb24gaXMgcHJvdmlkZWQgYnkKICAgICAgICAgIDxjb2RlPmF1dG9jb25mPC9jb2RlPiBidXQgbm90IHZlcnkgdXNlZnVsIGZvciB0aGUgQXBhY2hlIEhUVFAKICAgICAgICAgIFNlcnZlci48L2RkPgogICAgICA8L2RsPgogICAgCgogICAgCgogICAgPGg0PjxhIG5hbWU9InBhY2thZ2VvcHQiIGlkPSJwYWNrYWdlb3B0Ij5TcGVjaWZpYyBwYWNrYWdlczwvYT48L2g0PgogICAgICA8ZGw+CiAgICAgICAgPGR0Pjxjb2RlPi0td2l0aC1hcHI9PHZhcj5ESVI8L3Zhcj58PHZhcj5GSUxFPC92YXI+PC9jb2RlPjwvZHQ+CiAgICAgICAgPGRkPlRoZSA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuLi9nbG9zc2FyeS5odG1sI2FwciIgdGl0bGU9InNlZSBnbG9zc2FyeSI+QXBhY2hlIFBvcnRhYmxlIFJ1bnRpbWU8L2E+IChBUFIpCiAgICAgICAgICBpcyBwYXJ0IG9mIHRoZSBodHRwZAogICAgICAgICAgc291cmNlIGRpc3RyaWJ1dGlvbiBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGJ1aWxkIHRvZ2V0aGVyIHdpdGggdGhlCiAgICAgICAgICBIVFRQIHNlcnZlci4gSWYgeW91IHdhbnQgdG8gdXNlIGFuIGFscmVhZHkgaW5zdGFsbGVkIEFQUiBpbnN0ZWFkIHlvdQogICAgICAgICAgaGF2ZSB0byB0ZWxsIDxjb2RlPmNvbmZpZ3VyZTwvY29kZT4gdGhlIHBhdGggdG8gdGhlCiAgICAgICAgICA8Y29kZT5hcHItY29uZmlnPC9jb2RlPiBzY3JpcHQuIFlvdSBtYXkgc2V0IHRoZSBhYnNvbHV0ZSBwYXRoIGFuZCBuYW1lCiAgICAgICAgICBvciB0aGUgZGlyZWN0b3J5IHRvIHRoZSBpbnN0YWxsZWQgQVBSLiA8Y29kZT5hcHItY29uZmlnPC9jb2RlPiBtdXN0CiAgICAgICAgICBleGlzdCB3aXRoaW4gdGhpcyBkaXJlY3Rvcnkgb3IgdGhlIHN1YmRpcmVjdG9yeQogICAgICAgICAgPGNvZGU+YmluPC9jb2RlPi48L2RkPgoKICAgICAgICA8ZHQ+PGNvZGU+LS13aXRoLWFwci11dGlsPTx2YXI+RElSPC92YXI+fDx2YXI+RklMRTwvdmFyPjwvY29kZT48L2R0PgogICAgICAgIDxkZD5UaGUgQXBhY2hlIFBvcnRhYmxlIFJ1bnRpbWUgVXRpbGl0aWVzIChBUFUpIGFyZSBwYXJ0IG9mIHRoZQogICAgICAgICAgaHR0cGQgc291cmNlIGRpc3RyaWJ1dGlvbiBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGJ1aWxkCiAgICAgICAgICB0b2dldGhlciB3aXRoIHRoZSBIVFRQIHNlcnZlci4gSWYgeW91IHdhbnQgdG8gdXNlIGFuIGFscmVhZHkgaW5zdGFsbGVkCiAgICAgICAgICBBUFUgaW5zdGVhZCB5b3UgaGF2ZSB0byB0ZWxsIDxjb2RlPmNvbmZpZ3VyZTwvY29kZT4gdGhlIHBhdGggdG8gdGhlCiAgICAgICAgICA8Y29kZT5hcHUtY29uZmlnPC9jb2RlPiBzY3JpcHQuIFlvdSBtYXkgc2V0IHRoZSBhYnNvbHV0ZSBwYXRoIGFuZCBuYW1lCiAgICAgICAgICBvciB0aGUgZGlyZWN0b3J5IHRvIHRoZSBpbnN0YWxsZWQgQVBVLiA8Y29kZT5hcHUtY29uZmlnPC9jb2RlPiBtdXN0CiAgICAgICAgICBleGlzdCB3aXRoaW4gdGhpcyBkaXJlY3Rvcnkgb3IgdGhlIHN1YmRpcmVjdG9yeQogICAgICAgICAgPGNvZGU+YmluPC9jb2RlPi48L2RkPgoKICAgICAgICA8ZHQ+PGNvZGU+LS13aXRoLXNzbD08dmFyPkRJUjwvdmFyPjwvY29kZT48L2R0PgogICAgICAgIDxkZD5JZiA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3NzbC5odG1sIj5tb2Rfc3NsPC9hPjwvY29kZT4gaGFzIGJlZW4gZW5hYmxlZCA8Y29kZT5jb25maWd1cmU8L2NvZGU+CiAgICAgICAgICBzZWFyY2hlcyBmb3IgYW4gaW5zdGFsbGVkIE9wZW5TU0wuIFlvdSBjYW4gc2V0IHRoZSBkaXJlY3RvcnkgcGF0aAogICAgICAgICAgdG8gdGhlIFNTTC9UTFMgdG9vbGtpdCBpbnN0ZWFkLjwvZGQ+CgogICAgICAgIDxkdD48Y29kZT4tLXdpdGgtej08dmFyPkRJUjwvdmFyPjwvY29kZT48L2R0PgogICAgICAgIDxkZD48Y29kZT5jb25maWd1cmU8L2NvZGU+IHNlYXJjaGVzIGF1dG9tYXRpY2FsbHkgZm9yIGFuIGluc3RhbGxlZAogICAgICAgICAgPGNvZGU+emxpYjwvY29kZT4gbGlicmFyeSBpZiB5b3VyIHNvdXJjZSBjb25maWd1cmF0aW9uIHJlcXVpcmVzIG9uZQogICAgICAgICAgKGUuZy4sIHdoZW4gPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9kZWZsYXRlLmh0bWwiPm1vZF9kZWZsYXRlPC9hPjwvY29kZT4gaXMgZW5hYmxlZCkuIFlvdSBjYW4gc2V0IHRoZQogICAgICAgICAgZGlyZWN0b3J5IHBhdGggdG8gdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkgaW5zdGVhZC48L2RkPgogICAgICA8L2RsPgoKICAgICAgPHA+U2V2ZXJhbCBmZWF0dXJlcyBvZiB0aGUgQXBhY2hlIEhUVFAgU2VydmVyLCBpbmNsdWRpbmcKICAgICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGhuX2RibS5odG1sIj5tb2RfYXV0aG5fZGJtPC9hPjwvY29kZT4gYW5kIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcmV3cml0ZS5odG1sIj5tb2RfcmV3cml0ZTwvYT48L2NvZGU+J3MgREJNCiAgICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9yZXdyaXRlLmh0bWwjcmV3cml0ZW1hcCI+UmV3cml0ZU1hcDwvYT48L2NvZGU+IHVzZSBzaW1wbGUKICAgICAgICBrZXkvdmFsdWUgZGF0YWJhc2VzIGZvciBxdWljayBsb29rdXBzIG9mIGluZm9ybWF0aW9uLiBTREJNIGlzIGluY2x1ZGVkCiAgICAgICAgaW4gdGhlIEFQVSwgc28gdGhpcyBkYXRhYmFzZSBpcyBhbHdheXMgYXZhaWxhYmxlLiBJZiB5b3Ugd291bGQgbGlrZSB0bwogICAgICAgIHVzZSBvdGhlciBkYXRhYmFzZSB0eXBlcywgdXNlIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyB0byBlbmFibGUKICAgICAgICB0aGVtOjwvcD4KCiAgICAgIDxkbD4KICAgICAgICA8ZHQ+PGNvZGU+LS13aXRoLWdkYm1bPTx2YXI+cGF0aDwvdmFyPl08L2NvZGU+PC9kdD4KICAgICAgICA8ZGQ+SWYgbm8gPHZhcj5wYXRoPC92YXI+IGlzIHNwZWNpZmllZCwgPGNvZGU+Y29uZmlndXJlPC9jb2RlPiB3aWxsCiAgICAgICAgICBzZWFyY2ggZm9yIHRoZSBpbmNsdWRlIGZpbGVzIGFuZCBsaWJyYXJpZXMgb2YgYSBHTlUgREJNCiAgICAgICAgICBpbnN0YWxsYXRpb24gaW4gdGhlIHVzdWFsIHNlYXJjaCBwYXRocy4gQW4gZXhwbGljaXQKICAgICAgICAgIDx2YXI+cGF0aDwvdmFyPiB3aWxsIGNhdXNlIDxjb2RlPmNvbmZpZ3VyZTwvY29kZT4gdG8gbG9vayBpbgogICAgICAgICAgPGNvZGU+PHZhcj5wYXRoPC92YXI+L2xpYjwvY29kZT4gYW5kCiAgICAgICAgICA8Y29kZT48dmFyPnBhdGg8L3Zhcj4vaW5jbHVkZTwvY29kZT4gZm9yIHRoZSByZWxldmFudCBmaWxlcy4KICAgICAgICAgIEZpbmFsbHksIHRoZSA8dmFyPnBhdGg8L3Zhcj4gbWF5IHNwZWNpZnkgc3BlY2lmaWMgaW5jbHVkZSBhbmQKICAgICAgICAgIGxpYnJhcnkgcGF0aHMgc2VwYXJhdGVkIGJ5IGEgY29sb24uPC9kZD4KCiAgICAgICAgPGR0Pjxjb2RlPi0td2l0aC1uZGJtWz08dmFyPnBhdGg8L3Zhcj5dPC9jb2RlPjwvZHQ+CiAgICAgICAgPGRkPkxpa2UgPGNvZGU+LS13aXRoLWdkYm08L2NvZGU+LCBidXQgc2VhcmNoZXMgZm9yIGEgTmV3IERCTQogICAgICAgICAgaW5zdGFsbGF0aW9uLjwvZGQ+CgogICAgICAgIDxkdD48Y29kZT4tLXdpdGgtYmVya2VsZXktZGJbPTx2YXI+cGF0aDwvdmFyPl08L2NvZGU+PC9kdD4KICAgICAgICA8ZGQ+TGlrZSA8Y29kZT4tLXdpdGgtZ2RibTwvY29kZT4sIGJ1dCBzZWFyY2hlcyBmb3IgYSBCZXJrZWxleSBEQgogICAgICAgICAgaW5zdGFsbGF0aW9uLjwvZGQ+CiAgICAgIDwvZGw+CgogICAgICA8ZGl2IGNsYXNzPSJub3RlIj48aDM+Tm90ZTwvaDM+CiAgICAgICAgPHA+VGhlIERCTSBvcHRpb25zIGFyZSBwcm92aWRlZCBieSB0aGUgQVBVIGFuZCBwYXNzZWQgdGhyb3VnaCB0byBpdHMKICAgICAgICAgIGNvbmZpZ3VyYXRpb24gc2NyaXB0LiBUaGV5IGFyZSB1c2VsZXNzIHdoZW4gdXNpbmcgYW4gYWxyZWFkeQogICAgICAgICAgaW5zdGFsbGVkIEFQVSBkZWZpbmVkIGJ5IDxjb2RlPi0td2l0aC1hcHItdXRpbDwvY29kZT4uPC9wPgogICAgICAgIDxwPllvdSBtYXkgdXNlIG1vcmUgdGhlbiBvbmUgREJNIGltcGxlbWVudGF0aW9uIHRvZ2V0aGVyIHdpdGggeW91cgogICAgICAgICAgSFRUUCBzZXJ2ZXIuIFRoZSBhcHByb3ByaWF0ZWQgREJNIHR5cGUgd2lsbCBiZSBjb25maWd1cmVkIHdpdGhpbgogICAgICAgICAgdGhlIHJ1bnRpbWUgY29uZmlndXJhdGlvbiBhdCBlYWNoIHRpbWUuPC9wPgogICAgICA8L2Rpdj4KICAgIAogIAoKICA8aDM+PGEgbmFtZT0ic3VwcG9ydG9wdCIgaWQ9InN1cHBvcnRvcHQiPk9wdGlvbnMgZm9yIHN1cHBvcnQgcHJvZ3JhbXM8L2E+PC9oMz4KICAgIDxkbD4KICAgICAgPGR0Pjxjb2RlPi0tZW5hYmxlLXN0YXRpYy1zdXBwb3J0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5CdWlsZCBhIHN0YXRpY2FsbHkgbGlua2VkIHZlcnNpb24gb2YgdGhlIHN1cHBvcnQgYmluYXJpZXMuIFRoaXMKICAgICAgICBtZWFucywgYSBzdGFuZC1hbG9uZSBleGVjdXRhYmxlIHdpbGwgYmUgYnVpbHQgd2l0aCBhbGwgdGhlIG5lY2Vzc2FyeQogICAgICAgIGxpYnJhcmllcyBpbnRlZ3JhdGVkLiBPdGhlcndpc2UgdGhlIHN1cHBvcnQgYmluYXJpZXMgYXJlIGxpbmtlZAogICAgICAgIGR5bmFtaWNhbGx5IGJ5IGRlZmF1bHQuPC9kZD4KCiAgICAgIDxkdD48Y29kZT4tLWVuYWJsZS1zdWV4ZWM8L2NvZGU+PC9kdD4KICAgICAgPGRkPlVzZSB0aGlzIG9wdGlvbiB0byBlbmFibGUgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL3N1ZXhlYy5odG1sIj5zdWV4ZWM8L2E+PC9jb2RlPiwgd2hpY2ggYWxsb3dzIHlvdSB0byBzZXQKICAgICAgICB1aWQgYW5kIGdpZCBmb3Igc3Bhd25lZCBwcm9jZXNzZXMuIDxzdHJvbmc+RG8gbm90IHVzZSB0aGlzCiAgICAgICAgb3B0aW9uIHVubGVzcyB5b3UgdW5kZXJzdGFuZCBhbGwgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBvZgogICAgICAgIHJ1bm5pbmcgYSBzdWlkIGJpbmFyeSBvbiB5b3VyIHNlcnZlci48L3N0cm9uZz4gRnVydGhlciBvcHRpb25zCiAgICAgICAgdG8gY29uZmlndXJlIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuLi9wcm9ncmFtcy9zdWV4ZWMuaHRtbCI+c3VleGVjPC9hPjwvY29kZT4gYXJlIGRlc2NyaWJlZCA8YSBocmVmPSIjc3VleGVjIj5iZWxvdzwvYT4uPC9kZD4KICAgIDwvZGw+CgogICAgPHA+SXQgaXMgcG9zc2libGUgdG8gY3JlYXRlIGEgc3RhdGljYWxseSBsaW5rZWQgYmluYXJ5IG9mIGEgc2luZ2xlCiAgICAgIHN1cHBvcnQgcHJvZ3JhbSBieSB1c2luZyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6PC9wPgoKICAgIDxkbD4KICAgICAgPGR0Pjxjb2RlPi0tZW5hYmxlLXN0YXRpYy1hYjwvY29kZT48L2R0PgogICAgICA8ZGQ+QnVpbGQgYSBzdGF0aWNhbGx5IGxpbmtlZCB2ZXJzaW9uIG9mIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuLi9wcm9ncmFtcy9hYi5odG1sIj5hYjwvYT48L2NvZGU+LjwvZGQ+CgogICAgICAKICAgICAgPGR0Pjxjb2RlPi0tZW5hYmxlLXN0YXRpYy1jaGVja2dpZDwvY29kZT48L2R0PgogICAgICA8ZGQ+QnVpbGQgYSBzdGF0aWNhbGx5IGxpbmtlZCB2ZXJzaW9uIG9mIDxjb2RlPmNoZWNrZ2lkPC9jb2RlPi48L2RkPgoKICAgICAgPGR0Pjxjb2RlPi0tZW5hYmxlLXN0YXRpYy1odGRibTwvY29kZT48L2R0PgogICAgICA8ZGQ+QnVpbGQgYSBzdGF0aWNhbGx5IGxpbmtlZCB2ZXJzaW9uIG9mIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuLi9wcm9ncmFtcy9odGRibS5odG1sIj5odGRibTwvYT48L2NvZGU+LjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+LS1lbmFibGUtc3RhdGljLWh0ZGlnZXN0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5CdWlsZCBhIHN0YXRpY2FsbHkgbGlua2VkIHZlcnNpb24gb2YgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL2h0ZGlnZXN0Lmh0bWwiPmh0ZGlnZXN0PC9hPjwvY29kZT4uPC9kZD4KCiAgICAgIDxkdD48Y29kZT4tLWVuYWJsZS1zdGF0aWMtaHRwYXNzd2Q8L2NvZGU+PC9kdD4KICAgICAgPGRkPkJ1aWxkIGEgc3RhdGljYWxseSBsaW5rZWQgdmVyc2lvbiBvZiA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi4vcHJvZ3JhbXMvaHRwYXNzd2QuaHRtbCI+aHRwYXNzd2Q8L2E+PC9jb2RlPi48L2RkPgoKICAgICAgPGR0Pjxjb2RlPi0tZW5hYmxlLXN0YXRpYy1sb2dyZXNvbHZlPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5CdWlsZCBhIHN0YXRpY2FsbHkgbGlua2VkIHZlcnNpb24gb2YgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL2xvZ3Jlc29sdmUuaHRtbCI+bG9ncmVzb2x2ZTwvYT48L2NvZGU+LjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+LS1lbmFibGUtc3RhdGljLXJvdGF0ZWxvZ3M8L2NvZGU+PC9kdD4KICAgICAgPGRkPkJ1aWxkIGEgc3RhdGljYWxseSBsaW5rZWQgdmVyc2lvbiBvZiA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi4vcHJvZ3JhbXMvcm90YXRlbG9ncy5odG1sIj5yb3RhdGVsb2dzPC9hPjwvY29kZT4uPC9kZD4KICAgIDwvZGw+CgogICAgPGg0PjxhIG5hbWU9InN1ZXhlYyIgaWQ9InN1ZXhlYyI+PGNvZGU+c3VleGVjPC9jb2RlPiBjb25maWd1cmF0aW9uIG9wdGlvbnM8L2E+PC9oND4KICAgICAgCiAgICAgIDxwPlRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgdXNlZCB0byBmaW5lIHR1bmUgdGhlIGJlaGF2aW9yIG9mIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuLi9wcm9ncmFtcy9zdWV4ZWMuaHRtbCI+c3VleGVjPC9hPjwvY29kZT4uIFNlZSA8YSBocmVmPSJzdWV4ZWMuaHRtbCNpbnN0YWxsIj5Db25maWd1cmluZyBhbmQgaW5zdGFsbGluZyBzdUVYRUM8L2E+CiAgICAgICAgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uPC9wPgoKICAgICAgPGRsPgogICAgICAgIDxkdD48Y29kZT4tLXdpdGgtc3VleGVjLWJpbjwvY29kZT48L2R0PgogICAgICAgIDxkZD5UaGlzIGRlZmluZXMgdGhlIHBhdGggdG8gPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL3N1ZXhlYy5odG1sIj5zdWV4ZWM8L2E+PC9jb2RlPiBiaW5hcnkuCiAgICAgICAgRGVmYXVsdCBpcyA8Y29kZT4tLXNiaW5kaXI8L2NvZGU+IChzZWUgPGEgaHJlZj0iI2RpcmVjdG9yeWZpbmV0dW5pbmciPkZpbmUgdHVuaW5nIG9mIGluc3RhbGxhdGlvbiBkaXJlY3RvcmllczwvYT4pLjwvZGQ+CgogICAgICAgIDxkdD48Y29kZT4tLXdpdGgtc3VleGVjLWNhbGxlcjwvY29kZT48L2R0PgogICAgICAgIDxkZD5UaGlzIGRlZmluZXMgdGhlIHVzZXIgYWxsb3dlZCB0byBjYWxsIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuLi9wcm9ncmFtcy9zdWV4ZWMuaHRtbCI+c3VleGVjPC9hPjwvY29kZT4uCiAgICAgICAgICBJdCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHVzZXIgdW5kZXIgd2hpY2gKICAgICAgICAgIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuLi9wcm9ncmFtcy9odHRwZC5odG1sIj5odHRwZDwvYT48L2NvZGU+IG5vcm1hbGx5IHJ1bnMuPC9kZD4KCiAgICAgICAgPGR0Pjxjb2RlPi0td2l0aC1zdWV4ZWMtZG9jcm9vdDwvY29kZT48L2R0PgogICAgICAgIDxkZD5UaGlzIGRlZmluZXMgdGhlIGRpcmVjdG9yeSB0cmVlIHVuZGVyIHdoaWNoIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuLi9wcm9ncmFtcy9zdWV4ZWMuaHRtbCI+c3VleGVjPC9hPjwvY29kZT4gYWNjZXNzIGlzIGFsbG93ZWQgZm9yIGV4ZWN1dGFibGVzLiBEZWZhdWx0IHZhbHVlIGlzCiAgICAgICAgICA8Y29kZT4tLWRhdGFkaXIvaHRkb2NzPC9jb2RlPi48L2RkPgoKICAgICAgICA8ZHQ+PGNvZGU+LS13aXRoLXN1ZXhlYy1naWRtaW48L2NvZGU+PC9kdD4KICAgICAgICA8ZGQ+RGVmaW5lIHRoaXMgYXMgdGhlIGxvd2VzdCBHSUQgYWxsb3dlZCB0byBiZSBhIHRhcmdldCB1c2VyIGZvcgogICAgICAgICAgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL3N1ZXhlYy5odG1sIj5zdWV4ZWM8L2E+PC9jb2RlPi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAwLjwvZGQ+CgogICAgICAgIDxkdD48Y29kZT4tLXdpdGgtc3VleGVjLWxvZ2ZpbGU8L2NvZGU+PC9kdD4KICAgICAgICA8ZGQ+VGhpcyBkZWZpbmVzIHRoZSBmaWxlbmFtZSBvZiB0aGUgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL3N1ZXhlYy5odG1sIj5zdWV4ZWM8L2E+PC9jb2RlPiBsb2dmaWxlLgogICAgICAgICAgQnkgZGVmYXVsdCB0aGUgbG9nZmlsZSBpcyBuYW1lZCA8Y29kZT5zdWV4ZWNfbG9nPC9jb2RlPiBhbmQgbG9jYXRlZCBpbgogICAgICAgICAgPGNvZGU+LS1sb2dmaWxlZGlyPC9jb2RlPi48L2RkPgoKICAgICAgICA8ZHQ+PGNvZGU+LS13aXRoLXN1ZXhlYy1zYWZlcGF0aDwvY29kZT48L2R0PgogICAgICAgIDxkZD5EZWZpbmUgdGhlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA8Y29kZT5QQVRIPC9jb2RlPiB0bwogICAgICAgICAgYmUgc2V0IGZvciBwcm9jZXNzZXMgc3RhcnRlZCBieSA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi4vcHJvZ3JhbXMvc3VleGVjLmh0bWwiPnN1ZXhlYzwvYT48L2NvZGU+LiBEZWZhdWx0CiAgICAgICAgICB2YWx1ZSBpcyA8Y29kZT4vdXNyL2xvY2FsL2JpbjovdXNyL2JpbjovYmluPC9jb2RlPi48L2RkPgoKICAgICAgICA8ZHQ+PGNvZGU+LS13aXRoLXN1ZXhlYy11c2VyZGlyPC9jb2RlPjwvZHQ+CiAgICAgICAgPGRkPlRoaXMgZGVmaW5lcyB0aGUgc3ViZGlyZWN0b3J5IHVuZGVyIHRoZSB1c2VyJ3MgZGlyZWN0b3J5IHRoYXQKICAgICAgICAgIGNvbnRhaW5zIGFsbCBleGVjdXRhYmxlcyBmb3Igd2hpY2ggPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL3N1ZXhlYy5odG1sIj5zdWV4ZWM8L2E+PC9jb2RlPiBhY2Nlc3MKICAgICAgICAgIGlzIGFsbG93ZWQuIFRoaXMgc2V0dGluZyBpcyBuZWNlc3Nhcnkgd2hlbiB5b3Ugd2FudCB0byB1c2UKICAgICAgICAgIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuLi9wcm9ncmFtcy9zdWV4ZWMuaHRtbCI+c3VleGVjPC9hPjwvY29kZT4gdG9nZXRoZXIgd2l0aCB1c2VyLXNwZWNpZmljIGRpcmVjdG9yaWVzIChhcwogICAgICAgICAgcHJvdmlkZWQgYnkgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF91c2VyZGlyLmh0bWwiPm1vZF91c2VyZGlyPC9hPjwvY29kZT4pLiBUaGUgZGVmYXVsdCBpcwogICAgICAgICAgPGNvZGU+cHVibGljX2h0bWw8L2NvZGU+LjwvZGQ+CgogICAgICAgIDxkdD48Y29kZT4tLXdpdGgtc3VleGVjLXVpZG1pbjwvY29kZT48L2R0PgogICAgICAgIDxkZD5EZWZpbmUgdGhpcyBhcyB0aGUgbG93ZXN0IFVJRCBhbGxvd2VkIHRvIGJlIGEgdGFyZ2V0IHVzZXIgZm9yCiAgICAgICAgICA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi4vcHJvZ3JhbXMvc3VleGVjLmh0bWwiPnN1ZXhlYzwvYT48L2NvZGU+LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMDAuPC9kZD4KCiAgICAgICAgPGR0Pjxjb2RlPi0td2l0aC1zdWV4ZWMtdW1hc2s8L2NvZGU+PC9kdD4KICAgICAgICA8ZGQ+U2V0IDxjb2RlPnVtYXNrPC9jb2RlPiBmb3IgcHJvY2Vzc2VzIHN0YXJ0ZWQgYnkKICAgICAgICAgIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuLi9wcm9ncmFtcy9zdWV4ZWMuaHRtbCI+c3VleGVjPC9hPjwvY29kZT4uIEl0IGRlZmF1bHRzIHRvIHlvdXIgc3lzdGVtIHNldHRpbmdzLjwvZGQ+CiAgICAgIDwvZGw+CiAgICAKICAKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iZW52IiBpZD0iZW52Ij5FbnZpcm9ubWVudCB2YXJpYWJsZXM8L2E+PC9oMj4KICA8cD5UaGVyZSBhcmUgc29tZSB1c2VmdWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIG92ZXJyaWRlIHRoZSBjaG9pY2VzIG1hZGUgYnkKICAgIDxjb2RlPmNvbmZpZ3VyZTwvY29kZT4gb3IgdG8gaGVscCBpdCB0byBmaW5kIGxpYnJhcmllcyBhbmQgcHJvZ3JhbXMgd2l0aAogICAgbm9uc3RhbmRhcmQgbmFtZXMgb3IgbG9jYXRpb25zLjwvcD4KCiAgCiAgPGRsPgogICAgPGR0Pjxjb2RlPkNDPC9jb2RlPjwvZHQ+CiAgICA8ZGQ+RGVmaW5lIHRoZSBDIGNvbXBpbGVyIGNvbW1hbmQgdG8gYmUgdXNlZCBmb3IgY29tcGlsYXRpb24uPC9kZD4KCiAgICA8ZHQ+PGNvZGU+Q0ZMQUdTPC9jb2RlPjwvZHQ+CiAgICA8ZGQ+U2V0IEMgY29tcGlsZXIgZmxhZ3MgeW91IHdhbnQgdG8gdXNlIGZvciBjb21waWxhdGlvbi48L2RkPgoKICAgIDxkdD48Y29kZT5DUFA8L2NvZGU+PC9kdD4KICAgIDxkZD5EZWZpbmUgdGhlIEMgcHJlcHJvY2Vzc29yIGNvbW1hbmQgdG8gYmUgdXNlZC48L2RkPgoKICAgIDxkdD48Y29kZT5DUFBGTEFHUzwvY29kZT48L2R0PgogICAgPGRkPlNldCBDL0MrKyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gPGNvZGU+LUk8dmFyPmluY2x1ZGVkaXI8L3Zhcj48L2NvZGU+CiAgICAgIGlmIHlvdSBoYXZlIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPHZhcj5pbmNsdWRlZGlyPC92YXI+LjwvZGQ+CgogICAgPGR0Pjxjb2RlPkxERkxBR1M8L2NvZGU+PC9kdD4KICAgIDxkZD5TZXQgbGlua2VyIGZsYWdzLCBlLmcuIDxjb2RlPi1MPHZhcj5saWJkaXI8L3Zhcj48L2NvZGU+IGlmIHlvdSBoYXZlCiAgICAgIGxpYnJhcmllcyBpbiBhIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8dmFyPmxpYmRpcjwvdmFyPi48L2RkPgogIDwvZGw+CjwvZGl2PjwvZGl2Pgo8ZGl2IGNsYXNzPSJib3R0b21sYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4uL2VuL3Byb2dyYW1zL2NvbmZpZ3VyZS5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vZnIvcHJvZ3JhbXMvY29uZmlndXJlLmh0bWwiIGhyZWZsYW5nPSJmciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJGcmFu52FpcyI+Jm5ic3A7ZnImbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4va28vcHJvZ3JhbXMvY29uZmlndXJlLmh0bWwiIGhyZWZsYW5nPSJrbyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJLb3JlYW4iPiZuYnNwO2tvJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL3RyL3Byb2dyYW1zL2NvbmZpZ3VyZS5odG1sIiBocmVmbGFuZz0idHIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iVPxya+dlIj4mbmJzcDt0ciZuYnNwOzwvYT48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgYWx0PSJ0b3AiIC8+PC9hPjwvZGl2PjxkaXYgY2xhc3M9InNlY3Rpb24iPjxoMj48YSBpZD0iY29tbWVudHNfc2VjdGlvbiIgbmFtZT0iY29tbWVudHNfc2VjdGlvbiI+Q29tbWVudHM8L2E+PC9oMj48ZGl2IGNsYXNzPSJ3YXJuaW5nIj48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz48YnIgLz5UaGlzIGlzIG5vdCBhIFEmYW1wO0Egc2VjdGlvbi4gQ29tbWVudHMgcGxhY2VkIGhlcmUgc2hvdWxkIGJlIHBvaW50ZWQgdG93YXJkcyBzdWdnZXN0aW9ucyBvbiBpbXByb3ZpbmcgdGhlIGRvY3VtZW50YXRpb24gb3Igc2VydmVyLCBhbmQgbWF5IGJlIHJlbW92ZWQgYWdhaW4gYnkgb3VyIG1vZGVyYXRvcnMgaWYgdGhleSBhcmUgZWl0aGVyIGltcGxlbWVudGVkIG9yIGNvbnNpZGVyZWQgaW52YWxpZC9vZmYtdG9waWMuIFF1ZXN0aW9ucyBvbiBob3cgdG8gbWFuYWdlIHRoZSBBcGFjaGUgSFRUUCBTZXJ2ZXIgc2hvdWxkIGJlIGRpcmVjdGVkIGF0IGVpdGhlciBvdXIgSVJDIGNoYW5uZWwsICNodHRwZCwgb24gRnJlZW5vZGUsIG9yIHNlbnQgdG8gb3VyIDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2xpc3RzLmh0bWwiPm1haWxpbmcgbGlzdHM8L2E+LjwvZGl2Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQp2YXIgY29tbWVudHNfc2hvcnRuYW1lID0gJ2h0dHBkJzsKdmFyIGNvbW1lbnRzX2lkZW50aWZpZXIgPSAnaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8yLjQvcHJvZ3JhbXMvY29uZmlndXJlLmh0bWwnOwooZnVuY3Rpb24odywgZCkgewogICAgaWYgKHcubG9jYXRpb24uaG9zdG5hbWUudG9Mb3dlckNhc2UoKSA9PSAiaHR0cGQuYXBhY2hlLm9yZyIpIHsKICAgICAgICBkLndyaXRlKCc8ZGl2IGlkPSJjb21tZW50c190aHJlYWQiPjxcL2Rpdj4nKTsKICAgICAgICB2YXIgcyA9IGQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICAgICAgcy50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7CiAgICAgICAgcy5hc3luYyA9IHRydWU7CiAgICAgICAgcy5zcmMgPSAnaHR0cHM6Ly9jb21tZW50cy5hcGFjaGUub3JnL3Nob3dfY29tbWVudHMubHVhP3NpdGU9JyArIGNvbW1lbnRzX3Nob3J0bmFtZSArICcmcGFnZT0nICsgY29tbWVudHNfaWRlbnRpZmllcjsKICAgICAgICAoZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdIHx8IGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXSkuYXBwZW5kQ2hpbGQocyk7CiAgICB9CiAgICBlbHNlIHsgCiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj5Db21tZW50cyBhcmUgZGlzYWJsZWQgZm9yIHRoaXMgcGFnZSBhdCB0aGUgbW9tZW50LjxcL2Rpdj4nKTsKICAgIH0KfSkod2luZG93LCBkb2N1bWVudCk7Ci8vLS0+PCFdXT48L3NjcmlwdD48L2Rpdj48ZGl2IGlkPSJmb290ZXIiPgo8cCBjbGFzcz0iYXBhY2hlIj5Db3B5cmlnaHQgMjAxOSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uPGJyIC8+TGljZW5zZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wPC9hPi48L3A+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4uL21vZC9kaXJlY3RpdmVzLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3dpa2kuYXBhY2hlLm9yZy9odHRwZC9GQVEiPkZBUTwvYT4gfCA8YSBocmVmPSIuLi9nbG9zc2FyeS5odG1sIj5HbG9zc2FyeTwvYT4gfCA8YSBocmVmPSIuLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPjwvZGl2PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tLy8tLT48IVtDREFUQVsvLz48IS0tCmlmICh0eXBlb2YocHJldHR5UHJpbnQpICE9PSAndW5kZWZpbmVkJykgewogICAgcHJldHR5UHJpbnQoKTsKfQovLy0tPjwhXV0+PC9zY3JpcHQ+CjwvYm9keT48L2h0bWw+