PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5tb2RfcHJveHlfaGNoZWNrIC0gQXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi41PC90aXRsZT4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJNYWluIHN0eWxlc2hlZXQiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtbG9vc2UtMTAwcGMuY3NzIiByZWw9ImFsdGVybmF0ZSBzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik5vIFNpZGViYXIgLSBEZWZhdWx0IGZvbnQgc2l6ZSIgLz4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC1wcmludC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InByaW50IiB0eXBlPSJ0ZXh0L2NzcyIgLz48bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9zdHlsZS9jc3MvcHJldHRpZnkuY3NzIiAvPgo8c2NyaXB0IHNyYz0iLi4vc3R5bGUvc2NyaXB0cy9wcmV0dGlmeS5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cjwvc2NyaXB0PgoKPGxpbmsgaHJlZj0iLi4vaW1hZ2VzL2Zhdmljb24uaWNvIiByZWw9InNob3J0Y3V0IGljb24iIC8+PC9oZWFkPgo8Ym9keT4KPGRpdiBpZD0icGFnZS1oZWFkZXIiPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuLi9tb2QvcXVpY2tyZWZlcmVuY2UuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+CjxwIGNsYXNzPSJhcGFjaGUiPkFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNTwvcD4KPGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZmVhdGhlci5wbmciIC8+PC9kaXY+CjxkaXYgY2xhc3M9InVwIj48YSBocmVmPSIuLyI+PGltZyB0aXRsZT0iJmx0Oy0iIGFsdD0iJmx0Oy0iIHNyYz0iLi4vaW1hZ2VzL2xlZnQuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBpZD0icGF0aCI+CjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iPkFwYWNoZTwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy8iPkhUVFAgU2VydmVyPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvIj5Eb2N1bWVudGF0aW9uPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4uLyI+VmVyc2lvbiAyLjU8L2E+ICZndDsgPGEgaHJlZj0iLi8iPk1vZHVsZXM8L2E+PC9kaXY+CjxkaXYgaWQ9InBhZ2UtY29udGVudCI+CjxkaXYgaWQ9InByZWFtYmxlIj48aDE+QXBhY2hlIE1vZHVsZSBtb2RfcHJveHlfaGNoZWNrPC9oMT4KPGRpdiBjbGFzcz0idG9wbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuLi9lbi9tb2QvbW9kX3Byb3h5X2hjaGVjay5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vZnIvbW9kL21vZF9wcm94eV9oY2hlY2suaHRtbCIgaHJlZmxhbmc9ImZyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT48L3A+CjwvZGl2Pgo8dGFibGUgY2xhc3M9Im1vZHVsZSI+PHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+RHluYW1pYyBoZWFsdGggY2hlY2sgb2YgQmFsYW5jZXIgbWVtYmVycyAod29ya2VycykgZm9yCjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHkuaHRtbCI+bW9kX3Byb3h5PC9hPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXh0ZW5zaW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjTW9kdWxlSWRlbnRpZmllciI+TW9kdWxloElkZW50aWZpZXI6PC9hPjwvdGg+PHRkPnByb3h5X2hjaGVja19tb2R1bGU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNTb3VyY2VGaWxlIj5Tb3VyY2WgRmlsZTo8L2E+PC90aD48dGQ+bW9kX3Byb3h5X2hjaGVjay5jPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl0eTo8L2E+PC90aD48dGQ+QXZhaWxhYmxlIGluIEFwYWNoZSAyLjQuMjEgYW5kIGxhdGVyPC90ZD48L3RyPjwvdGFibGU+CjxoMz5TdW1tYXJ5PC9oMz4KCiAgICA8cD5UaGlzIG1vZHVsZSBwcm92aWRlcyBmb3IgZHluYW1pYyBoZWFsdGggY2hlY2tpbmcgb2YgYmFsYW5jZXIKICAgIAltZW1iZXJzICh3b3JrZXJzKS4gVGhpcyBjYW4gYmUgZW5hYmxlZCBvbiBhIHdvcmtlci1ieS13b3JrZXIKICAgIAliYXNpcy4gVGhlIGhlYWx0aCBjaGVjayBpcyBkb25lIGluZGVwZW5kZW50bHkgb2YgdGhlCiAgICAJYWN0dWFsIHJldmVyc2UgcHJveHkgcmVxdWVzdHMuPC9wPgoKICAgIDxwPlRoaXMgbW9kdWxlIDxlbT5yZXF1aXJlczwvZW0+IHRoZSBzZXJ2aWNlIG9mIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2Rfd2F0Y2hkb2cuaHRtbCI+bW9kX3dhdGNoZG9nPC9hPjwvY29kZT4uPC9wPgoKPGRpdiBjbGFzcz0ibm90ZSI+PGgzPlBhcmFtZXRlcnM8L2gzPgogIDxwPlRoZSBoZWFsdGggY2hlY2sgbWVjaGFuaXNtIGlzIGVuYWJsZWQgdmlhIHRoZSB1c2Ugb2YgYWRkaXRpb25hbAogICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHkuaHRtbCNiYWxhbmNlcm1lbWJlciI+QmFsYW5jZXJNZW1iZXI8L2E+PC9jb2RlPiBwYXJhbWV0ZXJzLCB3aGljaCBhcmUgY29uZmlndXJlZAogICAgIGluIHRoZSBzdGFuZGFyZCB3YXkgdmlhIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHkuaHRtbCNwcm94eXBhc3MiPlByb3h5UGFzczwvYT48L2NvZGU+OjwvcD4KCiAgPHA+QSBuZXcgQmFsYW5jZXJNZW1iZXIgPGEgaHJlZj0ibW9kX3Byb3h5Lmh0bWwjc3RhdHVzX3RhYmxlIj5zdGF0dXM8L2E+IHN0YXRlIChmbGFnKQogICAgIGlzIGRlZmluZWQgdmlhIHRoaXMgbW9kdWxlOiAiPGNvZGU+QzwvY29kZT4iLgogICAgIFdoZW4gdGhlIHdvcmtlciBpcyB0YWtlbiBvZmZsaW5lIGR1ZSB0byBmYWlsdXJlcyBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBoZWFsdGgKICAgICBjaGVjayBtb2R1bGUsIHRoaXMgZmxhZyBpcyBzZXQsIGFuZCBjYW4gYmUgc2VlbiAoYW5kIG1vZGlmaWVkKSB2aWEgdGhlCiAgICAgPGNvZGU+YmFsYW5jZXItbWFuYWdlcjwvY29kZT4uPC9wPgoKICAgIDx0YWJsZT4KICAgIDx0cj48dGg+UGFyYW1ldGVyPC90aD4KICAgICAgICA8dGg+RGVmYXVsdDwvdGg+CiAgICAgICAgPHRoPkRlc2NyaXB0aW9uPC90aD48L3RyPgogICAgPHRyPjx0ZD5oY21ldGhvZDwvdGQ+CiAgICAgICAgPHRkPk5vbmU8L3RkPgogICAgICAgIDx0ZD5ObyBkeW5hbWljIGhlYWx0aCBjaGVjayBwZXJmb3JtZWQuIENob2ljZXMgYXJlOgogICAgICAgIAk8dGFibGU+CiAgICAgICAgCQk8dHI+PHRoPk1ldGhvZDwvdGg+PHRoPkRlc2NyaXB0aW9uPC90aD48dGg+Tm90ZTwvdGg+PC90cj4KICAgICAgICAJCTx0cj48dGQ+Tm9uZTwvdGQ+PHRkPk5vIGR5bmFtaWMgaGVhbHRoIGNoZWNraW5nIGRvbmU8L3RkPjx0ZCAvPjwvdHI+CiAgICAgICAgCQk8dHI+PHRkPlRDUDwvdGQ+PHRkPkNoZWNrIHRoYXQgYSBzb2NrZXQgdG8gdGhlIGJhY2tlbmQgY2FuIGJlIGNyZWF0ZWQ6IGUuZy4gImFyZSB5b3UgdXAiPC90ZD48dGQgLz48L3RyPgogICAgICAgIAkJPHRyPjx0ZD5PUFRJT05TPC90ZD48dGQ+U2VuZCBhbiA8Y29kZT5IVFRQIE9QVElPTlM8L2NvZGU+IHJlcXVlc3QgdG8gdGhlIGJhY2tlbmQ8L3RkPjx0ZD4qPC90ZD48L3RyPgogICAgICAgIAkJPHRyPjx0ZD5IRUFEPC90ZD48dGQ+U2VuZCBhbiA8Y29kZT5IVFRQIEhFQUQ8L2NvZGU+IHJlcXVlc3QgdG8gdGhlIGJhY2tlbmQ8L3RkPjx0ZD4qPC90ZD48L3RyPgogICAgICAgIAkJPHRyPjx0ZD5HRVQ8L3RkPjx0ZD5TZW5kIGFuIDxjb2RlPkhUVFAgR0VUPC9jb2RlPiByZXF1ZXN0IHRvIHRoZSBiYWNrZW5kPC90ZD48dGQ+KjwvdGQ+PC90cj4KCgkJCQk8dHI+PHRkIGNvbHNwYW49IjMiIC8+PC90cj4KCQkJCTx0cj48dGQgY29sc3Bhbj0iMyI+KjogVW5sZXNzIDxjb2RlPmhjZXhwcjwvY29kZT4gaXMgdXNlZCwgYSAyeHggb3IgM3h4IEhUVFAgc3RhdHVzIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgPGVtPnBhc3Npbmc8L2VtPiB0aGUgaGVhbHRoIGNoZWNrPC90ZD48L3RyPgogICAgICAgIAk8L3RhYmxlPgogICAgICAgIDwvdGQ+PC90cj4KICAgIDx0cj48dGQ+aGNwYXNzZXM8L3RkPgogICAgICAgIDx0ZD4xPC90ZD4KICAgICAgICA8dGQ+TnVtYmVyIG9mIHN1Y2Nlc3NmdWwgaGVhbHRoIGNoZWNrIHRlc3RzIGJlZm9yZSB3b3JrZXIgaXMgcmUtZW5hYmxlZDwvdGQ+PC90cj4KICAgIDx0cj48dGQ+aGNmYWlsczwvdGQ+CiAgICAgICAgPHRkPjE8L3RkPgogICAgICAgIDx0ZD5OdW1iZXIgb2YgZmFpbGVkIGhlYWx0aCBjaGVjayB0ZXN0cyBiZWZvcmUgd29ya2VyIGlzIGRpc2FibGVkPC90ZD48L3RyPgogICAgPHRyPjx0ZD5oY2ludGVydmFsPC90ZD4KICAgICAgICA8dGQ+MzA8L3RkPgogICAgICAgIDx0ZD5QZXJpb2Qgb2YgaGVhbHRoIGNoZWNrcyBpbiBzZWNvbmRzIChlLmcuIHBlcmZvcm1lZCBldmVyeSAzMCBzZWNvbmRzKS4KICAgICAgICBVc2VzIHRoZSA8YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+dGltZS1pbnRlcnZhbDwvYT4gZGlyZWN0aXZlIHN5bnRheC48L3RkPjwvdHI+CiAgICA8dHI+PHRkPmhjdXJpPC90ZD4KICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KICAgICAgICA8dGQ+QWRkaXRpb25hbCBVUkkgdG8gYmUgYXBwZW5kZWQgdG8gdGhlIHdvcmtlciBVUkwgZm9yIHRoZSBoZWFsdGggY2hlY2suPC90ZD48L3RyPgogICAgPHRyPjx0ZD5oY3RlbXBsYXRlPC90ZD4KICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KICAgICAgICA8dGQ+TmFtZSBvZiB0ZW1wbGF0ZSwgY3JlYXRlZCB2aWEgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3Byb3h5aGN0ZW1wbGF0ZSI+UHJveHlIQ1RlbXBsYXRlPC9hPjwvY29kZT4sCiAgICAgICAgICAgIHRvIHVzZSBmb3Igc2V0dGluZyBoZWFsdGggY2hlY2sgcGFyYW1ldGVycyBmb3IgdGhpcyB3b3JrZXI8L3RkPjwvdHI+CiAgICA8dHI+PHRkPmhjZXhwcjwvdGQ+CiAgICAgICAgPHRkPiZuYnNwOzwvdGQ+CiAgICAgICAgPHRkPk5hbWUgb2YgZXhwcmVzc2lvbiwgY3JlYXRlZCB2aWEgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3Byb3h5aGNleHByIj5Qcm94eUhDRXhwcjwvYT48L2NvZGU+LAogICAgICAgICAgICB1c2VkIHRvIGNoZWNrIHJlc3BvbnNlIGhlYWRlcnMgZm9yIGhlYWx0aC48YnIgLz4KICAgICAgICAgICAgPGVtPklmIG5vdCB1c2VkLCAyeHggdGhydSAzeHggc3RhdHVzIGNvZGVzIGltcGx5IHN1Y2Nlc3M8L2VtPjwvdGQ+PC90cj4KICAgIDwvdGFibGU+CjwvZGl2PgoKPC9kaXY+CjxkaXYgaWQ9InF1aWNrdmlldyI+PGgzPlRvcGljczwvaDM+Cjx1bCBpZD0idG9waWNzIj4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZXhhbXBsZXMiPlVzYWdlIGV4YW1wbGVzPC9hPjwvbGk+CjwvdWw+PGgzIGNsYXNzPSJkaXJlY3RpdmVzIj5EaXJlY3RpdmVzPC9oMz4KPHVsIGlkPSJ0b2MiPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNwcm94eWhjZXhwciI+UHJveHlIQ0V4cHI8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjcHJveHloY3RlbXBsYXRlIj5Qcm94eUhDVGVtcGxhdGU8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjcHJveHloY3Rwc2l6ZSI+UHJveHlIQ1RQc2l6ZTwvYT48L2xpPgo8L3VsPgo8aDM+QnVnZml4IGNoZWNrbGlzdDwvaDM+PHVsIGNsYXNzPSJzZWVhbHNvIj48bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9kaXN0L2h0dHBkL0NIQU5HRVNfMi40Ij5odHRwZCBjaGFuZ2Vsb2c8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9iei5hcGFjaGUub3JnL2J1Z3ppbGxhL2J1Z2xpc3QuY2dpP2J1Z19zdGF0dXM9X19vcGVuX18mYW1wO2xpc3RfaWQ9MTQ0NTMyJmFtcDtwcm9kdWN0PUFwYWNoZSUyMGh0dHBkLTImYW1wO3F1ZXJ5X2Zvcm1hdD1zcGVjaWZpYyZhbXA7b3JkZXI9Y2hhbmdlZGRhdGUlMjBERVNDJTJDcHJpb3JpdHklMkNidWdfc2V2ZXJpdHkmYW1wO2NvbXBvbmVudD1tb2RfcHJveHlfaGNoZWNrIj5Lbm93biBpc3N1ZXM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9iei5hcGFjaGUub3JnL2J1Z3ppbGxhL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1BcGFjaGUlMjBodHRwZC0yJmFtcDtjb21wb25lbnQ9bW9kX3Byb3h5X2hjaGVjayI+UmVwb3J0IGEgYnVnPC9hPjwvbGk+PC91bD48aDM+U2VlIGFsc288L2gzPgo8dWwgY2xhc3M9InNlZWFsc28iPgo8bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eS5odG1sIj5tb2RfcHJveHk8L2E+PC9jb2RlPjwvbGk+CjxsaT48YSBocmVmPSIjY29tbWVudHNfc2VjdGlvbiI+Q29tbWVudHM8L2E+PC9saT48L3VsPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJleGFtcGxlcyIgaWQ9ImV4YW1wbGVzIj5Vc2FnZSBleGFtcGxlczwvYT4gPGEgdGl0bGU9IlBlcm1hbmVudCBsaW5rIiBocmVmPSIjZXhhbXBsZXMiIGNsYXNzPSJwZXJtYWxpbmsiPiZwYXJhOzwvYT48L2gyPgoKCQogICAgPHA+VGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyBvbmUgbWlnaHQgY29uZmlndXJlZCBoZWFsdGggY2hlY2tpbmcKICAgIAlmb3IgdmFyaW91cyBiYWNrZW5kIHNlcnZlcnM6PC9wPgoKCQoJPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPlByb3h5SENFeHByIG9rMjM0IHsle1JFUVVFU1RfU1RBVFVTfSA9fiAvXlsyMzRdL30KUHJveHlIQ0V4cHIgZ2Rvd24geyV7UkVRVUVTVF9TVEFUVVN9ID1+IC9eWzVdL30KUHJveHlIQ0V4cHIgaW5fbWFpbnQge2hjKCdib2R5JykgIX4gL1VuZGVyIG1haW50ZW5hbmNlL30KCiZsdDtQcm94eSBiYWxhbmNlcjovL2ZvbyZndDsKICBCYWxhbmNlck1lbWJlciBodHRwOi8vd3d3LmV4YW1wbGUuY29tLyAgaGNtZXRob2Q9R0VUIGhjZXhwcj1pbl9tYWludCBoY3VyaT0vc3RhdHVzLnBocAogIEJhbGFuY2VyTWVtYmVyIGh0dHA6Ly93d3cyLmV4YW1wbGUuY29tLyBoY21ldGhvZD1IRUFEIGhjZXhwcj1vazIzNCBoY2ludGVydmFsPTEwCiAgQmFsYW5jZXJNZW1iZXIgaHR0cDovL3d3dzMuZXhhbXBsZS5jb20vIGhjbWV0aG9kPVRDUCBoY2ludGVydmFsPTUgaGNwYXNzZXM9MiBoY2ZhaWxzPTMKICBCYWxhbmNlck1lbWJlciBodHRwOi8vd3d3NC5leGFtcGxlLmNvbS8KJmx0Oy9Qcm94eSZndDsKClByb3h5UGFzcyAiLyIgImJhbGFuY2VyOi8vZm9vIgpQcm94eVBhc3NSZXZlcnNlICIvIiAiYmFsYW5jZXI6Ly9mb28iPC9wcmU+CgoKPHA+SW4gdGhpcyBzY2VuYXJpbywgPGNvZGU+aHR0cDovL3d3dy5leGFtcGxlLmNvbS88L2NvZGU+IGlzIGhlYWx0aCBjaGVja2VkIGJ5IHNlbmRpbmcgYSA8Y29kZT5HRVQgL3N0YXR1cy5waHA8L2NvZGU+CnJlcXVlc3QgdG8gdGhhdCBzZXJ2ZXIgYW5kIHNlZWluZyB0aGF0IHRoZSByZXR1cm5lZCBwYWdlIGRvZXMgbm90IGluY2x1ZGUgdGhlIHN0cmluZyA8ZW0+VW5kZXIgbWFpbnRlbmFuY2U8L2VtPi4gSWYKaXQgZG9lcywgdGhhdCBzZXJ2ZXIgaXMgcHV0IGluIGhlYWx0aC1jaGVjayBmYWlsIG1vZGUsIGFuZCBkaXNhYmxlZC4gVGhpcyBkeW5hbWljIGNoZWNrIGlzIHBlcmZvcm1lZApldmVyeSAzMCBzZWNvbmRzLCB3aGljaCBpcyB0aGUgZGVmYXVsdC48L3A+Cgo8cD48Y29kZT5odHRwOi8vd3d3Mi5leGFtcGxlLmNvbS88L2NvZGU+IGlzIGNoZWNrZWQgYnkgc2VuZGluZyBhIHNpbXBsZSA8Y29kZT5IRUFEPC9jb2RlPiByZXF1ZXN0IGV2ZXJ5CjEwIHNlY29uZHMgYW5kIG1ha2luZyBzdXJlIHRoYXQgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyAyeHgsIDN4eCBvciA0eHguIDxjb2RlPmh0dHA6Ly93d3czLmV4YW1wbGUuY29tLzwvY29kZT4gaXMgY2hlY2tlZApldmVyeSA1IHNlY29uZHMgYnkgc2ltcGx5IGVuc3VyaW5nIHRoYXQgdGhlIHNvY2tldCB0byB0aGF0IHNlcnZlciBpcyB1cC4gSWYgdGhlIGJhY2tlbmQgaXMgbWFya2VkIGFzCiJkb3duIiBhbmQgaXQgcGFzc2VzIDIgaGVhbHRoIGNoZWNrLCBpdCB3aWxsIGJlIHJlLWVuYWJsZWQgYW5kIGFkZGVkIGJhY2sgaW50byB0aGUgbG9hZCBiYWxhbmNlci4KSXQgdGFrZXMgMyBiYWNrLXRvLWJhY2sgaGVhbHRoIGNoZWNrIGZhaWx1cmVzIHRvIGRpc2FibGUgdGhlIHNlcnZlciBhbmQgbW92ZSBpdCBvdXQKb2Ygcm90YXRpb24uIEZpbmFsbHksIDxjb2RlPmh0dHA6Ly93d3c0LmV4YW1wbGUuY29tLzwvY29kZT4gaXMKbm90IGR5bmFtaWNhbGx5IGNoZWNrZWQgYXQgYWxsLjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJQcm94eUhDRXhwciIgaWQ9IlByb3h5SENFeHByIj5Qcm94eUhDRXhwcjwvYT4gPGEgbmFtZT0icHJveHloY2V4cHIiIGlkPSJwcm94eWhjZXhwciI+RGlyZWN0aXZlPC9hPiA8YSB0aXRsZT0iUGVybWFuZW50IGxpbmsiIGhyZWY9IiNwcm94eWhjZXhwciIgY2xhc3M9InBlcm1hbGluayI+JnBhcmE7PC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+Q3JlYXRlcyBhIG5hbWVkIGNvbmRpdGlvbiBleHByZXNzaW9uIHRvIHVzZSB0byBkZXRlcm1pbmUgaGVhbHRoIG9mIHRoZSBiYWNrZW5kIGJhc2VkIG9uIGl0cyByZXNwb25zZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5Qcm94eUhDRXhwciA8ZW0+bmFtZTwvZW0+IHs8ZW0+YXBfZXhwciBleHByZXNzaW9uPC9lbT59PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI092ZXJyaWRlIj5PdmVycmlkZTo8L2E+PC90aD48dGQ+RmlsZUluZm88L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXh0ZW5zaW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9wcm94eV9oY2hlY2s8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+UHJveHlIQ0V4cHI8L2NvZGU+IGRpcmVjdGl2ZSBhbGxvd3MKICAgICAgIGZvciBjcmVhdGluZyBhIG5hbWVkIGNvbmRpdGlvbiBleHByZXNzaW9uIHRoYXQgY2hlY2tzIHRoZSByZXNwb25zZQogICAgICAgaGVhZGVycyBvZiB0aGUgYmFja2VuZCBzZXJ2ZXIgdG8gZGV0ZXJtaW5lIGl0cyBoZWFsdGguIFRoaXMgbmFtZWQKICAgICAgIGNvbmRpdGlvbiBjYW4gdGhlbiBiZSBhc3NpZ25lZCB0byBiYWxhbmNlciBtZW1iZXJzIHZpYSB0aGUgPGNvZGU+aGNleHByPC9jb2RlPgogICAgICAgcGFyYW1ldGVyLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+UHJveHlIQ0V4cHI6IEFsbG93IGZvciAyeHgvM3h4LzR4eCBhcyBwYXNzaW5nPC9oMz48cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+UHJveHlIQ0V4cHIgb2syMzQgeyV7UkVRVUVTVF9TVEFUVVN9ID1+IC9eWzIzNF0vfQpQcm94eVBhc3MgIi9hcHBzIiAgICAgImJhbGFuY2VyOi8vZm9vIgoKJmx0O1Byb3h5IGJhbGFuY2VyOi8vZm9vJmd0OwogIEJhbGFuY2VyTWVtYmVyIGh0dHA6Ly93d3cyLmV4YW1wbGUuY29tLyAgaGNtZXRob2Q9SEVBRCBoY2V4cHI9b2syMzQgaGNpbnRlcnZhbD0xMAombHQ7L1Byb3h5Jmd0OzwvcHJlPgo8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJub3RlIj4KICAgIFRoZSA8YSBocmVmPSIuLi9leHByLmh0bWwiPmV4cHJlc3Npb248L2E+IGNhbiB1c2UgY3VybHktcGFyZW5zICgie30iKSBhcwogICAgcXVvdGluZyBkZWxpbWluYXRvcnMgaW4gYWRkaXRpb24gdG8gbm9ybWFsIHF1b3Rlcy4KICAgIDwvZGl2PgoKICAgIDxwPklmIHVzaW5nIGEgaGVhbHRoIGNoZWNrIG1ldGhvZCAoZWc6IDxjb2RlPkdFVDwvY29kZT4pIHdoaWNoIHJlc3VsdHMgaW4gYSByZXNwb25zZQogICAgYm9keSwgdGhhdCBib2R5IGl0c2VsZiBjYW4gYmUgY2hlY2tlZCB2aWEgPGNvZGU+YXBfZXhwcjwvY29kZT4gdXNpbmcgdGhlIDxjb2RlPmhjKCk8L2NvZGU+CiAgICBleHByZXNzaW9uIGZ1bmN0aW9uLCB3aGljaCBpcyB1bmlxdWUgdG8gdGhpcyBtb2R1bGUuPC9wPgoKICAgIDxwPkluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgd2Ugc2VuZCB0aGUgYmFja2VuZCBhIDxjb2RlPkdFVDwvY29kZT4gcmVxdWVzdAogICAgYW5kIGlmIHRoZSByZXNwb25zZSBib2R5IGNvbnRhaW5zIHRoZSBwaHJhc2UgPGVtPlVuZGVyIG1haW50ZW5hbmNlPC9lbT4sCiAgICB3ZSB3YW50IHRvIGRpc2FibGUgdGhlIGJhY2tlbmQuPC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5Qcm94eUhDRXhwcjogQ2hlY2tpbmcgcmVzcG9uc2UgYm9keTwvaDM+PHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPlByb3h5SENFeHByIGluX21haW50IHtoYygnYm9keScpICF+IC9VbmRlciBtYWludGVuYW5jZS99ClByb3h5UGFzcyAiL2FwcHMiICAgICAiYmFsYW5jZXI6Ly9mb28iCgombHQ7UHJveHkgYmFsYW5jZXI6Ly9mb28mZ3Q7CiAgQmFsYW5jZXJNZW1iZXIgaHR0cDovL3d3dy5leGFtcGxlLmNvbS8gaGNleHByPWluX21haW50IGhjbWV0aG9kPWdldCBoY3VyaT0vc3RhdHVzLnBocAombHQ7L1Byb3h5Jmd0OzwvcHJlPgo8L2Rpdj4KCiAgICA8cD48ZW0+Tk9URTo8L2VtPiBTaW5jZSByZXNwb25zZSBib2R5IGNhbiBxdWl0ZSBsYXJnZSwgaXQgaXMgYmVzdCBpZiB1c2VkIGFnYWluc3Qgc3BlY2lmaWMgc3RhdHVzIHBhZ2VzLjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJQcm94eUhDVGVtcGxhdGUiIGlkPSJQcm94eUhDVGVtcGxhdGUiPlByb3h5SENUZW1wbGF0ZTwvYT4gPGEgbmFtZT0icHJveHloY3RlbXBsYXRlIiBpZD0icHJveHloY3RlbXBsYXRlIj5EaXJlY3RpdmU8L2E+IDxhIHRpdGxlPSJQZXJtYW5lbnQgbGluayIgaHJlZj0iI3Byb3h5aGN0ZW1wbGF0ZSIgY2xhc3M9InBlcm1hbGluayI+JnBhcmE7PC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+Q3JlYXRlcyBhIG5hbWVkIHRlbXBsYXRlIGZvciBzZXR0aW5nIHZhcmlvdXMgaGVhbHRoIGNoZWNrIHBhcmFtZXRlcnM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+UHJveHlIQ1RlbXBsYXRlIDxlbT5uYW1lPC9lbT4gPGVtPnBhcmFtZXRlcjwvZW0+PTxlbT5zZXR0aW5nPC9lbT4gWy4uLl08L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5GaWxlSW5mbzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX3Byb3h5X2hjaGVjazwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5Qcm94eUhDVGVtcGxhdGU8L2NvZGU+IGRpcmVjdGl2ZSBhbGxvd3MKICAgICAgIGZvciBjcmVhdGluZyBhIG5hbWVkIHNldCAodGVtcGxhdGUpIG9mIGhlYWx0aCBjaGVjayBwYXJhbWV0ZXJzCiAgICAgICB0aGF0IGNhbiB0aGVuIGJlIGFzc2lnbmVkIHRvIGJhbGFuY2VyIG1lbWJlcnMgdmlhIHRoZSA8Y29kZT5oY3RlbXBsYXRlPC9jb2RlPgogICAgICAgcGFyYW1ldGVyLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+UHJveHlIQ1RlbXBsYXRlPC9oMz48cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+UHJveHlIQ1RlbXBsYXRlIHRjcDUgaGNtZXRob2Q9dGNwIGhjaW50ZXJ2YWw9NQpQcm94eVBhc3MgIi9hcHBzIiAgICAgImJhbGFuY2VyOi8vZm9vIgoKJmx0O1Byb3h5IGJhbGFuY2VyOi8vZm9vJmd0OwogIEJhbGFuY2VyTWVtYmVyIGh0dHA6Ly93d3cyLmV4YW1wbGUuY29tLyBoY3RlbXBsYXRlPXRjcDUKJmx0Oy9Qcm94eSZndDs8L3ByZT4KPC9kaXY+CgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlByb3h5SENUUHNpemUiIGlkPSJQcm94eUhDVFBzaXplIj5Qcm94eUhDVFBzaXplPC9hPiA8YSBuYW1lPSJwcm94eWhjdHBzaXplIiBpZD0icHJveHloY3Rwc2l6ZSI+RGlyZWN0aXZlPC9hPiA8YSB0aXRsZT0iUGVybWFuZW50IGxpbmsiIGhyZWY9IiNwcm94eWhjdHBzaXplIiBjbGFzcz0icGVybWFsaW5rIj4mcGFyYTs8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5TZXRzIHRoZSB0b3RhbCBzZXJ2ZXItd2lkZSBzaXplIG9mIHRoZSB0aHJlYWRwb29sIHVzZWQgZm9yIHRoZSBoZWFsdGggY2hlY2sgd29ya2VyczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5Qcm94eUhDVFBzaXplIDxlbT5zaXplPC9lbT48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+UHJveHlIQ1RQc2l6ZSAxNjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfcHJveHlfaGNoZWNrPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+SWYgQXBhY2hlIGh0dHBkIGFuZCBBUFIgYXJlIGJ1aWx0IHdpdGggdGhyZWFkIHN1cHBvcnQsIHRoZSBoZWFsdGggY2hlY2sKICAgICAgIG1vZHVsZSB3aWxsIG9mZmxvYWQgdGhlIHdvcmsgb2YgdGhlIGFjdHVhbCBjaGVja2luZyB0byBhIHRocmVhZHBvb2wKICAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgV2F0Y2hkb2cgcHJvY2VzcywgYWxsb3dpbmcgZm9yIHBhcmFsbGVsIGNoZWNrcy4KICAgICAgIFRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5Qcm94eUhDVFBzaXplPC9jb2RlPiBkaXJlY3RpdmUKICAgICAgIGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhpcyB0aHJlYWRwb29sLiBJZiBzZXQgdG8gPGNvZGU+MDwvY29kZT4sIG5vIHRocmVhZHBvb2wKICAgICAgIGlzIHVzZWQgYXQgYWxsLCByZXN1bHRpbmcgaW4gc2VyaWFsaXplZCBoZWFsdGggY2hlY2tzLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+UHJveHlIQ1RQc2l6ZTwvaDM+PHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPlByb3h5SENUUHNpemUgMzI8L3ByZT4KPC9kaXY+CgoKPC9kaXY+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJib3R0b21sYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4uL2VuL21vZC9tb2RfcHJveHlfaGNoZWNrLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9mci9tb2QvbW9kX3Byb3h5X2hjaGVjay5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiBhbHQ9InRvcCIgLz48L2E+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiI+PGgyPjxhIGlkPSJjb21tZW50c19zZWN0aW9uIiBuYW1lPSJjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2gyPjxkaXYgY2xhc3M9Indhcm5pbmciPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPjxiciAvPlRoaXMgaXMgbm90IGEgUSZhbXA7QSBzZWN0aW9uLiBDb21tZW50cyBwbGFjZWQgaGVyZSBzaG91bGQgYmUgcG9pbnRlZCB0b3dhcmRzIHN1Z2dlc3Rpb25zIG9uIGltcHJvdmluZyB0aGUgZG9jdW1lbnRhdGlvbiBvciBzZXJ2ZXIsIGFuZCBtYXkgYmUgcmVtb3ZlZCBhZ2FpbiBieSBvdXIgbW9kZXJhdG9ycyBpZiB0aGV5IGFyZSBlaXRoZXIgaW1wbGVtZW50ZWQgb3IgY29uc2lkZXJlZCBpbnZhbGlkL29mZi10b3BpYy4gUXVlc3Rpb25zIG9uIGhvdyB0byBtYW5hZ2UgdGhlIEFwYWNoZSBIVFRQIFNlcnZlciBzaG91bGQgYmUgZGlyZWN0ZWQgYXQgZWl0aGVyIG91ciBJUkMgY2hhbm5lbCwgI2h0dHBkLCBvbiBGcmVlbm9kZSwgb3Igc2VudCB0byBvdXIgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvbGlzdHMuaHRtbCI+bWFpbGluZyBsaXN0czwvYT4uPC9kaXY+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tLy8tLT48IVtDREFUQVsvLz48IS0tCnZhciBjb21tZW50c19zaG9ydG5hbWUgPSAnaHR0cGQnOwp2YXIgY29tbWVudHNfaWRlbnRpZmllciA9ICdodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzL3RydW5rL21vZC9tb2RfcHJveHlfaGNoZWNrLmh0bWwnOwooZnVuY3Rpb24odywgZCkgewogICAgaWYgKHcubG9jYXRpb24uaG9zdG5hbWUudG9Mb3dlckNhc2UoKSA9PSAiaHR0cGQuYXBhY2hlLm9yZyIpIHsKICAgICAgICBkLndyaXRlKCc8ZGl2IGlkPSJjb21tZW50c190aHJlYWQiPjxcL2Rpdj4nKTsKICAgICAgICB2YXIgcyA9IGQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICAgICAgcy50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7CiAgICAgICAgcy5hc3luYyA9IHRydWU7CiAgICAgICAgcy5zcmMgPSAnaHR0cHM6Ly9jb21tZW50cy5hcGFjaGUub3JnL3Nob3dfY29tbWVudHMubHVhP3NpdGU9JyArIGNvbW1lbnRzX3Nob3J0bmFtZSArICcmcGFnZT0nICsgY29tbWVudHNfaWRlbnRpZmllcjsKICAgICAgICAoZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdIHx8IGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXSkuYXBwZW5kQ2hpbGQocyk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBkLndyaXRlKCc8ZGl2IGlkPSJjb21tZW50c190aHJlYWQiPkNvbW1lbnRzIGFyZSBkaXNhYmxlZCBmb3IgdGhpcyBwYWdlIGF0IHRoZSBtb21lbnQuPFwvZGl2PicpOwogICAgfQp9KSh3aW5kb3csIGRvY3VtZW50KTsKLy8tLT48IV1dPjwvc2NyaXB0PjwvZGl2PjxkaXYgaWQ9ImZvb3RlciI+CjxwIGNsYXNzPSJhcGFjaGUiPkNvcHlyaWdodCAyMDE5IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi48YnIgLz5MaWNlbnNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5BcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjA8L2E+LjwvcD4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL3F1aWNrcmVmZXJlbmNlLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3dpa2kuYXBhY2hlLm9yZy9odHRwZC9GQVEiPkZBUTwvYT4gfCA8YSBocmVmPSIuLi9nbG9zc2FyeS5odG1sIj5HbG9zc2FyeTwvYT4gfCA8YSBocmVmPSIuLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPjwvZGl2PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tLy8tLT48IVtDREFUQVsvLz48IS0tCmlmICh0eXBlb2YocHJldHR5UHJpbnQpICE9PSAndW5kZWZpbmVkJykgewogICAgcHJldHR5UHJpbnQoKTsKfQovLy0tPjwhXV0+PC9zY3JpcHQ+CjwvYm9keT48L2h0bWw+