/////////////////////////////////////////////////
// AUTOGENERATED AT SVN EXPORT TIME
// DO NOT EDIT
/////////////////////////////////////////////////
?>
YTo3OntzOjEzOiJjb250ZW50U3RhdHVzIjthOjE6e3M6Njoic3RhdHVzIjtiOjE7fXM6NzoiY29udGVudCI7czo0MDc3ODoiPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KICAgIHZhciBNVk5fUFVCID0gTVZOX1BVQiB8fCB7J2FjdGlvbic6J2FydGljbGUnLCAndXJsJzonaHR0cDovL3d3dy5jaXR5cGFnZXMuY29tLzIwMTItMTEtMjEvYXJ0cy9hLWNocmlzdG1hcy1jYXJvbC1yZWlnbml0ZXMtYS1jbGFzc2ljLyd9Ow0KICAgIHZhciBNVk5fU0hPV19XRUxDT01FID0gTVZOX1NIT1dfV0VMQ09NRSB8fCB0cnVlOw0KICAgIGlmKCF3aW5kb3cuUmVjYXB0Y2hhKXsNCiAgICAgICAgJC5nZXRTY3JpcHQoJ2h0dHA6Ly93d3cuZ29vZ2xlLmNvbS9yZWNhcHRjaGEvYXBpL2pzL3JlY2FwdGNoYV9hamF4LmpzJyk7DQogICAgfQ0KPC9zY3JpcHQ+DQoNCjxkaXYgY2xhc3M9J2NvbnRlbnR2aWV3Jz4NCiA8ZGl2IGNsYXNzPSdzaGFyZXMnPg0KIDx1bCBjbGFzcz0iU2hhcmVfQnV0dG9ucyI+PGxpIGNsYXNzPSJGYWNlYm9va19MaWtlIj48ZGl2IGlkPSJmYi1yb290Ij48L2Rpdj4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLzwhW0NEQVRBWwooZnVuY3Rpb24oZCwgcywgaWQpIHsNCiAgdmFyIGpzLCBmanMgPSBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKHMpWzBdOw0KICBpZiAoZC5nZXRFbGVtZW50QnlJZChpZCkpIHJldHVybjsNCiAganMgPSBkLmNyZWF0ZUVsZW1lbnQocyk7IGpzLmlkID0gaWQ7DQogIGpzLnNyYyA9ICIvL2Nvbm5lY3QuZmFjZWJvb2submV0L2VuX1VTL2FsbC5qcyN4ZmJtbD0xJmFwcElkPTIwNzkxMDY3NTg5MTYwNCI7DQogIGZqcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShqcywgZmpzKTsNCiAgICB9KGRvY3VtZW50LCAnc2NyaXB0JywgJ2ZhY2Vib29rLWpzc2RrJykpOwovL11dPgo8L3NjcmlwdD4KPGRpdiBjbGFzcz0iZmItbGlrZSIgZGF0YS1zZW5kPSJ0cnVlIiBkYXRhLWhyZWY9Imh0dHAlM0ElMkYlMkZ3d3cuY2l0eXBhZ2VzLmNvbSUyRjIwMTItMTEtMjElMkZhcnRzJTJGYS1jaHJpc3RtYXMtY2Fyb2wtcmVpZ25pdGVzLWEtY2xhc3NpYyUyRiIgZGF0YS1sYXlvdXQ9ImJ1dHRvbl9jb3VudCIgZGF0YS13aWR0aD0iMTUwIiBkYXRhLXNob3ctZmFjZXM9InRydWUiPjwvZGl2PjwvbGk+CjxsaSBjbGFzcz0iVHdpdHRlciI+PGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9zaGFyZSIgY2xhc3M9InR3aXR0ZXItc2hhcmUtYnV0dG9uIiBkYXRhLXRleHQ9IkEgQ2hyaXN0bWFzIENhcm9sIHJlaWduaXRlcyBhIGNsYXNzaWMiIGRhdGEtdXJsPSJodHRwOi8vd3d3LmNpdHlwYWdlcy5jb20vMjAxMi0xMS0yMS9hcnRzL2EtY2hyaXN0bWFzLWNhcm9sLXJlaWduaXRlcy1hLWNsYXNzaWMvIiBkYXRhLXZpYT0iY2l0eXBhZ2VzIj48L2E+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLy88IVtDREFUQVsKIWZ1bmN0aW9uKGQscyxpZCl7dmFyIGpzLGZqcz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKHMpWzBdO2lmKCFkLmdldEVsZW1lbnRCeUlkKGlkKSl7anM9ZC5jcmVhdGVFbGVtZW50KHMpO2pzLmlkPWlkO2pzLnNyYz0iLy9wbGF0Zm9ybS50d2l0dGVyLmNvbS93aWRnZXRzLmpzIjtmanMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoanMsZmpzKTt9fShkb2N1bWVudCwic2NyaXB0IiwidHdpdHRlci13anMiKTsKLy9dXT4KPC9zY3JpcHQ+PC9saT4KPGxpIGNsYXNzPSJTdHVtYmxlX1Vwb24iPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLy88IVtDREFUQVsKKGZ1bmN0aW9uKCkge3ZhciBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOyBsaS50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7IGxpLmFzeW5jID0gdHJ1ZTsNCiAgICBsaS5zcmMgPSAoJ2h0dHBzOicgPT0gZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2wgPyAnaHR0cHM6JyA6ICdodHRwOicpICsgJy8vcGxhdGZvcm0uc3R1bWJsZXVwb24uY29tLzEvd2lkZ2V0cy5qcyc7DQogICAgdmFyIHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF07IHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobGksIHMpOw0KICB9KSgpOwovL11dPgo8L3NjcmlwdD4KPHN1OmJhZGdlIGxheW91dD0iMSI+PC9zdTpiYWRnZT48L2xpPgo8bGkgY2xhc3M9IlBvY2tldCI+PGEgZGF0YS1wb2NrZXQtbGFiZWw9InBvY2tldCIgZGF0YS1zYXZlLXVybD0iaHR0cCUzQSUyRiUyRnd3dy5jaXR5cGFnZXMuY29tJTJGMjAxMi0xMS0yMSUyRmFydHMlMkZhLWNocmlzdG1hcy1jYXJvbC1yZWlnbml0ZXMtYS1jbGFzc2ljJTJGIiBkYXRhLXBvY2tldC1jb3VudD0iaG9yaXpvbnRhbCIgY2xhc3M9InBvY2tldC1idG4iIGRhdGEtbGFuZz0iZW4iPjwvYT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiFmdW5jdGlvbihkLGkpe2lmKCFkLmdldEVsZW1lbnRCeUlkKGkpKXt2YXIgaj1kLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2ouaWQ9aTtqLnNyYz0iaHR0cHM6Ly93aWRnZXRzLmdldHBvY2tldC5jb20vdjEvai9idG4uanM/dj0xIjt2YXIgdz1kLmdldEVsZW1lbnRCeUlkKGkpO2QuYm9keS5hcHBlbmRDaGlsZChqKTt9fShkb2N1bWVudCwicG9ja2V0LWJ0bi1qcyIpOzwvc2NyaXB0PjwvbGk+CjxsaSBjbGFzcz0iR29vZ2xlUGx1cyI+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLzwhW0NEQVRBWwooZnVuY3Rpb24oKSB7DQogICAgdmFyIHBvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7IHBvLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsgcG8uYXN5bmMgPSB0cnVlOw0KICAgIHBvLnNyYyA9ICdodHRwczovL2FwaXMuZ29vZ2xlLmNvbS9qcy9wbHVzb25lLmpzJzsNCiAgICB2YXIgcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTsgcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShwbywgcyk7DQogIH0pKCk7Ci8vXV0+Cjwvc2NyaXB0Pgo8ZzpwbHVzb25lIHNpemU9Im1lZGl1bSIgaHJlZj0iaHR0cDovL3d3dy5jaXR5cGFnZXMuY29tLzIwMTItMTEtMjEvYXJ0cy9hLWNocmlzdG1hcy1jYXJvbC1yZWlnbml0ZXMtYS1jbGFzc2ljLyI+PC9nOnBsdXNvbmU+PC9saT48L3VsPjxkaXYgY2xhc3M9IkNsZWFySXQiPjwvZGl2PiA8L2Rpdj4NCiA8ZGl2IGNsYXNzPSdjb250ZW50X2hlYWQnPg0KICA8aDEgY2xhc3M9J2hlYWRsaW5lJz48aT5BIENocmlzdG1hcyBDYXJvbDwvaT4gcmVpZ25pdGVzIGEgY2xhc3NpYzwvaDE+DQogIDxoMz5UaGUgR3V0aHJpZSdzIHdpbnRlciBzdGFuZGJ5IGNyYWNrbGVzIHdpdGggZW5lcmd5IGFuZCB3YXJtdGg8L2gzPg0KICA8ZGl2IGNsYXNzPSdieWxpbmUnPg0KICAgIDxzcGFuIGNsYXNzPSd0ZXh0c2l6ZScgdGl0bGU9J0NsaWNrIHRvIHJlc2l6ZSB0ZXh0Jz48YSBjbGFzcz0nc20nIGhyZWY9J2phdmFzY3JpcHQ6OycgaWQ9J3RleHRfc2l6ZV9zbSc+QTwvYT4gIDxhIGNsYXNzPSdtZWQnIGhyZWY9J2phdmFzY3JpcHQ6OycgaWQ9J3RleHRfc2l6ZV9tZWQnPkE8L2E+ICA8YSBjbGFzcz0nbGcnIGhyZWY9J2phdmFzY3JpcHQ6OycgaWQ9J3RleHRfc2l6ZV9sZyc+QTwvYT48L3NwYW4+IA0KICAgIDxzcGFuIGNsYXNzPSJjb21tZW50bGluayI+DQogICAgICAgIDxhIGhyZWY9IiNsaXZlZnlyZSI+Q29tbWVudHM8L2E+DQogICAgICAgICAgICAoPHNwYW4gY2xhc3M9ImxpdmVmeXJlLWNvbW1lbnRjb3VudCIgZGF0YS1sZnYzLWNvdW50ZXI9InRydWUiPjA8L3NwYW4+KQ0KICAgIDwvc3Bhbj4NCiAgQnkgPGEgaHJlZj0iL2F1dGhvcnMvZWQtaHV5Y2siIENsYXNzPSJhdXRob3IiPkVkIEh1eWNrPC9hPiA8c3BhbiBjbGFzcz0ncHViZGF0ZSc+V2VkbmVzZGF5LCBOb3YgMjEgMjAxMjwvc3Bhbj4NCiAgPC9kaXY+DQogPC9kaXY+DQo8IS0tZ29vZ2xlb246IGFsbC0tPg0KICAgICAgICAgICAgPG1ldGEgbmFtZT0id2VidGl0bGUiIGNvbnRlbnQ9IkEgQ2hyaXN0bWFzIENhcm9sIHJlaWduaXRlcyBhIGNsYXNzaWMgLSBUaGUgR3V0aHJpZSYjMDM5O3Mgd2ludGVyIHN0YW5kYnkgY3JhY2tsZXMgd2l0aCBlbmVyZ3kgYW5kIHdhcm10aCI+CiAgICAgICAgICAgICAgICA8bWV0YSBuYW1lPSJ3ZWJkZXNjcmlwdGlvbiIgY29udGVudD0iQSBDaHJpc3RtYXMgQ2Fyb2xUaGUgR3V0aHJpZSBUaGVhdGVyODE4IFMuIFNlY29uZCBTdC4sIE1pbm5lYXBvbGlzNjEyLjM3Ny4yMjI0OyB0aHJvdWdoIERlYy4gMjkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1ldGEgbmFtZT0iYXV0aG9yIiBjb250ZW50PSJFZCBIdXljayI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtZXRhIG5hbWU9ImF1dGhvclVSTCIgY29udGVudD0iL2F1dGhvcnMvZWQtaHV5Y2siPgogICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBuYW1lPSJ0aHVtYm5haWwiIGNvbnRlbnQ9Imh0dHA6Ly9tZWRpYS5jaXR5cGFnZXMuY29tLzgzNTY5NTkuOTkuanBnIj4KICAgICAgICAgICAgICAgIDxtZXRhIG5hbWU9InRodW1ic3JjIiBjb250ZW50PSJlNmJlLzgzNTY5NTkudC5qcGciPgogICAgICAgICAgICAgICAgPG1ldGEgbmFtZT0iaGVhZGxpbmUiIGNvbnRlbnQ9IkEgQ2hyaXN0bWFzIENhcm9sIHJlaWduaXRlcyBhIGNsYXNzaWMiPgogICAgICAgICAgICAgICAgPG1ldGEgbmFtZT0ic3ViaGVhZGxpbmUiIGNvbnRlbnQ9IlRoZSBHdXRocmllJiMwMzk7cyB3aW50ZXIgc3RhbmRieSBjcmFja2xlcyB3aXRoIGVuZXJneSBhbmQgd2FybXRoIj4KICAgICAgICAgICAgICAgIDxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMTItMTEtMjAgMTM6MDQ6NTQiPgogICAgICAgICAgICAgICAgPG1ldGEgbmFtZT0iY29tbWVudHMiIGNvbnRlbnQ9IjAiPgogICAgICAgICAgICAgICAgPG1ldGEgbmFtZT0ic2VjdGlvbiIgY29udGVudD0iQXJ0cyI+CiAgICAgICAgICAgICAgICA8bWV0YSBuYW1lPSJjYXRlZ29yeSIgY29udGVudD0iVGhlYXRlciI+CiAgICAgICAgICAgICAgICA8bWV0YSBuYW1lPSJvYmppZCIgY29udGVudD0iMjY0ODI3NCI+CiAgICANCiA8ZGl2IGNsYXNzPSdjb250ZW50X2JvZHkgc20nPg0KCjxwPlJlYWwtbGlmZSBkcmFtYSBicm9rZSBvdXQgU2F0dXJkYXkgbmlnaHQgYXQgdGhlIG9wZW5pbmcgb2YgdGhlIEd1dGhyaWUncyBsYXRlc3QgcHJvZHVjdGlvbiBvZiA8aT5BIENocmlzdG1hcyBDYXJvbDwvaT4gYXMgb25lIG9mIHRoZSBwYXRyb25zIGNvbGxhcHNlZCBtaWR3YXkgdGhyb3VnaCB0aGUgZmlyc3QgYWN0LiBJdCB3YXMgYSBzY2FyeSBzY2VuZSB0aGF0IGRlbGF5ZWQgdGhlIHNob3cgZm9yIGFib3V0IDIwIG1pbnV0ZXMgYXMgdGhlIG1hbiB3YXMgYXR0ZW5kZWQgdG8gYmVmb3JlIGhlIHdhcyBzZW50IHRvIHRoZSBob3NwaXRhbC48L3A+CjxkaXYgY2xhc3M9J2NvbnRlbnRfaW5zZXJ0IGNoaXNlbF91Jz4NCiA8ZGl2IGNsYXNzPSdpbnNlcnRfcGhvdG8nPg0KICA8YSBocmVmPSIvcGhvdG9HYWxsZXJ5L2luZGV4LzI2NDgyNzQvMCI+PGltZyBzcmM9Imh0dHA6Ly9tZWRpYS5jaXR5cGFnZXMuY29tL2EtY2hyaXN0bWFzLWNhcm9sLXJlaWduaXRlcy1hLWNsYXNzaWMuODM1Njk1OS40MC5qcGciIGNsYXNzPSJmcmFtZWQiIGFsdD0iQSBzaG93IHRoYXQgY3JhY2tsZXMgd2l0aCBlbmVyZ3k6IEJvYiBEYXZpcyAobGVmdCkgYW5kIEouQy4gQ3V0bGVyIiAvPjwvYT4NCiAgPGRpdiBjbGFzcz0nY3JlZCc+TWljaGFlbCBCcm9zaWxvdzwvZGl2Pg0KICA8ZGl2IGNsYXNzPSdjYXAnPkEgc2hvdyB0aGF0IGNyYWNrbGVzIHdpdGggZW5lcmd5OiBCb2IgRGF2aXMgKGxlZnQpIGFuZCBKLkMuIEN1dGxlcjwvZGl2Pg0KIDwvZGl2Pg0KDQoNCg0KDQoNCg0KICAgIA0KICAgDQoNCg0KDQoNCg0KIDxkaXYgY2xhc3M9J2RldF9yZWwnPg0KICA8aDI+RGV0YWlsczwvaDI+DQogIDxkaXYgY2xhc3M9J2RlZXRzJz48cCBhbGlnbj0iY2VudGVyIj5BIENocmlzdG1hcyBDYXJvbDwvYnIgPlRoZSBHdXRocmllIFRoZWF0ZXI8L2JyID44MTggUy4gU2Vjb25kIFN0LiwgTWlubmVhcG9saXM8L2JyID42MTIuMzc3LjIyMjQ7IHRocm91Z2ggRGVjLiAyOTwvcD48L2Rpdj4NCjwhLS0gUmVjZW50UmVsYXRlZCB3aWRnZXQgaGVyZSAtLT4KICAgIDxoMj5SZWxhdGVkIENvbnRlbnQ8L2gyPgogIDxkaXYgY2xhc3M9J2RlZXRzIHJlbGF0ZWQnPgogICA8dWw+CiAgICA8bGkgPjxhIGhyZWY9Imh0dHA6Ly93d3cuY2l0eXBhZ2VzLmNvbS8yMDEzLTAxLTIzL2NhbGVuZGFyL2NhYmFyZXQvIj5DYWJhcmV0PC9hPjxkaXYgY2xhc3M9J2RhdGUnPkphbnVhcnkgMjMsIDIwMTM8L2Rpdj48L2xpPjxsaSA+PGEgaHJlZj0iaHR0cDovL3d3dy5jaXR5cGFnZXMuY29tLzIwMTItMTEtMTQvY2FsZW5kYXIvYS1jaHJpc3RtYXMtY2Fyb2wvIj5BIENocmlzdG1hcyBDYXJvbDwvYT48ZGl2IGNsYXNzPSdkYXRlJz5Ob3ZlbWJlciAxNCwgMjAxMjwvZGl2PjwvbGk+PGxpID48YSBocmVmPSJodHRwOi8vYmxvZ3MuY2l0eXBhZ2VzLmNvbS9naW1tZW5vaXNlLzIwMTIvMTIvdGVuX21vc3RfZGVwcmVzc2luZ19jb3VudHJ5X2NocmlzdG1hc19zb25ncy5waHAiPlRoZSB0ZW4gbW9zdCBkZXByZXNzaW5nIGNvdW50cnkgQ2hyaXN0bWFzIHNvbmdzPC9hPjxkaXYgY2xhc3M9J2RhdGUnPkRlY2VtYmVyIDIwLCAyMDEyPC9kaXY+PC9saT48bGkgPjxhIGhyZWY9Imh0dHA6Ly9ibG9ncy5jaXR5cGFnZXMuY29tL2dpbW1lbm9pc2UvMjAxMi8xMi90d2luX2NpdGllc19tdXNpY2lhbnNfY2hyaXN0bWFzX211c2ljX2Jlc3Rfd29yc3QucGhwIj5Ud2luIENpdGllcyBtdXNpY2lhbnMgb24gQ2hyaXN0bWFzIG11c2ljIGF0IGl0cyBiZXN0IGFuZCB3b3JzdDwvYT48ZGl2IGNsYXNzPSdkYXRlJz5EZWNlbWJlciAxOSwgMjAxMjwvZGl2PjwvbGk+PGxpIGNsYXNzPSJsYXN0Ij48YSBocmVmPSJodHRwOi8vd3d3LmNpdHlwYWdlcy5jb20vMjAxMy0wMS0zMC9jYWxlbmRhci9idXp6ZXIvIj5CdXp6ZXI8L2E+PGRpdiBjbGFzcz0nZGF0ZSc+SmFudWFyeSAzMCwgMjAxMzwvZGl2PjwvbGk+ICAgPC91bD4KICA8L2Rpdj4KICAKICAgIDxoMj5Nb3JlIEFib3V0PC9oMj4KICA8ZGl2IGNsYXNzPSdkZWV0cyBtb3JlYWJvdXQnPgogICA8dWw+CiAgICA8bGk+PGEgaHJlZj0iL3JlbGF0ZWQvdG8vVGlueStUaW0vIiBkYXRhLW9tbmktdHJhY2s9IkluZm9ybS0mZ3Q7Q2xpY2t8a2V5d29yZFtUaW55K1RpbV0iPlRpbnkgVGltPC9hPjwvbGk+PGxpPjxhIGhyZWY9Ii9yZWxhdGVkL3RvL0pvZStDaHZhbGEvIiBkYXRhLW9tbmktdHJhY2s9IkluZm9ybS0mZ3Q7Q2xpY2t8a2V5d29yZFtKb2UrQ2h2YWxhXSI+Sm9lIENodmFsYTwvYT48L2xpPjxsaT48YSBocmVmPSIvcmVsYXRlZC90by9Cb2IrQ3JhdGNoaXQvIiBkYXRhLW9tbmktdHJhY2s9IkluZm9ybS0mZ3Q7Q2xpY2t8a2V5d29yZFtCb2IrQ3JhdGNoaXRdIj5Cb2IgQ3JhdGNoaXQ8L2E+PC9saT48bGk+PGEgaHJlZj0iL3JlbGF0ZWQvdG8vQW5nZWxhK1RpbWJlcm1hbi8iIGRhdGEtb21uaS10cmFjaz0iSW5mb3JtLSZndDtDbGlja3xrZXl3b3JkW0FuZ2VsYStUaW1iZXJtYW5dIj5BbmdlbGEgVGltYmVybWFuPC9hPjwvbGk+PGxpPjxhIGhyZWY9Ii9yZWxhdGVkL3RvL0h1Z2grS2VubmVkeS8iIGRhdGEtb21uaS10cmFjaz0iSW5mb3JtLSZndDtDbGlja3xrZXl3b3JkW0h1Z2grS2VubmVkeV0iPkh1Z2ggS2VubmVkeTwvYT48L2xpPiAgIDwvdWw+CiAgPC9kaXY+CiAgPCEtLSAvUmVjZW50UmVsYXRlZCB3aWRnZXQgaGVyZSAtLT4gIDwhLS0gTmV3c2xldHRlciBTaWdudXAgLS0+DQogIDxtdm46YXJ0aWNsZS1zaWdudXAgc2VjdGlvbj0iYXJ0cyIgdHlwZT0iZW1haWwiIHNpemU9InNtYWxsIj48L212bjphcnRpY2xlLXNpZ251cD4NCiA8L2Rpdj4NCjwvZGl2Pg0KPHA+SXQgY291bGQgaGF2ZSBiZWVuIGEgcmVhbCBkYW1wZXIgb24gdGhlIHJlc3Qgb2YgdGhlIGV2ZW5pbmcuIFRoZSBtYW4gd2FzIGF0IGxlYXN0IGNvbnNjaW91cyAmbWRhc2g7IGFuZCB3YXZpbmcgdG8gdGhlIGF1ZGllbmNlIGFzIGhlIGxlZnQgJm1kYXNoOyB3aGljaCBjZXJ0YWlubHkgaGVscGVkLCBhbmQgdGhlIGNvbXBhbnkgbWFkZSBpdHMgd2F5IGJhY2sgb25zdGFnZSwgcmVzdGFydGluZyB3aXRob3V0IG1pc3NpbmcgYSBiZWF0LjwvcD4KPHA+TWF5YmUgaXQgd2FzIHRoYXQgYnVyc3Qgb2YgYWRyZW5hbGluZSwgb3IgdGhlIHdvcmsgb2YgbmV3IGRpcmVjdG9yIDxhIHRpdGxlPSJKb2UgQ2h2YWxhIiBocmVmPSIvcmVsYXRlZC90by9Kb2UrQ2h2YWxhLyIgZGF0YS1vbW5pLXRyYWNrPSJJbmZvcm0tPkNsaWNrfGtleXdvcmRbSm9lK0NodmFsYV0iID5Kb2UgQ2h2YWxhPC9hPiwgYnV0IHRoaXMgeWVhcidzIGVkaXRpb24gb2YgdGhlIHZlbmVyYWJsZSBHdXRocmllIGhvbGlkYXkgc2hvdyBzZWVtZWQgdG8gY3JhY2tsZSB3aXRoIG1vcmUgZW5lcmd5IHRoYW4gbGFzdCB5ZWFyJ3MgcmF0aGVyIGRyZWFyeSBleGVyY2lzZS48L3A+CjxwPk9uZSBvZiB0aGUgc3Ryb25nZXN0IGVsZW1lbnRzIGZyb20gdGhhdCBwcm9kdWN0aW9uIHJldHVybnMgdGhpcyB5ZWFyLCBhcyBKLkMuIEN1dGxlciBvbmNlIGFnYWluIHBsYXlzIFNjcm9vZ2UuIE9uZSBvZiB0aGUgbW9zdCBjb25zaXN0ZW50IGFuZCB0aG91Z2h0ZnVsIGFjdG9ycyBpbiB0b3duLCBDdXRsZXIgaXMgYWJsZSB0byBleHBlcnRseSBwbGF5IGJvdGggdGhlIGh1bW9yIGluIENyaXNwZW4gV2hpdHRlbGwncyBhZGFwdGF0aW9uIGFuZCB0aGUgZHJhbWEgYW5kIHBhdGhvcyBvZiB0aGUgY2hhcmFjdGVyLiBIZSBwbGF5cyBTY3Jvb2dlJ3MgdHJhbnNmb3JtYXRpb24gdG8gYSBULCBnaXZpbmcgdXMgYSBjaGFyYWN0ZXIgd2hvIGlzbid0IGV2aWwsIGJ1dCB3aG9zZSBoZWFydCBoYXMgYmVlbiBjYWxjaWZpZWQgYnkgYSBmZWFyIG9mIHBvdmVydHkgYW5kIGEgbXlvcGlhIHRoYXQgc2VlcyB0aGUgYWNjdW11bGF0aW9uIG9mIHdlYWx0aCBhcyB0aGUgb25seSBwb3NzaWJsZSBnb2FsIGluIGxpZmUuPC9wPgo8cD5BbGwgYXJvdW5kIFNjcm9vZ2UgYXJlIHRoZSBzaWducyBvZiBhIHJpY2hlciBleGlzdGVuY2UsIGlmIGhlIHdvdWxkIG9ubHkgcHVsbCBoaXMgZXllcyB1cCBmcm9tIGhpcyBhY2NvdW50cyBib29rLiBUaGVyZSBpcyBoaXMgY2xlcmssIDxhIHRpdGxlPSJCb2IgQ3JhdGNoaXQiIGhyZWY9Ii9yZWxhdGVkL3RvL0JvYitDcmF0Y2hpdC8iIGRhdGEtb21uaS10cmFjaz0iSW5mb3JtLT5DbGlja3xrZXl3b3JkW0JvYitDcmF0Y2hpdF0iID5Cb2IgQ3JhdGNoaXQ8L2E+ICh0aGUgcmV0dXJuaW5nIDxhIHRpdGxlPSJLcmlzIE5lbHNvbiIgaHJlZj0iL3JlbGF0ZWQvdG8vS3JpcytOZWxzb24vIiBkYXRhLW9tbmktdHJhY2s9IkluZm9ybS0+Q2xpY2t8a2V5d29yZFtLcmlzK05lbHNvbl0iID5LcmlzIEwuIE5lbHNvbjwvYT4pLCB3aG8ga2VlcHMgaGlzIGNoZWVyIGFib3V0IGhpbSBldmVuIGFzIGhlIHN0cnVnZ2xlcyB0byBwdXQgYSAiZmVhc3QiIG9uIHRoZSB0YWJsZSBmb3IgaGlzIGZhbWlseSwgYW5kIHdoaWxlIGhpcyB5b3VuZ2VzdCwgPGEgdGl0bGU9IlRpbnkgVGltIiBocmVmPSIvcmVsYXRlZC90by9UaW55K1RpbS8iIGRhdGEtb21uaS10cmFjaz0iSW5mb3JtLT5DbGlja3xrZXl3b3JkW1RpbnkrVGltXSIgPlRpbTwvYT4sIGlzIHNsaWRpbmcgdG93YXJkIGRlYXRoLiBUaGVyZSBpcyBTY3Jvb2dlJ3MgbmVwaGV3IEZyZWQgKDxhIHRpdGxlPSJIdWdoIEtlbm5lZHkiIGhyZWY9Ii9yZWxhdGVkL3RvL0h1Z2grS2VubmVkeS8iIGRhdGEtb21uaS10cmFjaz0iSW5mb3JtLT5DbGlja3xrZXl3b3JkW0h1Z2grS2VubmVkeV0iID5IdWdoIEtlbm5lZHk8L2E+KSwgd2hvIHdvdWxkIGxvdmUgdG8gaW5jbHVkZSBoaXMgdW5jbGUgaW4gaGlzIDxhIHRpdGxlPSJDaHJpc3RtYXMiIGhyZWY9Ii9yZWxhdGVkL3RvL0NocmlzdG1hcy8iIGRhdGEtb21uaS10cmFjaz0iSW5mb3JtLT5DbGlja3xrZXl3b3JkW0NocmlzdG1hc10iID5DaHJpc3RtYXM8L2E+IGNlbGVicmF0aW9ucyAmbWRhc2g7IGFuZCB0aGUgcmVzdCBvZiBoaXMgbGlmZSAmbWRhc2g7IGlmIFNjcm9vZ2Ugd291bGQganVzdCBsZXQgaGltLjwvcD4KPHA+VGhhdCBsZWF2ZXMgU2Nyb29nZSB3aXRoIGp1c3QgTWVycml3ZWF0aGVyICg8YSB0aXRsZT0iQW5nZWxhIFRpbWJlcm1hbiIgaHJlZj0iL3JlbGF0ZWQvdG8vQW5nZWxhK1RpbWJlcm1hbi8iIGRhdGEtb21uaS10cmFjaz0iSW5mb3JtLT5DbGlja3xrZXl3b3JkW0FuZ2VsYStUaW1iZXJtYW5dIiA+QW5nZWxhIFRpbWJlcm1hbjwvYT4pLCBoaXMgZXF1YWxseSBkb3VyIGhvdXNla2VlcGVyLiBJdCdzIGFuIGV4aXN0ZW5jZSBhcyBkYXJrIGFuZCBjb2xkIGFzIFNjcm9vZ2UncyBvZmZpY2UsIHdoZXJlIGhlIGRlbWFuZHMgdGhhdCBDcmF0Y2hpdCBub3QgcHV0IGFueSBtb3JlIGNvYWwgb24gdGhlIGZpcmUgYW5kIHRoZSBvbmx5IGlsbHVtaW5hdGlvbiBpcyBmcm9tIGEgcGFpciBvZiBjYW5kbGVzLjwvcD4KPHA+U28gaXQncyBmb3IgdGhlIGJlc3QgdGhhdCB0aGUgc3Bpcml0cyBjb21lIHRvIHRha2UgU2Nyb29nZSBvbiBhIHdoaXJsd2luZCB0b3VyIHRocm91Z2ggaG9saWRheXMgcGFzdCwgcHJlc2VudCwgYW5kIGZ1dHVyZS4gSXQncyBmYW1pbGlhciB0ZXJyaXRvcnkgJm1kYXNoOyBTY3Jvb2dlIGFzIGEgYm95LCBhbG9uZSBhdCBzY2hvb2w7IGF0IHRoZSBGZXp6aXdpZ3MsIHdoZXJlIGhlIG1lZXRzIGFuZCBsb3NlcyB0aGUgbG92ZSBvZiBoaXMgbGlmZSwgQmVsbGUgKDxhIHRpdGxlPSJTdXNhbm5hIFN0YWhsbWFubiIgaHJlZj0iL3JlbGF0ZWQvdG8vU3VzYW5uYStTdGFobG1hbm4vIiBkYXRhLW9tbmktdHJhY2s9IkluZm9ybS0+Q2xpY2t8a2V5d29yZFtTdXNhbm5hK1N0YWhsbWFubl0iID5TdXNhbm5hIFN0YWhsbWFubjwvYT4pOyBhdCB0aGUgQ3JhdGNoaXRzJyBhbmQgRnJlZCdzOyBhbmQgdGhlbiBmaW5hbGx5IHdpdGggdmlzaW9ucyBvZiB0aGUgc2FkIGVuZCBvZiBUaW55IFRpbSBhbmQgaGlzIG93biBsaWZlLjwvcD4KPHA+Q2h2YWxhIGFuZCBjb21wYW55IGZpbmQgdGhlIGpveSBhbG9uZyB0aGUgd2F5LCBoZWxwaW5nIHRvIGtlZXAgdGhlIHNob3cgbW92aW5nLiBUaGUgc3RhZ2luZyBzZWVtcyB0byBoYXZlIGZvdW5kIHRoZSBzd2VldCBzcG90LCB3aXRoIGVub3VnaCBob2xpZGF5IGpveSBhbmQgZW5lcmdldGljIGRhbmNpbmcgdG8gYnVpbGQgdGhlIHN0b3J5IHdpdGhvdXQgZ29pbmcgb24gc28gbG9uZyB0aGF0IHRoZSBwYXJ0eSBmZWVscyBsaWtlIGEgc2hvdyB1bnRvIGl0c2VsZi48L3A+CjxwPlNvbWV0aW1lcyB3aXRoIDxpPkNocmlzdG1hcyBDYXJvbDwvaT4gcHJvZHVjdGlvbnMsIFNjcm9vZ2UncyB0cmFuc2Zvcm1hdGlvbiBmZWVscyBmb3JjZWQsIGFzIGlmIHRoZSBjaGFuZ2UgaXMgZGljdGF0ZWQgYnkgdGhlIHNjcmlwdCByYXRoZXIgdGhhbiBjb21pbmcgZnJvbSB0aGUgY2hhcmFjdGVyJ3MgaGVhcnQuIEN1dGxlciBkb2Vzbid0IGhhdmUgdGhhdCBwcm9ibGVtLiBXZSBnZXQgc2lnbnMgb2YgdGhlIHdhcm10aCB0aGF0IGV4aXN0cyBkZWVwIHdpdGhpbi4gSXQncyBub3Qgc28gbXVjaCBhIHRyYW5zZm9ybWF0aW9uIGFzIHNoZWRkaW5nIGEgY3J1c3Qgb2YgaWNlIGFuZCBicmVha2luZyBmcmVlLiBDdXRsZXIncyBtb21lbnRzIHdpdGggRnJlZCBhbmQgaGlzIHdpZmUsIGFuZCBlc3BlY2lhbGx5IHdpdGggVGltIGF0IHRoZSB2ZXJ5IGVuZCwgc2l0IHNvbWV3aGVyZSBiZXR3ZWVuIGhlYXJ0YnJlYWtpbmcgYW5kIGpveWZ1bDsgaGlzIGFyZSB0aGUgZW1vdGlvbnMgb2YgYSBtYW4gd2hvIGtub3dzIGhlIGhhcyB3YXN0ZWQgc28gbXVjaCBvZiBoaXMgbGlmZSBhbmQgaXMgbm93IHJlYWR5IHRvIG1ha2UgdGhlIGJlc3Qgb2Ygd2hhdCBoZSBoYXMgbGVmdC48L3A+IDwvZGl2Pg0KDQoNCjwhLS1nb29nbGVvZmY6IGFsbC0tPg0KDQo8ZGl2IGNsYXNzPSdib3R0b21saW5rcyc+DQoNCiAgICAgICAgICAgIDxoMj5SZWxhdGVkIENvbnRlbnQ8L2gyPg0KICAgICAgICA8ZGl2IGNsYXNzPSJPVVRCUkFJTiIgZGF0YS1zcmM9Imh0dHA6Ly93d3cuY2l0eXBhZ2VzLmNvbS8yMDEyLTExLTIxL2FydHMvYS1jaHJpc3RtYXMtY2Fyb2wtcmVpZ25pdGVzLWEtY2xhc3NpYy8iIGRhdGEtd2lkZ2V0LWlkPSJBUl8yIiBkYXRhLW9iLXRlbXBsYXRlPSJtaW4iPjwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZlYXR1cmVkQWRJbmRleEFkIj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NoaXNlbF91IEFJZmVhdHVyZWQnPg0KICBDaGVjayBvdXQgdGhpcyB3ZWVrJ3MgZmVhdHVyZWQgYWQgZm9yIFNlcnZpY2VzPCEtLSBsaW5rIHRvIGFwcHJvcHJpYXRlIGFkIGluZGV4IGNhdGVnb3J5IC0tPg0KICA8ZGl2IGNsYXNzPSdpbm5lcic+DQogICAgPGRpdj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPScvYWRJbmRleC8tODA3ODMvJz48aW1nIGNsYXNzPSdmcmFtZWQnIHNyYz0naHR0cDovL21lZGlhLmNpdHlwYWdlcy5jb20vODg1NjQ1Ni4xMy5qcGcnLz48L2E+PCEtLSBsaW5rIHRvIGFkIGluZGV4IGFkLCBpbWcgZGVmIDEzLCBhZHZlcnRpc2VyIGxvZ28gLS0+DQogICAgICAgICAgICA8aDQ+PGEgaHJlZj0nL2FkSW5kZXgvLTgwNzgzLyc+TWNOYWxseSBTbWl0aCBDb2xsZWdlIG9mIE11c2ljPC9hPjwvaDQ+PCEtLSBsaW5rIHRvIGFkIGluZGV4IGFkIC0tPg0KICAgICAgPGg1Pg0KICAgICAgICA8YSBocmVmPScvYWRJbmRleC8tODA3ODMvMTkzODI5MC8nPlZpZXcgQWQ8L2E+PCEtLSBsaW5rIHRvIGFkIGluZGV4IGFkIC0tPg0KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPScjJyB2YWx1ZT0iMTkzODI5MCIgY2xhc3M9InRyYWNrIiBuYW1lPSJ2aWV3c2l0ZSI+VmlldyBXZWJzaXRlPC9hPjwhLS0gaWYgYXBwbGljYWJsZSwgbGluayB0byBleHRlcm5hbCB3ZWJzaXRlIC0tPg0KICAgICAgICAgICAgICA8L2g1Pg0KICAgIDwvZGl2Pg0KICA8L2Rpdj4NCiAgPGEgY2xhc3M9J21vcmUnIGhyZWY9Ii9hZEluZGV4LyI+TW9yZSBBZHMgPj48L2E+PCEtLSBsaW5rIHRvIGFkIGluZGV4IC0tPg0KPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICAgIDwhLS0gTmV3c2xldHRlciBTaWdudXAgLS0+DQogICAgICAgIDxtdm46YXJ0aWNsZS1zaWdudXAgc2VjdGlvbj0iYXJ0cyIgdHlwZT0iZW1haWwiIHNpemU9ImxhcmdlIj48L212bjphcnRpY2xlLXNpZ251cD4NCiAgICANCg0KDQo8IS0tIE5PR1NBIC0tPg0KPGRpdiBjbGFzcz0nYXJ0aWNsZWxpbmtzJyBpZD0nYXJ0aWNsZWxpbmtzJz4NCiAgICA8dGFibGU+DQogICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZD48YSBocmVmPScvZmVlZGJhY2svc2VuZFRvRnJpZW5kLz9vYmppZD0yNjQ4Mjc0Jz48aW1nIHNyYz0naHR0cDovL2Fzc2V0cy5jaXR5cGFnZXMuY29tL2ltZy9jbGVhcjUucG5nJyBpZD0naW1nX2VtYWlsX3RvX2ZyaWVuZCcgLz48ZGl2PkVtYWlsPGJyLz50byBGcmllbmQ8L2Rpdj48L2E+PC90ZD4KPHRkPjxhIGhyZWY9Jy9mZWVkYmFjay9FbWFpbEFuRW1wbG95ZWUvP2RlcGFydG1lbnQ9bGV0dGVycyc+PGltZyBzcmM9J2h0dHA6Ly9hc3NldHMuY2l0eXBhZ2VzLmNvbS9pbWcvY2xlYXI1LnBuZycgaWQ9J2ltZ193cml0ZScgLz48ZGl2PldyaXRlIHRvPGJyLz5FZGl0b3I8L2Rpdj48L2E+PC90ZD4KPHRkPjxhIGhyZWY9Jy9jb250ZW50L3ByaW50VmVyc2lvbi8yNjQ4Mjc0JyByZWw9J25vZm9sbG93Jz48aW1nIHNyYz0naHR0cDovL2Fzc2V0cy5jaXR5cGFnZXMuY29tL2ltZy9jbGVhcjUucG5nJyBpZD0naW1nX3ByaW50JyAvPjxkaXY+UHJpbnQ8YnIvPkFydGljbGU8L2Rpdj48L2E+PC90ZD4gICAgICAgIDwvdHI+DQogICAgPC90YWJsZT4NCjwvZGl2Pg0KDQogPCEtLSAvTk9HU0EgLS0+PCEtLSBCZVNvY2lhbCB3aWRnZXQgaGVyZSAtLT4NCjwhLS0gYXJ0aWNsZWxpbmtzIGVsZW1lbnQgaGVyZSAtLT4NCjwhLS0gcmVkZGl0IGJ1dHRvbiAtLT4NCiAgICA8ZGl2IGNsYXNzPSJyZWRkaXQtY29udGFpbmVyIj4NCiAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPnJlZGRpdF9uZXd3aW5kb3c9JzEnPC9zY3JpcHQ+DQogICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly93d3cucmVkZGl0LmNvbS9zdGF0aWMvYnV0dG9uL2J1dHRvbjEuanMiPjwvc2NyaXB0Pg0KICAgIDwvZGl2Pg0KPC9kaXY+DQoNCjxkaXYgY2xhc3M9J3RyaXBsZWJhcic+Jm5ic3A7PC9kaXY+DQo8YSBuYW1lPSJDb21tZW50cyI+PC9hPjxhIG5hbWU9ImNvbW1lbnRzIj48L2E+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vem9yLmxpdmVmeXJlLmNvbS93anMvdjMuMC9qYXZhc2NyaXB0cy9saXZlZnlyZS5qcyI+PC9zY3JpcHQ+CjxkaXYgY2xhc3M9ImxmQm94IHYzIj4KICAgIDxzcGFuIGNsYXNzPSJsaW5rcyI+CiAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5teXZvaWNlbmF0aW9uLmNvbSI+PGltZyBzcmM9IkBBc3NldFNlcnZlclByZWZpeEAvaW1nL2xvZ28tbXZuLTEwMC5wbmciIGFsdD0iTXkgVm9pY2UgTmF0aW9uIi8+PC9hPgogICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cubXl2b2ljZW5hdGlvbi5jb20vYWJvdXQvaGVscC8iPjxpbWcgY2xhc3M9ImxmSGVscCIgc3JjPSJAQXNzZXRTZXJ2ZXJQcmVmaXhAL2ltZy9jbGVhcjUucG5nIiBhbHQ9IkhlbHAiIHRpdGxlPSJIZWxwIi8+PC9hPgogICAgPC9zcGFuPgogICAgPGRpdiBpZD0ibGl2ZWZ5cmUiPjxzY3JpcHQ+CiAgKGZ1bmN0aW9uKCkgewogICAgCiAgIHZhciBhPXRoaXM7dmFyIGIsYyxkLGUsZjtmdW5jdGlvbiBnKCl7cmV0dXJuIGEubmF2aWdhdG9yP2EubmF2aWdhdG9yLnVzZXJBZ2VudDpudWxsfWY9ZT1kPWM9Yj0hMTt2YXIgaDtpZihoPWcoKSl7dmFyIGk9YS5uYXZpZ2F0b3I7Yj0wPT1oLmluZGV4T2YoIk9wZXJhIik7Yz0hYiYmLTEhPWguaW5kZXhPZigiTVNJRSIpO2U9KGQ9IWImJi0xIT1oLmluZGV4T2YoIldlYktpdCIpKSYmLTEhPWguaW5kZXhPZigiTW9iaWxlIik7Zj0hYiYmIWQmJiJHZWNrbyI9PWkucHJvZHVjdH12YXIgaj1jLGs9ZixsPWQsbT1lO3ZhciBuO2lmKGImJmEub3BlcmEpe3ZhciBvPWEub3BlcmEudmVyc2lvbjsiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpfWVsc2Ugaz9uPS9ydlw6KFteXCk7XSspKFwpfDspLzpqP249L01TSUVccysoW15cKTtdKykoXCl8OykvOmwmJihuPS9XZWJLaXRcLyhcUyspLyksbiYmbi5leGVjKGcoKSk7dmFyIHA9ZG9jdW1lbnQscT1wLmNyZWF0ZUVsZW1lbnQoImxpbmsiKTtxLnJlbD0ic3R5bGVzaGVldCI7cS50eXBlPSJ0ZXh0L2NzcyI7cS5ocmVmPSJodHRwOi8vd3d3LmxpdmVmeXJlLmNvbS93anMvdjMuMC9jc3MvbGl2ZWZ5cmVfIisobT8ibW9iaWxlIjoiZW1iZWQiKSsiLmNzcyI7cS5tZWRpYT0iYWxsIjtwLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0uYXBwZW5kQ2hpbGQocSk7dmFyIHI9ImhlYWRlciBoZ3JvdXAgZm9vdGVyIGFydGljbGUgc2VjdGlvbiBhc2lkZSBuYXYgZmlndXJlIGZpZ2NhcHRpb24gZW1iZWQgYXVkaW8gdmlkZW8gY2FudmFzIGRldGFpbHMgc3VtbWFyeSB0aW1lIG1hcmsiLnNwbGl0KCIgIikscz1wLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSx0O2Zvcih0PTA7IHQ8ci5sZW5ndGg7IHQrKyl7cy5hcHBlbmRDaGlsZChwLmNyZWF0ZUVsZW1lbnQoclt0XSkpfTsKICAgfSkoKTsgICAgCjwvc2NyaXB0Pgo8ZGl2IGNsYXNzPSJmeXJlIGZ5cmUtd2lkdGgtbGFyZ2UiPgogIDxkaXYgY2xhc3M9ImZ5cmUtd2lkZ2V0Ij4KICAgIDxkaXYgY2xhc3M9ImZ5cmUtc3RyZWFtLXN0YXRzIj4KICAgICAgPGRpdiBjbGFzcz0iZnlyZS1jb21tZW50LWNvdW50Ij4KICAgICAgICA8c3Bhbj4wIGNvbW1lbnRzPC9zcGFuPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImZ5cmUtZGl2aWRlciI+PC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJmeXJlLWhlbHAiPgogICAgICAgIDxkaXYgY2xhc3M9ImZ5cmUtYm94LXdyYXBwZXIiPgogICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpdmVmeXJlLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPjxzcGFuIGNsYXNzPSJmeXJlLWxvZ28tZHJvcCI+Jm5ic3A8L3NwYW4+CiAgICAgICAgICA8aW1nIGNsYXNzPSJmeXJlLWxvZ28taGVscCIgc3JjPSJodHRwOi8vd3d3LmxpdmVmeXJlLmNvbS93anMvdjMuMC9pbWFnZXMvbGYtbG9nby5wbmciIGFsdD0iTGl2ZWZ5cmUiIC8+PC9hPgogICAgICAgICAgCiAgICAgICAgICA8dWwgY2xhc3M9ImZ5cmUtYm94LWxpc3QiPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2xpdmVmeXJlLmNvbSIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSJHZXQgTGl2ZWZ5cmUiPkdldAogICAgICAgICAgICBMaXZlZnlyZTwvYT48L2xpPgoKICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9zdXBwb3J0LmxpdmVmeXJlLmNvbSIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPQogICAgICAgICAgICAiRkFRIj5GQVE8L2E+PC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZnlyZS1hdXRoIj4KICAgICAgPGRpdiBjbGFzcz0iZnlyZS1sb2dpbi1iYXIiPjxhIHJlbD0ibm9mb2xsb3ciIGhyZWY9IiMiIGNsYXNzPSJmeXJlLXVzZXItbG9nZ2Vkb3V0Ij5TaWduIGluPC9hPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZnlyZS1lZGl0b3IiPgogICAgICA8ZGl2IGNsYXNzPSJmeXJlLWVkaXRvci1jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImZ5cmUtZWRpdG9yLWVkaXRhYmxlIiBzdHlsZT0iaGVpZ2h0OiAxMDBweDsiPjwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJmeXJlLWVkaXRvci10b29sYmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctdG9vbGJhciBnb29nLXRvb2xiYXItaG9yaXpvbnRhbCIgc3R5bGU9CiAgICAgICAgICAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiIHJvbGU9InRvb2xiYXIiIGFyaWEtYWN0aXZlZGVzY2VuZGFudD0iIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ29vZy1pbmxpbmUtYmxvY2sgZnlyZS1idXR0b24tbGVmdCBmeXJlLWZvcm1hdC1idXR0b24iIHRpdGxlPSIiCiAgICAgICAgICAgIHJvbGU9ImJ1dHRvbiIgc3R5bGU9Ii13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7IiBpZD0iOjAiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGZ5cmUtYnV0dG9uLWxlZnQtb3V0ZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ29vZy1pbmxpbmUtYmxvY2sgZnlyZS1idXR0b24tbGVmdC1pbm5lci1ib3giIHN0eWxlPQogICAgICAgICAgICAgICAgIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ij48L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBmeXJlLWJ1dHRvbi1sZWZ0IGZ5cmUtbWVudGlvbi1idXR0b24iIHRpdGxlPSIiCiAgICAgICAgICAgIHJvbGU9ImJ1dHRvbiIgc3R5bGU9Ii13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7IiBpZD0iOjEiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGZ5cmUtYnV0dG9uLWxlZnQtb3V0ZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ29vZy1pbmxpbmUtYmxvY2sgZnlyZS1idXR0b24tbGVmdC1pbm5lci1ib3giIHN0eWxlPQogICAgICAgICAgICAgICAgIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ij48L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBmeXJlLWJ1dHRvbi1sZWZ0IGZ5cmUtZm9sbG93LWJ1dHRvbiIgdGl0bGU9IiIKICAgICAgICAgICAgcm9sZT0iYnV0dG9uIiBzdHlsZT0iLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiIGlkPSI6MiI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ29vZy1pbmxpbmUtYmxvY2sgZnlyZS1idXR0b24tbGVmdC1vdXRlci1ib3giIHN0eWxlPQogICAgICAgICAgICAgICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBmeXJlLWJ1dHRvbi1sZWZ0LWlubmVyLWJveCIgc3R5bGU9CiAgICAgICAgICAgICAgICAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiPgogICAgICAgICAgICAgICAgICArIEZvbGxvdwogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0KICAgICAgICAgICAgImdvb2ctaW5saW5lLWJsb2NrIGZ5cmUtYnV0dG9uLXJpZ2h0IGZ5cmUtcG9zdC1idXR0b24gZnlyZS1wb3N0LWJ1dHRvbi1lbmFibGVkIgogICAgICAgICAgICB0aXRsZT0iIiByb2xlPSJidXR0b24iIHN0eWxlPSItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyIgaWQ9IjozIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBmeXJlLWJ1dHRvbi1yaWdodC1vdXRlci1ib3giIHN0eWxlPQogICAgICAgICAgICAgICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBmeXJlLWJ1dHRvbi1yaWdodC1pbm5lci1ib3giIHN0eWxlPQogICAgICAgICAgICAgICAgIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ij4KICAgICAgICAgICAgICAgICAgUG9zdCBjb21tZW50CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPQogICAgICAgICAgICAiZ29vZy1pbmxpbmUtYmxvY2sgZnlyZS1idXR0b24tcmlnaHQgZnlyZS1wb3N0LXRvIGZ5cmUtcG9zdC10by1mYWNlYm9vayIKICAgICAgICAgICAgdGl0bGU9IiIgcm9sZT0iYnV0dG9uIiBzdHlsZT0iLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiIGlkPSI6NCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ29vZy1pbmxpbmUtYmxvY2sgZnlyZS1idXR0b24tcmlnaHQtb3V0ZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ29vZy1pbmxpbmUtYmxvY2sgZnlyZS1idXR0b24tcmlnaHQtaW5uZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAgICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyI+PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0KICAgICAgICAgICAgImdvb2ctaW5saW5lLWJsb2NrIGZ5cmUtYnV0dG9uLXJpZ2h0IGZ5cmUtcG9zdC10byBmeXJlLXBvc3QtdG8tdHdpdHRlciIKICAgICAgICAgICAgdGl0bGU9IiIgcm9sZT0iYnV0dG9uIiBzdHlsZT0iLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiIGlkPSI6NSI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ29vZy1pbmxpbmUtYmxvY2sgZnlyZS1idXR0b24tcmlnaHQtb3V0ZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ29vZy1pbmxpbmUtYmxvY2sgZnlyZS1idXR0b24tcmlnaHQtaW5uZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAgICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyI+PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0KICAgICAgICAgICAgImdvb2ctaW5saW5lLWJsb2NrIGZ5cmUtYnV0dG9uLXJpZ2h0IGZ5cmUtcG9zdC10byBmeXJlLXBvc3QtdG8tbGlua2VkaW4iCiAgICAgICAgICAgIHRpdGxlPSIiIHJvbGU9ImJ1dHRvbiIgc3R5bGU9Ii13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7IiBpZD0iOjciPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGZ5cmUtYnV0dG9uLXJpZ2h0LW91dGVyLWJveCIgc3R5bGU9CiAgICAgICAgICAgICAgIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGZ5cmUtYnV0dG9uLXJpZ2h0LWlubmVyLWJveCIgc3R5bGU9CiAgICAgICAgICAgICAgICAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiPjwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctdG9vbGJhci1zZXBhcmF0b3IgZ29vZy1pbmxpbmUtYmxvY2siIHN0eWxlPQogICAgICAgICAgICAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiIHJvbGU9InNlcGFyYXRvciIgaWQ9Ijo2Ij4KICAgICAgICAgICAgICAmbmJzcDsKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJmeXJlLWZvcm1hdC10b29sYmFyIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLXRvb2xiYXIgZ29vZy10b29sYmFyLWhvcml6b250YWwiIHN0eWxlPQogICAgICAgICAgICAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiIHJvbGU9InRvb2xiYXIiIHRhYmluZGV4PSItMSI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ29vZy1pbmxpbmUtYmxvY2sgZ29vZy10b29sYmFyLWJ1dHRvbiIgdGl0bGU9IkJvbGQiCiAgICAgICAgICAgICAgYXJpYS1wcmVzc2VkPSJ0cnVlIiByb2xlPSJidXR0b24iIHN0eWxlPSItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyIgaWQ9CiAgICAgICAgICAgICAgIitib2xkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGdvb2ctdG9vbGJhci1idXR0b24tb3V0ZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAgICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGdvb2ctdG9vbGJhci1idXR0b24taW5uZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAgICAgIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ci1pY29uIHRyLWJvbGQiIHN0eWxlPSItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGdvb2ctdG9vbGJhci1idXR0b24iIHRpdGxlPSJJdGFsaWMiCiAgICAgICAgICAgICAgYXJpYS1wcmVzc2VkPSJ0cnVlIiByb2xlPSJidXR0b24iIHN0eWxlPSItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyIgaWQ9CiAgICAgICAgICAgICAgIitpdGFsaWMiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ29vZy1pbmxpbmUtYmxvY2sgZ29vZy10b29sYmFyLWJ1dHRvbi1vdXRlci1ib3giIHN0eWxlPQogICAgICAgICAgICAgICAgIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ij4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ29vZy1pbmxpbmUtYmxvY2sgZ29vZy10b29sYmFyLWJ1dHRvbi1pbm5lci1ib3giIHN0eWxlPQogICAgICAgICAgICAgICAgICAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRyLWljb24gdHItaXRhbGljIiBzdHlsZT0iLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBnb29nLXRvb2xiYXItYnV0dG9uIiB0aXRsZT0iVW5kZXJsaW5lIgogICAgICAgICAgICAgIGFyaWEtcHJlc3NlZD0idHJ1ZSIgcm9sZT0iYnV0dG9uIiBzdHlsZT0iLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiIGlkPQogICAgICAgICAgICAgICIrdW5kZXJsaW5lIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGdvb2ctdG9vbGJhci1idXR0b24tb3V0ZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAgICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGdvb2ctdG9vbGJhci1idXR0b24taW5uZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAgICAgIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ci1pY29uIHRyLXVuZGVybGluZSIgc3R5bGU9Ii13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ij4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ29vZy1pbmxpbmUtYmxvY2sgZ29vZy10b29sYmFyLWJ1dHRvbiIgdGl0bGU9CiAgICAgICAgICAgICAgIkFkZCBvciByZW1vdmUgbGluayIgYXJpYS1wcmVzc2VkPSJ0cnVlIiByb2xlPSJidXR0b24iIHN0eWxlPQogICAgICAgICAgICAgICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyIgaWQ9IitsaW5rIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGdvb2ctdG9vbGJhci1idXR0b24tb3V0ZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAgICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGdvb2ctdG9vbGJhci1idXR0b24taW5uZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAgICAgIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ci1saW5rIiBzdHlsZT0iLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiPgogICAgICAgICAgICAgICAgICAgICAgTGluawogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBnb29nLXRvb2xiYXItYnV0dG9uIiB0aXRsZT0iTnVtYmVyZWQgbGlzdCIKICAgICAgICAgICAgICBhcmlhLXByZXNzZWQ9InRydWUiIHJvbGU9ImJ1dHRvbiIgc3R5bGU9Ii13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7IiBpZD0KICAgICAgICAgICAgICAiK2luc2VydE9yZGVyZWRMaXN0Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGdvb2ctdG9vbGJhci1idXR0b24tb3V0ZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAgICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGdvb2ctdG9vbGJhci1idXR0b24taW5uZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAgICAgIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ci1pY29uIHRyLWluc2VydE9yZGVyZWRMaXN0IiBzdHlsZT0KICAgICAgICAgICAgICAgICAgICAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiPjwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBnb29nLXRvb2xiYXItYnV0dG9uIiB0aXRsZT0iQnVsbGV0IGxpc3QiCiAgICAgICAgICAgICAgYXJpYS1wcmVzc2VkPSJ0cnVlIiByb2xlPSJidXR0b24iIHN0eWxlPSItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyIgaWQ9CiAgICAgICAgICAgICAgIitpbnNlcnRVbm9yZGVyZWRMaXN0Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGdvb2ctdG9vbGJhci1idXR0b24tb3V0ZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAgICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGdvb2ctdG9vbGJhci1idXR0b24taW5uZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAgICAgIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ci1pY29uIHRyLWluc2VydFVub3JkZXJlZExpc3QiIHN0eWxlPQogICAgICAgICAgICAgICAgICAgICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyI+PC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZnlyZS1jb21tZW50LXN0cmVhbSIgc3R5bGU9IiI+CiAgICAgIDxkaXYgY2xhc3M9ImZ5cmUtc3RyZWFtLXNvcnQiPgogICAgICAgIFNvcnQ6IDxhIGNsYXNzPSJmeXJlLXN0cmVhbS1zb3J0LW5ld2VzdCI+TmV3ZXN0PC9hPiB8IDxhIGNsYXNzPQogICAgICAgICJmeXJlLXN0cmVhbS1zb3J0LW9sZGVzdCI+T2xkZXN0PC9hPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImZ5cmUtc3RyZWFtLWNvbnRlbnQiPiAgICAgIAogICAgICAgIAogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KPC9kaXY+CiAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgIE1WTi5vblJlYWR5KGZ1bmN0aW9uKCQpewogICAgICAgICAgICB2YXIgTEZfQ29tcG9uZW50ID0gZnVuY3Rpb24oY29udHJvbGxlcil7CiAgICAgICAgICAgICAgICB2YXIgbWUgPSB0aGlzOwogICAgICAgICAgICAgICAgbWUuTVZOID0gY29udHJvbGxlcjsKICAgICAgICAgICAgICAgIG1lLnZlcnNpb24gPSAnTGl2ZUZ5cmUgZm9yIE1WTiAyLjAnOwogICAgICAgICAgICAgICAgbWUuYXV0b0luaXQgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBMRl9Db21wb25lbnQucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgY29va2llTmFtZTogJ2xpdmVmeXJlX3Rva2VuJywKICAgICAgICAgICAgICAgIGFub25OYW1lOiAnTVZOW2Fub25dJywKICAgICAgICAgICAgICAgIGFub246IG51bGwsCiAgICAgICAgICAgICAgICBsb2dpbjogZnVuY3Rpb24obmV3VG9rZW4pewogICAgICAgICAgICAgICAgICAgIHZhciBtZSA9IHRoaXM7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuID0gbmV3VG9rZW58fFZWTS5nZXRDb29raWUobWUuY29va2llTmFtZSl8fGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKHRva2VuKXsKICAgICAgICAgICAgICAgICAgICAgICAgdHJ5ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnlyZS5jb252LmxvZ2luKHRva2VuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lLmNsZWFuKHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVk0uZGVsQ29va2llKG1lLmNvb2tpZU5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIW5ld1Rva2VuKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZS5sb2dpbigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgIE1WTi5xdWV1ZShmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobWUuTVZOLnVzZXJ8fFZWTS5nZXRDb29raWUobWUuYW5vbk5hbWUpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVk0uZGVidWcucCgnUmVxdWVzdGluZyBOZXcgVG9rZW4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZS5NVk4uc3NvLmdldExmVG9rZW4oZnVuY3Rpb24ob2JqKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYob2JqICYmIG9iai5zdGF0dXMgPT0gJ3N1Y2Nlc3MnKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZWTS5zZXRDb29raWUobWUuY29va2llTmFtZSwgb2JqLnRva2VuLnRva2VuLCBmYWxzZSwgIi8iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lLmxvZ2luKG9iai50b2tlbi50b2tlbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGJpbmRzOiBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgIHZhciBtZSA9IHRoaXM7CiAgICAgICAgICAgICAgICAgICAgaWYoIW1lLmF1dGgpewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXV0aCA9IG5ldyBmeXJlLmNvbnYuUmVtb3RlQXV0aERlbGVnYXRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGgubG9naW4gPSBmdW5jdGlvbihoYW5kbGVBcyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVk4ucXVldWUoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighbWUuTVZOLnVzZXIpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZS5NVk4ub21uaS5hY3Rpb25TcmMgPSAnbGYnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZS5NVk4ub21uaS5hY3Rpb24obWUuTVZOLm9tbmkuYnVpbGRBY3Rpb24oJ2xvZ2luJywge3NpZDogbWUuZ2V0U0lEKCl9KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1WTi5xdWV1ZShmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVZOLkxGLmxvZ2luKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQXMuZmFpbHVyZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGgubG9nb3V0ID0gZnVuY3Rpb24oaGFuZGxlQXMpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTVZOLnF1ZXVlKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobWUuTVZOLnVzZXJ8fFZWTS5nZXRDb29raWUobWUuYW5vbk5hbWUpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVlZNLmRlbENvb2tpZShtZS5jb29raWVOYW1lLCAnLycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVk0uZGVsQ29va2llKG1lLmFub25OYW1lLCAnLycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZS5NVk4ub21uaS5hY3Rpb24oJ2xvZ291dCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQXMuc3VjY2VzcygpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGgudmlld1Byb2ZpbGUgPSBmdW5jdGlvbihoYW5kbGVBcywgYXV0aG9yKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFhdXRob3IuaWQubWF0Y2goL15hbm9uXy8pICYmIGF1dGhvci5wcm9maWxlVXJsICE9ICIiKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSBhdXRob3IucHJvZmlsZVVybDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVBcy5zdWNjZXNzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZS5jbGVhbigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGguZWRpdFByb2ZpbGUgPSBmdW5jdGlvbihoYW5kbGVBcywgYXV0aG9yKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGF1dGhvci5pZC5tYXRjaCgvXmFub25fLykpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lLmNsZWFuKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQXMuZmFpbHVyZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gImh0dHA6Ly93d3cubXl2b2ljZW5hdGlvbi5jb20vcHJvZmlsZS9zZXR0aW5ncy8iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUFzLnN1Y2Nlc3MoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBtZS5hdXRoID0gYXV0aDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lLmF1dGg7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgY2xlYW46IGZ1bmN0aW9uKGNhbGxlZEFmdGVyTG9naW4sIGF0dGVtcHQpewogICAgICAgICAgICAgICAgICAgIHZhciBtZSA9IHRoaXM7CiAgICAgICAgICAgICAgICAgICAgTVZOLnF1ZXVlKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIEFOT04KICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2FsbGVkQWZ0ZXJMb2dpbiB8fCBtZS5hbm9uID09IG51bGwpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZnlyZS5jb252LnVzZXIgJiYgZnlyZS5jb252LnVzZXIuaWQpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lLmFub24gPSAoZnlyZS5jb252LnVzZXIuaWQubWF0Y2goL15hbm9uXy8pKSA/IHRydWUgOiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKGNhbGxlZEFmdGVyTG9naW4pewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGVtcHQgPSAoYXR0ZW1wdCkgPyBhdHRlbXB0ICsgMSA6IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYXR0ZW1wdCA+IDUpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVk0uZGVidWcucCgnTEYgTG9naW4gRmFpbGVkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZWTS5kZWxDb29raWUobWUuY29va2llTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZWTS5kZWJ1Zy5wKCdMRiBMb2dpbiBDaGVjayBBdHRlbXB0OiAnK2F0dGVtcHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe21lLmNsZWFuKHRydWUsIGF0dGVtcHQpfSwgMTAwMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFOT04gQ2xlYW4gVXAKICAgICAgICAgICAgICAgICAgICAgICAgaWYobWUuYW5vbiA9PSB0cnVlKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJ2xpID4gYVt0aXRsZT0iRWRpdCBQcm9maWxlIl0nLCAnLmZ5cmUtYm94LWxpc3QnKS5wYXJlbnQoJ2xpJykucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBBY2NvdW50IEJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU1WTi51c2VyICYmICFWVk0uZ2V0Q29va2llKE1WTi5MRi5hbm9uTmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkZWwgPSAkKCdkaXYuZnlyZS1sb2dpbi1iYXInLCAnI2xpdmVmeXJlJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkZWwubGVuZ3RoICYmICRlbC5jaGlsZHJlbigpLmxlbmd0aCA9PSAxICYmICEkKCcuZnlyZS11c2VyLWxvZ2dlZGluJywgJGVsKS5sZW5ndGgpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlbC5hcHBlbmQoJzxzcGFuIGNsYXNzPSJjcmVhdGUtbXZuLWFjY291bnQiPiBvciA8c3BhbiBjbGFzcz0ibGZyZWciPkNyZWF0ZSBBY2NvdW50PC9zcGFuPjwvc3Bhbj4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRWFjaCBDb21tZW50L1JlcGx5CiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5meXJlLWNvbW1lbnQtd3JhcHBlcicpLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkZWwgPSAkKCcuZnlyZS1jb21tZW50LXVzZXJbZGF0YS1hdXRob3ItaWRePSJhbm9uXyJdJywgdGhpcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkZWwubGVuZ3RoKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb21tZW50IEF2YXRhcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJ2EnLCAkZWwpLnJlcGxhY2VXaXRoKCQoJ2EgaW1nJywgJGVsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cigndGl0bGUnLCAnQW5vbnltb3VzIFVzZXInKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29tbWVudCBBdXRob3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZWwgPSAkZWwucGFyZW50KCkuZmluZCgnaGVhZGVyIGEnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZWwucmVwbGFjZVdpdGgoJCgnPHNwYW4vPicpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnYW5vbl91c2VybmFtZScpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50ZXh0KCRlbC50ZXh0KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCd0aXRsZScsICdBbm9ueW1vdXMgVXNlcicpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbW1lbnQgTWVudGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJ2EuZnlyZS1tZW50aW9uW3Jlc291cmNlXj0iYWNjdDphbm9uXyJdJywgdGhpcykuZWFjaChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucmVwbGFjZVdpdGgoJCgnPHNwYW4vPicpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnYW5vbl91c2VybmFtZScpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50ZXh0KCdAJyArICQoJ3NwYW5bcHJvcGVydHk9Im5hbWUiXScsIHRoaXMpLnRleHQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3RpdGxlJywgJ0Fub255bW91cyBVc2VyJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb21tZW50IExpa2VzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcuZnlyZS1hdmF0YXInLCB0aGlzKS5maWx0ZXIoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCQoJ2ltZ1tzcmMqPSIvYW5vbi8iXScsIHRoaXMpLmxlbmd0aCkgPyB0cnVlIDogZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5lYWNoKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnYScsIHRoaXMpLnJlcGxhY2VXaXRoKCQoJ2EgaW1nJywgdGhpcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3RpdGxlJywgJ0Fub255bW91cyBVc2VyJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmZpbHRlcignW2NsYXNzKj0iZnlyZS1jb21tZW50LWF1dGhvci10YWctIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xhc3NlcyA9IHRoaXMuY2xhc3NOYW1lLnNwbGl0KCcgJyksIHRhZ3MsIGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzID0gJCh0aGlzKSwgJG5hbWUgPSAkdGhpcy5maW5kKCcuZnlyZS1jb21tZW50LXVzZXJuYW1lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRuYW1lLm5leHQoKS5pcygnLmZ5cmUtbW9kZXJhdG9yJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5hbWUubmV4dCgpLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc2VzW2ldLmluZGV4T2YoJ2Z5cmUtY29tbWVudC1hdXRob3ItdGFnLScpID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcgPSBjbGFzc2VzW2ldLnNwbGl0KCctJykucG9wKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5hZGRDbGFzcygnaGFzLW12bi1iYWRnZScpLnJlbW92ZUNsYXNzKGNsYXNzZXNbaV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmFtZS5hZnRlcignPGkgY2xhc3M9Im12bi1iYWRnZSAnK3RhZysnIj4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBnZXRTSUQ6IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNyY19kZXNjID0gJyc7CiAgICAgICAgICAgICAgICAgICAgaWYod2luZG93Lk9BU19xdWVyeV9jYXRlZ29yeXx8ZmFsc2UpewogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goT0FTX3F1ZXJ5X2NhdGVnb3J5LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXHMvLCcnKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhcnRzJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfZGVzYyA9IDEwMzM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmaWxtJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21vdmllcyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2Rlc2MgPSAxMDM0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbXVzaWMnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19kZXNjID0gMTAzNTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ25ld3MnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19kZXNjID0gMTAzNjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Jlc3RhdXJhbnRzJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RpbmluZyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmb29kJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfZGVzYyA9IDEwMzc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYmVzdG9mJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfZGVzYyA9IDEwMzg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiAnOHw1M3wnK3NyY19kZXNjOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgoKICAgICAgICAgICAgTVZOLmxvYWQoewogICAgICAgICAgICAgICAgJ0xGJzp7CiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiBMRl9Db21wb25lbnQsCiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7fQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdmFyIHBhZ2VfdGl0bGUgPSAkKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJykpLmZpbmQoJ21ldGFbcHJvcGVydHk9Im9nOnRpdGxlIl0sIG1ldGFbbmFtZT0id2VidGl0bGUiXScpLmF0dHIoJ2NvbnRlbnQnKTsKICAgICAgICAgICAgaWYgKCFwYWdlX3RpdGxlKSB7CiAgICAgICAgICAgICAgICBwYWdlX3RpdGxlID0gJChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGl0bGUnKSkudGV4dCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHdpbmRvdy5jb252ID0gZnlyZS5jb252LmxvYWQoewogICAgICAgICAgICAgICAgbmV0d29yazogJ215dm9pY2VuYXRpb24uZnlyZS5jbycsCiAgICAgICAgICAgICAgICBhdXRoRGVsZWdhdGU6IE1WTi5MRi5iaW5kcygpLAogICAgICAgICAgICAgICAgc3RyaW5nczogewogICAgICAgICAgICAgICAgICAgIHNoYXJlRGVmYXVsdFRleHQ6IHBhZ2VfdGl0bGUgPyAiQ2hlY2sgb3V0ICVzJ3MgcG9zdCBvbiBcIiIgKyBwYWdlX3RpdGxlICsgIlwiISIgOiAiQ2hlY2sgb3V0ICVzJ3MgcG9zdCEiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sIFt7CiAgICAgICAgICAgICAgICAnYXJ0aWNsZUlkJzogJ0wyTnZiblJsYm5RdmRtbGxkeTh5TmpRNE1qYzAnLAogICAgICAgICAgICAgICAgJ2NoZWNrc3VtJzogJzExYmFiNDY3OWQ2ZDJkOGFiZDg5NTA2YjQzYWQ1YzZlJywKICAgICAgICAgICAgICAgICdjb2xsZWN0aW9uTWV0YSc6ICdleUowZVhBaU9pSnFkM1FpTENKaGJHY2lPaUpJVXpJMU5pSjkuZXlKMGFYUnNaU0k2SWp4cFBrRWdRMmh5YVhOMGJXRnpJRU5oY205c1BGd3ZhVDRnY21WcFoyNXBkR1Z6SUdFZ1kyeGhjM05wWXlJc0luVnliQ0k2SW1oMGRIQTZYQzljTDNkM2R5NWphWFI1Y0dGblpYTXVZMjl0WEM4eU1ERXlMVEV4TFRJeFhDOWhjblJ6WEM5aExXTm9jbWx6ZEcxaGN5MWpZWEp2YkMxeVpXbG5ibWwwWlhNdFlTMWpiR0Z6YzJsalhDOGlMQ0owWVdkeklqb2liV2x1TEdGeWRHbGpiR1VzYm1WM2N5eHRhVzVmWVhKMGFXTnNaU3h0YVc1ZmJtVjNjeXhoY25ScFkyeGxYMjVsZDNNc2JXbHVYMkZ5ZEdsamJHVmZibVYzY3lJc0ltTm9aV05yYzNWdElqb2lNVEZpWVdJME5qYzVaRFprTW1RNFlXSmtPRGsxTURaaU5ETmhaRFZqTm1VaUxDSmhjblJwWTJ4bFNXUWlPaUpNTWs1MlltNVNiR0p1VVhaa2JXeHNaSGs0ZVU1cVVUUk5hbU13SW4wLlZ4aWJJLW1EZmE3RW52VGw4LUhjaU9SdF9rU1JZRUZ1SE9sbFZUbGwwTmMnLAogICAgICAgICAgICAgICAgJ2VsJzogJ2xpdmVmeXJlJywKICAgICAgICAgICAgICAgICdzaXRlSWQnOiAnMzA0NTMyJywKICAgICAgICAgICAgICAgICdhdXRoUGFnZVJlbG9hZCc6IHRydWUKICAgICAgICAgICAgfV0sIGZ1bmN0aW9uKHdpZGdldCl7CiAgICAgICAgICAgICAgICBNVk4uTEYubG9naW4oKTsKICAgICAgICAgICAgICAgIHdpZGdldC5vbignaW5pdGlhbFJlbmRlckNvbXBsZXRlJywgTVZOLkxGLmNsZWFuKTsKICAgICAgICAgICAgICAgIHdpZGdldC5vbignY29tbWVudFBvc3RlZCcsIE1WTi5MRi5jbGVhbik7CiAgICAgICAgICAgICAgICB3aWRnZXQub24oJ2NvbW1lbnRGbGFnZ2VkJywgTVZOLkxGLmNsZWFuKTsKICAgICAgICAgICAgICAgIHdpZGdldC5vbignY29tbWVudExpa2VkJywgTVZOLkxGLmNsZWFuKTsKICAgICAgICAgICAgICAgIHdpZGdldC5vbignY29tbWVudFNoYXJlZCcsIE1WTi5MRi5jbGVhbik7CiAgICAgICAgICAgICAgICB3aWRnZXQub24oJ2NvbW1lbnRDb3VudFVwZGF0ZWQnLCBmdW5jdGlvbihkYXRhKXsKICAgICAgICAgICAgICAgICAgICBNVk4uTEYuY2xlYW4oKTsKICAgICAgICAgICAgICAgICAgICBNVk4ucXVldWUoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgJCgnW2RhdGEtbGZ2My1jb3VudGVyXScpLnRleHQoZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgTVZOLkxGLmNoYW5nZSA9IGZ1bmN0aW9uKGNvbnYpewogICAgICAgICAgICAgICAgICAgIE1WTi5xdWV1ZShmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXQuY2hhbmdlQ29sbGVjdGlvbihjb252KTsKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgTVZOLnF1ZXVlKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXIgQnV0dG9uCiAgICAgICAgICAgICAgICAgICAgJCgnLmxmcmVnJywgJyNsaXZlZnlyZScpLmxpdmUoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIU1WTi51c2VyKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVk4ub21uaS5hY3Rpb25TcmMgPSAnbGYnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgTVZOLm9tbmkuYWN0aW9uKE1WTi5vbW5pLmJ1aWxkQWN0aW9uKCdqb2luJywge3NpZDogTVZOLkxGLmdldFNJRCgpfSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVk4uTEYubG9naW4oKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIC8vIGhhY2sgb3VyIGhvdmVyY2FyZHMgb250byB0aGUgbGl2ZWZ5cmUgdXNlciBpbWdzL2xpbmtzCiAgICAgICAgICAgICAgICAgICAgdmFyIGRlX2xpdmVfZ2F0ZSA9IGZ1bmN0aW9uKCRlbCwgc2VsLCBldiwgY2IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRlbC5kZWxlZ2F0ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVsLmRlbGVnYXRlKHNlbCwgZXYsIGNiKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkZWwubGl2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVsLmZpbmQoc2VsKS5saXZlKGV2LCBjYik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIGRlX2xpdmVfZ2F0ZSgkKCcjbGl2ZWZ5cmUnKSwgJy5meXJlLWNvbW1lbnQtd3JhcHBlcicsICdtb3VzZWVudGVyJywgZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eSgnbXZuLWhvdmVyY2FyZC1lbicpKSByZXR1cm47CgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVzZXIgPSAkdGhpcy5maW5kKCcuZnlyZS1jb21tZW50LXVzZXInKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZCAgID0gJHVzZXIuZGF0YSgnYXV0aG9yLWlkJyk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVpZCB8fCB1aWQuaW5kZXhPZignYW5vbl8nKSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMuYXR0cignbXZuLWhvdmVyY2FyZC1lbicsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgJHVzZXIuYWRkKCR0aGlzLmZpbmQoJy5meXJlLWNvbW1lbnQtdXNlcm5hbWVbaHJlZl0nKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdkYXRhLW9tbmktdXNlcicsIHVpZC5zcGxpdCgnQCcpLnNsaWNlKDAsMSkuam9pbigpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRhdGEoJ29tbmktdXNlcm5hbWUnLCAkdXNlci5kYXRhKCdmcm9tJykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGF0YSgnb21uaS11c2VycGhvdG8nLCAkdXNlci5maW5kKCdpbWcnKS5hdHRyKCdzcmMnKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5hdHRyKCdtdm4taG92ZXJjYXJkLWVuJywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgLy8gTW92ZSBOb3RpZmljYXRpb24gV2luZG93CiAgICAgICAgICAgICAgICAgICAgdmFyIHNldE5vdGlmeVBvc2l0aW9uID0gZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmZ5cmUtbm90aWZpZXItY29udGFpbmVyJykuY3NzKCdyaWdodCcsIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgkKCdib2R5Jykud2lkdGgoKSAtICQoJyNsaXZlZnlyZScpLm9mZnNldCgpLmxlZnQgLSBwYXJzZUludCgkKHRoaXMpLmNzcygnd2lkdGgnKS5yZXBsYWNlKCdweCcsICcnKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzZXROb3RpZnlQb3NpdGlvbigpOwogICAgICAgICAgICAgICAgICAgICQod2luZG93KS5iaW5kKCdyZXNpemUgc2Nyb2xsJywgc2V0Tm90aWZ5UG9zaXRpb24pOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICA8L3NjcmlwdD4KICAgIDxkaXYgaWQ9InBvd2VyZWRfYnlfbGl2ZWZ5cmVfbmV3Ij48YSBocmVmPSJodHRwOi8vbGl2ZWZ5cmUuY29tIiB0YXJnZXQ9Il9ibGFuayI+UG93ZXJlZCBieSBMaXZlZnlyZTwvYT48L2Rpdj4KPC9kaXY+DQo8ZGl2IGNsYXNzPSd0cmlwbGViYXInPiZuYnNwOzwvZGl2Pg0KDQo8IS0tIFJlY2VudEFydGljbGVzV2lkZ2V0IC0tPg0KICAgIDwhLS0gL1JlY2VudEFlcnRpY2xlc1dpZGdldCAtLT4NCg0KDQo8L2Rpdj4NCjxmb3JtIGlkPSJUcmFja2VyRm9ybSI+DQogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ib2JqaWQiIHZhbHVlPSIyNjQ4Mjc0IiAvPg0KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InR5cGUiIHZhbHVlPSJzdG9yeSIgLz4NCiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZW5kVG9GcmllbmQiIHZhbHVlPSIwIiAvPg0KPC9mb3JtPg0KDQo8ZGl2IGNsYXNzPSJPVVRCUkFJTiIgZGF0YS1zcmM9Imh0dHA6Ly93d3cuY2l0eXBhZ2VzLmNvbS8yMDEyLTExLTIxL2FydHMvYS1jaHJpc3RtYXMtY2Fyb2wtcmVpZ25pdGVzLWEtY2xhc3NpYy8iIGRhdGEtd2lkZ2V0LWlkPSJGVF9OMiIgZGF0YS1vYi10ZW1wbGF0ZT0ibWluIj48L2Rpdj4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBhc3luYz0iYXN5bmMiIHNyYz0iaHR0cDovL3dpZGdldHMub3V0YnJhaW4uY29tL291dGJyYWluLmpzIj48L3NjcmlwdD4iO3M6MTM6ImNvbnRlbnRMZW5ndGgiO2k6NDA3Nzg7czoxMToibWV0YUNvbnRlbnQiO2E6MTY6e3M6MTM6Im9nOmltYWdlX2xhc3QiO2E6MTp7aTowO3M6NDQ6Imh0dHA6Ly93d3cuY2l0eXBhZ2VzLmNvbS9pbWcvY2l0eWxvZ28tbGcucG5nIjt9czo4OiJrZXl3b3JkcyI7czoxOiIsIjtzOjc6Im9nOnR5cGUiO3M6NzoiYXJ0aWNsZSI7czo4OiJvZzppbWFnZSI7YToxOntpOjA7czozOToiaHR0cDovL21lZGlhLm5ld3RpbWVzLmNvbS84MzU2OTU5LjAuanBnIjt9czoxMToib2FzU2l0ZVBhZ2UiO3M6NToiL2FydHMiO3M6MTQ6ImFkSW5kZXhTZWN0aW9uIjtzOjQ6ImFydHMiO3M6NzoicHViZGF0ZSI7czoxOToiMjAxMi0xMS0yMCAxMzowNDo1NCI7czoxMzoiY2Fub25pY2FsTGluayI7czo2MDoiLzIwMTItMTEtMjEvYXJ0cy9hLWNocmlzdG1hcy1jYXJvbC1yZWlnbml0ZXMtYS1jbGFzc2ljL2Z1bGwvIjtzOjY6Im9nOnVybCI7czo3OToiaHR0cDovL3d3dy5jaXR5cGFnZXMuY29tLzIwMTItMTEtMjEvYXJ0cy9hLWNocmlzdG1hcy1jYXJvbC1yZWlnbml0ZXMtYS1jbGFzc2ljLyI7czo4OiJ3ZWJUaXRsZSI7czo4MDoiQSBDaHJpc3RtYXMgQ2Fyb2wgcmVpZ25pdGVzIGEgY2xhc3NpYyAtIFBhZ2UgMSAtIEFydHMgLSBAQ0lUWU5BTUVAIC0gQFBBUEVSTkFNRUAiO3M6ODoib2c6dGl0bGUiO3M6Mzc6IkEgQ2hyaXN0bWFzIENhcm9sIHJlaWduaXRlcyBhIGNsYXNzaWMiO3M6ODA6IkEgQ2hyaXN0bWFzIENhcm9sIHJlaWduaXRlcyBhIGNsYXNzaWMgLSBQYWdlIDEgLSBBcnRzIC0gQENJVFlOQU1FQCAtIEBQQVBFUk5BTUVAIjtzOjQ6InRydWUiO3M6NjoibWVkaXVtIjtzOjQ6Im5ld3MiO3M6MTE6IndlYlN1YlRpdGxlIjtzOjQ6IkFydHMiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjIxOToiUmVhbC1saWZlIGRyYW1hIGJyb2tlIG91dCBTYXR1cmRheSBuaWdodCBhdCB0aGUgb3BlbmluZyBvZiB0aGUgR3V0aHJpZSdzIGxhdGVzdCBwcm9kdWN0aW9uIG9mIEEgQ2hyaXN0bWFzIENhcm9sIGFzIG9uZSBvZiB0aGUgcGF0cm9ucyBjb2xsYXBzZWQgbWlkd2F5IHRocm91Z2ggdGhlIGZpcnN0IGFjdC4gSXQgd2FzIGEgc2Nhcnkgc2NlbmUgdGhhdCBkZWxheWVkIHRoZSBzaG93IGZvIjtzOjE0OiJvZzpkZXNjcmlwdGlvbiI7czoyMTk6IlJlYWwtbGlmZSBkcmFtYSBicm9rZSBvdXQgU2F0dXJkYXkgbmlnaHQgYXQgdGhlIG9wZW5pbmcgb2YgdGhlIEd1dGhyaWUncyBsYXRlc3QgcHJvZHVjdGlvbiBvZiBBIENocmlzdG1hcyBDYXJvbCBhcyBvbmUgb2YgdGhlIHBhdHJvbnMgY29sbGFwc2VkIG1pZHdheSB0aHJvdWdoIHRoZSBmaXJzdCBhY3QuIEl0IHdhcyBhIHNjYXJ5IHNjZW5lIHRoYXQgZGVsYXllZCB0aGUgc2hvdyBmbyI7fXM6OToiQ2FjaGVkYXRhIjthOjA6e31zOjc6IkNvbnRleHQiO2E6MTE6e3M6MTQ6IkFkSW5kZXhTZWN0aW9uIjtzOjQ6ImFydHMiO3M6NzoiU2VjdGlvbiI7czo0OiJhcnRzIjtzOjE2OiJPQVNRdWVyeUNhdGVnb3J5IjtzOjQ6IkFydHMiO3M6MTk6Ik9BU1F1ZXJ5U3ViY2F0ZWdvcnkiO3M6ODoiQXJ0aWNsZXMiO3M6MTA6InBhZ2VQYXJhbXMiO3M6MzE6IgogICAgICAgICAgCiAgICAgICAgICAKICAgICAgICAiO3M6NzoiT3JpZ1VybCI7czo1NToiLzIwMTItMTEtMjEvYXJ0cy9hLWNocmlzdG1hcy1jYXJvbC1yZWlnbml0ZXMtYS1jbGFzc2ljLyI7czozOiJVcmwiO3M6MTE1OiIvY29udGVudC92aWV3L2EtY2hyaXN0bWFzLWNhcm9sLXJlaWduaXRlcy1hLWNsYXNzaWMvL29yaWdVcmw6LzIwMTItMTEtMjEvYXJ0cy9hLWNocmlzdG1hcy1jYXJvbC1yZWlnbml0ZXMtYS1jbGFzc2ljIjtzOjEzOiJDb21tZW50c09iaklkIjtzOjc6IjI2NDgyNzQiO3M6MTA6IlN1YnNlY3Rpb24iO3M6MDoiIjtzOjE0OiJPQVNRdWVyeUF1dGhvciI7czo4OiJFZF9IdXljayI7czo5OiJJc3N1ZURhdGUiO3M6MTA6IjIwMTItMTEtMjEiO31zOjE4OiJQb3N0UHJvY2Vzc01lc3NhZ2UiO086MjQ6IlZWTV9NZXNzYWdlUXVldWVfTWVzc2FnZSI6Mjp7czo4OiIAKgBfdHlwZSI7czo3OiJBZEluZGV4IjtzOjExOiIAKgBfcGF5bG9hZCI7YToxOntpOjA7YToyOntzOjI6ImlkIjtzOjc6IjE5MzgyOTAiO3M6NDoidHlwZSI7czoxMToidG93ZXJfdmlld3MiO319fX0
/////////////////////////////////////////////////
// AUTOGENERATED AT SVN EXPORT TIME
// DO NOT EDIT
/////////////////////////////////////////////////
?>
YTo2OntzOjEzOiJjb250ZW50U3RhdHVzIjthOjE6e3M6Njoic3RhdHVzIjtiOjE7fXM6NzoiY29udGVudCI7czoxNzA6IjwhLS0gTk9HU0EgLS0+CjxkaXYgY2xhc3M9IkFkcyIgaWQ9Ik1pZGRsZSI+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgPCEtLQogICAgICAgIE9BU19BRCgnTWlkZGxlJyk7CiAgICAgICAgLy8tLT4KICAgIDwvc2NyaXB0Pgo8L2Rpdj4KPCEtLSAvTk9HU0EgLS0+IjtzOjEzOiJjb250ZW50TGVuZ3RoIjtpOjE3MDtzOjExOiJtZXRhQ29udGVudCI7YToxOntzOjEzOiJvZzppbWFnZV9sYXN0IjthOjE6e2k6MDtzOjQ0OiJodHRwOi8vd3d3LmNpdHlwYWdlcy5jb20vaW1nL2NpdHlsb2dvLWxnLnBuZyI7fX1zOjk6IkNhY2hlZGF0YSI7YTowOnt9czo3OiJDb250ZXh0IjthOjc6e3M6MTQ6IkFkSW5kZXhTZWN0aW9uIjtzOjU6Im11c2ljIjtzOjExOiJhbHBoYUxldHRlciI7czoxOiJJIjtzOjc6IlNlY3Rpb24iO3M6NToibXVzaWMiO3M6MTY6Ik9BU1F1ZXJ5Q2F0ZWdvcnkiO3M6NToiTXVzaWMiO3M6MTk6Ik9BU1F1ZXJ5U3ViY2F0ZWdvcnkiO3M6NjoiU2VhcmNoIjtzOjc6Ik9yaWdVcmwiO3M6MzQ6Ii9kaXJlY3RvcnkvdGhlYXRlcnMvYWxwaGFMZXR0ZXI6SS8iO3M6MzoiVXJsIjtzOjczOiIvc2VydmljZXMvZ2V0RWxlbWVudC9BZHMvWVRveE9udHpPamc2SW5CdmMybDBhVzl1SWp0ek9qWTZJazFwWkdSc1pTSTdmUT09Ijt9fQ
/////////////////////////////////////////////////
// AUTOGENERATED AT SVN EXPORT TIME
// DO NOT EDIT
/////////////////////////////////////////////////
?>
YTo2OntzOjEzOiJjb250ZW50U3RhdHVzIjthOjE6e3M6Njoic3RhdHVzIjtiOjE7fXM6NzoiY29udGVudCI7czo1NzE6IjxkaXYgY2xhc3M9ImZhY2Vib29rX3JlY29tbWVuZGVkIj4KICAgIDxkaXYgY2xhc3M9ImZhY2Vib29rX3JlY29tbWVuZGVkX2hlYWRlciI+CiAgICAgICAgPGgyPkNpdHlwYWdlcyBvbiBGYWNlYm9vazwvaDI+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InRvcF9zdG9yaWVzIHJlY29tbWVuZGVkX3N0b3JpZXMiPgogICAgICAgIDxpZnJhbWUgc3JjPSJodHRwOi8vd3d3LmZhY2Vib29rLmNvbS9wbHVnaW5zL2FjdGl2aXR5LnBocD9zaXRlPWNpdHlwYWdlcy5jb20sYmxvZ3MuY2l0eXBhZ2VzLmNvbSZhbXA7d2lkdGg9MzY4JmFtcDtoZWlnaHQ9MzAwJmFtcDtoZWFkZXI9ZmFsc2UmYW1wO2NvbG9yc2NoZW1lPWxpZ2h0JmFtcDtmb250PWFyaWFsJmFtcDtib3JkZXJfY29sb3I9JTIzZmZmZmZmJmFtcDtyZWNvbW1lbmRhdGlvbnM9ZmFsc2UiIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPSIwIiBzdHlsZT0iYm9yZGVyOm5vbmU7IG92ZXJmbG93OmhpZGRlbjsgd2lkdGg6MzY4cHg7IGhlaWdodDozMDBweDsiIGFsbG93VHJhbnNwYXJlbmN5PSJ0cnVlIj48L2lmcmFtZT4KICAgIDwvZGl2Pgo8L2Rpdj4iO3M6MTM6ImNvbnRlbnRMZW5ndGgiO2k6NTcxO3M6MTE6Im1ldGFDb250ZW50IjthOjE6e3M6MTM6Im9nOmltYWdlX2xhc3QiO2E6MTp7aTowO3M6NDQ6Imh0dHA6Ly93d3cuY2l0eXBhZ2VzLmNvbS9pbWcvY2l0eWxvZ28tbGcucG5nIjt9fXM6OToiQ2FjaGVkYXRhIjthOjA6e31zOjc6IkNvbnRleHQiO2E6MTE6e3M6MTQ6IkFkSW5kZXhTZWN0aW9uIjtzOjQ6Im5ld3MiO3M6NzoiU2VjdGlvbiI7czo0OiJuZXdzIjtzOjE2OiJPQVNRdWVyeUNhdGVnb3J5IjtzOjQ6Ik5ld3MiO3M6MTk6Ik9BU1F1ZXJ5U3ViY2F0ZWdvcnkiO3M6NjoiU2VhcmNoIjtzOjEwOiJwYWdlUGFyYW1zIjtzOjMxOiIKICAgICAgICAgIAogICAgICAgICAgCiAgICAgICAgIjtzOjc6Ik9yaWdVcmwiO3M6NTU6Ii8yMDEyLTExLTIxL2FydHMvYS1jaHJpc3RtYXMtY2Fyb2wtcmVpZ25pdGVzLWEtY2xhc3NpYy8iO3M6MzoiVXJsIjtzOjI5OiIvc2VydmljZXMvZmFjZWJvb2tSZWNvbW1lbmRlZCI7czoxMzoiQ29tbWVudHNPYmpJZCI7czo2OiI0OTI1OTgiO3M6MTA6IlN1YnNlY3Rpb24iO3M6NzoiRmVhdHVyZSI7czoxNDoiT0FTUXVlcnlBdXRob3IiO3M6MTI6Ik1hdHRfU255ZGVycyI7czo5OiJJc3N1ZURhdGUiO3M6MTA6IjIwMDgtMDYtMjUiO319
/////////////////////////////////////////////////
// AUTOGENERATED AT SVN EXPORT TIME
// DO NOT EDIT
/////////////////////////////////////////////////
?>
YTo2OntzOjEzOiJjb250ZW50U3RhdHVzIjthOjE6e3M6Njoic3RhdHVzIjtiOjE7fXM6NzoiY29udGVudCI7czo0MzE6IjxkaXYgY2xhc3M9J2NoaXNlbF91IHJfYm94IHNwZWNpYWxyZXBvcnRzJz4NCiAgIDxkaXYgY2xhc3M9J2dyYXknPg0KICAgIDxoMj5TcGVjaWFsIFJlcG9ydHM8L2gyPg0KICAgIDxkaXYgY2xhc3M9J2NoaXNlbF9kIHdoaXRlJz4NCiAgICAgPHVsPg0KPGxpPjxhIGhyZWY9Ii9zcGVjaWFsUmVwb3J0cy9taWNoZWxlLWJhY2htYW5uLWEtaGlzdG9yeS1vZi1jcmF6eS1ob21vcGhvYmlhLWFuZC1saWVzLTI4MjM3ODAvIj5NaWNoZWxlIEJhY2htYW5uOiBBIGhpc3Rvcnkgb2YgY3JhenksIGhvbW9waG9iaWEsIGFuZCBsaWVzPC9hPjwvbGk+ICAgICAgPGxpIGNsYXNzPSdtb3JlJz48YSBocmVmPScvc3BlY2lhbFJlcG9ydHMnPk1vcmUgU3BlY2lhbCBSZXBvcnRzID4+PC9hPjwvbGk+DQogICAgIDwvdWw+DQogICAgPC9kaXY+DQogICA8L2Rpdj4NCiAgPC9kaXY+IjtzOjEzOiJjb250ZW50TGVuZ3RoIjtpOjQzMTtzOjExOiJtZXRhQ29udGVudCI7YToxOntzOjEzOiJvZzppbWFnZV9sYXN0IjthOjE6e2k6MDtzOjQ0OiJodHRwOi8vd3d3LmNpdHlwYWdlcy5jb20vaW1nL2NpdHlsb2dvLWxnLnBuZyI7fX1zOjk6IkNhY2hlZGF0YSI7YToxOntpOjA7czo3OiIyODIzNzgwIjt9czo3OiJDb250ZXh0IjthOjE3OntzOjE0OiJBZEluZGV4U2VjdGlvbiI7czo0OiJuZXdzIjtzOjc6IlNlY3Rpb24iO3M6NDoibmV3cyI7czoxNjoiT0FTUXVlcnlDYXRlZ29yeSI7czo0OiJOZXdzIjtzOjE5OiJPQVNRdWVyeVN1YmNhdGVnb3J5IjtzOjY6IlNlYXJjaCI7czoxMDoicGFnZVBhcmFtcyI7czozMToiCiAgICAgICAgICAKICAgICAgICAgIAogICAgICAgICI7czo3OiJPcmlnVXJsIjtzOjQxOiIvMjAwOS0xMi0xNi9jYWxlbmRhci9tYXNvbi1qZW5uaW5ncy9mdWxsLyI7czozOiJVcmwiO3M6MzY6Ii9zcGVjaWFsUmVwb3J0cy9TcGVjaWFsUmVwb3J0c1dpZGdldCI7czoxMzoiQ29tbWVudHNPYmpJZCI7czo2OiI0OTI1OTgiO3M6MTA6IlN1YnNlY3Rpb24iO3M6NzoiRmVhdHVyZSI7czoxNDoiT0FTUXVlcnlBdXRob3IiO3M6MTI6Ik1hdHRfU255ZGVycyI7czo5OiJJc3N1ZURhdGUiO3M6MTA6IjIwMDgtMDYtMjUiO3M6MTA6ImJlc3RPZlllYXIiO3M6NDoiMjAxMyI7czoxNToiZmVhdHVyZWRTdG9yaWVzIjthOjE1OntpOjA7czo3OiIyODI4MTkwIjtpOjE7czo3OiIyODIzMDYzIjtpOjI7czo3OiIyODE2ODAyIjtpOjM7czo3OiIyODEwMDY1IjtpOjQ7czo3OiIyODAzMjYwIjtpOjU7czo3OiIyODAzMjU4IjtpOjY7czo3OiIyNzk2MzQ2IjtpOjc7czo3OiIyNzg5MDQ5IjtpOjg7czo3OiIyNzgxNTYyIjtpOjk7czo3OiIyNzc0MDYyIjtpOjEwO3M6NzoiMjc2NzQ0MCI7aToxMTtzOjc6IjI3Njc0MzgiO2k6MTI7czo3OiIyNzYxMTAwIjtpOjEzO3M6NzoiMjc1MzY3MSI7aToxNDtzOjc6IjI3NTM2NjQiO31zOjEyOiJjYXRlZ29yeU5hbWUiO3M6NzoiVGhlYXRlciI7czo0OiJwYWdlIjtzOjQ6IjEwMDciO3M6Nzoic2VjdGlvbiI7czo0OiIzNzQzIjtzOjg6ImNhdGVnb3J5IjtzOjQ6IjQyNDMiO319