PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+PHRpdGxlPkQtQnVzIFR1dG9yaWFsPC90aXRsZT48bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0iYXJ0aWNsZSIgdGl0bGU9IkQtQnVzIFR1dG9yaWFsIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJpbmRleCI+PC9hPkQtQnVzIFR1dG9yaWFsPC9oMj48L2Rpdj48ZGl2PjxkaXYgY2xhc3M9ImF1dGhvcmdyb3VwIj48ZGl2IGNsYXNzPSJhdXRob3IiPjxoMyBjbGFzcz0iYXV0aG9yIj48c3BhbiBjbGFzcz0iZmlyc3RuYW1lIj5IYXZvYzwvc3Bhbj4gPHNwYW4gY2xhc3M9InN1cm5hbWUiPlBlbm5pbmd0b248L3NwYW4+PC9oMz48ZGl2IGNsYXNzPSJhZmZpbGlhdGlvbiI+PHNwYW4gY2xhc3M9Im9yZ25hbWUiPlJlZCBIYXQsIEluYy48YnI+PC9zcGFuPjxkaXYgY2xhc3M9ImFkZHJlc3MiPjxwPjxjb2RlIGNsYXNzPSJlbWFpbCI+Jmx0OzxhIGNsYXNzPSJlbWFpbCIgaHJlZj0ibWFpbHRvOmhwQHBvYm94LmNvbSI+aHBAcG9ib3guY29tPC9hPiZndDs8L2NvZGU+PC9wPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImF1dGhvciI+PGgzIGNsYXNzPSJhdXRob3IiPjxzcGFuIGNsYXNzPSJmaXJzdG5hbWUiPkRhdmlkPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3VybmFtZSI+V2hlZWxlcjwvc3Bhbj48L2gzPjwvZGl2PjxkaXYgY2xhc3M9ImF1dGhvciI+PGgzIGNsYXNzPSJhdXRob3IiPjxzcGFuIGNsYXNzPSJmaXJzdG5hbWUiPkpvaG48L3NwYW4+IDxzcGFuIGNsYXNzPSJzdXJuYW1lIj5QYWxtaWVyaTwvc3Bhbj48L2gzPjxkaXYgY2xhc3M9ImFmZmlsaWF0aW9uIj48c3BhbiBjbGFzcz0ib3JnbmFtZSI+UmVkIEhhdCwgSW5jLjxicj48L3NwYW4+PGRpdiBjbGFzcz0iYWRkcmVzcyI+PHA+PGNvZGUgY2xhc3M9ImVtYWlsIj4mbHQ7PGEgY2xhc3M9ImVtYWlsIiBocmVmPSJtYWlsdG86am9obnBAcmVkaGF0LmNvbSI+am9obnBAcmVkaGF0LmNvbTwvYT4mZ3Q7PC9jb2RlPjwvcD48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJhdXRob3IiPjxoMyBjbGFzcz0iYXV0aG9yIj48c3BhbiBjbGFzcz0iZmlyc3RuYW1lIj5Db2xpbjwvc3Bhbj4gPHNwYW4gY2xhc3M9InN1cm5hbWUiPldhbHRlcnM8L3NwYW4+PC9oMz48ZGl2IGNsYXNzPSJhZmZpbGlhdGlvbiI+PHNwYW4gY2xhc3M9Im9yZ25hbWUiPlJlZCBIYXQsIEluYy48YnI+PC9zcGFuPjxkaXYgY2xhc3M9ImFkZHJlc3MiPjxwPjxjb2RlIGNsYXNzPSJlbWFpbCI+Jmx0OzxhIGNsYXNzPSJlbWFpbCIgaHJlZj0ibWFpbHRvOndhbHRlcnNAcmVkaGF0LmNvbSI+d2FsdGVyc0ByZWRoYXQuY29tPC9hPiZndDs8L2NvZGU+PC9wPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjxkaXY+PHAgY2xhc3M9InJlbGVhc2VpbmZvIj5WZXJzaW9uIDAuNS4wPC9wPjwvZGl2PjwvZGl2Pjxocj48L2Rpdj48ZGl2IGNsYXNzPSJ0b2MiPjxwPjxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPjwvcD48ZGw+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI21ldGEiPlR1dG9yaWFsIFdvcmsgSW4gUHJvZ3Jlc3M8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3doYXRpcyI+V2hhdCBpcyBELUJ1cz88L2E+PC9zcGFuPjwvZHQ+PGRkPjxkbD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjdXNlcyI+RC1CdXMgYXBwbGljYXRpb25zPC9hPjwvc3Bhbj48L2R0PjwvZGw+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjY29uY2VwdHMiPkNvbmNlcHRzPC9hPjwvc3Bhbj48L2R0PjxkZD48ZGw+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI29iamVjdHMiPk5hdGl2ZSBPYmplY3RzIGFuZCBPYmplY3QgUGF0aHM8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI21lbWJlcnMiPk1ldGhvZHMgYW5kIFNpZ25hbHM8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2ludGVyZmFjZXMiPkludGVyZmFjZXM8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI3Byb3hpZXMiPlByb3hpZXM8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J1cy1uYW1lcyI+QnVzIE5hbWVzPC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNhZGRyZXNzZXMiPkFkZHJlc3NlczwvYT48L3NwYW4+PC9kdD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYmlncGljdHVyZSI+QmlnIENvbmNlcHR1YWwgUGljdHVyZTwvYT48L3NwYW4+PC9kdD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjbWVzc2FnZXMiPk1lc3NhZ2VzIC0gQmVoaW5kIHRoZSBTY2VuZXM8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2NhbGxwcm9jZWR1cmUiPkNhbGxpbmcgYSBNZXRob2QgLSBCZWhpbmQgdGhlIFNjZW5lczwvYT48L3NwYW4+PC9kdD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjc2lnbmFscHJvY2VkdXJlIj5FbWl0dGluZyBhIFNpZ25hbCAtIEJlaGluZCB0aGUgU2NlbmVzPC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNpbnRyb3NwZWN0aW9uIj5JbnRyb3NwZWN0aW9uPC9hPjwvc3Bhbj48L2R0PjwvZGw+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjZ2xpYi1jbGllbnQiPkdMaWIgQVBJOiBVc2luZyBSZW1vdGUgT2JqZWN0czwvYT48L3NwYW4+PC9kdD48ZGQ+PGRsPjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNnbGliLXR5cGVtYXBwaW5ncyI+RC1CdXMgLSBHTGliIHR5cGUgbWFwcGluZ3M8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI3NhbXBsZS1wcm9ncmFtLTEiPkEgc2FtcGxlIHByb2dyYW08L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2dsaWItcHJvZ3JhbS1zZXR1cCI+UHJvZ3JhbSBpbml0YWxpemF0aW9uPC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNnbGliLW1ldGhvZC1pbnZvY2F0aW9uIj5VbmRlcnN0YW5kaW5nIG1ldGhvZCBpbnZvY2F0aW9uPC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNnbGliLXNpZ25hbC1jb25uZWN0aW9uIj5Db25uZWN0aW5nIHRvIG9iamVjdCBzaWduYWxzPC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNnbGliLWVycm9yLWhhbmRsaW5nIj5FcnJvciBoYW5kbGluZyBhbmQgcmVtb3RlIGV4Y2VwdGlvbnM8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2dsaWItbW9yZS1leGFtcGxlcyI+TW9yZSBleGFtcGxlcyBvZiBtZXRob2QgaW52b2NhdGlvbjwvYT48L3NwYW4+PC9kdD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjZ2xpYi1nZW5lcmF0ZWQtYmluZGluZ3MiPkdlbmVyYXRlZCBCaW5kaW5nczwvYT48L3NwYW4+PC9kdD48L2RsPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2dsaWItc2VydmVyIj5HTGliIEFQSTogSW1wbGVtZW50aW5nIE9iamVjdHM8L2E+PC9zcGFuPjwvZHQ+PGRkPjxkbD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjZ2xpYi1hbm5vdGF0aW9ucyI+U2VydmVyLXNpZGUgQW5ub3RhdGlvbnM8L2E+PC9zcGFuPjwvZHQ+PC9kbD48L2RkPjxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNweXRob24tY2xpZW50Ij5QeXRob24gQVBJPC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNxdC1jbGllbnQiPlF0IEFQSTogVXNpbmcgUmVtb3RlIE9iamVjdHM8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3F0LXNlcnZlciI+UXQgQVBJOiBJbXBsZW1lbnRpbmcgT2JqZWN0czwvYT48L3NwYW4+PC9kdD48L2RsPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iVHV0b3JpYWwgV29yayBJbiBQcm9ncmVzcyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJtZXRhIj48L2E+VHV0b3JpYWwgV29yayBJbiBQcm9ncmVzczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgIFRoaXMgdHV0b3JpYWwgaXMgbm90IGNvbXBsZXRlOyBpdCBwcm9iYWJseSBjb250YWlucyBzb21lIHVzZWZ1bCBpbmZvcm1hdGlvbiwgYnV0IAogICAgICBhbHNvIGhhcyBwbGVudHkgb2YgZ2Fwcy4gUmlnaHQgbm93LCB5b3UnbGwgYWxzbyBuZWVkIHRvIHJlZmVyIHRvIHRoZSBELUJ1cyBzcGVjaWZpY2F0aW9uLAogICAgICBEb3h5Z2VuIHJlZmVyZW5jZSBkb2N1bWVudGF0aW9uLCBhbmQgbG9vayBhdCBzb21lIGV4YW1wbGVzIG9mIGhvdyBvdGhlciBhcHBzIHVzZSBELUJ1cy4KICAgIDwvcD48cD4KICAgICAgRW5oYW5jaW5nIHRoZSB0dXRvcmlhbCBpcyBkZWZpbml0ZWx5IGVuY291cmFnZWQgLSBzZW5kIHlvdXIgcGF0Y2hlcyBvciBzdWdnZXN0aW9ucyB0byB0aGUKICAgICAgbWFpbGluZyBsaXN0LiBJZiB5b3UgY3JlYXRlIGEgRC1CdXMgYmluZGluZywgcGxlYXNlIGFkZCBhIHNlY3Rpb24gdG8gdGhlIHR1dG9yaWFsIGZvciB5b3VyIAogICAgICBiaW5kaW5nLCBpZiBvbmx5IGEgc2hvcnQgc2VjdGlvbiB3aXRoIGEgY291cGxlIG9mIGV4YW1wbGVzLgogICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iV2hhdCBpcyBELUJ1cz8iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0id2hhdGlzIj48L2E+V2hhdCBpcyBELUJ1cz88L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICBELUJ1cyBpcyBhIHN5c3RlbSBmb3IgPGVtIGNsYXNzPSJmaXJzdHRlcm0iPmludGVycHJvY2VzcyBjb21tdW5pY2F0aW9uPC9lbT4KICAgICAgKElQQykuIEFyY2hpdGVjdHVyYWxseSwgaXQgaGFzIHNldmVyYWwgbGF5ZXJzOgoKICAgICAgPC9wPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICBBIGxpYnJhcnksIDxlbSBjbGFzcz0iZmlyc3R0ZXJtIj5saWJkYnVzPC9lbT4sIHRoYXQgYWxsb3dzIHR3bwogICAgICAgICAgICBhcHBsaWNhdGlvbnMgdG8gY29ubmVjdCB0byBlYWNoIG90aGVyIGFuZCBleGNoYW5nZSBtZXNzYWdlcy4KICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICBBIDxlbSBjbGFzcz0iZmlyc3R0ZXJtIj5tZXNzYWdlIGJ1cyBkYWVtb248L2VtPiBleGVjdXRhYmxlLCBidWlsdCBvbgogICAgICAgICAgICBsaWJkYnVzLCB0aGF0IG11bHRpcGxlIGFwcGxpY2F0aW9ucyBjYW4gY29ubmVjdCB0by4gVGhlIGRhZW1vbiBjYW4KICAgICAgICAgICAgcm91dGUgbWVzc2FnZXMgZnJvbSBvbmUgYXBwbGljYXRpb24gdG8gemVybyBvciBtb3JlIG90aGVyCiAgICAgICAgICAgIGFwcGxpY2F0aW9ucy4KICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+V3JhcHBlciBsaWJyYXJpZXM8L2VtPiBvciA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+YmluZGluZ3M8L2VtPiAKICAgICAgICAgICAgYmFzZWQgb24gcGFydGljdWxhciBhcHBsaWNhdGlvbiBmcmFtZXdvcmtzLiAgRm9yIGV4YW1wbGUsIGxpYmRidXMtZ2xpYiBhbmQKICAgICAgICAgICAgbGliZGJ1cy1xdC4gVGhlcmUgYXJlIGFsc28gYmluZGluZ3MgdG8gbGFuZ3VhZ2VzIHN1Y2ggYXMKICAgICAgICAgICAgUHl0aG9uLiBUaGVzZSB3cmFwcGVyIGxpYnJhcmllcyBhcmUgdGhlIEFQSSBtb3N0IHBlb3BsZSBzaG91bGQgdXNlLAogICAgICAgICAgICBhcyB0aGV5IHNpbXBsaWZ5IHRoZSBkZXRhaWxzIG9mIEQtQnVzIHByb2dyYW1taW5nLiBsaWJkYnVzIGlzIAogICAgICAgICAgICBpbnRlbmRlZCB0byBiZSBhIGxvdy1sZXZlbCBiYWNrZW5kIGZvciB0aGUgaGlnaGVyIGxldmVsIGJpbmRpbmdzLgogICAgICAgICAgICBNdWNoIG9mIHRoZSBsaWJkYnVzIEFQSSBpcyBvbmx5IHVzZWZ1bCBmb3IgYmluZGluZyBpbXBsZW1lbnRhdGlvbi4KICAgICAgICAgIDwvcD48L2xpPjwvdWw+PC9kaXY+PHA+CiAgICA8L3A+PHA+CiAgICAgIGxpYmRidXMgb25seSBzdXBwb3J0cyBvbmUtdG8tb25lIGNvbm5lY3Rpb25zLCBqdXN0IGxpa2UgYSByYXcgbmV0d29yawogICAgICBzb2NrZXQuIEhvd2V2ZXIsIHJhdGhlciB0aGFuIHNlbmRpbmcgYnl0ZSBzdHJlYW1zIG92ZXIgdGhlIGNvbm5lY3Rpb24sIHlvdQogICAgICBzZW5kIDxlbSBjbGFzcz0iZmlyc3R0ZXJtIj5tZXNzYWdlczwvZW0+LiBNZXNzYWdlcyBoYXZlIGEgaGVhZGVyIGlkZW50aWZ5aW5nCiAgICAgIHRoZSBraW5kIG9mIG1lc3NhZ2UsIGFuZCBhIGJvZHkgY29udGFpbmluZyBhIGRhdGEgcGF5bG9hZC4gbGliZGJ1cyBhbHNvCiAgICAgIGFic3RyYWN0cyB0aGUgZXhhY3QgdHJhbnNwb3J0IHVzZWQgKHNvY2tldHMgdnMuIHdoYXRldmVyIGVsc2UpLCBhbmQKICAgICAgaGFuZGxlcyBkZXRhaWxzIHN1Y2ggYXMgYXV0aGVudGljYXRpb24uCiAgICA8L3A+PHA+CiAgICAgIFRoZSBtZXNzYWdlIGJ1cyBkYWVtb24gZm9ybXMgdGhlIGh1YiBvZiBhIHdoZWVsLiBFYWNoIHNwb2tlIG9mIHRoZSB3aGVlbAogICAgICBpcyBhIG9uZS10by1vbmUgY29ubmVjdGlvbiB0byBhbiBhcHBsaWNhdGlvbiB1c2luZyBsaWJkYnVzLiAgQW4KICAgICAgYXBwbGljYXRpb24gc2VuZHMgYSBtZXNzYWdlIHRvIHRoZSBidXMgZGFlbW9uIG92ZXIgaXRzIHNwb2tlLCBhbmQgdGhlIGJ1cwogICAgICBkYWVtb24gZm9yd2FyZHMgdGhlIG1lc3NhZ2UgdG8gb3RoZXIgY29ubmVjdGVkIGFwcGxpY2F0aW9ucyBhcwogICAgICBhcHByb3ByaWF0ZS4gVGhpbmsgb2YgdGhlIGRhZW1vbiBhcyBhIHJvdXRlci4KICAgIDwvcD48cD4KICAgICAgVGhlIGJ1cyBkYWVtb24gaGFzIG11bHRpcGxlIGluc3RhbmNlcyBvbiBhIHR5cGljYWwgY29tcHV0ZXIuICBUaGUKICAgICAgZmlyc3QgaW5zdGFuY2UgaXMgYSBtYWNoaW5lLWdsb2JhbCBzaW5nbGV0b24sIHRoYXQgaXMsIGEgc3lzdGVtIGRhZW1vbgogICAgICBzaW1pbGFyIHRvIHNlbmRtYWlsIG9yIEFwYWNoZS4gVGhpcyBpbnN0YW5jZSBoYXMgaGVhdnkgc2VjdXJpdHkKICAgICAgcmVzdHJpY3Rpb25zIG9uIHdoYXQgbWVzc2FnZXMgaXQgd2lsbCBhY2NlcHQsIGFuZCBpcyB1c2VkIGZvciBzeXN0ZW13aWRlCiAgICAgIGNvbW11bmljYXRpb24uIFRoZSBvdGhlciBpbnN0YW5jZXMgYXJlIGNyZWF0ZWQgb25lIHBlciB1c2VyIGxvZ2luIHNlc3Npb24uCiAgICAgIFRoZXNlIGluc3RhbmNlcyBhbGxvdyBhcHBsaWNhdGlvbnMgaW4gdGhlIHVzZXIncyBzZXNzaW9uIHRvIGNvbW11bmljYXRlIAogICAgICB3aXRoIG9uZSBhbm90aGVyLgogICAgPC9wPjxwPgogICAgICBUaGUgc3lzdGVtd2lkZSBhbmQgcGVyLXVzZXIgZGFlbW9ucyBhcmUgc2VwYXJhdGUuICBOb3JtYWwgd2l0aGluLXNlc3Npb24KICAgICAgSVBDIGRvZXMgbm90IGludm9sdmUgdGhlIHN5c3RlbXdpZGUgbWVzc2FnZSBidXMgcHJvY2VzcyBhbmQgdmljZSB2ZXJzYS4KICAgIDwvcD48ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IkQtQnVzIGFwcGxpY2F0aW9ucyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0idXNlcyI+PC9hPkQtQnVzIGFwcGxpY2F0aW9uczwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgVGhlcmUgYXJlIG1hbnksIG1hbnkgdGVjaG5vbG9naWVzIGluIHRoZSB3b3JsZCB0aGF0IGhhdmUgIkludGVyLXByb2Nlc3MKICAgICAgICBjb21tdW5pY2F0aW9uIiBvciAibmV0d29ya2luZyIgaW4gdGhlaXIgc3RhdGVkIHB1cnBvc2U6IDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy5vbWcub3JnIiB0YXJnZXQ9Il90b3AiPkNPUkJBPC9hPiwgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvZGNlLyIgdGFyZ2V0PSJfdG9wIj5EQ0U8L2E+LCA8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9jb20vIiB0YXJnZXQ9Il90b3AiPkRDT008L2E+LCA8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXIua2RlLm9yZy9kb2N1bWVudGF0aW9uL2xpYnJhcnkva2RlcXQvZGNvcC5odG1sIiB0YXJnZXQ9Il90b3AiPkRDT1A8L2E+LCA8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cueG1scnBjLmNvbSIgdGFyZ2V0PSJfdG9wIj5YTUwtUlBDPC9hPiwgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9TT0FQLyIgdGFyZ2V0PSJfdG9wIj5TT0FQPC9hPiwgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vd3d3Lm1idXMub3JnLyIgdGFyZ2V0PSJfdG9wIj5NQlVTPC9hPiwgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vd3d3Lnplcm9jLmNvbS9pY2UuaHRtbCIgdGFyZ2V0PSJfdG9wIj5JbnRlcm5ldCBDb21tdW5pY2F0aW9ucyBFbmdpbmUgKElDRSk8L2E+LAogICAgICAgIGFuZCBwcm9iYWJseSBodW5kcmVkcyBtb3JlLgogICAgICAgIEVhY2ggb2YgdGhlc2UgaXMgdGFpbG9yZWQgZm9yIHBhcnRpY3VsYXIga2luZHMgb2YgYXBwbGljYXRpb24uCiAgICAgICAgRC1CdXMgaXMgZGVzaWduZWQgZm9yIHR3byBzcGVjaWZpYyBjYXNlczoKICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgQ29tbXVuaWNhdGlvbiBiZXR3ZWVuIGRlc2t0b3AgYXBwbGljYXRpb25zIGluIHRoZSBzYW1lIGRlc2t0b3AKICAgICAgICAgICAgICBzZXNzaW9uOyB0byBhbGxvdyBpbnRlZ3JhdGlvbiBvZiB0aGUgZGVza3RvcCBzZXNzaW9uIGFzIGEgd2hvbGUsCiAgICAgICAgICAgICAgYW5kIGFkZHJlc3MgaXNzdWVzIG9mIHByb2Nlc3MgbGlmZWN5Y2xlICh3aGVuIGRvIGRlc2t0b3AgY29tcG9uZW50cyAKICAgICAgICAgICAgICBzdGFydCBhbmQgc3RvcCBydW5uaW5nKS4KICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgQ29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBkZXNrdG9wIHNlc3Npb24gYW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtLCAKICAgICAgICAgICAgICB3aGVyZSB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3b3VsZCB0eXBpY2FsbHkgaW5jbHVkZSB0aGUga2VybmVsIAogICAgICAgICAgICAgIGFuZCBhbnkgc3lzdGVtIGRhZW1vbnMgb3IgcHJvY2Vzc2VzLgogICAgICAgICAgICA8L3A+PC9saT48L3VsPjwvZGl2PjxwPgogICAgICA8L3A+PHA+CiAgICAgICAgRm9yIHRoZSB3aXRoaW4tZGVza3RvcC1zZXNzaW9uIHVzZSBjYXNlLCB0aGUgR05PTUUgYW5kIEtERSBkZXNrdG9wcyAKICAgICAgICBoYXZlIHNpZ25pZmljYW50IHByZXZpb3VzIGV4cGVyaWVuY2Ugd2l0aCBkaWZmZXJlbnQgSVBDIHNvbHV0aW9ucwogICAgICAgIHN1Y2ggYXMgQ09SQkEgYW5kIERDT1AuIEQtQnVzIGlzIGJ1aWx0IG9uIHRoYXQgZXhwZXJpZW5jZSBhbmQgCiAgICAgICAgY2FyZWZ1bGx5IHRhaWxvcmVkIHRvIG1lZXQgdGhlIG5lZWRzIG9mIHRoZXNlIGRlc2t0b3AgcHJvamVjdHMgCiAgICAgICAgaW4gcGFydGljdWxhci4gRC1CdXMgbWF5IG9yIG1heSBub3QgYmUgYXBwcm9wcmlhdGUgZm9yIG90aGVyIAogICAgICAgIGFwcGxpY2F0aW9uczsgdGhlIEZBUSBoYXMgc29tZSBjb21wYXJpc29ucyB0byBvdGhlciBJUEMgc3lzdGVtcy4KICAgICAgPC9wPjxwPgogICAgICAgIFRoZSBwcm9ibGVtIHNvbHZlZCBieSB0aGUgc3lzdGVtd2lkZSBvciBjb21tdW5pY2F0aW9uLXdpdGgtdGhlLU9TIGNhc2UgCiAgICAgICAgaXMgZXhwbGFpbmVkIHdlbGwgYnkgdGhlIGZvbGxvd2luZyB0ZXh0IGZyb20gdGhlIExpbnV4IEhvdHBsdWcgcHJvamVjdDoKICAgICAgICA8L3A+PGRpdiBjbGFzcz0iYmxvY2txdW90ZSI+PGJsb2NrcXVvdGUgY2xhc3M9ImJsb2NrcXVvdGUiPjxwPgogICAgICAgICAgIEEgZ2FwIGluIGN1cnJlbnQgTGludXggc3VwcG9ydCBpcyB0aGF0IHBvbGljaWVzIHdpdGggYW55IHNvcnQgb2YKICAgICAgICAgICBkeW5hbWljICJpbnRlcmFjdCB3aXRoIHVzZXIiIGNvbXBvbmVudCBhcmVuJ3QgY3VycmVudGx5CiAgICAgICAgICAgc3VwcG9ydGVkLiBGb3IgZXhhbXBsZSwgdGhhdCdzIG9mdGVuIG5lZWRlZCB0aGUgZmlyc3QgdGltZSBhIG5ldHdvcmsKICAgICAgICAgICBhZGFwdGVyIG9yIHByaW50ZXIgaXMgY29ubmVjdGVkLCBhbmQgdG8gZGV0ZXJtaW5lIGFwcHJvcHJpYXRlIHBsYWNlcwogICAgICAgICAgIHRvIG1vdW50IGRpc2sgZHJpdmVzLiBJdCB3b3VsZCBzZWVtIHRoYXQgc3VjaCBhY3Rpb25zIGNvdWxkIGJlCiAgICAgICAgICAgc3VwcG9ydGVkIGZvciBhbnkgY2FzZSB3aGVyZSBhIHJlc3BvbnNpYmxlIGh1bWFuIGNhbiBiZSBpZGVudGlmaWVkOgogICAgICAgICAgIHNpbmdsZSB1c2VyIHdvcmtzdGF0aW9ucywgb3IgYW55IHN5c3RlbSB3aGljaCBpcyByZW1vdGVseQogICAgICAgICAgIGFkbWluaXN0ZXJlZC4KICAgICAgICAgIDwvcD48cD4KICAgICAgICAgICAgVGhpcyBpcyBhIGNsYXNzaWMgInJlbW90ZSBzeXNhZG1pbiIgcHJvYmxlbSwgd2hlcmUgaW4gdGhpcyBjYXNlCiAgICAgICAgICAgIGhvdHBsdWdnaW5nIG5lZWRzIHRvIGRlbGl2ZXIgYW4gZXZlbnQgZnJvbSBvbmUgc2VjdXJpdHkgZG9tYWluCiAgICAgICAgICAgIChvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbCwgaW4gdGhpcyBjYXNlKSB0byBhbm90aGVyIChkZXNrdG9wIGZvcgogICAgICAgICAgICBsb2dnZWQtaW4gdXNlciwgb3IgcmVtb3RlIHN5c2FkbWluKS4gQW55IGVmZmVjdGl2ZSByZXNwb25zZSBtdXN0IGdvCiAgICAgICAgICAgIHRoZSBvdGhlciB3YXk6IHRoZSByZW1vdGUgZG9tYWluIHRha2luZyBzb21lIGFjdGlvbiB0aGF0IGxldHMgdGhlCiAgICAgICAgICAgIGtlcm5lbCBleHBvc2UgdGhlIGRlc2lyZWQgZGV2aWNlIGNhcGFiaWxpdGllcy4gKFRoZSBhY3Rpb24gY2FuIG9mdGVuCiAgICAgICAgICAgIGJlIHRha2VuIGFzeW5jaHJvbm91c2x5LCBmb3IgZXhhbXBsZSBsZXR0aW5nIG5ldyBoYXJkd2FyZSBiZSBpZGxlCiAgICAgICAgICAgIHVudGlsIGEgbWVldGluZyBmaW5pc2hlcy4pIEF0IHRoaXMgd3JpdGluZywgTGludXggZG9lc24ndCBoYXZlCiAgICAgICAgICAgIHdpZGVseSBhZG9wdGVkIHNvbHV0aW9ucyB0byBzdWNoIHByb2JsZW1zLiBIb3dldmVyLCB0aGUgbmV3IEQtQnVzCiAgICAgICAgICAgIHdvcmsgbWF5IGJlZ2luIHRvIHNvbHZlIHRoYXQgcHJvYmxlbS4KICAgICAgICAgIDwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+PHA+CiAgICAgIDwvcD48cD4KICAgICAgICBELUJ1cyBtYXkgaGFwcGVuIHRvIGJlIHVzZWZ1bCBmb3IgcHVycG9zZXMgb3RoZXIgdGhhbiB0aGUgb25lIGl0IHdhcwogICAgICAgIGRlc2lnbmVkIGZvci4gSXRzIGdlbmVyYWwgcHJvcGVydGllcyB0aGF0IGRpc3Rpbmd1aXNoIGl0IGZyb20gCiAgICAgICAgb3RoZXIgZm9ybXMgb2YgSVBDIGFyZToKICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgQmluYXJ5IHByb3RvY29sIGRlc2lnbmVkIHRvIGJlIHVzZWQgYXN5bmNocm9ub3VzbHkgCiAgICAgICAgICAgICAgKHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBYIFdpbmRvdyBTeXN0ZW0gcHJvdG9jb2wpLgogICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICBTdGF0ZWZ1bCwgcmVsaWFibGUgY29ubmVjdGlvbnMgaGVsZCBvcGVuIG92ZXIgdGltZS4KICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgVGhlIG1lc3NhZ2UgYnVzIGlzIGEgZGFlbW9uLCBub3QgYSAic3dhcm0iIG9yIAogICAgICAgICAgICAgIGRpc3RyaWJ1dGVkIGFyY2hpdGVjdHVyZS4KICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgTWFueSBpbXBsZW1lbnRhdGlvbiBhbmQgZGVwbG95bWVudCBpc3N1ZXMgYXJlIHNwZWNpZmllZCByYXRoZXIKICAgICAgICAgICAgICB0aGFuIGxlZnQgYW1iaWd1b3VzL2NvbmZpZ3VyYWJsZS9wbHVnZ2FibGUuCiAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgIFNlbWFudGljcyBhcmUgc2ltaWxhciB0byB0aGUgZXhpc3RpbmcgRENPUCBzeXN0ZW0sIGFsbG93aW5nIAogICAgICAgICAgICAgIEtERSB0byBhZG9wdCBpdCBtb3JlIGVhc2lseS4KICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgU2VjdXJpdHkgZmVhdHVyZXMgdG8gc3VwcG9ydCB0aGUgc3lzdGVtd2lkZSBtb2RlIG9mIHRoZSAKICAgICAgICAgICAgICBtZXNzYWdlIGJ1cy4KICAgICAgICAgICAgPC9wPjwvbGk+PC91bD48L2Rpdj48cD4KICAgICAgPC9wPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iQ29uY2VwdHMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iY29uY2VwdHMiPjwvYT5Db25jZXB0czwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgIFNvbWUgYmFzaWMgY29uY2VwdHMgYXBwbHkgbm8gbWF0dGVyIHdoYXQgYXBwbGljYXRpb24gZnJhbWV3b3JrIHlvdSdyZQogICAgICB1c2luZyB0byB3cml0ZSBhIEQtQnVzIGFwcGxpY2F0aW9uLiBUaGUgZXhhY3QgY29kZSB5b3Ugd3JpdGUgd2lsbCBiZQogICAgICBkaWZmZXJlbnQgZm9yIEdMaWIgdnMuIFF0IHZzLiBQeXRob24gYXBwbGljYXRpb25zLCBob3dldmVyLgogICAgPC9wPjxwPgogICAgICBIZXJlIGlzIGEgZGlhZ3JhbSAoPGEgY2xhc3M9InVsaW5rIiBocmVmPSJkaWFncmFtLnBuZyIgdGFyZ2V0PSJfdG9wIj5wbmc8L2E+IDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iZGlhZ3JhbS5zdmciIHRhcmdldD0iX3RvcCI+c3ZnPC9hPikgdGhhdCBtYXkgaGVscCB5b3UgdmlzdWFsaXplIHRoZSBjb25jZXB0cwogICAgICB0aGF0IGZvbGxvdy4KICAgIDwvcD48ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9Ik5hdGl2ZSBPYmplY3RzIGFuZCBPYmplY3QgUGF0aHMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9Im9iamVjdHMiPjwvYT5OYXRpdmUgT2JqZWN0cyBhbmQgT2JqZWN0IFBhdGhzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBZb3VyIHByb2dyYW1taW5nIGZyYW1ld29yayBwcm9iYWJseSBkZWZpbmVzIHdoYXQgYW4gIm9iamVjdCIgaXMgbGlrZTsKICAgICAgICB1c3VhbGx5IHdpdGggYSBiYXNlIGNsYXNzLiBGb3IgZXhhbXBsZTogamF2YS5sYW5nLk9iamVjdCwgR09iamVjdCwgUU9iamVjdCwKICAgICAgICBweXRob24ncyBiYXNlIE9iamVjdCwgb3Igd2hhdGV2ZXIuIExldCdzIGNhbGwgdGhpcyBhIDxlbSBjbGFzcz0iZmlyc3R0ZXJtIj5uYXRpdmUgb2JqZWN0PC9lbT4uCiAgICAgIDwvcD48cD4KICAgICAgICBUaGUgbG93LWxldmVsIEQtQnVzIHByb3RvY29sLCBhbmQgY29ycmVzcG9uZGluZyBsaWJkYnVzIEFQSSwgZG9lcyBub3QgY2FyZSBhYm91dCBuYXRpdmUgb2JqZWN0cy4gCiAgICAgICAgSG93ZXZlciwgaXQgcHJvdmlkZXMgYSBjb25jZXB0IGNhbGxlZCBhbiAKICAgICAgICA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+b2JqZWN0IHBhdGg8L2VtPi4gVGhlIGlkZWEgb2YgYW4gb2JqZWN0IHBhdGggaXMgdGhhdCAKICAgICAgICBoaWdoZXItbGV2ZWwgYmluZGluZ3MgY2FuIG5hbWUgbmF0aXZlIG9iamVjdCBpbnN0YW5jZXMsIGFuZCBhbGxvdyByZW1vdGUgYXBwbGljYXRpb25zIAogICAgICAgIHRvIHJlZmVyIHRvIHRoZW0uCiAgICAgIDwvcD48cD4KICAgICAgICBUaGUgb2JqZWN0IHBhdGgKICAgICAgICBsb29rcyBsaWtlIGEgZmlsZXN5c3RlbSBwYXRoLCBmb3IgZXhhbXBsZSBhbiBvYmplY3QgY291bGQgYmUgCiAgICAgICAgbmFtZWQgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPi9vcmcva2RlL2tzcHJlYWQvc2hlZXRzLzMvY2VsbHMvNC81PC9jb2RlPi4gCiAgICAgICAgSHVtYW4tcmVhZGFibGUgcGF0aHMgYXJlIG5pY2UsIGJ1dCB5b3UgYXJlIGZyZWUgdG8gY3JlYXRlIGFuIAogICAgICAgIG9iamVjdCBuYW1lZCA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+L2NvbS9teWNvbXBhbnkvYzV5bzgxN3kwYzF5MWM1YjwvY29kZT4gCiAgICAgICAgaWYgaXQgbWFrZXMgc2Vuc2UgZm9yIHlvdXIgYXBwbGljYXRpb24uCiAgICAgIDwvcD48cD4KICAgICAgICBOYW1lc3BhY2luZyBvYmplY3QgcGF0aHMgaXMgc21hcnQsIGJ5IHN0YXJ0aW5nIHRoZW0gd2l0aCB0aGUgY29tcG9uZW50cwogICAgICAgIG9mIGEgZG9tYWluIG5hbWUgeW91IG93biAoZS5nLiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+L29yZy9rZGU8L2NvZGU+KS4gVGhpcyAKICAgICAgICBrZWVwcyBkaWZmZXJlbnQgY29kZSBtb2R1bGVzIGluIHRoZSBzYW1lIHByb2Nlc3MgZnJvbSBzdGVwcGluZyAKICAgICAgICBvbiBvbmUgYW5vdGhlcidzIHRvZXMuCiAgICAgIDwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9Ik1ldGhvZHMgYW5kIFNpZ25hbHMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9Im1lbWJlcnMiPjwvYT5NZXRob2RzIGFuZCBTaWduYWxzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBFYWNoIG9iamVjdCBoYXMgPGVtIGNsYXNzPSJmaXJzdHRlcm0iPm1lbWJlcnM8L2VtPjsgdGhlIHR3byBraW5kcyBvZiBtZW1iZXIKICAgICAgICBhcmUgPGVtIGNsYXNzPSJmaXJzdHRlcm0iPm1ldGhvZHM8L2VtPiBhbmQKICAgICAgICA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+c2lnbmFsczwvZW0+LiBNZXRob2RzIGFyZSBvcGVyYXRpb25zIHRoYXQgY2FuIGJlCiAgICAgICAgaW52b2tlZCBvbiBhbiBvYmplY3QsIHdpdGggb3B0aW9uYWwgaW5wdXQgKGFrYSBhcmd1bWVudHMgb3IgImluCiAgICAgICAgcGFyYW1ldGVycyIpIGFuZCBvdXRwdXQgKGFrYSByZXR1cm4gdmFsdWVzIG9yICJvdXQgcGFyYW1ldGVycyIpLgogICAgICAgIFNpZ25hbHMgYXJlIGJyb2FkY2FzdHMgZnJvbSB0aGUgb2JqZWN0IHRvIGFueSBpbnRlcmVzdGVkIG9ic2VydmVycyAKICAgICAgICBvZiB0aGUgb2JqZWN0OyBzaWduYWxzIG1heSBjb250YWluIGEgZGF0YSBwYXlsb2FkLgogICAgICA8L3A+PHA+CiAgICAgICAgQm90aCBtZXRob2RzIGFuZCBzaWduYWxzIGFyZSByZWZlcnJlZCB0byBieSBuYW1lLCBzdWNoIGFzIAogICAgICAgICJGcm9iYXRlIiBvciAiT25DbGlja2VkIi4KICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iSW50ZXJmYWNlcyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iaW50ZXJmYWNlcyI+PC9hPkludGVyZmFjZXM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgIEVhY2ggb2JqZWN0IHN1cHBvcnRzIG9uZSBvciBtb3JlIDxlbSBjbGFzcz0iZmlyc3R0ZXJtIj5pbnRlcmZhY2VzPC9lbT4uCiAgICAgICAgVGhpbmsgb2YgYW4gaW50ZXJmYWNlIGFzIGEgbmFtZWQgZ3JvdXAgb2YgbWV0aG9kcyBhbmQgc2lnbmFscywgCiAgICAgICAganVzdCBhcyBpdCBpcyBpbiBHTGliIG9yIFF0IG9yIEphdmEuIEludGVyZmFjZXMgZGVmaW5lIHRoZSAKICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT50eXBlPC9lbT48L3NwYW4+IG9mIGFuIG9iamVjdCBpbnN0YW5jZS4KICAgICAgPC9wPjxwPgogICAgICAgIERCdXMgaWRlbnRpZmllcyBpbnRlcmZhY2VzIHdpdGggYSBzaW1wbGUgbmFtZXNwYWNlZCBzdHJpbmcsCiAgICAgICAgc29tZXRoaW5nIGxpa2UgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm9yZy5mcmVlZGVza3RvcC5JbnRyb3NwZWN0YWJsZTwvY29kZT4uCiAgICAgICAgTW9zdCBiaW5kaW5ncyB3aWxsIG1hcCB0aGVzZSBpbnRlcmZhY2UgbmFtZXMgZGlyZWN0bHkgdG8gCiAgICAgICAgdGhlIGFwcHJvcHJpYXRlIHByb2dyYW1taW5nIGxhbmd1YWdlIGNvbnN0cnVjdCwgZm9yIGV4YW1wbGUgCiAgICAgICAgdG8gSmF2YSBpbnRlcmZhY2VzIG9yIEMrKyBwdXJlIHZpcnR1YWwgY2xhc3Nlcy4KICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iUHJveGllcyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0icHJveGllcyI+PC9hPlByb3hpZXM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgIEEgPGVtIGNsYXNzPSJmaXJzdHRlcm0iPnByb3h5IG9iamVjdDwvZW0+IGlzIGEgY29udmVuaWVudCBuYXRpdmUgb2JqZWN0IGNyZWF0ZWQgdG8gCiAgICAgICAgcmVwcmVzZW50IGEgcmVtb3RlIG9iamVjdCBpbiBhbm90aGVyIHByb2Nlc3MuIFRoZSBsb3ctbGV2ZWwgREJ1cyBBUEkgaW52b2x2ZXMgbWFudWFsbHkgY3JlYXRpbmcgCiAgICAgICAgYSBtZXRob2QgY2FsbCBtZXNzYWdlLCBzZW5kaW5nIGl0LCB0aGVuIG1hbnVhbGx5IHJlY2VpdmluZyBhbmQgcHJvY2Vzc2luZyAKICAgICAgICB0aGUgbWV0aG9kIHJlcGx5IG1lc3NhZ2UuIEhpZ2hlci1sZXZlbCBiaW5kaW5ncyBwcm92aWRlIHByb3hpZXMgYXMgYW4gYWx0ZXJuYXRpdmUuCiAgICAgICAgUHJveGllcyBsb29rIGxpa2UgYSBub3JtYWwgbmF0aXZlIG9iamVjdDsgYnV0IHdoZW4geW91IGludm9rZSBhIG1ldGhvZCBvbiB0aGUgcHJveHkgCiAgICAgICAgb2JqZWN0LCB0aGUgYmluZGluZyBjb252ZXJ0cyBpdCBpbnRvIGEgREJ1cyBtZXRob2QgY2FsbCBtZXNzYWdlLCB3YWl0cyBmb3IgdGhlIHJlcGx5IAogICAgICAgIG1lc3NhZ2UsIHVucGFja3MgdGhlIHJldHVybiB2YWx1ZSwgYW5kIHJldHVybnMgaXQgZnJvbSB0aGUgbmF0aXZlIG1ldGhvZC4uCiAgICAgIDwvcD48cD4KICAgICAgICBJbiBwc2V1ZG9jb2RlLCBwcm9ncmFtbWluZyB3aXRob3V0IHByb3hpZXMgbWlnaHQgbG9vayBsaWtlIHRoaXM6CiAgICAgICAgPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IG5ldyBNZXNzYWdlKCIvcmVtb3RlL29iamVjdC9wYXRoIiwgIk1ldGhvZE5hbWUiLCBhcmcxLCBhcmcyKTsKICAgICAgICAgIENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGdldEJ1c0Nvbm5lY3Rpb24oKTsKICAgICAgICAgIGNvbm5lY3Rpb24uc2VuZChtZXNzYWdlKTsKICAgICAgICAgIE1lc3NhZ2UgcmVwbHkgPSBjb25uZWN0aW9uLndhaXRGb3JSZXBseShtZXNzYWdlKTsKICAgICAgICAgIGlmIChyZXBseS5pc0Vycm9yKCkpIHsKICAgICAgICAgICAgIAogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIE9iamVjdCByZXR1cm5WYWx1ZSA9IHJlcGx5LmdldFJldHVyblZhbHVlKCk7CiAgICAgICAgICB9CiAgICAgICAgPC9wcmU+PHA+CiAgICAgIDwvcD48cD4KICAgICAgICBQcm9ncmFtbWluZyB3aXRoIHByb3hpZXMgbWlnaHQgbG9vayBsaWtlIHRoaXM6CiAgICAgICAgPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgIFByb3h5IHByb3h5ID0gbmV3IFByb3h5KGdldEJ1c0Nvbm5lY3Rpb24oKSwgIi9yZW1vdGUvb2JqZWN0L3BhdGgiKTsKICAgICAgICAgIE9iamVjdCByZXR1cm5WYWx1ZSA9IHByb3h5Lk1ldGhvZE5hbWUoYXJnMSwgYXJnMik7CiAgICAgICAgPC9wcmU+PHA+CiAgICAgIDwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IkJ1cyBOYW1lcyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iYnVzLW5hbWVzIj48L2E+QnVzIE5hbWVzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBXaGVuIGVhY2ggYXBwbGljYXRpb24gY29ubmVjdHMgdG8gdGhlIGJ1cyBkYWVtb24sIHRoZSBkYWVtb24gaW1tZWRpYXRlbHkKICAgICAgICBhc3NpZ25zIGl0IGEgbmFtZSwgY2FsbGVkIHRoZSA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+dW5pcXVlIGNvbm5lY3Rpb24gbmFtZTwvZW0+LgogICAgICAgIEEgdW5pcXVlIG5hbWUgYmVnaW5zIHdpdGggYSAnOicgKGNvbG9uKSBjaGFyYWN0ZXIuIFRoZXNlIG5hbWVzIGFyZSBuZXZlciAKICAgICAgICByZXVzZWQgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGUgYnVzIGRhZW1vbiAtIHRoYXQgaXMsIHlvdSBrbm93IAogICAgICAgIGEgZ2l2ZW4gbmFtZSB3aWxsIGFsd2F5cyByZWZlciB0byB0aGUgc2FtZSBhcHBsaWNhdGlvbi4KICAgICAgICBBbiBleGFtcGxlIG9mIGEgdW5pcXVlIG5hbWUgbWlnaHQgYmUKICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+OjM0LTkwNzwvY29kZT4uIFRoZSBudW1iZXJzIGFmdGVyIHRoZSBjb2xvbiBoYXZlIAogICAgICAgIG5vIG1lYW5pbmcgb3RoZXIgdGhhbiB0aGVpciB1bmlxdWVuZXNzLgogICAgICA8L3A+PHA+CiAgICAgICAgV2hlbiBhIG5hbWUgaXMgbWFwcGVkIAogICAgICAgIHRvIGEgcGFydGljdWxhciBhcHBsaWNhdGlvbidzIGNvbm5lY3Rpb24sIHRoYXQgYXBwbGljYXRpb24gaXMgc2FpZCB0byAKICAgICAgICA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+b3duPC9lbT4gdGhhdCBuYW1lLgogICAgICA8L3A+PHA+CiAgICAgICAgQXBwbGljYXRpb25zIG1heSBhc2sgdG8gb3duIGFkZGl0aW9uYWwgPGVtIGNsYXNzPSJmaXJzdHRlcm0iPndlbGwta25vd24KICAgICAgICBuYW1lczwvZW0+LiBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIHdyaXRlIGEgc3BlY2lmaWNhdGlvbiB0bwogICAgICAgIGRlZmluZSBhIG5hbWUgY2FsbGVkIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5jb20ubXljb21wYW55LlRleHRFZGl0b3I8L2NvZGU+LgogICAgICAgIFlvdXIgZGVmaW5pdGlvbiBjb3VsZCBzcGVjaWZ5IHRoYXQgdG8gb3duIHRoaXMgbmFtZSwgYW4gYXBwbGljYXRpb24KICAgICAgICBzaG91bGQgaGF2ZSBhbiBvYmplY3QgYXQgdGhlIHBhdGgKICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+L2NvbS9teWNvbXBhbnkvVGV4dEZpbGVNYW5hZ2VyPC9jb2RlPiBzdXBwb3J0aW5nIHRoZQogICAgICAgIGludGVyZmFjZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkZpbGVIYW5kbGVyPC9jb2RlPi4KICAgICAgPC9wPjxwPgogICAgICAgIEFwcGxpY2F0aW9ucyBjb3VsZCB0aGVuIHNlbmQgbWVzc2FnZXMgdG8gdGhpcyBidXMgbmFtZSwgCiAgICAgICAgb2JqZWN0LCBhbmQgaW50ZXJmYWNlIHRvIGV4ZWN1dGUgbWV0aG9kIGNhbGxzLgogICAgICA8L3A+PHA+CiAgICAgICAgWW91IGNvdWxkIHRoaW5rIG9mIHRoZSB1bmlxdWUgbmFtZXMgYXMgSVAgYWRkcmVzc2VzLCBhbmQgdGhlCiAgICAgICAgd2VsbC1rbm93biBuYW1lcyBhcyBkb21haW4gbmFtZXMuIFNvCiAgICAgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmNvbS5teWNvbXBhbnkuVGV4dEVkaXRvcjwvY29kZT4gbWlnaHQgbWFwIHRvIHNvbWV0aGluZyBsaWtlCiAgICAgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPjozNC05MDc8L2NvZGU+IGp1c3QgYXMgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm15Y29tcGFueS5jb208L2NvZGU+IG1hcHMKICAgICAgICB0byBzb21ldGhpbmcgbGlrZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+MTkyLjE2OC4wLjU8L2NvZGU+LgogICAgICA8L3A+PHA+CiAgICAgICAgTmFtZXMgaGF2ZSBhIHNlY29uZCBpbXBvcnRhbnQgdXNlLCBvdGhlciB0aGFuIHJvdXRpbmcgbWVzc2FnZXMuICBUaGV5CiAgICAgICAgYXJlIHVzZWQgdG8gdHJhY2sgbGlmZWN5Y2xlLiBXaGVuIGFuIGFwcGxpY2F0aW9uIGV4aXRzIChvciBjcmFzaGVzKSwgaXRzCiAgICAgICAgY29ubmVjdGlvbiB0byB0aGUgbWVzc2FnZSBidXMgd2lsbCBiZSBjbG9zZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0KICAgICAgICBrZXJuZWwuIFRoZSBtZXNzYWdlIGJ1cyB0aGVuIHNlbmRzIG91dCBub3RpZmljYXRpb24gbWVzc2FnZXMgdGVsbGluZwogICAgICAgIHJlbWFpbmluZyBhcHBsaWNhdGlvbnMgdGhhdCB0aGUgYXBwbGljYXRpb24ncyBuYW1lcyBoYXZlIGxvc3QgdGhlaXIKICAgICAgICBvd25lci4gQnkgdHJhY2tpbmcgdGhlc2Ugbm90aWZpY2F0aW9ucywgeW91ciBhcHBsaWNhdGlvbiBjYW4gcmVsaWFibHkKICAgICAgICBtb25pdG9yIHRoZSBsaWZldGltZSBvZiBvdGhlciBhcHBsaWNhdGlvbnMuCiAgICAgIDwvcD48cD4KICAgICAgICBCdXMgbmFtZXMgY2FuIGFsc28gYmUgdXNlZCB0byBjb29yZGluYXRlIHNpbmdsZS1pbnN0YW5jZSBhcHBsaWNhdGlvbnMuCiAgICAgICAgSWYgeW91IHdhbnQgdG8gYmUgc3VyZSBvbmx5IG9uZQogICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5jb20ubXljb21wYW55LlRleHRFZGl0b3I8L2NvZGU+IGFwcGxpY2F0aW9uIGlzIHJ1bm5pbmcgZm9yCiAgICAgICAgZXhhbXBsZSwgaGF2ZSB0aGUgdGV4dCBlZGl0b3IgYXBwbGljYXRpb24gZXhpdCBpZiB0aGUgYnVzIG5hbWUgYWxyZWFkeQogICAgICAgIGhhcyBhbiBvd25lci4KICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iQWRkcmVzc2VzIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJhZGRyZXNzZXMiPjwvYT5BZGRyZXNzZXM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgIEFwcGxpY2F0aW9ucyB1c2luZyBELUJ1cyBhcmUgZWl0aGVyIHNlcnZlcnMgb3IgY2xpZW50cy4gIEEgc2VydmVyCiAgICAgICAgbGlzdGVucyBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnM7IGEgY2xpZW50IGNvbm5lY3RzIHRvIGEgc2VydmVyLiBPbmNlCiAgICAgICAgdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGl0IGlzIGEgc3ltbWV0cmljIGZsb3cgb2YgbWVzc2FnZXM7IHRoZQogICAgICAgIGNsaWVudC1zZXJ2ZXIgZGlzdGluY3Rpb24gb25seSBtYXR0ZXJzIHdoZW4gc2V0dGluZyB1cCB0aGUgCiAgICAgICAgY29ubmVjdGlvbi4KICAgICAgPC9wPjxwPgogICAgICAgIElmIHlvdSdyZSB1c2luZyB0aGUgYnVzIGRhZW1vbiwgYXMgeW91IHByb2JhYmx5IGFyZSwgeW91ciBhcHBsaWNhdGlvbiAKICAgICAgICB3aWxsIGJlIGEgY2xpZW50IG9mIHRoZSBidXMgZGFlbW9uLiBUaGF0IGlzLCB0aGUgYnVzIGRhZW1vbiBsaXN0ZW5zIAogICAgICAgIGZvciBjb25uZWN0aW9ucyBhbmQgeW91ciBhcHBsaWNhdGlvbiBpbml0aWF0ZXMgYSBjb25uZWN0aW9uIHRvIHRoZSBidXMgCiAgICAgICAgZGFlbW9uLgogICAgICA8L3A+PHA+CiAgICAgICAgQSBELUJ1cyA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+YWRkcmVzczwvZW0+IHNwZWNpZmllcyB3aGVyZSBhIHNlcnZlciB3aWxsCiAgICAgICAgbGlzdGVuLCBhbmQgd2hlcmUgYSBjbGllbnQgd2lsbCBjb25uZWN0LiAgRm9yIGV4YW1wbGUsIHRoZSBhZGRyZXNzCiAgICAgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPnVuaXg6cGF0aD0vdG1wL2FiY2RlZjwvY29kZT4gc3BlY2lmaWVzIHRoYXQgdGhlIHNlcnZlciB3aWxsCiAgICAgICAgbGlzdGVuIG9uIGEgVU5JWCBkb21haW4gc29ja2V0IGF0IHRoZSBwYXRoCiAgICAgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPi90bXAvYWJjZGVmPC9jb2RlPiBhbmQgdGhlIGNsaWVudCB3aWxsIGNvbm5lY3QgdG8gdGhhdAogICAgICAgIHNvY2tldC4gQW4gYWRkcmVzcyBjYW4gYWxzbyBzcGVjaWZ5IFRDUC9JUCBzb2NrZXRzLCBvciBhbnkgb3RoZXIKICAgICAgICB0cmFuc3BvcnQgZGVmaW5lZCBpbiBmdXR1cmUgaXRlcmF0aW9ucyBvZiB0aGUgRC1CdXMgc3BlY2lmaWNhdGlvbi4KICAgICAgPC9wPjxwPgogICAgICAgIFdoZW4gdXNpbmcgRC1CdXMgd2l0aCBhIG1lc3NhZ2UgYnVzIGRhZW1vbiwKICAgICAgICBsaWJkYnVzIGF1dG9tYXRpY2FsbHkgZGlzY292ZXJzIHRoZSBhZGRyZXNzIG9mIHRoZSBwZXItc2Vzc2lvbiBidXMgCiAgICAgICAgZGFlbW9uIGJ5IHJlYWRpbmcgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuIEl0IGRpc2NvdmVycyB0aGUgCiAgICAgICAgc3lzdGVtd2lkZSBidXMgZGFlbW9uIGJ5IGNoZWNraW5nIGEgd2VsbC1rbm93biBVTklYIGRvbWFpbiBzb2NrZXQgcGF0aAogICAgICAgICh0aG91Z2ggeW91IGNhbiBvdmVycmlkZSB0aGlzIGFkZHJlc3Mgd2l0aCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSkuCiAgICAgIDwvcD48cD4KICAgICAgICBJZiB5b3UncmUgdXNpbmcgRC1CdXMgd2l0aG91dCBhIGJ1cyBkYWVtb24sIGl0J3MgdXAgdG8geW91IHRvIAogICAgICAgIGRlZmluZSB3aGljaCBhcHBsaWNhdGlvbiB3aWxsIGJlIHRoZSBzZXJ2ZXIgYW5kIHdoaWNoIHdpbGwgYmUgCiAgICAgICAgdGhlIGNsaWVudCwgYW5kIHNwZWNpZnkgYSBtZWNoYW5pc20gZm9yIHRoZW0gdG8gYWdyZWUgb24gCiAgICAgICAgdGhlIHNlcnZlcidzIGFkZHJlc3MuIFRoaXMgaXMgYW4gdW51c3VhbCBjYXNlLgogICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSJCaWcgQ29uY2VwdHVhbCBQaWN0dXJlIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJiaWdwaWN0dXJlIj48L2E+QmlnIENvbmNlcHR1YWwgUGljdHVyZTwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgUHVsbGluZyBhbGwgdGhlc2UgY29uY2VwdHMgdG9nZXRoZXIsIHRvIHNwZWNpZnkgYSBwYXJ0aWN1bGFyIAogICAgICAgIG1ldGhvZCBjYWxsIG9uIGEgcGFydGljdWxhciBvYmplY3QgaW5zdGFuY2UsIGEgbnVtYmVyIG9mIAogICAgICAgIG5lc3RlZCBjb21wb25lbnRzIGhhdmUgdG8gYmUgbmFtZWQ6CiAgICAgICAgPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAgICAgICAgIEFkZHJlc3MgLSZndDsgW0J1cyBOYW1lXSAtJmd0OyBQYXRoIC0mZ3Q7IEludGVyZmFjZSAtJmd0OyBNZXRob2QKICAgICAgICA8L3ByZT48cD4KICAgICAgICBUaGUgYnVzIG5hbWUgaXMgaW4gYnJhY2tldHMgdG8gaW5kaWNhdGUgdGhhdCBpdCdzIG9wdGlvbmFsIC0tIHlvdSBvbmx5CiAgICAgICAgcHJvdmlkZSBhIG5hbWUgdG8gcm91dGUgdGhlIG1ldGhvZCBjYWxsIHRvIHRoZSByaWdodCBhcHBsaWNhdGlvbgogICAgICAgIHdoZW4gdXNpbmcgdGhlIGJ1cyBkYWVtb24uIElmIHlvdSBoYXZlIGEgZGlyZWN0IGNvbm5lY3Rpb24gdG8gYW5vdGhlcgogICAgICAgIGFwcGxpY2F0aW9uLCBidXMgbmFtZXMgYXJlbid0IHVzZWQ7IHRoZXJlJ3Mgbm8gYnVzIGRhZW1vbi4KICAgICAgPC9wPjxwPgogICAgICAgIFRoZSBpbnRlcmZhY2UgaXMgYWxzbyBvcHRpb25hbCwgcHJpbWFyaWx5IGZvciBoaXN0b3JpY2FsIAogICAgICAgIHJlYXNvbnM7IERDT1AgZG9lcyBub3QgcmVxdWlyZSBzcGVjaWZ5aW5nIHRoZSBpbnRlcmZhY2UsIAogICAgICAgIGluc3RlYWQgc2ltcGx5IGZvcmJpZGRpbmcgZHVwbGljYXRlIG1ldGhvZCBuYW1lcyAKICAgICAgICBvbiB0aGUgc2FtZSBvYmplY3QgaW5zdGFuY2UuIEQtQnVzIHdpbGwgdGh1cyBsZXQgeW91IAogICAgICAgIG9taXQgdGhlIGludGVyZmFjZSwgYnV0IGlmIHlvdXIgbWV0aG9kIG5hbWUgaXMgYW1iaWd1b3VzIAogICAgICAgIGl0IGlzIHVuZGVmaW5lZCB3aGljaCBtZXRob2Qgd2lsbCBiZSBpbnZva2VkLgogICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSJNZXNzYWdlcyAtIEJlaGluZCB0aGUgU2NlbmVzIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJtZXNzYWdlcyI+PC9hPk1lc3NhZ2VzIC0gQmVoaW5kIHRoZSBTY2VuZXM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgIEQtQnVzIHdvcmtzIGJ5IHNlbmRpbmcgbWVzc2FnZXMgYmV0d2VlbiBwcm9jZXNzZXMuIElmIHlvdSdyZSB1c2luZyAKICAgICAgICBhIHN1ZmZpY2llbnRseSBoaWdoLWxldmVsIGJpbmRpbmcsIHlvdSBtYXkgbmV2ZXIgd29yayB3aXRoIG1lc3NhZ2VzIGRpcmVjdGx5LgogICAgICA8L3A+PHA+CiAgICAgICAgVGhlcmUgYXJlIDQgbWVzc2FnZSB0eXBlczoKICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgTWV0aG9kIGNhbGwgbWVzc2FnZXMgYXNrIHRvIGludm9rZSBhIG1ldGhvZCAKICAgICAgICAgICAgICBvbiBhbiBvYmplY3QuCiAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgIE1ldGhvZCByZXR1cm4gbWVzc2FnZXMgcmV0dXJuIHRoZSByZXN1bHRzIAogICAgICAgICAgICAgIG9mIGludm9raW5nIGEgbWV0aG9kLgogICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICBFcnJvciBtZXNzYWdlcyByZXR1cm4gYW4gZXhjZXB0aW9uIGNhdXNlZCBieSAKICAgICAgICAgICAgICBpbnZva2luZyBhIG1ldGhvZC4KICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgU2lnbmFsIG1lc3NhZ2VzIGFyZSBub3RpZmljYXRpb25zIHRoYXQgYSBnaXZlbiBzaWduYWwgCiAgICAgICAgICAgICAgaGFzIGJlZW4gZW1pdHRlZCAodGhhdCBhbiBldmVudCBoYXMgb2NjdXJyZWQpLiAKICAgICAgICAgICAgICBZb3UgY291bGQgYWxzbyB0aGluayBvZiB0aGVzZSBhcyAiZXZlbnQiIG1lc3NhZ2VzLgogICAgICAgICAgICA8L3A+PC9saT48L3VsPjwvZGl2PjxwPgogICAgICA8L3A+PHA+CiAgICAgICAgQSBtZXRob2QgY2FsbCBtYXBzIHZlcnkgc2ltcGx5IHRvIG1lc3NhZ2VzOiB5b3Ugc2VuZCBhIG1ldGhvZCBjYWxsCiAgICAgICAgbWVzc2FnZSwgYW5kIHJlY2VpdmUgZWl0aGVyIGEgbWV0aG9kIHJldHVybiBtZXNzYWdlIG9yIGFuIGVycm9yIG1lc3NhZ2UKICAgICAgICBpbiByZXBseS4KICAgICAgPC9wPjxwPgogICAgICAgIEVhY2ggbWVzc2FnZSBoYXMgYSA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+aGVhZGVyPC9lbT4sIGluY2x1ZGluZyA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+ZmllbGRzPC9lbT4sIAogICAgICAgIGFuZCBhIDxlbSBjbGFzcz0iZmlyc3R0ZXJtIj5ib2R5PC9lbT4sIGluY2x1ZGluZyA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+YXJndW1lbnRzPC9lbT4uIFlvdSBjYW4gdGhpbmsgCiAgICAgICAgb2YgdGhlIGhlYWRlciBhcyB0aGUgcm91dGluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIG1lc3NhZ2UsIGFuZCB0aGUgYm9keSBhcyB0aGUgcGF5bG9hZC4KICAgICAgICBIZWFkZXIgZmllbGRzIG1pZ2h0IGluY2x1ZGUgdGhlIHNlbmRlciBidXMgbmFtZSwgZGVzdGluYXRpb24gYnVzIG5hbWUsIG1ldGhvZCBvciBzaWduYWwgbmFtZSwgCiAgICAgICAgYW5kIHNvIGZvcnRoLiBPbmUgb2YgdGhlIGhlYWRlciBmaWVsZHMgaXMgYSA8ZW0gY2xhc3M9ImZpcnN0dGVybSI+dHlwZSBzaWduYXR1cmU8L2VtPiBkZXNjcmliaW5nIHRoZSAKICAgICAgICB2YWx1ZXMgZm91bmQgaW4gdGhlIGJvZHkuIEZvciBleGFtcGxlLCB0aGUgbGV0dGVyICJpIiBtZWFucyAiMzItYml0IGludGVnZXIiIHNvIHRoZSBzaWduYXR1cmUgCiAgICAgICAgImlpIiBtZWFucyB0aGUgcGF5bG9hZCBoYXMgdHdvIDMyLWJpdCBpbnRlZ2Vycy4KICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iQ2FsbGluZyBhIE1ldGhvZCAtIEJlaGluZCB0aGUgU2NlbmVzIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJjYWxscHJvY2VkdXJlIj48L2E+Q2FsbGluZyBhIE1ldGhvZCAtIEJlaGluZCB0aGUgU2NlbmVzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBBIG1ldGhvZCBjYWxsIGluIERCdXMgY29uc2lzdHMgb2YgdHdvIG1lc3NhZ2VzOyBhIG1ldGhvZCBjYWxsIG1lc3NhZ2Ugc2VudCBmcm9tIHByb2Nlc3MgQSB0byBwcm9jZXNzIEIsIAogICAgICAgIGFuZCBhIG1hdGNoaW5nIG1ldGhvZCByZXBseSBtZXNzYWdlIHNlbnQgZnJvbSBwcm9jZXNzIEIgdG8gcHJvY2VzcyBBLiBCb3RoIHRoZSBjYWxsIGFuZCB0aGUgcmVwbHkgbWVzc2FnZXMKICAgICAgICBhcmUgcm91dGVkIHRocm91Z2ggdGhlIGJ1cyBkYWVtb24uIFRoZSBjYWxsZXIgaW5jbHVkZXMgYSBkaWZmZXJlbnQgc2VyaWFsIG51bWJlciBpbiBlYWNoIGNhbGwgbWVzc2FnZSwgYW5kIHRoZQogICAgICAgIHJlcGx5IG1lc3NhZ2UgaW5jbHVkZXMgdGhpcyBudW1iZXIgdG8gYWxsb3cgdGhlIGNhbGxlciB0byBtYXRjaCByZXBsaWVzIHRvIGNhbGxzLgogICAgICA8L3A+PHA+CiAgICAgICAgVGhlIGNhbGwgbWVzc2FnZSB3aWxsIGNvbnRhaW4gYW55IGFyZ3VtZW50cyB0byB0aGUgbWV0aG9kLgogICAgICAgIFRoZSByZXBseSBtZXNzYWdlIG1heSBpbmRpY2F0ZSBhbiBlcnJvciwgb3IgbWF5IGNvbnRhaW4gZGF0YSByZXR1cm5lZCBieSB0aGUgbWV0aG9kLgogICAgICA8L3A+PHA+CiAgICAgICAgQSBtZXRob2QgaW52b2NhdGlvbiBpbiBEQnVzIGhhcHBlbnMgYXMgZm9sbG93czoKICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgVGhlIGxhbmd1YWdlIGJpbmRpbmcgbWF5IHByb3ZpZGUgYSBwcm94eSwgc3VjaCB0aGF0IGludm9raW5nIGEgbWV0aG9kIG9uIAogICAgICAgICAgICAgIGFuIGluLXByb2Nlc3Mgb2JqZWN0IGludm9rZXMgYSBtZXRob2Qgb24gYSByZW1vdGUgb2JqZWN0IGluIGFub3RoZXIgcHJvY2Vzcy4gSWYgc28sIHRoZSAKICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBjYWxscyBhIG1ldGhvZCBvbiB0aGUgcHJveHksIGFuZCB0aGUgcHJveHkKICAgICAgICAgICAgICBjb25zdHJ1Y3RzIGEgbWV0aG9kIGNhbGwgbWVzc2FnZSB0byBzZW5kIHRvIHRoZSByZW1vdGUgcHJvY2Vzcy4KICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgRm9yIG1vcmUgbG93LWxldmVsIEFQSXMsIHRoZSBhcHBsaWNhdGlvbiBtYXkgY29uc3RydWN0IGEgbWV0aG9kIGNhbGwgbWVzc2FnZSBpdHNlbGYsIHdpdGhvdXQKICAgICAgICAgICAgICB1c2luZyBhIHByb3h5LgogICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICBJbiBlaXRoZXIgY2FzZSwgdGhlIG1ldGhvZCBjYWxsIG1lc3NhZ2UgY29udGFpbnM6IGEgYnVzIG5hbWUgYmVsb25naW5nIHRvIHRoZSByZW1vdGUgcHJvY2VzczsgdGhlIG5hbWUgb2YgdGhlIG1ldGhvZDsgCiAgICAgICAgICAgICAgdGhlIGFyZ3VtZW50cyB0byB0aGUgbWV0aG9kOyBhbiBvYmplY3QgcGF0aCBpbnNpZGUgdGhlIHJlbW90ZSBwcm9jZXNzOyBhbmQgb3B0aW9uYWxseSB0aGUgbmFtZSBvZiB0aGUgCiAgICAgICAgICAgICAgaW50ZXJmYWNlIHRoYXQgc3BlY2lmaWVzIHRoZSBtZXRob2QuCiAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgIFRoZSBtZXRob2QgY2FsbCBtZXNzYWdlIGlzIHNlbnQgdG8gdGhlIGJ1cyBkYWVtb24uCiAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgIFRoZSBidXMgZGFlbW9uIGxvb2tzIGF0IHRoZSBkZXN0aW5hdGlvbiBidXMgbmFtZS4gSWYgYSBwcm9jZXNzIG93bnMgdGhhdCBuYW1lLCAKICAgICAgICAgICAgICB0aGUgYnVzIGRhZW1vbiBmb3J3YXJkcyB0aGUgbWV0aG9kIGNhbGwgdG8gdGhhdCBwcm9jZXNzLiBPdGhlcndpc2UsIHRoZSBidXMgZGFlbW9uCiAgICAgICAgICAgICAgY3JlYXRlcyBhbiBlcnJvciBtZXNzYWdlIGFuZCBzZW5kcyBpdCBiYWNrIGFzIHRoZSByZXBseSB0byB0aGUgbWV0aG9kIGNhbGwgbWVzc2FnZS4KICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgVGhlIHJlY2VpdmluZyBwcm9jZXNzIHVucGFja3MgdGhlIG1ldGhvZCBjYWxsIG1lc3NhZ2UuIEluIGEgc2ltcGxlIGxvdy1sZXZlbCBBUEkgc2l0dWF0aW9uLCBpdCAKICAgICAgICAgICAgICBtYXkgaW1tZWRpYXRlbHkgcnVuIHRoZSBtZXRob2QgYW5kIHNlbmQgYSBtZXRob2QgcmVwbHkgbWVzc2FnZSB0byB0aGUgYnVzIGRhZW1vbi4KICAgICAgICAgICAgICBXaGVuIHVzaW5nIGEgaGlnaC1sZXZlbCBiaW5kaW5nIEFQSSwgdGhlIGJpbmRpbmcgbWlnaHQgZXhhbWluZSB0aGUgb2JqZWN0IHBhdGgsIGludGVyZmFjZSwKICAgICAgICAgICAgICBhbmQgbWV0aG9kIG5hbWUsIGFuZCBjb252ZXJ0IHRoZSBtZXRob2QgY2FsbCBtZXNzYWdlIGludG8gYW4gaW52b2NhdGlvbiBvZiBhIG1ldGhvZCBvbiAKICAgICAgICAgICAgICBhIG5hdGl2ZSBvYmplY3QgKEdPYmplY3QsIGphdmEubGFuZy5PYmplY3QsIFFPYmplY3QsIGV0Yy4pLCB0aGVuIGNvbnZlcnQgdGhlIHJldHVybiAKICAgICAgICAgICAgICB2YWx1ZSBmcm9tIHRoZSBuYXRpdmUgbWV0aG9kIGludG8gYSBtZXRob2QgcmVwbHkgbWVzc2FnZS4KICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgVGhlIGJ1cyBkYWVtb24gcmVjZWl2ZXMgdGhlIG1ldGhvZCByZXBseSBtZXNzYWdlIGFuZCBzZW5kcyBpdCB0byB0aGUgcHJvY2VzcyB0aGF0IAogICAgICAgICAgICAgIG1hZGUgdGhlIG1ldGhvZCBjYWxsLgogICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICBUaGUgcHJvY2VzcyB0aGF0IG1hZGUgdGhlIG1ldGhvZCBjYWxsIGxvb2tzIGF0IHRoZSBtZXRob2QgcmVwbHkgYW5kIG1ha2VzIHVzZSBvZiBhbnkgCiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcyBpbmNsdWRlZCBpbiB0aGUgcmVwbHkuIFRoZSByZXBseSBtYXkgYWxzbyBpbmRpY2F0ZSB0aGF0IGFuIGVycm9yIG9jY3VycmVkLgogICAgICAgICAgICAgIFdoZW4gdXNpbmcgYSBiaW5kaW5nLCB0aGUgbWV0aG9kIHJlcGx5IG1lc3NhZ2UgbWF5IGJlIGNvbnZlcnRlZCBpbnRvIHRoZSByZXR1cm4gdmFsdWUgb2YgCiAgICAgICAgICAgICAgb2YgYSBwcm94eSBtZXRob2QsIG9yIGludG8gYW4gZXhjZXB0aW9uLgogICAgICAgICAgICA8L3A+PC9saT48L3VsPjwvZGl2PjxwPgogICAgICA8L3A+PHA+CiAgICAgICAgVGhlIGJ1cyBkYWVtb24gbmV2ZXIgcmVvcmRlcnMgbWVzc2FnZXMuIFRoYXQgaXMsIGlmIHlvdSBzZW5kIHR3byBtZXRob2QgY2FsbCBtZXNzYWdlcyB0byB0aGUgc2FtZSByZWNpcGllbnQsIAogICAgICAgIHRoZXkgd2lsbCBiZSByZWNlaXZlZCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIHNlbnQuIFRoZSByZWNpcGllbnQgaXMgbm90IHJlcXVpcmVkIHRvIHJlcGx5IHRvIHRoZSBjYWxscwogICAgICAgIGluIG9yZGVyLCBob3dldmVyOyBmb3IgZXhhbXBsZSwgaXQgbWF5IHByb2Nlc3MgZWFjaCBtZXRob2QgY2FsbCBpbiBhIHNlcGFyYXRlIHRocmVhZCwgYW5kIHJldHVybiByZXBseSBtZXNzYWdlcwogICAgICAgIGluIGFuIHVuZGVmaW5lZCBvcmRlciBkZXBlbmRpbmcgb24gd2hlbiB0aGUgdGhyZWFkcyBjb21wbGV0ZS4gTWV0aG9kIGNhbGxzIGhhdmUgYSB1bmlxdWUgc2VyaWFsIAogICAgICAgIG51bWJlciB1c2VkIGJ5IHRoZSBtZXRob2QgY2FsbGVyIHRvIG1hdGNoIHJlcGx5IG1lc3NhZ2VzIHRvIGNhbGwgbWVzc2FnZXMuCiAgICAgIDwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IkVtaXR0aW5nIGEgU2lnbmFsIC0gQmVoaW5kIHRoZSBTY2VuZXMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9InNpZ25hbHByb2NlZHVyZSI+PC9hPkVtaXR0aW5nIGEgU2lnbmFsIC0gQmVoaW5kIHRoZSBTY2VuZXM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICAgIEEgc2lnbmFsIGluIERCdXMgY29uc2lzdHMgb2YgYSBzaW5nbGUgbWVzc2FnZSwgc2VudCBieSBvbmUgcHJvY2VzcyB0byBhbnkgbnVtYmVyIG9mIG90aGVyIHByb2Nlc3Nlcy4gCiAgICAgICAgVGhhdCBpcywgYSBzaWduYWwgaXMgYSB1bmlkaXJlY3Rpb25hbCBicm9hZGNhc3QuIFRoZSBzaWduYWwgbWF5IGNvbnRhaW4gYXJndW1lbnRzIChhIGRhdGEgcGF5bG9hZCksIGJ1dCAKICAgICAgICBiZWNhdXNlIGl0IGlzIGEgYnJvYWRjYXN0LCBpdCBuZXZlciBoYXMgYSAicmV0dXJuIHZhbHVlLiIgQ29udHJhc3QgdGhpcyB3aXRoIGEgbWV0aG9kIGNhbGwgCiAgICAgICAgKHNlZSA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI2NhbGxwcm9jZWR1cmUiIHRpdGxlPSJDYWxsaW5nIGEgTWV0aG9kIC0gQmVoaW5kIHRoZSBTY2VuZXMiPnRoZSBzZWN0aW9uIGNhbGxlZCAmIzgyMjA7Q2FsbGluZyBhIE1ldGhvZCAtIEJlaGluZCB0aGUgU2NlbmVzJiM4MjIxOzwvYT4pIHdoZXJlIHRoZSBtZXRob2QgY2FsbCBtZXNzYWdlIGhhcyBhIG1hdGNoaW5nIG1ldGhvZCByZXBseSBtZXNzYWdlLgogICAgICA8L3A+PHA+CiAgICAgICAgVGhlIGVtaXR0ZXIgKGFrYSBzZW5kZXIpIG9mIGEgc2lnbmFsIGhhcyBubyBrbm93bGVkZ2Ugb2YgdGhlIHNpZ25hbCByZWNpcGllbnRzLiBSZWNpcGllbnRzIHJlZ2lzdGVyCiAgICAgICAgd2l0aCB0aGUgYnVzIGRhZW1vbiB0byByZWNlaXZlIHNpZ25hbHMgYmFzZWQgb24gIm1hdGNoIHJ1bGVzIiAtIHRoZXNlIHJ1bGVzIHdvdWxkIHR5cGljYWxseSBpbmNsdWRlIHRoZSBzZW5kZXIgYW5kIAogICAgICAgIHRoZSBzaWduYWwgbmFtZS4gVGhlIGJ1cyBkYWVtb24gc2VuZHMgZWFjaCBzaWduYWwgb25seSB0byByZWNpcGllbnRzIHdobyBoYXZlIGV4cHJlc3NlZCBpbnRlcmVzdCBpbiB0aGF0IAogICAgICAgIHNpZ25hbC4KICAgICAgPC9wPjxwPgogICAgICAgIEEgc2lnbmFsIGluIERCdXMgaGFwcGVucyBhcyBmb2xsb3dzOgogICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiB0eXBlPSJkaXNjIj48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICBBIHNpZ25hbCBtZXNzYWdlIGlzIGNyZWF0ZWQgYW5kIHNlbnQgdG8gdGhlIGJ1cyBkYWVtb24uIFdoZW4gdXNpbmcgdGhlIGxvdy1sZXZlbCBBUEkgdGhpcyBtYXkgYmUgCiAgICAgICAgICAgICAgZG9uZSBtYW51YWxseSwgd2l0aCBjZXJ0YWluIGJpbmRpbmdzIGl0IG1heSBiZSBkb25lIGZvciB5b3UgYnkgdGhlIGJpbmRpbmcgd2hlbiBhIG5hdGl2ZSBvYmplY3QKICAgICAgICAgICAgICBlbWl0cyBhIG5hdGl2ZSBzaWduYWwgb3IgZXZlbnQuCiAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgIFRoZSBzaWduYWwgbWVzc2FnZSBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlIHRoYXQgc3BlY2lmaWVzIHRoZSBzaWduYWw7CiAgICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIHNpZ25hbDsgdGhlIGJ1cyBuYW1lIG9mIHRoZSBwcm9jZXNzIHNlbmRpbmcgdGhlIHNpZ25hbDsgYW5kIAogICAgICAgICAgICAgIGFueSBhcmd1bWVudHMgCiAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgIEFueSBwcm9jZXNzIG9uIHRoZSBtZXNzYWdlIGJ1cyBjYW4gcmVnaXN0ZXIgIm1hdGNoIHJ1bGVzIiBpbmRpY2F0aW5nIHdoaWNoIHNpZ25hbHMgaXQgCiAgICAgICAgICAgICAgaXMgaW50ZXJlc3RlZCBpbi4gVGhlIGJ1cyBoYXMgYSBsaXN0IG9mIHJlZ2lzdGVyZWQgbWF0Y2ggcnVsZXMuCiAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgIFRoZSBidXMgZGFlbW9uIGV4YW1pbmVzIHRoZSBzaWduYWwgYW5kIGRldGVybWluZXMgd2hpY2ggcHJvY2Vzc2VzIGFyZSBpbnRlcmVzdGVkIGluIGl0LgogICAgICAgICAgICAgIEl0IHNlbmRzIHRoZSBzaWduYWwgbWVzc2FnZSB0byB0aGVzZSBwcm9jZXNzZXMuCiAgICAgICAgICAgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgogICAgICAgICAgICAgIEVhY2ggcHJvY2VzcyByZWNlaXZpbmcgdGhlIHNpZ25hbCBkZWNpZGVzIHdoYXQgdG8gZG8gd2l0aCBpdDsgaWYgdXNpbmcgYSBiaW5kaW5nLCAKICAgICAgICAgICAgICB0aGUgYmluZGluZyBtYXkgY2hvb3NlIHRvIGVtaXQgYSBuYXRpdmUgc2lnbmFsIG9uIGEgcHJveHkgb2JqZWN0LiBJZiB1c2luZyB0aGUgCiAgICAgICAgICAgICAgbG93LWxldmVsIEFQSSwgdGhlIHByb2Nlc3MgbWF5IGp1c3QgbG9vayBhdCB0aGUgc2lnbmFsIHNlbmRlciBhbmQgbmFtZSBhbmQgZGVjaWRlCiAgICAgICAgICAgICAgd2hhdCB0byBkbyBiYXNlZCBvbiB0aGF0LgogICAgICAgICAgICA8L3A+PC9saT48L3VsPjwvZGl2PjxwPgogICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSJJbnRyb3NwZWN0aW9uIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJpbnRyb3NwZWN0aW9uIj48L2E+SW50cm9zcGVjdGlvbjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgRC1CdXMgb2JqZWN0cyBtYXkgc3VwcG9ydCB0aGUgaW50ZXJmYWNlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5JbnRyb3NwZWN0YWJsZTwvY29kZT4uCiAgICAgICAgVGhpcyBpbnRlcmZhY2UgaGFzIG9uZSBtZXRob2QgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkludHJvc3BlY3Q8L2NvZGU+IHdoaWNoIHRha2VzIG5vIGFyZ3VtZW50cyBhbmQgcmV0dXJucwogICAgICAgIGFuIFhNTCBzdHJpbmcuIFRoZSBYTUwgc3RyaW5nIGRlc2NyaWJlcyB0aGUgaW50ZXJmYWNlcywgbWV0aG9kcywgYW5kIHNpZ25hbHMgb2YgdGhlIG9iamVjdC4KICAgICAgICBTZWUgdGhlIEQtQnVzIHNwZWNpZmljYXRpb24gZm9yIG1vcmUgZGV0YWlscyBvbiB0aGlzIGludHJvc3BlY3Rpb24gZm9ybWF0LgogICAgICA8L3A+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDEiIHRpdGxlPSJHTGliIEFQSTogVXNpbmcgUmVtb3RlIE9iamVjdHMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iZ2xpYi1jbGllbnQiPjwvYT5HTGliIEFQSTogVXNpbmcgUmVtb3RlIE9iamVjdHM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICBUaGUgR0xpYiBiaW5kaW5nIGlzIGRlZmluZWQgaW4gdGhlIGhlYWRlciBmaWxlCiAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4mbHQ7ZGJ1cy9kYnVzLWdsaWIuaCZndDs8L2NvZGU+LgogICAgPC9wPjxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iRC1CdXMgLSBHTGliIHR5cGUgbWFwcGluZ3MiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImdsaWItdHlwZW1hcHBpbmdzIj48L2E+RC1CdXMgLSBHTGliIHR5cGUgbWFwcGluZ3M8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgoJVGhlIGhlYXJ0IG9mIHRoZSBHTGliIGJpbmRpbmdzIGZvciBELUJ1cyBpcyB0aGUgbWFwcGluZyBpdAoJcHJvdmlkZXMgYmV0d2VlbiBELUJ1cyAidHlwZSBzaWduYXR1cmVzIiBhbmQgR0xpYiB0eXBlcwoJKDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HVHlwZTwvY29kZT4pLiBUaGUgRC1CdXMgdHlwZSBzeXN0ZW0gaXMgY29tcG9zZWQgb2YKCWEgbnVtYmVyIG9mICJiYXNpYyIgdHlwZXMsIGFsb25nIHdpdGggc2V2ZXJhbCAiY29udGFpbmVyIiB0eXBlcy4KICAgICAgPC9wPjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iQmFzaWMgdHlwZSBtYXBwaW5ncyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iZ2xpYi1iYXNpYy10eXBlbWFwcGluZ3MiPjwvYT5CYXNpYyB0eXBlIG1hcHBpbmdzPC9oND48L2Rpdj48L2Rpdj48L2Rpdj48cD4KCSAgQmVsb3cgaXMgYSBsaXN0IG9mIHRoZSBiYXNpYyB0eXBlcywgYWxvbmcgd2l0aCB0aGVpciBhc3NvY2lhdGVkCgkgIG1hcHBpbmcgdG8gYSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1R5cGU8L2NvZGU+LgoJICA8L3A+PGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGJvcmRlcj0iMSI+PGNvbGdyb3VwPjxjb2w+PGNvbD48Y29sPjxjb2w+PC9jb2xncm91cD48dGhlYWQ+PHRyPjx0aD5ELUJ1cyBiYXNpYyB0eXBlPC90aD48dGg+R1R5cGU8L3RoPjx0aD5GcmVlIGZ1bmN0aW9uPC90aD48dGg+Tm90ZXM8L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+QllURTwvY29kZT48L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R19UWVBFX1VDSEFSPC9jb2RlPjwvdGQ+PHRkPqA8L3RkPjx0ZD6gPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkJPT0xFQU48L2NvZGU+PC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdfVFlQRV9CT09MRUFOPC9jb2RlPjwvdGQ+PHRkPqA8L3RkPjx0ZD6gPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPklOVDE2PC9jb2RlPjwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HX1RZUEVfSU5UPC9jb2RlPjwvdGQ+PHRkPqA8L3RkPjx0ZD5XaWxsIGJlIGNoYW5nZWQgdG8gYSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R19UWVBFX0lOVDE2PC9jb2RlPiBvbmNlIEdMaWIgaGFzIGl0PC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlVJTlQxNjwvY29kZT48L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R19UWVBFX1VJTlQ8L2NvZGU+PC90ZD48dGQ+oDwvdGQ+PHRkPldpbGwgYmUgY2hhbmdlZCB0byBhIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HX1RZUEVfVUlOVDE2PC9jb2RlPiBvbmNlIEdMaWIgaGFzIGl0PC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPklOVDMyPC9jb2RlPjwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HX1RZUEVfSU5UPC9jb2RlPjwvdGQ+PHRkPqA8L3RkPjx0ZD5XaWxsIGJlIGNoYW5nZWQgdG8gYSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R19UWVBFX0lOVDMyPC9jb2RlPiBvbmNlIEdMaWIgaGFzIGl0PC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlVJTlQzMjwvY29kZT48L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R19UWVBFX1VJTlQ8L2NvZGU+PC90ZD48dGQ+oDwvdGQ+PHRkPldpbGwgYmUgY2hhbmdlZCB0byBhIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HX1RZUEVfVUlOVDMyPC9jb2RlPiBvbmNlIEdMaWIgaGFzIGl0PC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPklOVDY0PC9jb2RlPjwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HX1RZUEVfR0lOVDY0PC9jb2RlPjwvdGQ+PHRkPqA8L3RkPjx0ZD6gPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlVJTlQ2NDwvY29kZT48L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R19UWVBFX0dVSU5UNjQ8L2NvZGU+PC90ZD48dGQ+oDwvdGQ+PHRkPqA8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RE9VQkxFPC9jb2RlPjwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HX1RZUEVfRE9VQkxFPC9jb2RlPjwvdGQ+PHRkPqA8L3RkPjx0ZD6gPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlNUUklORzwvY29kZT48L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R19UWVBFX1NUUklORzwvY29kZT48L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Z19mcmVlPC9jb2RlPjwvdGQ+PHRkPqA8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+T0JKRUNUX1BBVEg8L2NvZGU+PC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRCVVNfVFlQRV9HX1BST1hZPC9jb2RlPjwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5nX29iamVjdF91bnJlZjwvY29kZT48L3RkPjx0ZD5UaGUgcmV0dXJuZWQgcHJveHkgZG9lcyBub3QgaGF2ZSBhbiBpbnRlcmZhY2Ugc2V0OyB1c2UgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmRidXNfZ19wcm94eV9zZXRfaW50ZXJmYWNlPC9jb2RlPiB0byBpbnZva2UgbWV0aG9kczwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PHA+CgkgIEFzIHlvdSBjYW4gc2VlLCB0aGUgYmFzaWMgbWFwcGluZyBpcyBmYWlybHkgc3RyYWlnaHRmb3J3YXJkLgoJPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iQ29udGFpbmVyIHR5cGUgbWFwcGluZ3MiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImdsaWItY29udGFpbmVyLXR5cGVtYXBwaW5ncyI+PC9hPkNvbnRhaW5lciB0eXBlIG1hcHBpbmdzPC9oND48L2Rpdj48L2Rpdj48L2Rpdj48cD4KCSAgVGhlIEQtQnVzIHR5cGUgc3lzdGVtIGFsc28gaGFzIGEgbnVtYmVyIG9mICJjb250YWluZXIiCgkgIHR5cGVzLCBzdWNoIGFzIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5EQlVTX1RZUEVfQVJSQVk8L2NvZGU+IGFuZAoJICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+REJVU19UWVBFX1NUUlVDVDwvY29kZT4uICBUaGUgRC1CdXMgdHlwZSBzeXN0ZW0KCSAgaXMgZnVsbHkgcmVjdXJzaXZlLCBzbyBvbmUgY2FuIGZvciBleGFtcGxlIGhhdmUgYW4gYXJyYXkgb2YKCSAgYXJyYXkgb2Ygc3RyaW5ncyAoaS5lLiB0eXBlIHNpZ25hdHVyZQoJICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YWFzPC9jb2RlPikuCgk8L3A+PHA+CgkgIEhvd2V2ZXIsIG5vdCBhbGwgb2YgdGhlc2UgdHlwZXMgYXJlIGluIGNvbW1vbiB1c2U7IGZvcgoJICBleGFtcGxlLCBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcgdGhlIGF1dGhvciBrbm93cyBvZiBubwoJICBvbmUgdXNpbmcgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRCVVNfVFlQRV9TVFJVQ1Q8L2NvZGU+LCBvciBhCgkgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5EQlVTX1RZUEVfQVJSQVk8L2NvZGU+IGNvbnRhaW5pbmcgYW55IG5vbi1iYXNpYwoJICB0eXBlLiAgVGhlIGFwcHJvYWNoIHRoZSBHTGliIGJpbmRpbmdzIHRha2UgaXMgcHJhZ21hdGljOyB0cnkKCSAgdG8gbWFwIHRoZSBtb3N0IGNvbW1vbiB0eXBlcyBpbiB0aGUgbW9zdCBvYnZpb3VzIHdheSwgYW5kCgkgIGxldCB1c2luZyBsZXNzIGNvbW1vbiBhbmQgbW9yZSBjb21wbGV4IHR5cGVzIGJlIGxlc3MKCSAgIm5hdHVyYWwiLgoJPC9wPjxwPgoJICBGaXJzdCwgRC1CdXMgdHlwZSBzaWduYXR1cmVzIHdoaWNoIGhhdmUgYW4gIm9idmlvdXMiCgkgIGNvcnJlc3BvbmRpbmcgYnVpbHQtaW4gR0xpYiB0eXBlIGFyZSBtYXBwZWQgdXNpbmcgdGhhdCB0eXBlOgoJICA8L3A+PGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGJvcmRlcj0iMSI+PGNvbGdyb3VwPjxjb2w+PGNvbD48Y29sPjxjb2w+PGNvbD48Y29sPjwvY29sZ3JvdXA+PHRoZWFkPjx0cj48dGg+RC1CdXMgdHlwZSBzaWduYXR1cmU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PHRoPkdUeXBlPC90aD48dGg+QyB0eXBlZGVmPC90aD48dGg+RnJlZSBmdW5jdGlvbjwvdGg+PHRoPk5vdGVzPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmFzPC9jb2RlPjwvdGQ+PHRkPkFycmF5IG9mIHN0cmluZ3M8L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R19UWVBFX1NUUlY8L2NvZGU+PC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmNoYXIgKio8L2NvZGU+PC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmdfc3RyZnJlZXY8L2NvZGU+PC90ZD48dGQ+oDwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj52PC9jb2RlPjwvdGQ+PHRkPkdlbmVyaWMgdmFsdWUgY29udGFpbmVyPC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdfVFlQRV9WQUxVRTwvY29kZT48L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1ZhbHVlICo8L2NvZGU+PC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmdfdmFsdWVfdW5zZXQ8L2NvZGU+PC90ZD48dGQ+VGhlIGNhbGxpbmcgY29udmVudGlvbnMgZm9yIHZhbHVlcyBleHBlY3QgdGhhdCBtZXRob2QgY2FsbGVycyBoYXZlIGFsbG9jYXRlZCByZXR1cm4gdmFsdWVzOyBzZWUgYmVsb3cuPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L2Rpdj48cD4KCTwvcD48cD4KCSAgVGhlIG5leHQgbW9zdCBjb21tb24gcmVjdXJzaXZlIHR5cGUgc2lnbmF0dXJlcyBhcmUgYXJyYXlzIG9mCgkgIGJhc2ljIHZhbHVlcy4gIFRoZSBtb3N0IG9idmlvdXMgbWFwcGluZyBmb3IgYXJyYXlzIG9mIGJhc2ljCgkgIHR5cGVzIGlzIGEgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdBcnJheTwvY29kZT4uICBOb3csIEdMaWIgZG9lcyBub3QKCSAgcHJvdmlkZSBhIGJ1aWx0aW4gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdUeXBlPC9jb2RlPiBmb3IKCSAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdBcnJheTwvY29kZT4uICBIb3dldmVyLCB3ZSBhY3R1YWxseSBuZWVkIG1vcmUgdGhhbgoJICB0aGF0IC0gd2UgbmVlZCBhICJwYXJhbWV0ZXJpemVkIiB0eXBlIHdoaWNoIGluY2x1ZGVzIHRoZQoJICBjb250YWluZWQgdHlwZS4gIFdoeSB3ZSBuZWVkIHRoaXMgd2Ugd2lsbCBzZWUgYmVsb3cuCgk8L3A+PHA+CgkgIFRoZSBhcHByb2FjaCB0YWtlbiBpcyB0byBjcmVhdGUgdGhlc2UgdHlwZXMgaW4gdGhlIEQtQnVzIEdMaWIKCSAgYmluZGluZ3M7IGhvd2V2ZXIsIHRoZXJlIGlzIG5vdGhpbmcgRC1CdXMgc3BlY2lmaWMgYWJvdXQgdGhlbS4KCSAgSW4gdGhlIGZ1dHVyZSwgd2UgaG9wZSB0byBpbmNsdWRlIHN1Y2ggImZ1bmRhbWVudGFsIiB0eXBlcyBpbiBHTGliCgkgIGl0c2VsZi4KCSAgPC9wPjxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBib3JkZXI9IjEiPjxjb2xncm91cD48Y29sPjxjb2w+PGNvbD48Y29sPjxjb2w+PGNvbD48L2NvbGdyb3VwPjx0aGVhZD48dHI+PHRoPkQtQnVzIHR5cGUgc2lnbmF0dXJlPC90aD48dGg+RGVzY3JpcHRpb248L3RoPjx0aD5HVHlwZTwvdGg+PHRoPkMgdHlwZWRlZjwvdGg+PHRoPkZyZWUgZnVuY3Rpb248L3RoPjx0aD5Ob3RlczwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5heTwvY29kZT48L3RkPjx0ZD5BcnJheSBvZiBieXRlczwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5EQlVTX1RZUEVfR19CWVRFX0FSUkFZPC9jb2RlPjwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HQXJyYXkgKjwvY29kZT48L3RkPjx0ZD5nX2FycmF5X2ZyZWU8L3RkPjx0ZD6gPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmF1PC9jb2RlPjwvdGQ+PHRkPkFycmF5IG9mIHVpbnQ8L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+REJVU19UWVBFX0dfVUlOVF9BUlJBWTwvY29kZT48L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R0FycmF5ICo8L2NvZGU+PC90ZD48dGQ+Z19hcnJheV9mcmVlPC90ZD48dGQ+oDwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5haTwvY29kZT48L3RkPjx0ZD5BcnJheSBvZiBpbnQ8L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+REJVU19UWVBFX0dfSU5UX0FSUkFZPC9jb2RlPjwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HQXJyYXkgKjwvY29kZT48L3RkPjx0ZD5nX2FycmF5X2ZyZWU8L3RkPjx0ZD6gPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmF4PC9jb2RlPjwvdGQ+PHRkPkFycmF5IG9mIGludDY0PC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRCVVNfVFlQRV9HX0lOVDY0X0FSUkFZPC9jb2RlPjwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HQXJyYXkgKjwvY29kZT48L3RkPjx0ZD5nX2FycmF5X2ZyZWU8L3RkPjx0ZD6gPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmF0PC9jb2RlPjwvdGQ+PHRkPkFycmF5IG9mIHVpbnQ2NDwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5EQlVTX1RZUEVfR19VSU5UNjRfQVJSQVk8L2NvZGU+PC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdBcnJheSAqPC9jb2RlPjwvdGQ+PHRkPmdfYXJyYXlfZnJlZTwvdGQ+PHRkPqA8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YWQ8L2NvZGU+PC90ZD48dGQ+QXJyYXkgb2YgZG91YmxlPC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRCVVNfVFlQRV9HX0RPVUJMRV9BUlJBWTwvY29kZT48L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R0FycmF5ICo8L2NvZGU+PC90ZD48dGQ+Z19hcnJheV9mcmVlPC90ZD48dGQ+oDwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5hYjwvY29kZT48L3RkPjx0ZD5BcnJheSBvZiBib29sZWFuPC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRCVVNfVFlQRV9HX0JPT0xFQU5fQVJSQVk8L2NvZGU+PC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdBcnJheSAqPC9jb2RlPjwvdGQ+PHRkPmdfYXJyYXlfZnJlZTwvdGQ+PHRkPqA8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjxwPgoJPC9wPjxwPgoJICBELUJ1cyBhbHNvIGluY2x1ZGVzIGEgc3BlY2lhbCB0eXBlIERCVVNfVFlQRV9ESUNUX0VOVFJZIHdoaWNoCgkgIGlzIG9ubHkgdmFsaWQgaW4gYXJyYXlzLiAgSXQncyBpbnRlbmRlZCB0byBiZSBtYXBwZWQgdG8gYSAiZGljdGlvbmFyeSIKCSAgdHlwZSBieSBiaW5kaW5ncy4gIFRoZSBvYnZpb3VzIEdMaWIgbWFwcGluZyBoZXJlIGlzIEdIYXNoVGFibGUuICBBZ2FpbiwKCSAgaG93ZXZlciwgdGhlcmUgaXMgbm8gYnVpbHRpbiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1R5cGU8L2NvZGU+IGZvciBhIEdIYXNoVGFibGUuCgkgIE1vcmVvdmVyLCBqdXN0IGxpa2UgZm9yIGFycmF5cywgd2UgbmVlZCBhIHBhcmFtZXRlcml6ZWQgdHlwZSBzbyB0aGF0CgkgIHRoZSBiaW5kaW5ncyBjYW4gY29tbXVuaWF0ZSB3aGljaCB0eXBlcyBhcmUgY29udGFpbmVkIGluIHRoZSBoYXNoIHRhYmxlLgoJPC9wPjxwPgoJICBBdCBwcmVzZW50LCBvbmx5IHN0cmluZ3MgYXJlIHN1cHBvcnRlZC4gIFdvcmsgaXMgaW4gcHJvZ3Jlc3MgdG8KCSAgaW5jbHVkZSBtb3JlIHR5cGVzLgoJICA8L3A+PGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGJvcmRlcj0iMSI+PGNvbGdyb3VwPjxjb2w+PGNvbD48Y29sPjxjb2w+PGNvbD48Y29sPjwvY29sZ3JvdXA+PHRoZWFkPjx0cj48dGg+RC1CdXMgdHlwZSBzaWduYXR1cmU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PHRoPkdUeXBlPC90aD48dGg+QyB0eXBlZGVmPC90aD48dGg+RnJlZSBmdW5jdGlvbjwvdGg+PHRoPk5vdGVzPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmF7c3N9PC9jb2RlPjwvdGQ+PHRkPkRpY3Rpb25hcnkgbWFwcGluZyBzdHJpbmdzIHRvIHN0cmluZ3M8L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+REJVU19UWVBFX0dfU1RSSU5HX1NUUklOR19IQVNIVEFCTEU8L2NvZGU+PC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdIYXNoVGFibGUgKjwvY29kZT48L3RkPjx0ZD5nX2hhc2hfdGFibGVfZGVzdHJveTwvdGQ+PHRkPqA8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjxwPgoJPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iQXJiaXRyYXJpbHkgcmVjdXJzaXZlIHR5cGUgbWFwcGluZ3MiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImdsaWItZ2VuZXJpYy10eXBlbWFwcGluZ3MiPjwvYT5BcmJpdHJhcmlseSByZWN1cnNpdmUgdHlwZSBtYXBwaW5nczwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CgkgIEZpbmFsbHksIGl0IGlzIHBvc3NpYmxlIHVzZXJzIHdpbGwgd2FudCB0byB3cml0ZSBvciBpbnZva2UgRC1CdXMKCSAgbWV0aG9kcyB3aGljaCBoYXZlIGFyYml0cmFyaWx5IGNvbXBsZXggdHlwZSBzaWduYXR1cmVzIG5vdAoJICBkaXJlY3RseSBzdXBwb3J0ZWQgYnkgdGhlc2UgYmluZGluZ3MuICBGb3IgdGhpcyBjYXNlLCB3ZSBoYXZlIGEKCSAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRCdXNHVmFsdWU8L2NvZGU+IHdoaWNoIGFjdHMgYXMgYSBraW5kIG9mIHNwZWNpYWwKCSAgdmFyaWFudCB2YWx1ZSB3aGljaCBtYXkgYmUgaXRlcmF0ZWQgb3ZlciBtYW51YWxseS4gIFRoZQoJICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1R5cGU8L2NvZGU+IGFzc29jaWF0ZWQgaXMKCSAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRCVVNfVFlQRV9HX1ZBTFVFPC9jb2RlPi4KCTwvcD48cD4KCSAgVE9ETyBpbnNlcnQgdXNhZ2Ugb2YgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRCVVNfVFlQRV9HX1ZBTFVFPC9jb2RlPiBoZXJlLgoJPC9wPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iQSBzYW1wbGUgcHJvZ3JhbSI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0ic2FtcGxlLXByb2dyYW0tMSI+PC9hPkEgc2FtcGxlIHByb2dyYW08L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPkhlcmUgaXMgYSBELUJ1cyBwcm9ncmFtIHVzaW5nIHRoZSBHTGliIGJpbmRpbmdzLgo8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgICAgIAppbnQKbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQp7CiAgREJ1c0dDb25uZWN0aW9uICpjb25uZWN0aW9uOwogIEdFcnJvciAqZXJyb3I7CiAgREJ1c0dQcm94eSAqcHJveHk7CiAgY2hhciAqKm5hbWVfbGlzdDsKICBjaGFyICoqbmFtZV9saXN0X3B0cjsKICAKICBnX3R5cGVfaW5pdCAoKTsKCiAgZXJyb3IgPSBOVUxMOwogIGNvbm5lY3Rpb24gPSBkYnVzX2dfYnVzX2dldCAoREJVU19CVVNfU0VTU0lPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhbXA7ZXJyb3IpOwogIGlmIChjb25uZWN0aW9uID09IE5VTEwpCiAgICB7CiAgICAgIGdfcHJpbnRlcnIgKCJGYWlsZWQgdG8gb3BlbiBjb25uZWN0aW9uIHRvIGJ1czogJXNcbiIsCiAgICAgICAgICAgICAgICAgIGVycm9yLSZndDttZXNzYWdlKTsKICAgICAgZ19lcnJvcl9mcmVlIChlcnJvcik7CiAgICAgIGV4aXQgKDEpOwogICAgfQoKICAvKiBDcmVhdGUgYSBwcm94eSBvYmplY3QgZm9yIHRoZSAiYnVzIGRyaXZlciIgKG5hbWUgIm9yZy5mcmVlZGVza3RvcC5EQnVzIikgKi8KICAKICBwcm94eSA9IGRidXNfZ19wcm94eV9uZXdfZm9yX25hbWUgKGNvbm5lY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX1NFUlZJQ0VfREJVUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfUEFUSF9EQlVTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19JTlRFUkZBQ0VfREJVUyk7CgogIC8qIENhbGwgTGlzdE5hbWVzIG1ldGhvZCwgd2FpdCBmb3IgcmVwbHkgKi8KICBlcnJvciA9IE5VTEw7CiAgaWYgKCFkYnVzX2dfcHJveHlfY2FsbCAocHJveHksICJMaXN0TmFtZXMiLCAmYW1wO2Vycm9yLCBHX1RZUEVfSU5WQUxJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSViwgJmFtcDtuYW1lX2xpc3QsIEdfVFlQRV9JTlZBTElEKSkKICAgIHsKICAgICAgLyogSnVzdCBkbyBkZW1vbnN0cmF0ZSByZW1vdGUgZXhjZXB0aW9ucyB2ZXJzdXMgcmVndWxhciBHRXJyb3IgKi8KICAgICAgaWYgKGVycm9yLSZndDtkb21haW4gPT0gREJVU19HRVJST1IgJmFtcDsmYW1wOyBlcnJvci0mZ3Q7Y29kZSA9PSBEQlVTX0dFUlJPUl9SRU1PVEVfRVhDRVBUSU9OKQogICAgICAgIGdfcHJpbnRlcnIgKCJDYXVnaHQgcmVtb3RlIG1ldGhvZCBleGNlcHRpb24gJXM6ICVzIiwKCSAgICAgICAgICAgIGRidXNfZ19lcnJvcl9nZXRfbmFtZSAoZXJyb3IpLAoJICAgICAgICAgICAgZXJyb3ItJmd0O21lc3NhZ2UpOwogICAgICBlbHNlCiAgICAgICAgZ19wcmludGVyciAoIkVycm9yOiAlc1xuIiwgZXJyb3ItJmd0O21lc3NhZ2UpOwogICAgICBnX2Vycm9yX2ZyZWUgKGVycm9yKTsKICAgICAgZXhpdCAoMSk7CiAgICB9CgogIC8qIFByaW50IHRoZSByZXN1bHRzICovCiAKICBnX3ByaW50ICgiTmFtZXMgb24gdGhlIG1lc3NhZ2UgYnVzOlxuIik7CiAgCiAgZm9yIChuYW1lX2xpc3RfcHRyID0gbmFtZV9saXN0OyAqbmFtZV9saXN0X3B0cjsgbmFtZV9saXN0X3B0cisrKQogICAgewogICAgICBnX3ByaW50ICgiICAlc1xuIiwgKm5hbWVfbGlzdF9wdHIpOwogICAgfQogIGdfc3RyZnJlZXYgKG5hbWVfbGlzdCk7CgogIGdfb2JqZWN0X3VucmVmIChwcm94eSk7CgogIHJldHVybiAwOwp9CjwvcHJlPjxwPgogICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iUHJvZ3JhbSBpbml0YWxpemF0aW9uIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJnbGliLXByb2dyYW0tc2V0dXAiPjwvYT5Qcm9ncmFtIGluaXRhbGl6YXRpb248L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgoJQSBjb25uZWN0aW9uIHRvIHRoZSBidXMgaXMgYWNxdWlyZWQgdXNpbmcKCTxjb2RlIGNsYXNzPSJsaXRlcmFsIj5kYnVzX2dfYnVzX2dldDwvY29kZT4uICBOZXh0LCBhIHByb3h5CglpcyBjcmVhdGVkIGZvciB0aGUgb2JqZWN0ICIvb3JnL2ZyZWVkZXNrdG9wL0RCdXMiIHdpdGgKCWludGVyZmFjZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkRCdXM8L2NvZGU+CglvbiB0aGUgc2VydmljZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkRCdXM8L2NvZGU+LgoJVGhpcyBpcyBhIHByb3h5IGZvciB0aGUgbWVzc2FnZSBidXMgaXRzZWxmLgogICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSJVbmRlcnN0YW5kaW5nIG1ldGhvZCBpbnZvY2F0aW9uIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJnbGliLW1ldGhvZC1pbnZvY2F0aW9uIj48L2E+VW5kZXJzdGFuZGluZyBtZXRob2QgaW52b2NhdGlvbjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CglZb3UgaGF2ZSBhIG51bWJlciBvZiBjaG9pY2VzIGZvciBtZXRob2QgaW52b2NhdGlvbi4gIEZpcnN0LCBhcwoJdXNlZCBhYm92ZSwgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmRidXNfZ19wcm94eV9jYWxsPC9jb2RlPiBzZW5kcyBhCgltZXRob2QgY2FsbCB0byB0aGUgcmVtb3RlIG9iamVjdCwgYW5kIGJsb2NrcyB1bnRpbCBhIHJlcGx5IGlzCglyZWNpZXZlZC4gIFRoZSBvdXRnb2luZyBhcmd1bWVudHMgYXJlIHNwZWNpZmllZCBpbiB0aGUgdmFyYXJncwoJYXJyYXksIHRlcm1pbmF0ZWQgd2l0aCA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R19UWVBFX0lOVkFMSUQ8L2NvZGU+LgoJTmV4dCwgcG9pbnRlcnMgdG8gcmV0dXJuIHZhbHVlcyBhcmUgc3BlY2lmaWVkLCBmb2xsb3dlZCBhZ2FpbgoJYnkgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdfVFlQRV9JTlZBTElEPC9jb2RlPi4KICAgICAgPC9wPjxwPgoJVG8gaW52b2tlIGEgbWV0aG9kIGFzeW5jaHJvbm91c2x5LCB1c2UKCTxjb2RlIGNsYXNzPSJsaXRlcmFsIj5kYnVzX2dfcHJveHlfYmVnaW5fY2FsbDwvY29kZT4uICBUaGlzIHJldHVybnMgYQoJPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRCdXNHUGVuZGluZ0NhbGw8L2NvZGU+IG9iamVjdDsgeW91IG1heSB0aGVuIHNldCBhCglub3RpZmljYXRpb24gZnVuY3Rpb24gdXNpbmcKCTxjb2RlIGNsYXNzPSJsaXRlcmFsIj5kYnVzX2dfcGVuZGluZ19jYWxsX3NldF9ub3RpZnk8L2NvZGU+LgogICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSJDb25uZWN0aW5nIHRvIG9iamVjdCBzaWduYWxzIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJnbGliLXNpZ25hbC1jb25uZWN0aW9uIj48L2E+Q29ubmVjdGluZyB0byBvYmplY3Qgc2lnbmFsczwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CglZb3UgbWF5IGNvbm5lY3QgdG8gc2lnbmFscyB1c2luZwoJPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmRidXNfZ19wcm94eV9hZGRfc2lnbmFsPC9jb2RlPiBhbmQKCTxjb2RlIGNsYXNzPSJsaXRlcmFsIj5kYnVzX2dfcHJveHlfY29ubmVjdF9zaWduYWw8L2NvZGU+LiAgWW91IG11c3QKCWludm9rZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ZGJ1c19nX3Byb3h5X2FkZF9zaWduYWw8L2NvZGU+IHRvIHNwZWNpZnkKCXRoZSBzaWduYXR1cmUgb2YgeW91ciBzaWduYWwgaGFuZGxlcnM7IHlvdSBtYXkgdGhlbiBpbnZva2UKCTxjb2RlIGNsYXNzPSJsaXRlcmFsIj5kYnVzX2dfcHJveHlfY29ubmVjdF9zaWduYWw8L2NvZGU+IG11bHRpcGxlIHRpbWVzLgogICAgICA8L3A+PHA+CglOb3RlIHRoYXQgaXQgd2lsbCBvZnRlbiBiZSB0aGUgY2FzZSB0aGF0IHRoZXJlIGlzIG5vIGJ1aWx0aW4KCW1hcnNoYWxsZXIgZm9yIHRoZSB0eXBlIHNpZ25hdHVyZSBvZiBhIHJlbW90ZSBzaWduYWwuICBJbiB0aGF0CgljYXNlLCB5b3UgbXVzdCBnZW5lcmF0ZSBhIG1hcnNoYWxsZXIgeW91cnNlbGYgYnkgdXNpbmcKCTxzcGFuIGNsYXNzPSJhcHBsaWNhdGlvbiI+Z2xpYi1nZW5tYXJzaGFsPC9zcGFuPiwgYW5kIHRoZW4gcmVnaXN0ZXIKCWl0IHVzaW5nIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5kYnVzX2dfb2JqZWN0X3JlZ2lzdGVyX21hcnNoYWxsZXI8L2NvZGU+LgogICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSJFcnJvciBoYW5kbGluZyBhbmQgcmVtb3RlIGV4Y2VwdGlvbnMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImdsaWItZXJyb3ItaGFuZGxpbmciPjwvYT5FcnJvciBoYW5kbGluZyBhbmQgcmVtb3RlIGV4Y2VwdGlvbnM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgoJQWxsIG9mIHRoZSBHTGliIGJpbmRpbmcgbWV0aG9kcyBzdWNoIGFzCgk8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ZGJ1c19nX3Byb3h5X2VuZF9jYWxsPC9jb2RlPiByZXR1cm4gYQoJPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdFcnJvcjwvY29kZT4uICBUaGlzIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HRXJyb3I8L2NvZGU+IGNhbgoJcmVwcmVzZW50IHR3byBkaWZmZXJlbnQgdGhpbmdzOgogICAgICA8L3A+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CgkgICAgQW4gaW50ZXJuYWwgRC1CdXMgZXJyb3IsIHN1Y2ggYXMgYW4gb3V0LW9mLW1lbW9yeQoJICAgIGNvbmRpdGlvbiwgYW4gSS9PIGVycm9yLCBvciBhIG5ldHdvcmsgdGltZW91dC4gIEVycm9ycwoJICAgIGdlbmVyYXRlZCBieSB0aGUgRC1CdXMgbGlicmFyeSBpdHNlbGYgaGF2ZSB0aGUgZG9tYWluCgkgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRCVVNfR0VSUk9SPC9jb2RlPiwgYW5kIGEgY29ycmVzcG9uZGluZyBjb2RlCgkgICAgc3VjaCBhcyA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+REJVU19HRVJST1JfTk9fTUVNT1JZPC9jb2RlPi4gIEl0IHdpbGwKCSAgICBub3QgYmUgdHlwaWNhbCBmb3IgYXBwbGljYXRpb25zIHRvIGhhbmRsZSB0aGVzZSBlcnJvcnMKCSAgICBzcGVjaWZpY2FsbHkuCgkgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgoJICAgIEEgcmVtb3RlIEQtQnVzIGV4Y2VwdGlvbiwgdGhyb3duIGJ5IHRoZSBwZWVyLCBidXMsIG9yCgkgICAgc2VydmljZS4gIEQtQnVzIHJlbW90ZSBleGNlcHRpb25zIGhhdmUgYm90aCBhIHRleHR1YWwKCSAgICAibmFtZSIgYW5kIGEgIm1lc3NhZ2UiLiAgVGhlIEdMaWIgYmluZGluZ3Mgc3RvcmUgdGhpcwoJICAgIGluZm9ybWF0aW9uIGluIHRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R0Vycm9yPC9jb2RlPiwgYnV0IHNvbWUKCSAgICBzcGVjaWFsIHJ1bGVzIGFwcGx5LgoJICA8L3A+PHA+CgkgICAgVGhlIHNldCBlcnJvciB3aWxsIGhhdmUgdGhlIGRvbWFpbgoJICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5EQlVTX0dFUlJPUjwvY29kZT4gYXMgYWJvdmUsIGFuZCB3aWxsIGFsc28KCSAgICBoYXZlIHRoZSBjb2RlCgkgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRCVVNfR0VSUk9SX1JFTU9URV9FWENFUFRJT048L2NvZGU+LiAgSW4gb3JkZXIKCSAgICB0byBhY2Nlc3MgdGhlIHJlbW90ZSBleGNlcHRpb24gbmFtZSwgeW91IG11c3QgdXNlIGEKCSAgICBzcGVjaWFsIGFjY2Vzc29yLCBzdWNoIGFzCgkgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmRidXNfZ19lcnJvcl9oYXNfbmFtZTwvY29kZT4gb3IKCSAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ZGJ1c19nX2Vycm9yX2dldF9uYW1lPC9jb2RlPi4gIFRoZSByZW1vdGUKCSAgICBleGNlcHRpb24gZGV0YWlsZWQgbWVzc2FnZSBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgcmVndWxhcgoJICAgIEdFcnJvciA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+bWVzc2FnZTwvY29kZT4gbWVtYmVyLgoJICA8L3A+PC9saT48L3VsPjwvZGl2PjxwPgogICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSJNb3JlIGV4YW1wbGVzIG9mIG1ldGhvZCBpbnZvY2F0aW9uIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJnbGliLW1vcmUtZXhhbXBsZXMiPjwvYT5Nb3JlIGV4YW1wbGVzIG9mIG1ldGhvZCBpbnZvY2F0aW9uPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MyIgdGl0bGU9IlNlbmRpbmcgYW4gaW50ZWdlciBhbmQgc3RyaW5nLCByZWNlaXZpbmcgYW4gYXJyYXkgb2YgYnl0ZXMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImdsaWItc2VuZGluZy1zdHVmZiI+PC9hPlNlbmRpbmcgYW4gaW50ZWdlciBhbmQgc3RyaW5nLCByZWNlaXZpbmcgYW4gYXJyYXkgb2YgYnl0ZXM8L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgo8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogIEdBcnJheSAqYXJyOwogIAogIGVycm9yID0gTlVMTDsKICBpZiAoIWRidXNfZ19wcm94eV9jYWxsIChwcm94eSwgIkZvb2JhciIsICZhbXA7ZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0lOVCwgNDIsIEdfVFlQRV9TVFJJTkcsICJoZWxsbyIsCgkJCSAgR19UWVBFX0lOVkFMSUQsCgkJCSAgREJVU19UWVBFX0dfVUNIQVJfQVJSQVksICZhbXA7YXJyLCBHX1RZUEVfSU5WQUxJRCkpCiAgICB7CiAgICAgIC8qIEhhbmRsZSBlcnJvciAqLwogICAgfQogICBnX2Fzc2VydCAoYXJyICE9IE5VTEwpOwogICBwcmludGYgKCJnb3QgYmFjayAldSB2YWx1ZXMiLCBhcnItJmd0O2xlbik7CjwvcHJlPjxwPgoJPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iU2VuZGluZyBhIEdIYXNoVGFibGUiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImdsaWItc2VuZGluZy1oYXNoIj48L2E+U2VuZGluZyBhIEdIYXNoVGFibGU8L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgo8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogIEdIYXNoVGFibGUgKmhhc2ggPSBnX2hhc2hfdGFibGVfbmV3IChnX3N0cl9oYXNoLCBnX3N0cl9lcXVhbCk7CiAgZ3VpbnQzMiByZXQ7CiAgCiAgZ19oYXNoX3RhYmxlX2luc2VydCAoaGFzaCwgImZvbyIsICJiYXIiKTsKICBnX2hhc2hfdGFibGVfaW5zZXJ0IChoYXNoLCAiYmF6IiwgIndoZWUiKTsKCiAgZXJyb3IgPSBOVUxMOwogIGlmICghZGJ1c19nX3Byb3h5X2NhbGwgKHByb3h5LCAiSGFzaFNpemUiLCAmYW1wO2Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9HX1NUUklOR19TVFJJTkdfSEFTSCwgaGFzaCwgR19UWVBFX0lOVkFMSUQsCgkJCSAgR19UWVBFX1VJTlQsICZhbXA7cmV0LCBHX1RZUEVfSU5WQUxJRCkpCiAgICB7CiAgICAgIC8qIEhhbmRsZSBlcnJvciAqLwogICAgfQogIGdfYXNzZXJ0IChyZXQgPT0gMik7CiAgZ19oYXNoX3RhYmxlX2Rlc3Ryb3kgKGhhc2gpOwo8L3ByZT48cD4KCTwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MyIgdGl0bGU9IlJlY2VpdmluZyBhIGJvb2xlYW4gYW5kIGEgc3RyaW5nIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJnbGliLXJlY2VpdmluZy1ib29sLWludCI+PC9hPlJlY2VpdmluZyBhIGJvb2xlYW4gYW5kIGEgc3RyaW5nPC9oND48L2Rpdj48L2Rpdj48L2Rpdj48cD4KPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICBnYm9vbGVhbiBib29scmV0OwogIGNoYXIgKnN0cnJldDsKICAKICBlcnJvciA9IE5VTEw7CiAgaWYgKCFkYnVzX2dfcHJveHlfY2FsbCAocHJveHksICJHZXRTdHVmZiIsICZhbXA7ZXJyb3IsCgkJCSAgR19UWVBFX0lOVkFMSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sICZhbXA7Ym9vbHJldCwKICAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSSU5HLCAmYW1wO3N0cnJldCwKCQkJICBHX1RZUEVfSU5WQUxJRCkpCiAgICB7CiAgICAgIC8qIEhhbmRsZSBlcnJvciAqLwogICAgfQogIHByaW50ZiAoIiVzICVzIiwgYm9vbHJldCA/ICJUUlVFIiA6ICJGQUxTRSIsIHN0cnJldCk7CiAgZ19mcmVlIChzdHJyZXQpOwo8L3ByZT48cD4KCTwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MyIgdGl0bGU9IlNlbmRpbmcgdHdvIGFycmF5cyBvZiBzdHJpbmdzIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJnbGliLXNlbmRpbmctc3RyLWFycmF5cyI+PC9hPlNlbmRpbmcgdHdvIGFycmF5cyBvZiBzdHJpbmdzPC9oND48L2Rpdj48L2Rpdj48L2Rpdj48cD4KPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICAvKiBOVUxMIHRlcm1pbmF0ZSAqLwogIGNoYXIgKnN0cnNfc3RhdGljW10gPSB7ImZvbyIsICJiYXIiLCAiYmF6IiwgTlVMTH07CiAgLyogVGFrZSBwb2ludGVyIHRvIGFycmF5OyBjYW5ub3QgcGFzcyBhcnJheSBkaXJlY3RseSAqLwogIGNoYXIgKipzdHJzX3N0YXRpY19wID0gc3Ryc19zdGF0aWM7CiAgY2hhciAqKnN0cnNfZHluYW1pYzsKCiAgc3Ryc19keW5hbWljID0gZ19uZXcgKGNoYXIgKiwgNCk7CiAgc3Ryc19keW5hbWljWzBdID0gZ19zdHJkdXAgKCJoZWxsbyIpOwogIHN0cnNfZHluYW1pY1sxXSA9IGdfc3RyZHVwICgid29ybGQiKTsKICBzdHJzX2R5bmFtaWNbMl0gPSBnX3N0cmR1cCAoIiEiKTsKICAvKiBOVUxMIHRlcm1pbmF0ZSAqLwogIHN0cnNfZHluYW1pY1szXSA9IE5VTEw7CiAgCiAgZXJyb3IgPSBOVUxMOwogIGlmICghZGJ1c19nX3Byb3h5X2NhbGwgKHByb3h5LCAiVHdvU3RyQXJyYXlzIiwgJmFtcDtlcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSViwgc3Ryc19zdGF0aWNfcCwKICAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSViwgc3Ryc19keW5hbWljLAoJCQkgIEdfVFlQRV9JTlZBTElELAoJCQkgIEdfVFlQRV9JTlZBTElEKSkKICAgIHsKICAgICAgLyogSGFuZGxlIGVycm9yICovCiAgICB9CiAgIGdfc3RyZnJlZXYgKHN0cnNfZHluYW1pYyk7CjwvcHJlPjxwPgoJPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iU2VuZGluZyBhIGJvb2xlYW4sIHJlY2VpdmluZyBhbiBhcnJheSBvZiBzdHJpbmdzIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJnbGliLWdldHRpbmctc3RyLWFycmF5Ij48L2E+U2VuZGluZyBhIGJvb2xlYW4sIHJlY2VpdmluZyBhbiBhcnJheSBvZiBzdHJpbmdzPC9oND48L2Rpdj48L2Rpdj48L2Rpdj48cD4KPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KICBjaGFyICoqc3RyczsKICBjaGFyICoqc3Ryc19wOwogIGdib29sZWFuIGJsYWg7CgogIGVycm9yID0gTlVMTDsKICBibGFoID0gVFJVRTsKICBpZiAoIWRidXNfZ19wcm94eV9jYWxsIChwcm94eSwgIkdldFN0cnMiLCAmYW1wO2Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCBibGFoLAoJCQkgIEdfVFlQRV9JTlZBTElELAogICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9TVFJWLCAmYW1wO3N0cnMsCgkJCSAgR19UWVBFX0lOVkFMSUQpKQogICAgewogICAgICAvKiBIYW5kbGUgZXJyb3IgKi8KICAgIH0KICAgZm9yIChzdHJzX3AgPSBzdHJzOyAqc3Ryc19wOyBzdHJzX3ArKykKICAgICBwcmludGYgKCJnb3Qgc3RyaW5nOiBcIiVzXCIiLCAqc3Ryc19wKTsKICAgZ19zdHJmcmVldiAoc3Rycyk7CjwvcHJlPjxwPgoJPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iU2VuZGluZyBhIHZhcmlhbnQiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImdsaWItc2VuZGluZy12YXJpYW50Ij48L2E+U2VuZGluZyBhIHZhcmlhbnQ8L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgo8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogIEdWYWx1ZSB2YWwgPSB7MCwgfTsKCiAgZ192YWx1ZV9pbml0ICgmYW1wO3ZhbCwgR19UWVBFX1NUUklORyk7CiAgZ192YWx1ZV9zZXRfc3RyaW5nICgmYW1wO3ZhbCwgImhlbGxvIHdvcmxkIik7CiAgCiAgZXJyb3IgPSBOVUxMOwogIGlmICghZGJ1c19nX3Byb3h5X2NhbGwgKHByb3h5LCAiU2VuZFZhcmlhbnQiLCAmYW1wO2Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9WQUxVRSwgJmFtcDt2YWwsIEdfVFlQRV9JTlZBTElELAoJCQkgIEdfVFlQRV9JTlZBTElEKSkKICAgIHsKICAgICAgLyogSGFuZGxlIGVycm9yICovCiAgICB9CiAgZ19hc3NlcnQgKHJldCA9PSAyKTsKICBnX3ZhbHVlX3Vuc2V0ICgmYW1wO3ZhbCk7CjwvcHJlPjxwPgoJPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iUmVjZWl2aW5nIGEgdmFyaWFudCI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iZ2xpYi1yZWNlaXZpbmctdmFyaWFudCI+PC9hPlJlY2VpdmluZyBhIHZhcmlhbnQ8L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgo8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogIEdWYWx1ZSB2YWwgPSB7MCwgfTsKCiAgZXJyb3IgPSBOVUxMOwogIGlmICghZGJ1c19nX3Byb3h5X2NhbGwgKHByb3h5LCAiR2V0VmFyaWFudCIsICZhbXA7ZXJyb3IsIEdfVFlQRV9JTlZBTElELAogICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9WQUxVRSwgJmFtcDt2YWwsIEdfVFlQRV9JTlZBTElEKSkKICAgIHsKICAgICAgLyogSGFuZGxlIGVycm9yICovCiAgICB9CiAgaWYgKEdfVkFMVUVfVFlQRSAoJmFtcDt2YWwpID09IEdfVFlQRV9TVFJJTkcpCiAgICBwcmludGYgKCIlc1xuIiwgZ192YWx1ZV9nZXRfc3RyaW5nICgmYW1wO3ZhbCkpOwogIGVsc2UgaWYgKEdfVkFMVUVfVFlQRSAoJmFtcDt2YWwpID09IEdfVFlQRV9JTlQpCiAgICBwcmludGYgKCIlZFxuIiwgZ192YWx1ZV9nZXRfaW50ICgmYW1wO3ZhbCkpOwogIGVsc2UKICAgIC4uLgogIGdfdmFsdWVfdW5zZXQgKCZhbXA7dmFsKTsKPC9wcmU+PHA+Cgk8L3A+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSJHZW5lcmF0ZWQgQmluZGluZ3MiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImdsaWItZ2VuZXJhdGVkLWJpbmRpbmdzIj48L2E+R2VuZXJhdGVkIEJpbmRpbmdzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgICBCeSB1c2luZyB0aGUgSW50cm9zcGVjdGlvbiBYTUwgZmlsZXMsIGNvbnZlbmllbnQgY2xpZW50LXNpZGUgYmluZGluZ3MKICAgICAgICBjYW4gYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIHRvIGVhc2UgdGhlIHVzZSBvZiBhIHJlbW90ZSBEQnVzIG9iamVjdC4KICAgICAgPC9wPjxwPgogICAgICAgIEhlcmUgaXMgYSBzYW1wbGUgWE1MIGZpbGUgd2hpY2ggZGVzY3JpYmVzIGFuIG9iamVjdCB0aGF0IGV4cG9zZXMKICAgICAgICBvbmUgbWV0aG9kLCBuYW1lZCA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TWFueUFyZ3M8L2NvZGU+LgogICAgICAgIDwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CiZsdDs/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/Jmd0OwombHQ7bm9kZSBuYW1lPSIvY29tL2V4YW1wbGUvTXlPYmplY3QiJmd0OwogICZsdDtpbnRlcmZhY2UgbmFtZT0iY29tLmV4YW1wbGUuTXlPYmplY3QiJmd0OwogICAgJmx0O21ldGhvZCBuYW1lPSJNYW55QXJncyImZ3Q7CiAgICAgICZsdDthcmcgdHlwZT0idSIgbmFtZT0ieCIgZGlyZWN0aW9uPSJpbiIgLyZndDsKICAgICAgJmx0O2FyZyB0eXBlPSJzIiBuYW1lPSJzdHIiIGRpcmVjdGlvbj0iaW4iIC8mZ3Q7CiAgICAgICZsdDthcmcgdHlwZT0iZCIgbmFtZT0idHJvdWJsZSIgZGlyZWN0aW9uPSJpbiIgLyZndDsKICAgICAgJmx0O2FyZyB0eXBlPSJkIiBuYW1lPSJkX3JldCIgZGlyZWN0aW9uPSJvdXQiIC8mZ3Q7CiAgICAgICZsdDthcmcgdHlwZT0icyIgbmFtZT0ic3RyX3JldCIgZGlyZWN0aW9uPSJvdXQiIC8mZ3Q7CiAgICAmbHQ7L21ldGhvZCZndDsKICAmbHQ7L2ludGVyZmFjZSZndDsKJmx0Oy9ub2RlJmd0Owo8L3ByZT48cD4KICAgICAgPC9wPjxwPgogICAgICAgIFJ1biA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ZGJ1cy1iaW5kaW5nLXRvb2wgLS1tb2RlPWdsaWItY2xpZW50CiAgICAgICAgICA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5GSUxFTkFNRTwvY29kZT48L2VtPiAmZ3Q7CiAgICAgICAgICA8ZW0gY2xhc3M9InJlcGxhY2VhYmxlIj48Y29kZT5IRUFERVJfTkFNRTwvY29kZT48L2VtPjwvY29kZT4gdG8gZ2VuZXJhdGUgdGhlIGhlYWRlcgogICAgICAgIGZpbGUuICBGb3IgZXhhbXBsZTogPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+ZGJ1cy1iaW5kaW5nLXRvb2wgLS1tb2RlPWdsaWItY2xpZW50CiAgICAgICAgICBteS1vYmplY3QueG1sICZndDsgbXktb2JqZWN0LWJpbmRpbmdzLmg8L3N0cm9uZz48L3NwYW4+LiAgVGhpcyB3aWxsIGdlbmVyYXRlCiAgICAgICAgaW5saW5lIGZ1bmN0aW9ucyB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlczoKICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgovKiBUaGlzIGlzIGEgYmxvY2tpbmcgY2FsbCAqLwpnYm9vbGVhbgpjb21fZXhhbXBsZV9NeU9iamVjdF9tYW55X2FyZ3MgKERCdXNHUHJveHkgKnByb3h5LCBjb25zdCBndWludCBJTl94LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBJTl9zdHIsIGNvbnN0IGdkb3VibGUgSU5fdHJvdWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91YmxlKiBPVVRfZF9yZXQsIGNoYXIgKiogT1VUX3N0cl9yZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqZXJyb3IpOwoKLyogVGhpcyBpcyBhIG5vbi1ibG9ja2luZyBjYWxsICovCkRCdXNHUHJveHlDYWxsKgpjb21fZXhhbXBsZV9NeU9iamVjdF9tYW55X2FyZ3NfYXN5bmMgKERCdXNHUHJveHkgKnByb3h5LCBjb25zdCBndWludCBJTl94LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBJTl9zdHIsIGNvbnN0IGdkb3VibGUgSU5fdHJvdWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21fZXhhbXBsZV9NeU9iamVjdF9tYW55X2FyZ3NfcmVwbHkgY2FsbGJhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcmRhdGEpOwoKLyogVGhpcyBpcyB0aGUgdHlwZWRlZiBmb3IgdGhlIG5vbi1ibG9ja2luZyBjYWxsYmFjayAqLwp0eXBlZGVmIHZvaWQKKCpjb21fZXhhbXBsZV9NeU9iamVjdF9tYW55X2FyZ3NfcmVwbHkpCihEQnVzR1Byb3h5ICpwcm94eSwgZ2RvdWJsZSBPVVRfZF9yZXQsIGNoYXIgKiBPVVRfc3RyX3JldCwKIEdFcnJvciAqZXJyb3IsIGdwb2ludGVyIHVzZXJkYXRhKTsKPC9wcmU+PHA+CiAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGluIGFsbCBmdW5jdGlvbnMgaXMgYSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+REJ1c0dQcm94eQogICAgICAgICo8L2NvZGU+LCB3aGljaCB5b3Ugc2hvdWxkIGNyZWF0ZSB3aXRoIHRoZSB1c3VhbAogICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5kYnVzX2dfcHJveHlfbmV3Xyo8L2NvZGU+IGZ1bmN0aW9ucy4gIEZvbGxvd2luZyB0aGF0IGFyZSB0aGUKICAgICAgICAiaW4iIGFyZ3VtZW50cywgYW5kIHRoZW4gZWl0aGVyIHRoZSAib3V0IiBhcmd1bWVudHMgYW5kIGEKICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R0Vycm9yICo8L2NvZGU+IGZvciB0aGUgc3luY2hyb25vdXMgKGJsb2NraW5nKSBmdW5jdGlvbiwgb3IKICAgICAgICBjYWxsYmFjayBhbmQgdXNlciBkYXRhIGFyZ3VtZW50cyBmb3IgdGhlIGFzeW5jaHJvbm91cyAobm9uLWJsb2NraW5nKQogICAgICAgIGZ1bmN0aW9uLiAgVGhlIGNhbGxiYWNrIGluIHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gcGFzc2VzIHRoZQogICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5EQnVzR1Byb3h5ICo8L2NvZGU+LCB0aGUgcmV0dXJuZWQgIm91dCIgYXJndW1lbnRzLCBhbgogICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HRXJyb3IgKjwvY29kZT4gd2hpY2ggaXMgc2V0IGlmIHRoZXJlIHdhcyBhbiBlcnJvciBvdGhlcndpc2UKICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT4sIGFuZCB0aGUgdXNlciBkYXRhLgogICAgICA8L3A+PHA+CiAgICAgICAgQXMgd2l0aCB0aGUgc2VydmVyLXNpZGUgYmluZGluZ3Mgc3VwcG9ydCAoc2VlIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjZ2xpYi1zZXJ2ZXIiIHRpdGxlPSJHTGliIEFQSTogSW1wbGVtZW50aW5nIE9iamVjdHMiPnRoZSBzZWN0aW9uIGNhbGxlZCAmIzgyMjA7R0xpYiBBUEk6IEltcGxlbWVudGluZyBPYmplY3RzJiM4MjIxOzwvYT4pLCB0aGUgZXhhY3QgYmVoYXZpb3VyIG9mIHRoZSBjbGllbnQtc2lkZQogICAgICAgIGJpbmRpbmdzIGNhbiBiZSBtYW5pcHVsYXRlZCB1c2luZyAiYW5ub3RhdGlvbnMiLiAgQ3VycmVudGx5IHRoZSBvbmx5CiAgICAgICAgYW5ub3RhdGlvbiB1c2VkIGJ5IHRoZSBjbGllbnQgYmluZGluZ3MgaXMKICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkRCdXMuR0xpYi5Ob1JlcGx5PC9jb2RlPiwgd2hpY2ggc2V0cyB0aGUKICAgICAgICBmbGFnIGluZGljYXRpbmcgdGhhdCB0aGUgY2xpZW50IGlzbid0IGV4cGVjdGluZyBhIHJlcGx5IHRvIHRoZSBtZXRob2QKICAgICAgICBjYWxsLCBzbyBhIHJlcGx5IHNob3VsZG4ndCBiZSBzZW50LiAgVGhpcyBpcyBvZnRlbiB1c2VkIHRvIHNwZWVkIHVwCiAgICAgICAgcmFwaWQgbWV0aG9kIGNhbGxzIHdoZXJlIHRoZXJlIGFyZSBubyAib3V0IiBhcmd1bWVudHMsIGFuZCBub3Qga25vd2luZwogICAgICAgIGlmIHRoZSBtZXRob2Qgc3VjY2VlZGVkIGlzIGFuIGFjY2VwdGFibGUgY29tcHJvbWlzZSB0byBoYWxmIHRoZSB0cmFmZmljCiAgICAgICAgb24gdGhlIGJ1cy4KICAgICAgPC9wPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iR0xpYiBBUEk6IEltcGxlbWVudGluZyBPYmplY3RzIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9ImdsaWItc2VydmVyIj48L2E+R0xpYiBBUEk6IEltcGxlbWVudGluZyBPYmplY3RzPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgQXQgdGhlIG1vbWVudCwgdG8gZXhwb3NlIGEgR09iamVjdCB2aWEgRC1CdXMsIHlvdSBtdXN0CiAgICAgIHdyaXRlIFhNTCBieSBoYW5kIHdoaWNoIGRlc2NyaWJlcyB0aGUgbWV0aG9kcyBleHBvcnRlZAogICAgICBieSB0aGUgb2JqZWN0LiAgSW4gdGhlIGZ1dHVyZSwgdGhpcyBtYW51YWwgc3RlcCB3aWxsCiAgICAgIGJlIG9idmlhdGVkIGJ5IHRoZSB1cGNvbWluZyBHTGliIGludHJvc3BlY3Rpb24gc3VwcG9ydC4KICAgIDwvcD48cD4KICAgICAgSGVyZSBpcyBhIHNhbXBsZSBYTUwgZmlsZSB3aGljaCBkZXNjcmliZXMgYW4gb2JqZWN0IHRoYXQgZXhwb3NlcwogICAgICBvbmUgbWV0aG9kLCBuYW1lZCA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TWFueUFyZ3M8L2NvZGU+Lgo8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgombHQ7P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPyZndDsKCiZsdDtub2RlIG5hbWU9Ii9jb20vZXhhbXBsZS9NeU9iamVjdCImZ3Q7CgogICZsdDtpbnRlcmZhY2UgbmFtZT0iY29tLmV4YW1wbGUuTXlPYmplY3QiJmd0OwogICAgJmx0O2Fubm90YXRpb24gbmFtZT0ib3JnLmZyZWVkZXNrdG9wLkRCdXMuR0xpYi5DU3ltYm9sIiB2YWx1ZT0ibXlfb2JqZWN0Ii8mZ3Q7CiAgICAmbHQ7bWV0aG9kIG5hbWU9Ik1hbnlBcmdzIiZndDsKICAgICAgJmx0OyEtLSBUaGlzIGlzIG9wdGlvbmFsLCBhbmQgaW4gdGhpcyBjYXNlIGlzIHJlZHVudW5kYW50IC0tJmd0OwogICAgICAmbHQ7YW5ub3RhdGlvbiBuYW1lPSJvcmcuZnJlZWRlc2t0b3AuREJ1cy5HTGliLkNTeW1ib2wiIHZhbHVlPSJteV9vYmplY3RfbWFueV9hcmdzIi8mZ3Q7CiAgICAgICZsdDthcmcgdHlwZT0idSIgbmFtZT0ieCIgZGlyZWN0aW9uPSJpbiIgLyZndDsKICAgICAgJmx0O2FyZyB0eXBlPSJzIiBuYW1lPSJzdHIiIGRpcmVjdGlvbj0iaW4iIC8mZ3Q7CiAgICAgICZsdDthcmcgdHlwZT0iZCIgbmFtZT0idHJvdWJsZSIgZGlyZWN0aW9uPSJpbiIgLyZndDsKICAgICAgJmx0O2FyZyB0eXBlPSJkIiBuYW1lPSJkX3JldCIgZGlyZWN0aW9uPSJvdXQiIC8mZ3Q7CiAgICAgICZsdDthcmcgdHlwZT0icyIgbmFtZT0ic3RyX3JldCIgZGlyZWN0aW9uPSJvdXQiIC8mZ3Q7CiAgICAmbHQ7L21ldGhvZCZndDsKICAmbHQ7L2ludGVyZmFjZSZndDsKJmx0Oy9ub2RlJmd0Owo8L3ByZT48cD4KICAgIDwvcD48cD4KICAgICAgVGhpcyBYTUwgaXMgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZSBELUJ1cyBpbnRyb3NwZWN0aW9uIFhNTAogICAgICBmb3JtYXQuIEV4Y2VwdCB3ZSBtdXN0IGluY2x1ZGUgYW4gImFubm90YXRpb24iIHdoaWNoIGdpdmUgdGhlIEMKICAgICAgc3ltYm9scyBjb3JyZXNwb25kaW5nIHRvIHRoZSBvYmplY3QgaW1wbGVtZW50YXRpb24gcHJlZml4CiAgICAgICg8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+bXlfb2JqZWN0PC9jb2RlPikuICBJbiBhZGRpdGlvbiwgaWYgcGFydGljdWxhcgogICAgICBtZXRob2RzIHN5bWJvbCBuYW1lcyBkZXZpYXRlIGZyb20gQyBjb252ZW50aW9uCiAgICAgIChpLmUuIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5NYW55QXJnczwvY29kZT4gLSZndDsKICAgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm1hbnlfYXJnczwvY29kZT4pLCB5b3UgbWF5IHNwZWNpZnkgYW4gYW5ub3RhdGlvbgogICAgICBnaXZpbmcgdGhlIEMgc3ltYm9sLgogICAgPC9wPjxwPgogICAgICBPbmNlIHlvdSBoYXZlIHdyaXR0ZW4gdGhpcyBYTUwsIHJ1biA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ZGJ1cy1iaW5kaW5nLXRvb2wgLS1tb2RlPWdsaWItc2VydmVyIDxlbSBjbGFzcz0icmVwbGFjZWFibGUiPjxjb2RlPkZJTEVOQU1FPC9jb2RlPjwvZW0+ICZndDsgPGVtIGNsYXNzPSJyZXBsYWNlYWJsZSI+PGNvZGU+SEVBREVSX05BTUU8L2NvZGU+PC9lbT4uPC9jb2RlPiB0bwogICAgICBnZW5lcmF0ZSBhIGhlYWRlciBmaWxlLiAgRm9yIGV4YW1wbGU6IDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPmRidXMtYmluZGluZy10b29sIC0tbW9kZT1nbGliLXNlcnZlciBteS1vYmplY3QueG1sICZndDsgbXktb2JqZWN0LWdsdWUuaDwvc3Ryb25nPjwvc3Bhbj4uCiAgICA8L3A+PHA+CiAgICAgIE5leHQsIGluY2x1ZGUgdGhlIGdlbmVyYXRlZCBoZWFkZXIgaW4geW91ciBwcm9ncmFtLCBhbmQgaW52b2tlCiAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5kYnVzX2dfb2JqZWN0X2NsYXNzX2luc3RhbGxfaW5mbzwvY29kZT4gaW4gdGhlIGNsYXNzCiAgICAgIGluaXRpYWxpemVyLCBwYXNzaW5nIHRoZSBvYmplY3QgY2xhc3MgYW5kICJvYmplY3QgaW5mbyIgaW5jbHVkZWQgaW4gdGhlCiAgICAgIGhlYWRlci4gIEZvciBleGFtcGxlOgogICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgoJZGJ1c19nX29iamVjdF90eXBlX2luc3RhbGxfaW5mbyAoQ09NX0ZPT19UWVBFX01ZX09CSkVDVCwgJmFtcDtjb21fZm9vX215X29iamVjdF9pbmZvKTsKICAgICAgPC9wcmU+PHA+CiAgICAgIFRoaXMgc2hvdWxkIGJlIGRvbmUgZXhhY3RseSBvbmNlIHBlciBvYmplY3QgY2xhc3MuCiAgICA8L3A+PHA+CiAgICAgIFRvIGFjdHVhbGx5IGltcGxlbWVudCB0aGUgbWV0aG9kLCBqdXN0IGRlZmluZSBhIEMgZnVuY3Rpb24gbmFtZWQgZS5nLgogICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+bXlfb2JqZWN0X21hbnlfYXJnczwvY29kZT4gaW4gdGhlIHNhbWUgZmlsZSBhcyB0aGUgaW5mbwogICAgICBoZWFkZXIgaXMgaW5jbHVkZWQuICBBdCB0aGUgbW9tZW50LCBpdCBpcyByZXF1aXJlZCB0aGF0IHRoaXMgZnVuY3Rpb24KICAgICAgY29uZm9ybSB0byB0aGUgZm9sbG93aW5nIHJ1bGVzOgogICAgICA8L3A+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CgkgICAgVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUgb2YgdHlwZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Z2Jvb2xlYW48L2NvZGU+OwoJICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPiBvbiBzdWNjZXNzLCBhbmQgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPgoJICAgIG90aGVyd2lzZS4KCSAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CgkgICAgVGhlIGZpcnN0IHBhcmFtZXRlciBpcyBhIHBvaW50ZXIgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIG9iamVjdC4KCSAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CgkgICAgRm9sbG93aW5nIHRoZSBvYmplY3QgaW5zdGFuY2UgcG9pbnRlciBhcmUgdGhlIG1ldGhvZAoJICAgIGlucHV0IHZhbHVlcy4KCSAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CgkgICAgRm9sbG93aW5nIHRoZSBpbnB1dCB2YWx1ZXMgYXJlIHBvaW50ZXJzIHRvIHJldHVybiB2YWx1ZXMuCgkgIDwvcD48L2xpPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgoJICAgIFRoZSBmaW5hbCBwYXJhbWV0ZXIgbXVzdCBiZSBhIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HRXJyb3IgKio8L2NvZGU+LgoJICAgIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT4gZm9yIGFuCgkgICAgZXJyb3IsIHRoZSBlcnJvciBwYXJhbWV0ZXIgbXVzdCBiZSBpbml0YWxpemVkIHdpdGgKCSAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Z19zZXRfZXJyb3I8L2NvZGU+LgoJICA8L3A+PC9saT48L3VsPjwvZGl2PjxwPgogICAgPC9wPjxwPgogICAgICBGaW5hbGx5LCB5b3UgY2FuIGV4cG9ydCBhbiBvYmplY3QgdXNpbmcgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmRidXNfZ19jb25uZWN0aW9uX3JlZ2lzdGVyX2dfb2JqZWN0PC9jb2RlPi4gIEZvciBleGFtcGxlOgogICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgoJICBkYnVzX2dfY29ubmVjdGlvbl9yZWdpc3Rlcl9nX29iamVjdCAoY29ubmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL2NvbS9mb28vTXlPYmplY3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaik7CiAgICAgIDwvcHJlPjxwPgogICAgPC9wPjxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iU2VydmVyLXNpZGUgQW5ub3RhdGlvbnMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImdsaWItYW5ub3RhdGlvbnMiPjwvYT5TZXJ2ZXItc2lkZSBBbm5vdGF0aW9uczwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgICAgVGhlcmUgYXJlIHNldmVyYWwgYW5ub3RhdGlvbnMgdGhhdCBhcmUgdXNlZCB3aGVuIGdlbmVyYXRpbmcgdGhlCiAgICAgICAgc2VydmVyLXNpZGUgYmluZGluZ3MuICBUaGUgbW9zdCBjb21tb24gYW5ub3RhdGlvbiBpcwogICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5HTGliLkNTeW1ib2w8L2NvZGU+IGJ1dCB0aGVyZSBhcmUgb3RoZXIKICAgICAgICBhbm5vdGF0aW9ucyB3aGljaCBhcmUgb2Z0ZW4gdXNlZnVsLgogICAgICAgIDwvcD48ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjxkbD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcmcuZnJlZWRlc2t0b3AuREJ1cy5HTGliLkNTeW1ib2w8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgogICAgICAgICAgICAgICAgVGhpcyBhbm5vdGF0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgQyBzeW1ib2wgbmFtZXMgZm9yCiAgICAgICAgICAgICAgICB0aGUgdmFyaW91cyB0eXBlcyAoaW50ZXJmYWNlLCBtZXRob2QsIGV0YyksIGlmIGl0IGRpZmZlcnMgZnJvbSB0aGUKICAgICAgICAgICAgICAgIG5hbWUgREJ1cyBnZW5lcmF0ZXMuCiAgICAgICAgICAgICAgPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkRCdXMuR0xpYi5Bc3luYzwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+CiAgICAgICAgICAgICAgICBUaGlzIGFubm90YXRpb24gbWFya3MgdGhlIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBhcyBhbgogICAgICAgICAgICAgICAgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLCB3aGljaCBkb2Vzbid0IHJldHVybiBhIHJlc3BvbnNlIHN0cmFpZ2h0CiAgICAgICAgICAgICAgICBhd2F5IGJ1dCB3aWxsIHNlbmQgdGhlIHJlc3BvbnNlIGF0IHNvbWUgbGF0ZXIgcG9pbnQgdG8gY29tcGxldGUKICAgICAgICAgICAgICAgIHRoZSBjYWxsLiAgVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCBub24tYmxvY2tpbmcgc2VydmljZXMgd2hlcmUKICAgICAgICAgICAgICAgIG1ldGhvZCBjYWxscyBjYW4gdGFrZSB0aW1lLgogICAgICAgICAgICAgIDwvcD48cD4KICAgICAgICAgICAgICAgIFdoZW4gYSBtZXRob2QgaXMgYXN5bmNocm9ub3VzLCB0aGUgZnVuY3Rpb24gcHJvdG90eXBlIGlzCiAgICAgICAgICAgICAgICBkaWZmZXJlbnQuIEl0IGlzIHJlcXVpcmVkIHRoYXQgdGhlIGZ1bmN0aW9uIGNvbmZvcm0gdG8gdGhlCiAgICAgICAgICAgICAgICBmb2xsb3dpbmcgcnVsZXM6CiAgICAgICAgICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1ZSBvZiB0eXBlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5nYm9vbGVhbjwvY29kZT47CiAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT4gb24gc3VjY2VzcywgYW5kIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT4KICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZS4gVE9ETzogdGhlIHJldHVybiB2YWx1ZSBpcyBjdXJyZW50bHkgaWdub3JlZC4KICAgICAgICAgICAgICAgICAgICA8L3A+PC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KICAgICAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgYSBwb2ludGVyIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBvYmplY3QuCiAgICAgICAgICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgdGhlIG9iamVjdCBpbnN0YW5jZSBwb2ludGVyIGFyZSB0aGUgbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgICBpbnB1dCB2YWx1ZXMuCiAgICAgICAgICAgICAgICAgICAgPC9wPjwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CiAgICAgICAgICAgICAgICAgICAgICBUaGUgZmluYWwgcGFyYW1ldGVyIG11c3QgYmUgYQogICAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRCdXNHTWV0aG9kSW52b2NhdGlvbiAqPC9jb2RlPi4gIFRoaXMgaXMgdXNlZAogICAgICAgICAgICAgICAgICAgICAgd2hlbiBzZW5kaW5nIHRoZSByZXNwb25zZSBtZXNzYWdlIGJhY2sgdG8gdGhlIGNsaWVudCwgYnkKICAgICAgICAgICAgICAgICAgICAgIGNhbGxpbmcgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmRidXNfZ19tZXRob2RfcmV0dXJuPC9jb2RlPiBvcgogICAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmRidXNfZ19tZXRob2RfcmV0dXJuX2Vycm9yPC9jb2RlPi4KICAgICAgICAgICAgICAgICAgICA8L3A+PC9saT48L3VsPjwvZGl2PjxwPgogICAgICAgICAgICAgIDwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPm9yZy5mcmVlZGVza3RvcC5EQnVzLkdMaWIuQ29uc3Q8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPlRoaXMgYXR0cmlidXRlIGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8gIm91dCIKICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Jmx0O2FyZyZndDs8L2NvZGU+IG5vZGVzLCBhbmQgc3BlY2lmaWVzIHRoYXQgdGhlCiAgICAgICAgICAgICAgcGFyYW1ldGVyIGlzbid0IGJlaW5nIGNvcGllZCB3aGVuIHJldHVybmVkLiAgRm9yIGV4YW1wbGUsIHRoaXMKICAgICAgICAgICAgICB0dXJucyBhICdzJyBhcmd1bWVudCBmcm9tIGEgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmNoYXIgKio8L2NvZGU+IHRvIGEKICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Y29uc3QgY2hhciAqKjwvY29kZT4sIGFuZCByZXN1bHRzIGluIHRoZSBhcmd1bWVudCBub3QKICAgICAgICAgICAgICBiZWluZyBmcmVlZCBieSBEQnVzIGFmdGVyIHRoZSBtZXNzYWdlIGlzIHNlbnQuCiAgICAgICAgICAgICAgPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3JnLmZyZWVkZXNrdG9wLkRCdXMuR0xpYi5SZXR1cm5WYWw8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPgogICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgY2FuIG9ubHkgYmUgYXBwbGllZCB0byAib3V0IgogICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiZsdDthcmcmZ3Q7PC9jb2RlPiBub2RlcywgYW5kIGFsdGVycyB0aGUgZXhwZWN0ZWQKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNpZ25hdHVyZS4gIEl0IGN1cnJlbnRseSBjYW4gYmUgc2V0IHRvIHR3byB2YWx1ZXM6CiAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+IiI8L2NvZGU+IG9yIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iZXJyb3IiPC9jb2RlPi4gIFRoZQogICAgICAgICAgICAgICAgYXJndW1lbnQgbWFya2VkIHdpdGggdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHJldHVybmVkIHZpYSBhCiAgICAgICAgICAgICAgICBwb2ludGVyIGFyZ3VtZW50LCBidXQgYnkgdGhlIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlLiAgSWYgdGhlCiAgICAgICAgICAgICAgICBhdHRyaWJ1dGUncyB2YWx1ZSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdFcnJvcgogICAgICAgICAgICAgICAgKjwvY29kZT4gYXJndW1lbnQgaXMgYWxzbyBvbWl0dGVkIHNvIHRoZXJlIGlzIG5vIHN0YW5kYXJkIHdheQogICAgICAgICAgICAgICAgdG8gcmV0dXJuIGFuIGVycm9yIHZhbHVlLiAgVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBmb3IgaW50ZXJmYWNpbmcKICAgICAgICAgICAgICAgIHdpdGggZXhpc3RpbmcgY29kZSwgYXMgaXQgaXMgcG9zc2libGUgdG8gbWF0Y2ggZXhpc3RpbmcgQVBJcy4KICAgICAgICAgICAgICAgIElmIHRoZSBhdHRyaWJ1dGUncyB2YWx1ZSBpcyA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImVycm9yIjwvY29kZT4sIHRoZW4gdGhlCiAgICAgICAgICAgICAgICBmaW5hbCBhcmd1bWVudCBpcyBhIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HRXJyb3IgKjwvY29kZT4gYXMgdXN1YWwuCiAgICAgICAgICAgICAgPC9wPjxwPgogICAgICAgICAgICAgICAgU29tZSBleGFtcGxlcyB0byBkZW1vbnN0cmF0ZSB0aGUgdXNhZ2UuIFRoaXMgaW50cm9zcGVjdGlvbiBYTUw6CiAgICAgICAgICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgombHQ7bWV0aG9kIG5hbWU9IkluY3JlbWVudCImZ3Q7CiAgJmx0O2FyZyB0eXBlPSJ1IiBuYW1lPSJ4IiAvJmd0OwogICZsdDthcmcgdHlwZT0idSIgZGlyZWN0aW9uPSJvdXQiIC8mZ3Q7CiZsdDsvbWV0aG9kJmd0OwogICAgICAgICAgICAgICAgPC9wcmU+PHA+CiAgICAgICAgICAgICAgICBFeHBlY3RzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gZGVjbGFyYXRpb246CiAgICAgICAgICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgpnYm9vbGVhbgpteV9vYmplY3RfaW5jcmVtZW50IChNeU9iamVjdCAqb2JqLCBnaW50MzIgeCwgZ2ludDMyICpyZXQsIEdFcnJvciAqKmVycm9yKTsKICAgICAgICAgICAgICAgIDwvcHJlPjxwPgogICAgICAgICAgICAgIDwvcD48cD4KICAgICAgICAgICAgICAgIFRoaXMgaW50cm9zcGVjdGlvbiBYTUw6CiAgICAgICAgICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgombHQ7bWV0aG9kIG5hbWU9IkluY3JlbWVudFJldHZhbCImZ3Q7CiAgJmx0O2FyZyB0eXBlPSJ1IiBuYW1lPSJ4IiAvJmd0OwogICZsdDthcmcgdHlwZT0idSIgZGlyZWN0aW9uPSJvdXQiICZndDsKICAgICZsdDthbm5vdGF0aW9uIG5hbWU9Im9yZy5mcmVlZGVza3RvcC5EQnVzLkdMaWIuUmV0dXJuVmFsIiB2YWx1ZT0iIi8mZ3Q7CiAgJmx0Oy9hcmcmZ3Q7CiZsdDsvbWV0aG9kJmd0OwogICAgICAgICAgICAgICAgPC9wcmU+PHA+CiAgICAgICAgICAgICAgICBFeHBlY3RzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gZGVjbGFyYXRpb246CiAgICAgICAgICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgpnaW50MzIKbXlfb2JqZWN0X2luY3JlbWVudF9yZXR2YWwgKE15T2JqZWN0ICpvYmosIGdpbnQzMiB4KQogICAgICAgICAgICAgICAgPC9wcmU+PHA+CiAgICAgICAgICAgICAgPC9wPjxwPgogICAgICAgICAgICAgICAgVGhpcyBpbnRyb3NwZWN0aW9uIFhNTDoKICAgICAgICAgICAgICAgIDwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CiZsdDttZXRob2QgbmFtZT0iSW5jcmVtZW50UmV0dmFsRXJyb3IiJmd0OwogICZsdDthcmcgdHlwZT0idSIgbmFtZT0ieCIgLyZndDsKICAmbHQ7YXJnIHR5cGU9InUiIGRpcmVjdGlvbj0ib3V0IiAmZ3Q7CiAgICAmbHQ7YW5ub3RhdGlvbiBuYW1lPSJvcmcuZnJlZWRlc2t0b3AuREJ1cy5HTGliLlJldHVyblZhbCIgdmFsdWU9ImVycm9yIi8mZ3Q7CiAgJmx0Oy9hcmcmZ3Q7CiZsdDsvbWV0aG9kJmd0OwogICAgICAgICAgICAgICAgPC9wcmU+PHA+CiAgICAgICAgICAgICAgICBFeHBlY3RzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gZGVjbGFyYXRpb246CiAgICAgICAgICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgpnaW50MzIKbXlfb2JqZWN0X2luY3JlbWVudF9yZXR2YWxfZXJyb3IgKE15T2JqZWN0ICpvYmosIGdpbnQzMiB4LCBHRXJyb3IgKiplcnJvcikKICAgICAgICAgICAgICAgIDwvcHJlPjxwPgogICAgICAgICAgICAgIDwvcD48L2RkPjwvZGw+PC9kaXY+PHA+CiAgICAgIDwvcD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IlB5dGhvbiBBUEkiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0icHl0aG9uLWNsaWVudCI+PC9hPlB5dGhvbiBBUEk8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICAgICBUaGUgUHl0aG9uIEFQSSwgZGJ1cy1weXRob24sIGlzIG5vdyBkb2N1bWVudGVkIHNlcGFyYXRlbHkgaW4KICAgICAgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmcvZG9jL2RidXMtcHl0aG9uL2RvYy90dXRvcmlhbC5odG1sIiB0YXJnZXQ9Il90b3AiPnRoZSBkYnVzLXB5dGhvbiB0dXRvcmlhbDwvYT4gKGFsc28gYXZhaWxhYmxlIGluIGRvYy90dXRvcmlhbC50eHQsCiAgICAgIGFuZCBkb2MvdHV0b3JpYWwuaHRtbCBpZiBidWlsdCB3aXRoIHB5dGhvbi1kb2N1dGlscywgaW4gdGhlIGRidXMtcHl0aG9uCiAgICAgIHNvdXJjZSBkaXN0cmlidXRpb24pLgogICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iUXQgQVBJOiBVc2luZyBSZW1vdGUgT2JqZWN0cyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJxdC1jbGllbnQiPjwvYT5RdCBBUEk6IFVzaW5nIFJlbW90ZSBPYmplY3RzPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD4KICAgICAgCiAgICAgIFRoZSBRdCBiaW5kaW5ncyBhcmUgbm90IHlldCBkb2N1bWVudGVkLgoKICAgIDwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IlF0IEFQSTogSW1wbGVtZW50aW5nIE9iamVjdHMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0icXQtc2VydmVyIj48L2E+UXQgQVBJOiBJbXBsZW1lbnRpbmcgT2JqZWN0czwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICAgIFRoZSBRdCBiaW5kaW5ncyBhcmUgbm90IHlldCBkb2N1bWVudGVkLgogICAgPC9wPjwvZGl2PjwvZGl2PjwvYm9keT48L2h0bWw+Cg==