PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJmciIgeG1sOmxhbmc9ImZyIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5MZSBjYWNoZSBkZXMgb2JqZXRzIHBhcnRhZ+lzIGR1IHNlcnZldXIgSFRUUCBBcGFjaGUgLSBTZXJ2ZXVyIEFwYWNoZSBIVFRQIFZlcnNpb24gMi41PC90aXRsZT4KPGxpbmsgaHJlZj0iLi9zdHlsZS9jc3MvbWFudWFsLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik1haW4gc3R5bGVzaGVldCIgLz4KPGxpbmsgaHJlZj0iLi9zdHlsZS9jc3MvbWFudWFsLWxvb3NlLTEwMHBjLmNzcyIgcmVsPSJhbHRlcm5hdGUgc3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJObyBTaWRlYmFyIC0gRGVmYXVsdCBmb250IHNpemUiIC8+CjxsaW5rIGhyZWY9Ii4vc3R5bGUvY3NzL21hbnVhbC1wcmludC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InByaW50IiB0eXBlPSJ0ZXh0L2NzcyIgLz48bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuL3N0eWxlL2Nzcy9wcmV0dGlmeS5jc3MiIC8+CjxzY3JpcHQgc3JjPSIuL3N0eWxlL3NjcmlwdHMvcHJldHRpZnkubWluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgo8L3NjcmlwdD4KCjxsaW5rIGhyZWY9Ii4vaW1hZ2VzL2Zhdmljb24uaWNvIiByZWw9InNob3J0Y3V0IGljb24iIC8+PC9oZWFkPgo8Ym9keSBpZD0ibWFudWFsLXBhZ2UiIGNsYXNzPSJuby1zaWRlYmFyIj48ZGl2IGlkPSJwYWdlLWhlYWRlciI+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi9tb2QvcXVpY2tyZWZlcmVuY2UuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCI+R2xvc3NhaXJlPC9hPiB8IDxhIGhyZWY9Ii4vc2l0ZW1hcC5odG1sIj5QbGFuIGR1IHNpdGU8L2E+PC9wPgo8cCBjbGFzcz0iYXBhY2hlIj5TZXJ2ZXVyIEFwYWNoZSBIVFRQIFZlcnNpb24gMi41PC9wPgo8aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2ZlYXRoZXIucG5nIiAvPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ1cCI+PGEgaHJlZj0iLi8iPjxpbWcgdGl0bGU9IiZsdDstIiBhbHQ9IiZsdDstIiBzcmM9Ii4vaW1hZ2VzL2xlZnQuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBpZD0icGF0aCI+CjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iPkFwYWNoZTwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy8iPlNlcnZldXIgSFRUUDwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLyI+RG9jdW1lbnRhdGlvbjwvYT4gJmd0OyA8YSBocmVmPSIuLyI+VmVyc2lvbiAyLjU8L2E+PC9kaXY+PGRpdiBpZD0icGFnZS1jb250ZW50Ij48ZGl2IGlkPSJwcmVhbWJsZSI+PGgxPkxlIGNhY2hlIGRlcyBvYmpldHMgcGFydGFn6XMgZHUgc2VydmV1ciBIVFRQIEFwYWNoZTwvaDE+CjxkaXYgY2xhc3M9InRvcGxhbmciPgo8cD48c3Bhbj5MYW5ndWVzIERpc3BvbmlibGVzOiA8L3NwYW4+PGEgaHJlZj0iLi9lbi9zb2NhY2hlLmh0bWwiIGhyZWZsYW5nPSJlbiIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2ZyL3NvY2FjaGUuaHRtbCIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT48L3A+CjwvZGl2PgoKICAgIDxwPkxlIGNhY2hlIGRlcyBvYmpldHMgcGFydGFn6XMgZXN0IHVuIGNvbmNlcHQgZGUgcGFydGFnZSBkZSBkb25u6WVzCiAgICBkZSBiYXNlIGVudHJlIHRvdXMgbGVzIHByb2Nlc3N1cyBkJ3VuIHNlcnZldXIsIHNhbnMgc2UgcHLpb2NjdXBlciBkdQogICAgPGEgaHJlZj0ibXBtLmh0bWwiPm1vZOhsZSBkZSB0aHJlYWRzIGV0IGRlIHByb2Nlc3N1czwvYT4uIE9uCiAgICBsJ3V0aWxpc2UgbG9yc3F1ZSBsZXMgYXZhbnRhZ2VzIGFwcG9ydOlzIHBhciBsZSBwYXJ0YWdlIGRlIGRvbm7pZXMKICAgIGVudHJlIHByb2Nlc3N1cyBjb250cmViYWxhbmNlIGxhIHBlcnRlIGRlIHBlcmZvcm1hbmNlcyBjb25z6WN1dGl2ZSDgCiAgICBsYSBjb21tdW5pY2F0aW9uIGludGVycHJvY2Vzc3VzLjwvcD4KICA8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJwcm92aWRlcnMiIGlkPSJwcm92aWRlcnMiPkZvdXJuaXNzZXVycyBkdSBjYWNoZSBkJ29iamV0cyBwYXJ0YWfpczwvYT48L2gyPgogICAgCiAgICA8cD5MZSBjYWNoZSBkJ29iamV0cyBwYXJ0YWfpcyBlbiB0YW50IHF1ZSB0ZWwgZXN0IHVuZSBhYnN0cmFjdGlvbi4KICAgIElsIGVzdCBpbXBs6W1lbnTpIHBhciBxdWF0cmUgbW9kdWxlcyBkaWZm6XJlbnRzLiBQb3VyIHBvdXZvaXIKICAgIHV0aWxpc2VyIGxlIGNhY2hlLCB1biBvdSBwbHVzaWV1cnMgZGUgY2VzIG1vZHVsZXMgZG9pdmVudCDqdHJlCiAgICBwculzZW50cyBldCBjb25maWd1culzLjwvcD4KICAgIDxwPkxlIHNldWwg6WzpbWVudCBkZSBjb25maWd1cmF0aW9uIGNvbnNpc3RlIOAgZOlmaW5pciBsZQogICAgZm91cm5pc3NldXIgZGUgY2FjaGUg4CB1dGlsaXNlci4gQ2VjaSBlc3QgZGUgbGEgcmVzcG9uc2FiaWxpdOkgZGVzCiAgICBtb2R1bGVzIHF1aSB1dGlsaXNlbnQgbGUgY2FjaGUsIGV0IHBvdXIgY2VsYSwgaWxzIGFjdGl2ZW50IGxhCiAgICBz6WxlY3Rpb24gdmlhIGRlcyBkaXJlY3RpdmVzIHRlbGxlcyBxdWUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlX3NvY2FjaGUuaHRtbCNjYWNoZXNvY2FjaGUiPkNhY2hlU29jYWNoZTwvYT48L2NvZGU+LCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfYXV0aG5fc29jYWNoZS5odG1sI2F1dGhuY2FjaGVzb2NhY2hlIj5BdXRobkNhY2hlU09DYWNoZTwvYT48L2NvZGU+LCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2Rfc3NsLmh0bWwjc3Nsc2Vzc2lvbmNhY2hlIj5TU0xTZXNzaW9uQ2FjaGU8L2E+PC9jb2RlPiwgZXQgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX3NzbC5odG1sI3NzbHN0YXBsaW5nY2FjaGUiPlNTTFN0YXBsaW5nQ2FjaGU8L2E+PC9jb2RlPi48L3A+CiAgICA8cD5MZXMgZm91cm5pc3NldXJzIGFjdHVlbGxlbWVudCBkaXNwb25pYmxlcyBzb250IDo8L3A+CiAgICA8ZGw+CiAgICA8ZHQ+ImRibSIgKDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9zb2NhY2hlX2RibS5odG1sIj5tb2Rfc29jYWNoZV9kYm08L2E+PC9jb2RlPik8L2R0PgogICAgPGRkPkNlbHVpLWNpIHV0aWxpc2UgdW4gZmljaGllciBkZSBoYXNoYWdlIERCTS4gTGUgY2hvaXggZGUgbGEKICAgIERCTSBzb3VzLWphY2VudGUgcGV1dCDqdHJlIGNvbmZpZ3VyYWJsZSBzaSBsYSB2ZXJzaW9uCiAgICBkJ0FQUiBpbnN0YWxs6WUgc3VwcG9ydGUgZGUgbXVsdGlwbGVzIGltcGzpbWVudGF0aW9ucyBkZSBEQk0uPC9kZD4KICAgIDxkdD4iZGMiICg8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2Rfc29jYWNoZV9kYy5odG1sIj5tb2Rfc29jYWNoZV9kYzwvYT48L2NvZGU+KTwvZHQ+CiAgICA8ZGQ+Q2VsdWktY2kgdXRpbGlzZSBsZXMgYmlibGlvdGjocXVlcyBkZSBtaXNlIGVuIGNhY2hlIGRlIHNlc3Npb25zCiAgICBkaXN0cmlidellcyA8YSBocmVmPSJodHRwOi8vZGlzdGNhY2hlLnNvdXJjZWZvcmdlLm5ldC8iPmRpc3RjYWNoZTwvYT4uPC9kZD4KICAgIDxkdD4ibWVtY2FjaGUiICg8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2Rfc29jYWNoZV9tZW1jYWNoZS5odG1sIj5tb2Rfc29jYWNoZV9tZW1jYWNoZTwvYT48L2NvZGU+KTwvZHQ+CiAgICA8ZGQ+Q2VsdWktY2kgdXRpbGlzZSBsZSBzeXN06G1lIOAgaGF1dGVzIHBlcmZvcm1hbmNlcyBkZSBtaXNlIGVuCiAgICBjYWNoZSBkJ29iamV0cyBkZSBt6W1vaXJlIGRpc3RyaWJ16WUgPGEgaHJlZj0iaHR0cDovL21lbWNhY2hlZC5vcmcvIj5tZW1jYWNoZWQ8L2E+LjwvZGQ+CiAgICA8ZHQ+InNobWNiIiAoPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX3NvY2FjaGVfc2htY2IuaHRtbCI+bW9kX3NvY2FjaGVfc2htY2I8L2E+PC9jb2RlPik8L2R0PgogICAgPGRkPkNlbHVpLWNpIHV0aWxpc2UgdW4gdGFtcG9uIGN5Y2xpcXVlIOAgaGF1dGVzIHBlcmZvcm1hbmNlcyBhdQogICAgc2VpbiBkJ3VuIHNlZ21lbnQgZGUgbeltb2lyZSBwYXJ0YWfpZS48L2RkPgogICAgPC9kbD4KCiAgICA8cD5MJ0FQSSBmb3Vybml0IGxlcyBmb25jdGlvbnMgc3VpdmFudGVzIDo8L3A+CgogICAgPGRsPgogICAgICA8ZHQ+Y29uc3QgY2hhciAqY3JlYXRlKGFwX3NvY2FjaGVfaW5zdGFuY2VfdCAqKmluc3RhbmNlLCBjb25zdCBjaGFyICphcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqdG1wLCBhcHJfcG9vbF90ICpwKTs8L2R0PgogICAgICA8ZGQ+Q2V0dGUgZm9uY3Rpb24gcGVybWV0IGRlIGNy6WVyIHVuIGNhY2hlIGRlIHNlc3Npb24gYmFz6SBzdXIKICAgICAgbGEgY2hh7m5lIGRlIGNvbmZpZ3VyYXRpb24gc3DpY2lmaellLiBMZSBwb2ludGV1ciBkJ2luc3RhbmNlCiAgICAgIHJlbnZveekgZGFucyBsZSBwYXJhbeh0cmUgaW5zdGFuY2Ugc2VyYSBwYXNz6SBjb21tZSBwcmVtaWVyCiAgICAgIGFyZ3VtZW50IGRlcyBpbnZvY2F0aW9ucyBzdWJz6XF1ZW50ZXMuPC9kZD4KCiAgICAgIDxkdD5hcHJfc3RhdHVzX3QgaW5pdChhcF9zb2NhY2hlX2luc3RhbmNlX3QgKmluc3RhbmNlLCBjb25zdCBjaGFyICpjbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcF9zb2NhY2hlX2hpbnRzICpoaW50cywKICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9yZWMgKnMsIGFwcl9wb29sX3QgKnBvb2wpPC9kdD4KICAgICAgPGRkPkNldHRlIGZvbmN0aW9uIHBlcm1ldCBkJ2luaXRpYWxpc2VyIGxlIGNhY2hlLiBMJ2FyZ3VtZW50IGNuYW1lCiAgICAgIGRvaXQgYXZvaXIgdW5lIGxvbmd1ZXVyIG1heGltYWxlIGRlIDE2IGNhcmFjdOhyZXMgZXQgcGVybWV0CiAgICAgIGQnaWRlbnRpZmllciBkZSBtYW5p6HJlIHVuaXF1ZSBsJ3V0aWxpc2F0ZXVyIGR1IGNhY2hlIGF1IHNlaW4gZHUKICAgICAgc2VydmV1ciA7IGlsIGVzdCByZWNvbW1hbmTpIGQndXRpbGlzZXIgbGUgbm9tIGR1IG1vZHVsZSwgcGFyCiAgICAgIGV4ZW1wbGUgIm1vZF9zc2wtc2VzcyIuIENvbW1lIGNldHRlIGNoYe5uZSBwZXV0IOp0cmUgdXRpbGlz6WUgYXUKICAgICAgc2VpbiBkJ3VuIHN5c3TobWUgZGUgZmljaGllcnMsIGlsIGVzdCBjb25zZWlsbOkgZGUgbid1dGlsaXNlciBxdWUKICAgICAgZGVzIGNhcmFjdOhyZXMgYWxwaGFudW3pcmlxdWVzIFthLXowLTlfLV0uIFNpIGwnYXJndW1lbnQgaGludHMKICAgICAgbidlc3QgcGFzIOlnYWwg4CBOVUxMLCBpbCBmb3Vybml0IHVuIGVuc2VtYmxlIGQnaW5kaWNhdGlvbnMgYXUKICAgICAgZm91cm5pc3NldXIuIExhIHZhbGV1ciByZXRvdXJu6WUgZXN0IGxlIGNvZGUgZCdlcnJldXIgQVBSLjwvZGQ+CgogICAgICA8ZHQ+dm9pZCBkZXN0cm95KGFwX3NvY2FjaGVfaW5zdGFuY2VfdCAqaW5zdGFuY2UsIHNlcnZlcl9yZWMgKnMpPC9kdD4KICAgICAgPGRkPkNldHRlIGZvbmN0aW9uIHBlcm1ldCBkZSBk6XRydWlyZSBsJ2luc3RhbmNlIGRlIGNhY2hlCiAgICAgIHNw6WNpZmnpZS48L2RkPgoKICAgICAgPGR0PmFwcl9zdGF0dXNfdCBzdG9yZShhcF9zb2NhY2hlX2luc3RhbmNlX3QgKmluc3RhbmNlLCBzZXJ2ZXJfcmVjICpzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlkLCB1bnNpZ25lZCBpbnQgaWRsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3RpbWVfdCBleHBpcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk8L2R0PgogICAgICA8ZGQ+Q2V0dGUgZm9uY3Rpb24gcGVybWV0IGRlIHN0b2NrZXIgdW4gb2JqZXQgZGFucyB1bmUgaW5zdGFuY2UgZGUKICAgICAgY2FjaGUuPC9kZD4KCiAgICAgIDxkdD5hcHJfc3RhdHVzX3QgcmV0cmlldmUoYXBfc29jYWNoZV9pbnN0YW5jZV90ICppbnN0YW5jZSwgc2VydmVyX3JlYyAqcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppZCwgdW5zaWduZWQgaW50IGlkbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKTwvZHQ+CiAgICAgIDxkZD5DZXR0ZSBmb25jdGlvbiBwZXJtZXQgZCdleHRyYWlyZSB1biBvYmpldCBkdSBjYWNoZS48L2RkPgoKICAgICAgPGR0PmFwcl9zdGF0dXNfdCByZW1vdmUoYXBfc29jYWNoZV9pbnN0YW5jZV90ICppbnN0YW5jZSwgc2VydmVyX3JlYyAqcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaWQsIHVuc2lnbmVkIGludCBpZGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk8L2R0PgogICAgICA8ZGQ+U3VwcHJpbWUgdW4gb2JqZXQgZHUgY2FjaGUuPC9kZD4KCiAgICAgIDxkdD52b2lkIHN0YXR1cyhhcF9zb2NhY2hlX2luc3RhbmNlX3QgKmluc3RhbmNlLCByZXF1ZXN0X3JlYyAqciwgaW50IGZsYWdzKTwvZHQ+CiAgICAgIDxkZD5EZXNjZW5kIGxlIGTpdGFpbCBkJ3VuZSBpbnN0YW5jZSBkZSBjYWNoZSDgIGRlc3RpbmF0aW9uIGRlIG1vZF9zdGF0dXMuPC9kZD4KCiAgICAgIDxkdD5hcHJfc3RhdHVzX3QgaXRlcmF0ZShhcF9zb2NhY2hlX2luc3RhbmNlX3QgKmluc3RhbmNlLCBzZXJ2ZXJfcmVjICpzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmN0eCwgYXBfc29jYWNoZV9pdGVyYXRvcl90ICppdGVyYXRvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpPC9kdD4KICAgICAgPGRkPkRlc2NlbmQgdG91cyBsZXMgb2JqZXRzIGVuIGNhY2hlIOAgZGVzdGluYXRpb24gZCd1bmUgZm9uY3Rpb24gPGNvZGU+aXRlcmF0b3IgY2FsbGJhY2s8L2NvZGU+LjwvZGQ+CiAgICA8L2RsPgoKICA8L2Rpdj48L2Rpdj4KPGRpdiBjbGFzcz0iYm90dG9tbGFuZyI+CjxwPjxzcGFuPkxhbmd1ZXMgRGlzcG9uaWJsZXM6IDwvc3Bhbj48YSBocmVmPSIuL2VuL3NvY2FjaGUuaHRtbCIgaHJlZmxhbmc9ImVuIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vZnIvc29jYWNoZS5odG1sIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgc3JjPSIuL2ltYWdlcy91cC5naWYiIGFsdD0idG9wIiAvPjwvYT48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDI+PGEgaWQ9ImNvbW1lbnRzX3NlY3Rpb24iIG5hbWU9ImNvbW1lbnRzX3NlY3Rpb24iPkNvbW1lbnRhaXJlczwvYT48L2gyPjxkaXYgY2xhc3M9Indhcm5pbmciPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPjxiciAvPlRoaXMgaXMgbm90IGEgUSZhbXA7QSBzZWN0aW9uLiBDb21tZW50cyBwbGFjZWQgaGVyZSBzaG91bGQgYmUgcG9pbnRlZCB0b3dhcmRzIHN1Z2dlc3Rpb25zIG9uIGltcHJvdmluZyB0aGUgZG9jdW1lbnRhdGlvbiBvciBzZXJ2ZXIsIGFuZCBtYXkgYmUgcmVtb3ZlZCBhZ2FpbiBieSBvdXIgbW9kZXJhdG9ycyBpZiB0aGV5IGFyZSBlaXRoZXIgaW1wbGVtZW50ZWQgb3IgY29uc2lkZXJlZCBpbnZhbGlkL29mZi10b3BpYy4gUXVlc3Rpb25zIG9uIGhvdyB0byBtYW5hZ2UgdGhlIEFwYWNoZSBIVFRQIFNlcnZlciBzaG91bGQgYmUgZGlyZWN0ZWQgYXQgZWl0aGVyIG91ciBJUkMgY2hhbm5lbCwgI2h0dHBkLCBvbiBGcmVlbm9kZSwgb3Igc2VudCB0byBvdXIgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvbGlzdHMuaHRtbCI+bWFpbGluZyBsaXN0czwvYT4uPC9kaXY+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tLy8tLT48IVtDREFUQVsvLz48IS0tCnZhciBjb21tZW50c19zaG9ydG5hbWUgPSAnaHR0cGQnOwp2YXIgY29tbWVudHNfaWRlbnRpZmllciA9ICdodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzL3RydW5rL3NvY2FjaGUuaHRtbCc7CihmdW5jdGlvbih3LCBkKSB7CiAgICBpZiAody5sb2NhdGlvbi5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpID09ICJodHRwZC5hcGFjaGUub3JnIikgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+PFwvZGl2PicpOwogICAgICAgIHZhciBzID0gZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBzLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBzLmFzeW5jID0gdHJ1ZTsKICAgICAgICBzLnNyYyA9ICdodHRwczovL2NvbW1lbnRzLmFwYWNoZS5vcmcvc2hvd19jb21tZW50cy5sdWE/c2l0ZT0nICsgY29tbWVudHNfc2hvcnRuYW1lICsgJyZwYWdlPScgKyBjb21tZW50c19pZGVudGlmaWVyOwogICAgICAgIChkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0gfHwgZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdKS5hcHBlbmRDaGlsZChzKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+Q29tbWVudHMgYXJlIGRpc2FibGVkIGZvciB0aGlzIHBhZ2UgYXQgdGhlIG1vbWVudC48XC9kaXY+Jyk7CiAgICB9Cn0pKHdpbmRvdywgZG9jdW1lbnQpOwovLy0tPjwhXV0+PC9zY3JpcHQ+PC9kaXY+PGRpdiBpZD0iZm9vdGVyIj4KPHAgY2xhc3M9ImFwYWNoZSI+Q29weXJpZ2h0IDIwMTYgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLjxiciAvPkF1dG9yaXPpIHNvdXMgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5BcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjA8L2E+LjwvcD4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuL21vZC9xdWlja3JlZmVyZW5jZS5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi9nbG9zc2FyeS5odG1sIj5HbG9zc2FpcmU8L2E+IHwgPGEgaHJlZj0iLi9zaXRlbWFwLmh0bWwiPlBsYW4gZHUgc2l0ZTwvYT48L3A+PC9kaXY+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KaWYgKHR5cGVvZihwcmV0dHlQcmludCkgIT09ICd1bmRlZmluZWQnKSB7CiAgICBwcmV0dHlQcmludCgpOwp9Ci8vLS0+PCFdXT48L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=