PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PjwhRE9DVFlQRSBkb2N1bWVudCBQVUJMSUMgIi0vL0FQQUNIRS8vRFREIERvY3VtZW50YXRpb24gVjEuMy8vRU4iICJkb2N1bWVudC12MTMuZHRkIj4KPGRvY3VtZW50IHhtbG5zOmkxOG49Imh0dHA6Ly9hcGFjaGUub3JnL2NvY29vbi9pMThuLzIuMSI+PGhlYWRlcj48dGl0bGU+SGlzdG9yeSBvZiBDaGFuZ2VzIDwvdGl0bGU+PC9oZWFkZXI+PGJvZHk+PHA+PGxpbmsgaHJlZj0iY2hhbmdlcy5yc3MiPjxpbWcgYWx0PSJSU1MiIHNyYz0iaW1hZ2VzL3Jzcy5wbmciLz48L2xpbms+PC9wPjxzZWN0aW9uIGlkPSJpbnRyb2R1Y3Rpb24iPjx0aXRsZT5JbnRyb2R1Y3Rpb24gYW5kIGV4cGxhbmF0aW9uIG9mIHN5bWJvbHM8L3RpdGxlPjxwPkNoYW5nZXMgYXJlIHNvcnRlZCBieSAidHlwZSIgYW5kIHRoZW4gY2hyb25vbG9naWNhbGx5IHdpdGggdGhlIG1vc3QgcmVjZW50IGF0IHRoZSB0b3AuIFRoZXNlIHN5bWJvbHMgZGVub3RlIHRoZSB2YXJpb3VzIGFjdGlvbiB0eXBlczo8aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPj1hZGQsIDxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+PWZpeCwgPGljb24gYWx0PSJyZW1vdmUiIHNyYz0iaW1hZ2VzL3JlbW92ZS5qcGciLz49cmVtb3ZlLCA8aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPj11cGRhdGU8L3A+PC9zZWN0aW9uPgogICAgPHNlY3Rpb24gaWQ9InZlcnNpb25fMC44LWRldiI+PHRpdGxlPlZlcnNpb24gMC44LWRldiAobm90IHlldCByZWxlYXNlZCk8L3RpdGxlPgogICAgICAgIDxwPlNlZSBlYWNoCiAgICAgICAgICA8bGluayBocmVmPSJzaXRlOnBsdWdpbnMvaW5kZXgiPnBsdWdpbjwvbGluaz4KICAgICAgICAgIGZvciBpdHMgZGV0YWlsZWQgY2hhbmdlcy4KICAgICAgICA8L3A+CiAgICAgIDxzZWN0aW9uPjx0aXRsZT5DaGFuZ2VzIHRvIEJ1aWxkPC90aXRsZT48dWw+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkIG5ldyBidWlsZCB0YXJnZXQgImNsZWFuLWJ1aWxkIi4KICAgICAgIENvbW1pdHRlZCBieSBDRC48L2xpPjwvdWw+PC9zZWN0aW9uPjxzZWN0aW9uPjx0aXRsZT5DaGFuZ2VzIHRvIHRoZSBDb2RlIEJhc2U8L3RpdGxlPjx1bD48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgaW5wdXQgcGx1Z2luICJvZHQiLgogICAgICAgIFVzZSBPcGVuRG9jdW1lbnQgT0RUIGFzIGlucHV0LgogICAgICAgQ29tbWl0dGVkIGJ5IFRTLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkIHN1cHBvcnQgdG8gdGhlIHRpZ3JpcyBza2luIGZvciBoZWFkZXIvbWV0YSB0YWdzIGluIHhkb2MgaW5wdXQgZG9jdW1lbnRzLgogICAgICAgQ29tbWl0dGVkIGJ5IFRTLiBUaGFua3MgdG8gQnJpYW4gRHViZS4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItODQyIj5GT1ItODQyPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZCBkZW1vIHBhZ2UgdG8gc2VlZCBzaXRlIGZvciAiVXNpbmcgU2NhbGFibGUgVmVjdG9yIEdyYXBoaWNzIChTVkcpIi4KICAgICAgIENvbW1pdHRlZCBieSBEQy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBpbnB1dCBwbHVnaW4gInNlcnZlclN0YXR1cyIuCiAgICAgICAgVXNlcyB0aGUgU3RhdHVzR2VuZXJhdG9yIHRvIHNob3cgQ29jb29uJ3Mgb3BlcmF0aW5nIGVudmlyb25tZW50CiAgICAgICAgYW5kIHNob3dzIHRoZSBjb250ZW50cyBvZiB0aGUgY2FjaGUgc3RvcmVzLgogICAgICAgQ29tbWl0dGVkIGJ5IERDLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkZWQgaW5pdGlhbCB3aGl0ZWJvYXJkIGludGVybmFsIHBsdWdpbiAiRGV2VG9vbHMiLgogICAgICAgIEludGVuZGVkIGZvciB2YXJpb3VzIGRldmVsb3BtZW50LXJlbGF0ZWQgdGFza3MsIGUuZy4KICAgICAgICBwdWJsaXNoIGEgcGFnZSB0byB0aGUgbG9jYWwgYnVpbGQgZGlyZWN0b3J5IGZyb20gd2l0aGluICdmb3JyZXN0IHJ1bicuCiAgICAgICBDb21taXR0ZWQgYnkgUkRHLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkZWQgaW5pdGlhbCB3aGl0ZWJvYXJkIG91dHB1dCBwbHVnaW4gIkFuYWtpYSIuCiAgICAgICAgT3V0cHV0IGFzIHRoZSBBbmFraWEgInhkb2MiIGZvcm1hdC4KICAgICAgIENvbW1pdHRlZCBieSBEQy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBvdXRwdXQgcGx1Z2luICJwaHAiIHRvIGludGVncmF0ZSBwaHAgY2FsbHMuCiAgICAgICBDb21taXR0ZWQgYnkgQ0QuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBOZXcgc2tpbmNvbmYgcGFyYW1ldGVyICJkaXNhYmxlLWNvcHlyaWdodC1mb290ZXIiIChkZWZhdWx0PWZhbHNlKQogICAgICAgIHRvIG5vdCBzaG93IHRoZSBjb3B5cmlnaHQgbm90aWNlIGluIGh0bWwgcGFnZSBmb290ZXIuCiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBGb3JyZXN0Q29uZk1vZHVsZSBhcyB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IGNvbmZpZ3VyYXRpb24gc3lzdGVtLgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItNTg4Ij5GT1ItNTg4PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEEgImhhbGYgd2F5IiBzb2x1dGlvbiB0byB1c2luZyBwbHVnaW5zIGluIHBsYWNlLiBOb3RlIHRoYXQgaWYgeW91IG1vZGlmeQogICAgICAgIHlvdXIgcGx1Z2luIGNvZGUgeW91IHdpbGwgc3RpbGwgbmVlZCB0byBkbyAiYW50IGxvY2FsLWRlcGxveSIgdG8gc2VlIHRoZQogICAgICAgIGNoYW5nZXMuIFRoaXMgcGF0Y2ggb25seSBlbnN1cmVzIHRoYXQgdGhlIHBsdWdpbiBpcyBpbnN0YWxsZWQgb24gdGhlCiAgICAgICAgZmlyc3QgcnVuLgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMzg4Ij5GT1ItMzg4PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZCBuZXcgc2l0ZSBzZWVkaW5nIHRhcmdldHMgYW5kIGEgbmV3IGJ1c2luZXNzIHNlZWQgdGFyZ2V0LgogICAgICAgIFRoaXMgYWxsb3dzIGZvciBpbnRlcmFjdGl2ZSBjcmVhdGlvbiBvZiBzZWVkIHNpdGVzIC0gZXhpc3RpbmcKICAgICAgICAnZm9ycmVzdCBzZWVkJyBiZWhhdmlvdXIgaXMgdW5jaGFuZ2VkIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gJ2ZvcnJlc3Qgc2VlZC1zYW1wbGUnLgogICAgICAgIE5ldyBvbmVzIGFyZSAnZm9ycmVzdCBzZWVkLWJ1c2luZXNzJyBhbmQgJ2ZvcnJlc3Qgc2VlZC1iYXNpYycuCiAgICAgICBDb21taXR0ZWQgYnkgUkRHLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkZWQgbmV3ICJjbGVhbiIgdGFyZ2V0cy4gRG9pbmcgJ2ZvcnJlc3QgY2xlYW4tc2l0ZScgd2lsbCByZW1vdmUKICAgICAgICB0aGUgY29udGVudHMgb2YgdGhlIHByb2plY3QncyBnZW5lcmF0ZWQgZG9jdW1lbnRzIGRpcmVjdG9yeS4KICAgICAgICBEb2luZyAnZm9ycmVzdCBjbGVhbi13b3JrJyB3aWxsIHJlbW92ZSB0aGUgcHJvamVjdCdzIHdvcmsgZGlyZWN0b3JpZXMKICAgICAgICAodXN1YWxseSBidWlsZC90bXAgYW5kIGJ1aWxkL3dlYmFwcCB3aGljaCBpbmNsdWRlIHRoZSBDb2Nvb24gY2FjaGUKICAgICAgICBhbmQgdGhlIENvY29vbiBsb2dzKS4KICAgICAgICBEb2luZyAnZm9ycmVzdCBjbGVhbicgd2lsbCByZW1vdmUgYm90aCBzZWN0aW9ucy4KICAgICAgIENvbW1pdHRlZCBieSBEQy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBpbnRlcm5hbCBwbHVnaW4gIk5vdGVUYWtpbmciLgogICAgICAgIEFkZHMgYSBmb3JtIHRvIGEgcGFnZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGVudGVyIG5vdGVzIHJlbGF0aW5nIHRvIHRoZSBwYWdlLgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIENsYXJpZnkgc29tZSBjb25mdXNpbmcgbm90ZXMgYWJvdXQgc2l0ZS9AaHJlZiBpbiBzZWVkcyB4ZG9jcy9zaXRlLnhtbCBmaWxlcy4KICAgICAgIENvbW1pdHRlZCBieSBEQy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgRmluaXNoIHJlbmFtaW5nIG9mIGZpbGVzIGZvciBhLXRvLWIueHNsIG5hbWluZyBjb252ZW50aW9uLiAKICAgICAgIENvbW1pdHRlZCBieSBERy4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItNjk3Ij5GT1ItNjk3PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZCBhIERldnMgbWVudSB0byB0b29scy9mb3JyZXN0YmFyIHRvIGhlbHAgd2l0aCB0ZXN0aW5nIGludGVybWVkaWF0ZQogICAgICAgIENvY29vbiBwaXBlbGluZXMuCiAgICAgICBDb21taXR0ZWQgYnkgQ0QuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBEZXNjcmliZSB0aGUgCiAgICAgICAgPGxpbmsgaHJlZj0ic2l0ZTpmYXEvYnVpbGRfbXNnX2EiPnN0YXR1cyBtZXNzYWdlczwvbGluaz4KICAgICAgICB0aGF0IGFyZSBpc3N1ZWQgYnkgQ29jb29uIENMSSBkdXJpbmcgcHJvY2Vzc2luZyBvZiBlYWNoIGRvYy4KICAgICAgIENvbW1pdHRlZCBieSBEQy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIFRoZSBicm9rZW4tbGlua3MgZmlsZSBpcyBub3cgY29waWVkIGludG8gdG8gdGhlIHNpdGUgcm9vdCBhcwogICAgICAgICJicm9rZW4tbGlua3MueG1sIiBzbyB0aGF0IHdoZW4gYnVpbGRpbmcgd2l0aCBGb3JyZXN0Ym90CiAgICAgICAgeW91IGNhbiBlYXNpbHkgdmlldyBpdC4KICAgICAgIENvbW1pdHRlZCBieSBSREcuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBSZXZpZXdlZCBhbGwgc2l0ZW1hcHMgdG8gdXNlIGxvY2F0aW9ubWFwIHJlZmVyZW5jZXMgKGxtOikuCiAgICAgICAgQXQgdGhlIHNhbWUgdGltZSB3ZSBjaGFuZ2VkIGZpbGVuYW1lcyBvZiBjb3JlIHN0eWxlc2hlZXRzIHRvIGZvbGxvdyAKICAgICAgICBhIGZpbGVuYW1lIGNvbnZlbnRpb24gKGUuZy4gaHRtbDJkb2N1bWVudC54c2wgPSZndDsgaHRtbC10by1kb2N1bWVudC54c2wpCiAgICAgICAgd2hpY2ggZW5hYmxlcyBhdXRvbWF0ZWQgbG9jYXRpb25tYXAgbWF0Y2hlcy4KICAgICAgICBUaGFua3MgdG8gdGhlIG1hbnkgcGVvcGxlIHdobyB3ZXJlIGludm9sdmVkIHdpdGggYWRkcmVzc2luZyB0aGlzIGlzc3VlLgogICAgICAgIFNlZSB0aGUgY29tbWl0IGxvZ3MgYXNzb2NpYXRlZCB3aXRoIEZPUi0yMDAuCiAgICAgICBDb21taXR0ZWQgYnkgUkRHLiBUaGFua3MgdG8gQ29tbXVuaXR5LiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi0yMDAiPkZPUi0yMDA8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkIG5vdGVzIGFib3V0IG5hbWluZyBjb252ZW50aW9uIGZvciBsb2NhdGlvbm1hcCByZWZlcmVuY2VzLgogICAgICAgIEdhdGhlcmVkIGZyb20gYSBGb3JyZXN0RnJpZGF5IElSQyBzZXNzaW9uICh0aGFua3MgdG8gVGltIFdpbGxpYW1zIGZvciB3cml0aW5nIHRoZW0gdXApLgogICAgICAgIFNlZSA8bGluayBocmVmPSJzaXRlOmxvY2F0aW9ubWFwIj5sb2NhdGlvbm1hcCBkb2NzPC9saW5rPi4KICAgICAgIENvbW1pdHRlZCBieSBSREcuIFRoYW5rcyB0byBDb21tdW5pdHkuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTIwMCI+Rk9SLTIwMDwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgaW5wdXQgcGx1Z2luICJYRG9jIi4KICAgICAgICBGb3JyZXN0IHhkb2MgaW5wdXQgdG8gaW50ZXJuYWwgWEhUTUwyLgogICAgICAgQ29tbWl0dGVkIGJ5IFRXVy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBpbnRlcm5hbCBwbHVnaW4gInhodG1sMiIuIFN0YXJ0ZWQgd29yayBvbiB4aHRtbCBpbiB0aGUgY29yZS4KICAgICAgIENvbW1pdHRlZCBieSBSREcuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGQgQ29jb29uIFZhbGlkYXRpb24gQmxvY2suIFVzZXMgdHJhbnNmb3JtZXJzIHRvIGVuYWJsZSBSRUxBWCBORyB2YWxpZGF0aW9uIGFuZAogICAgICAgIFczQyBYTUwgU2NoZW1hIHZhbGlkYXRpb24gdXNpbmcgSmluZyBhbmQgWGVyY2VzLgogICAgICAgIFNlZSA8bGluayBocmVmPSJzaXRlOnByb2NlZHVyZXMvZm9ycmVzdC1kZXYvZGVidWctdmFsaWRhdGlvbiI+ZG9jdW1lbnRhdGlvbjwvbGluaz4uCiAgICAgICBDb21taXR0ZWQgYnkgREMuIFRoYW5rcyB0byBQaWVyIEZ1bWFnYWxsaS48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBpbnB1dCBwbHVnaW4gImVjcyIuCiAgICAgICAgVXNlIHRoZSByZXNwb25zZXMgZnJvbSBBbWF6b24gd2ViIHNlcnZpY2VzIChFQ1MpIGFzIGlucHV0LgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBpbnB1dCBwbHVnaW4gZm9yIExlbnlhIGludGVncmF0aW9uLgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy4gVGhhbmtzIHRvIEpvYWNoaW0gQnJlaXRzcHJlY2hlci4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItNjYwIj5GT1ItNjYwPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBpbnB1dCBwbHVnaW4gZm9yICJCbG9nIi4KICAgICAgICBVc2UgYW4gWFBhdGhEaXJlY3RvcnkgZ2VuZXJhdG9yIHRvIHB1Ymxpc2ggaW5kaWNlcyBvZiBhcnRpY2xlcy4KICAgICAgIENvbW1pdHRlZCBieSBUV1cuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCB0aGUgYmVnaW5uaW5ncyBvZiBhIHNpdGVtYXAgYW5hbHlzaXMgdG9vbCB0byB0aGUgd2hpdGVib2FyZC4KICAgICAgICBEb2Vzbid0IGRvIG11Y2ggYXQgdGhlIG1vbWVudC4KICAgICAgIENvbW1pdHRlZCBieSBUV1cuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgaW5wdXQgcGx1Z2luIGZvciAiUmVzdW1lIi4KICAgICAgICBVc2UgaW5wdXQgZG9jcyBpbiB4bWxyZXN1bWUgZm9ybWF0LgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBpbnRlcm5hbCBwbHVnaW4gZm9yICJHb29nbGVTaXRlbWFwIi4KICAgICAgICBBY2Nlc3MgYSBsaXN0IG9mIHBhZ2VzIGluICJHb29nbGUgU2l0ZW1hcCIgZm9ybWF0LgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy4gVGhhbmtzIHRvIFJhc2lrIFBhbmRleS4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItNTk3Ij5GT1ItNTk3PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZCBXVFAgMC43IGNvbXBhdGFiaWxpdHkgZm9yIEVjbGlwc2UgcGx1Z2luLgogICAgICAgIENsYXJpZnkgaW5zdGFsbGF0aW9uIG5vdGVzLgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy4gVGhhbmtzIHRvIEFsYW4gQ2hhbmRsZXIuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBVc2UgbG9jYXRpb25tYXAncyBtb3VudGluZyBjYXBhYmlsaXR5IHRvIGFsbG93IHNlbGVjdGl2ZSBwcm9qZWN0IGxvY2F0aW9uIG92ZXJyaWRlcy4KICAgICAgIENvbW1pdHRlZCBieSBUV1cuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGQgbG9jYXRpb25tYXAgc2VsZWN0b3IgYmFzZWQgbW91bnRpbmcgKGFuZCBwcm9qZWN0LWJhc2VkIG1vdW50aW5nKS4KICAgICAgIENvbW1pdHRlZCBieSBUV1cuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGQgbG9jYXRpb25tYXAgbW91bnRpbmcgY2FwYWJpbGl0eS4KICAgICAgIENvbW1pdHRlZCBieSBUV1cuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBhY3Rpb25zIGluIHRoZSBsb2NhdGlvbm1hcC4KICAgICAgIENvbW1pdHRlZCBieSBUUy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIFBsdWdpbnMgY2FuIG5vdyBkZWZpbmUgdGhlaXIgb3duICoueGNvbmYgZmlsZSB0byBhZGQgY29uZmlndXJhdGlvbgogICAgICAgIGluZm9ybWF0aW9uIHRvIGNvY29vbi54Y29uZi4gU2ltcGx5IHBsYWNlIHlvdXIgKi54Y29uZiBmaWxlIGluCiAgICAgICAgUExVR0lOX0hPTUUvY29uZi8qLnhjb25mLiBOb3RlIHRoYXQgY2hhbmdlcyB0byB0aGlzIGNvbmZpZ3VyYXRpb24KICAgICAgICBmaWxlIHdpbGwgbm90IHRha2UgZWZmZWN0IHVudGlsIEZvcnJlc3QgaGFzIGJlZW4gcmVzdGFydGVkLgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBvdXRwdXQgcGx1Z2luIGZvciAidm9pY2UiLgogICAgICAgIFJlYWQgYSBkb2N1bWVudCB1c2luZyBhIHZvaWNlIGVuYWJsZWQgYnJvd3NlciBzdWNoIGFzIE9wZXJhLgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy4gVGhhbmtzIHRvIFRvbSBIQU5BWC4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItNTg5Ij5GT1ItNTg5PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIFN0cmlwIHJlbWFpbmluZyAmbHQ7aTE4bjp0ZXh0Jmd0OyBlbGVtZW50cyB0aGF0IHJlbWFpbiBpZiBpMThuIHByb2Nlc3NpbmcKICAgICAgICBoYXMgYmVlbiBkaXNhYmxlZC4gVGhpcyB3YXMgY2F1c2luZyBpbnZhbGlkIEhUTUwgb3V0cHV0LgogICAgICAgQ29tbWl0dGVkIGJ5IERDLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi01OTIiPkZPUi01OTI8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+IEFkZGVkIGEgc2hlbGwgc2NyaXB0IHRvIAogICAgICAgIGRvIHNvbWUgc3RlcHMgb2YgdGhlIGNvY29vbiB1cGRhdGUgcHJvY2Vzcy4gU3RpbGwgdGhlcmUgYXJlIHNvbWUgc3RlcHMgCiAgICAgICAgdGhhdCBzaG91bGQgcmF0aGVyIGJlIGRvbmUgYnkgYSBzY3JpcHQsIHJhdGhlciB0aGFuIGNvbW1pdHRlciBpbnRlcmFjdGlvbi4gCiAgICAgICAgVXBkYXRlZCB0aGUgcmVhZG1lIHRvIHN0YXRlIHRoYXQgc29tZSBzdGVwcyBjb3VsZCBiZSBkb25lIGJ5IHRoZSAKICAgICAgICBzY3JpcHQuIDxsaW5rIGhyZWY9Imh0dHA6Ly9zdm4uYXBhY2hlLm9yZy92aWV3Y3ZzLmNnaT9yZXY9MjgwNzEwJmFtcDt2aWV3PXJldiI+RGlmZjwvbGluaz4gCiAgICAgICAgIENvbW1pdHRlZCBieSBUUy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIFJlZmFjdG9yZWQgdGhlIHZpZXcgcmVzb2x2ZXIgY29kZSBvZiB0aGUgaW50ZXJuYWwudmlldyBwbHVnaW4uIENyZWF0ZWQgYW4gYWN0aW9uIHRoYXQKICAgICAgICBpcyBkb2luZyB0aGUgc2FtZSBhcyBiZWZvcmUgdGhlIGNvbWJpbmF0aW9uIG9mIHNpdGVtYXAreHNsLiA8YnIvPkFkZGVkIDIgamF2YSBjbGFzc2VzIHRvIHBhY2thZ2UKICAgICAgICBvcmcuYXBhY2hlLmZvcnJlc3QucGx1Z2luLmludGVybmFsLnZpZXcuYWN0aW5nOjxici8+CiAgICAgICAgMS5GYWxsYmFja1Jlc29sdmVyQWN0aW9uLmphdmE8YnIvPjIuRmFsbGJhY2tSZXNvbHZlckhlbHBlci5qYXZhCiAgICAgICBDb21taXR0ZWQgYnkgVFMuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgIFJlbW92ZWQgcHJvamVjdC52aWV3LWRlZmF1bHRWaWV3IHByb3BlcnRpZXMgYW5kIGFkZGVkIHByb2plY3QudGhlbWUtZXh0ZW5zaW9uIGluc3RlYWQuIFRoZSBjb21iaW5hdGlvbgogICAgICAgb2YgcHJvamVjdC50aGVtZS1leHRlbnNpb24gYW5kIHByb2plY3QudGhlbWUgaXMgZXF1YWwgdG8gcHJvamVjdC52aWV3LWRlZmF1bHRWaWV3LgogICAgICAgQ29tbWl0dGVkIGJ5IFRTLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICBBZGRlZCBuZXcgZWxlbWVudHMgdG8gb3JnLmFwYWNoZS5mb3JyZXN0LmNvbmYuRm9ycmVzdENvbmZNb2R1bGUgbmFtZT0iZGVmYXVsdHMiOgogICAgICAgPGJyLz4gdmlldy10aGVtZXM8YnIvPnRoZW1lLWV4dDxici8+dGhlbWU8YnIvPgogICAgICAgQ29tbWl0dGVkIGJ5IFRTLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICBSZW1vdmVkICJkZWZhdWx0VmlldyIgYW5kIGFkZGVkIG5ldyBlbGVtZW50IHRvIG9yZy5hcGFjaGUuZm9ycmVzdC5jb25mLkZvcnJlc3RDb25mTW9kdWxlIG5hbWU9InByb2plY3QiOgogICAgICAgPGJyLz50aGVtZS1leHQKICAgICAgIENvbW1pdHRlZCBieSBUUy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgbm9ybWFsaXplLXNwYWNlKCkgdGhlIGZvcnJlc3Q6cHJvcGVydGllcyBiZWZvcmUgcGFyc2luZyB0aGVtIHRvIHRoZSBwaXBlCiAgICAgICBDb21taXR0ZWQgYnkgVFMuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBVc2Ugc2V0cyBvZiBzeW1ib2xzIGFzIHhtbCBlbnRpdGllcyBmb3IgY2hhcmFjdGVyIHJlcGxhY2VtZW50LgogICAgICAgIFRoZXJlIGlzIGEgY29yZSBzZXQgYW5kIGVhY2ggcHJvamVjdCBjYW4gZGVmaW5lIGEgc2V0LgogICAgICAgIEZvciBleGFtcGxlLCB1c2UgIjxjb2RlPiZhbXA7bXlwLXQ7PC9jb2RlPiIgdG8gcmVwcmVzZW50IHRoZQogICAgICAgIHByb2plY3QgbmFtZSB0b2dldGhlciB3aXRoIHRyYWRlbWFyayBzeW1ib2wKICAgICAgICAiTXkgUHJvamVjdCBOYW1lJiM4NDgyOyIuCiAgICAgICAgU2VlIDxsaW5rIGhyZWY9InNpdGU6ZmFxL3htbC1lbnRpdGllcyI+RkFRPC9saW5rPi4KICAgICAgIENvbW1pdHRlZCBieSBEQy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIFBsdWdpbnMgY2FuIG5vdyBkZWZpbmUgdGhlaXIgb3duICoueGNvbmYgZmlsZSB0byBhZGQgY29uZmlndXJhdGlvbiAKICAgICAgICBpbmZvcm1hdGlvbiB0byBjb2Nvb24ueGNvbmYuIFNpbXBseSBwbGFjZSB5b3VyICoueGNvbmYgZmlsZSBpbiAKICAgICAgICBQTFVHSU5fSE9NRS9jb25mLyoueGNvbmYuIE5vdGUgdGhhdCBjaGFuZ2VzIHRvIHRoaXMgY29uZmlndXJhdGlvbiAKICAgICAgICBmaWxlIHdpbGwgbm90IHRha2UgZWZmZWN0IHVudGlsIEZvcnJlc3QgaGFzIGJlZW4gcmVzdGFydGVkLiAgCiAgICAgICBDb21taXR0ZWQgYnkgUkRHLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgTmV3IHNpdGUgc2VlZGluZyBtZWNoYW5pc20uIFlvdSBjYW4gbm93IHJ1biAiZm9ycmVzdCBzZWVkIiBhcyBiZWZvcmUsIG9yIHlvdSBjYW4gcnVuCiAgICAgICAgImZvcnJlc3Qgc2VlZC1idXNpbmVzcyIuIFRoZSBsYXRlciB3aWxsIGFzayBhIG51bWJlciBvZiBxdWVzdGlvbnMgYWJvdXQgdGhlIHNpdGUKICAgICAgICBiZWluZyBzZWVkZWQgKGJ1c2luZXNzIG5hbWUsIGRlc2NyaXB0aW9uIGV0Yy4pIGFuZCB3aWxsIGNyZWF0ZSBhIHZlcnkgc2ltcGxlIHNpdGUKICAgICAgICBkZXNpZ25lZCBmb3IgYnVzaW5lc3MuIFRvIHF1aWNrbHkgc2VlIHRoZSByZXN1bHRzLCBpLmUuIGF2b2lkCiAgICAgICAgYW5zd2VyaW5nIHRoZSBxdWVzdGlvbnMsIGRvICJmb3JyZXN0IHNlZWRUZXN0QnVzaW5lc3MiLiBNb3JlIHNlZWQgc2l0ZXMgd2lsbCBiZSBhZGRlZAogICAgICAgIGluIHRoZSBmdXR1cmUuCiAgICAgICBDb21taXR0ZWQgYnkgUkRHLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgYSBsb2NhdGlvbm1hcC4gVGhpcyBlbmFibGVzIGNvbnRlbnQgdG8gYmUgcmV0cmlldmVkIGZyb20gYSBsb2NhdGlvbgogICAgICAgIHRoYXQgaXMgZGVmaW5lZCBpbiBhIGxvY2F0aW9ubWFwIGZpbGUuIEEgcHJvamVjdC1iYXNlZCBmaWxlIGNhbiBiZSBsb2NhdGVkIGF0IAogICAgICAgIDxjb2RlPlBST0pFQ1RfSE9NRS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2xvY2F0aW9ubWFwLnhtbDwvY29kZT4gd2hpbGUgY29yZSBsb2NhdGlvbm1hcHMKICAgICAgICBhcmUgYXQgPGNvZGU+JEZPUlJFU1RfSE9NRS9tYWluL3dlYmFwcC9sb2NhdGlvbm1hcC0qLnhtbDwvY29kZT4gZmlsZXMuPGJyLz5UaGUKICAgICAgICBhZHZhbnRhZ2Ugb2YgdGhpcyBpcyB0aGF0IHRoZSBVUkwgc2VlbiBieSB0aGUgdXNlciBuZWVkIGJlYXIgbm8gcmVsYXRpb24gdG8gdGhlIGxvY2F0aW9uCiAgICAgICAgb2YgdGhlIHNvdXJjZSBkb2N1bWVudCwgdGh1cyBGb3JyZXN0IGNhbiBzZXBhcmF0ZSB0aGUgY2xpZW50IFVSTCBzcGFjZSBmcm9tIHRoZSBzb3VyY2UKICAgICAgICBkb2N1bWVudCBVUkwgc3BhY2UuIFRodXMsIHVzaW5nIHRoZSBsb2NhdGlvbm1hcCBpdCBpcyBwb3NzaWJsZSB0byBwdWxsIHRvZ2V0aGVyCiAgICAgICAgZG9jdW1lbnRzIGZyb20gbWFueSBkaWZmZXJlbnQgbG9jYXRpb25zIGludG8gYSBzaW5nbGUgdW5pZm9ybSBzaXRlLjxici8+CiAgICAgICAgCiAgICAgICAgSW4gYWRkaXRpb24sIHNpbmNlIHRoZSB1c2VyIFVSTCBzcGFjZSBpcyBub3cgdW5jb25uZWN0ZWQgdG8gdGhlIHNvdXJjZSBVUkwgc3BhY2UKICAgICAgICBpdCBpcyBwb3NzaWJsZSB0byBtb3ZlIHNvdXJjZSBkb2N1bWVudHMgd2l0aG91dCBicmVha2luZyBhbnkgZXhpc3RpbmcgdXNlciBsaW5rcy48YnIvPgogICAgICAgIAogICAgICAgIFNlZSA8bGluayBocmVmPSJzaXRlOmxvY2F0aW9ubWFwIj5sb2NhdGlvbm1hcCBkb2NzPC9saW5rPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICBUaGFua3MgdG8gVW5pY28gSG9tbWVzIGZvciB0aGUgb3JpZ2luYWwgbG9jYXRpb25tYXAgaW1wbGVtZW50YXRpb24gd2hpY2gKICAgICAgICB3YXMgYWRkZWQgdG8gRm9ycmVzdCBsb25nIGFnby4KICAgICAgIENvbW1pdHRlZCBieSBSREcuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBXaGVuIHVzaW5nIGh0bWwgYXMgc291cmNlLCB0aGUgImEiIGVsZW1lbnRzIHdlcmUgbm90IHJlbmRlcmVkIHByb3Blcmx5IGlmIGJvdGgKICAgICAgICBAaHJlZiBhbmQgQG5hbWUgYXR0cmlidXRlcy4gQSBzaWRlLWVmZmVjdCBvZiB0aGlzIGZpeCBpcyB0aGF0IG5vdyBhbGwgb3RoZXIKICAgICAgICBhdHRyaWJ1dGVzIHN1Y2ggYXMgQHRpdGxlIG9yIEB0YXJnZXQgYXJlIGNvcGllZCBvdmVyLgogICAgICAgIEFsc28gcmVtb3ZlZCB0aGUgYXV0b21hdGVkIGdlbmVyYXRpb24gb2YgQGlkIGF0dHJpYnV0ZXMgZnJvbSBAbmFtZSBhdHRyaWJ1dGVzLAogICAgICAgIHdoaWNoIGNhbiBsZWFkIHRvIGludmFsaWQgSURzIGFuZCBvdGhlciBjb25mdXNpb24uCiAgICAgICBDb21taXR0ZWQgYnkgREMuIFRoYW5rcyB0byBKaW0gRGl4b24uIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTQ0OCI+Rk9SLTQ0ODwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJyZW1vdmUiIHNyYz0iaW1hZ2VzL3JlbW92ZS5qcGciLz4KICAgICAgICBSZW1vdmUgeGNvbmYgc3VwcG9ydCBmb3IgcGx1Z2lucy4gQ29jb29uIGhhcyBtb3ZlZCBhd2F5IGZyb20gdGhpcwogICAgICAgIFhDb25mVG9vbFRhc2sgeHBhdGNoIHRlY2huaXF1ZS4KICAgICAgICA8bGluayBocmVmPSJodHRwOi8vc3ZuLmFwYWNoZS5vcmcvdmlld3ZjP3Jldj0zNTQ3NDkmYW1wO3ZpZXc9cmV2Ij5EaWZmPC9saW5rPiAKICAgICAgIENvbW1pdHRlZCBieSBSREcuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4gRk9SLTkyNCBSZWFkZGluZyB0aGUgbG9hZGluZyBmcm9tCiAgICAgICAgKGRlZmF1bHQtKWZvcnJlc3QucHJvcGVydGllcyB3aGljaCBnb3QgcmVtb3ZlZCBpbiByNDMwNTg4IHdoZW4gY2xvc2luZyBGT1ItOTE2LgogICAgICAgIFRoYW5rcyBNYXJ0aW4gU3RvY2toYW1tZXIgZm9yIHBvaW50aW5nIGl0IG91dCwgcHJvdmlkaW5nIHVzIHdpdGggYSBwYXRjaCBhbmQgZm9yIHlvdXIKICAgICAgICBjb250cmlidXRpb24uICBDb21taXR0ZWQgYnkgVFMuIFRoYW5rcyB0byBNYXJ0aW4gU3RvY2toYW1tZXIuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTkyNCI+Rk9SLTkyNDwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICA8c3Ryb25nPkZPUi05MjA8L3N0cm9uZz4gTWVyZ2luZyB0aGUgZGVmYXVsdHMgYW5kIHByb2plY3QgbW9kdWxlcyB0byB0aGUgbmV3CiAgICAgICAgcHJvcGVydGllcyBtb2R1bGUuIFlvdSBjYW4gdXNlIGl0IGxpa2Uge3Byb3BlcnRpZXM6Zm9ycmVzdC5ob21lfSwgcGxlYXNlIHJlZmVyIHRvCiAgICAgICAgdGhlCiAgICAgICAgPGxpbmsgaHJlZj0ic2l0ZTp1cGdyYWRpbmdfMDgiPnVwZGF0ZSBkb2N1bWVudGF0aW9uPC9saW5rPiBob3cgdG8KICAgICAgICBjaGFuZ2UgeW91ciB7ZGVmYXVsdHM6Kn0ge3Byb2plY3Q6Kn0gYW5kIHtmb3JyZXN0Oip9LiBDb21taXR0ZWQgYnkgVFMuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4gRk9SLTgwMCAtIG1ha2UKICAgICAgICBmb3JyZXN0LnByb3BlcnRpZXMueG1sIChhcyBhZ2dyZWdhdGlvbiBvZiBhbGwgcHJvcGVydGllcykgYXZpYWJsZSB2aWEgY29jb29uOi8vLgogICAgICAgIFRoZSBsYXN0IHJlbWFpbmluZyBpc3N1ZSB3YXMgaW1wbGVtZW50aW5nIHRoZSBJdGVyYXRvciBnZXRBdHRyaWJ1dGVOYW1lcyBpbiB0aGUKICAgICAgICBGb3JyZXN0Q29uZk1vZHVsZS4gVG8gc2VlIGFsbCBhdmlhYmxlIHByb3BlcnRpZXMgYWRkCiAgICAgICAgb3JnLmFwYWNoZS5mb3JyZXN0LnBsdWdpbi5vdXRwdXQuaW5wdXRNb2R1bGUgYW5kIHJlcXVlc3QKICAgICAgICBjb2Nvb246Ly9tb2R1bGUucHJvcGVydGllcy5wcm9wZXJ0aWVzLiBDb21taXR0ZWQgYnkgVFMuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTgwMCI+Rk9SLTgwMDwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4gRk9SLTkxNiAtIGFkZGluZyBzaXRlLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlcwogICAgICAgIEFwcGx5aW5nIHBhdGNoZXMgZnJvbSBNYXRoaWV1IENoYW1wbG9uLiBUaGFua3MgTWF0aGlldSBmb3IgeW91ciBjb250cmlidXRpb24uCiAgICAgICAgIENvbW1pdHRlZCBieSBUUy4gVGhhbmtzIHRvIE1hdGhpZXUgQ2hhbXBsb24uIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTkxNiI+Rk9SLTkxNjwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4gVXBkYXRlZCB0aGUgCiAgICAgICAgZm9ycmVzdC1jb3JlLnhjb25mIGFuZCBkZWNsYXJlZCB0aGUgY29yZSBjb21wb25lbnRzIHRoYXQgYXJlIG5lZWRlZCAKICAgICAgICBmb3IgZmxvdy4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgZmxvdyBpbiBmb3JyZXN0LiBDb21taXR0ZWQgYnkgVFMuIFRoYW5rcyB0byBEYXZpZCBDcm9zc2xleS48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIEVuYWJsZWQgaTE4biBieSBkZWZhdWx0IGluIGZyZXNoLXNpdGU6IGFzIHRoZSBkZWZhdWx0IGkxOG4gY29uZmlnIG5vdyByZXF1aXJlcwogICAgICAgIGFuIGV4cGxpY2l0IGxvY2FsZSBzcGVjaWZpY2F0aW9uICh1c2luZyBhbiBVUkwgcGFyYW1ldGVyIGZvciBleGFtcGxlKSwgdGhpcyBzaG91bGRuJ3QKICAgICAgICBhZmZlY3QgcGVvcGxlIHdobyBkbyBub3QgdXNlIGkxOG4uCiAgICAgICBDb21taXR0ZWQgYnkgQkQuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBDb21wbGV0ZWQgdGhlIGRlIGFuZCBmciB0cmFuc2xhdGlvbnMgb2YgdGhlIGZyZXNoLXNpdGUsIGFkZGVkIGZyIGFuZCBkZQogICAgICAgIHZlcnNpb25zIG9mIHRoZSBpbmRleCBwYWdlIGFzIGV4YW1wbGVzIG9mIGxhbmd1YWdlIHN3aXRjaGluZy4KICAgICAgIENvbW1pdHRlZCBieSBCRC48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIE1vdmVkIExvY2FsZUFjdGlvbiBhbmQgTG9jYWxlTWF0Y2hlciBjb25maWd1cmF0aW9ucyB0byBtYWluIHNpdGVtYXAsIGFuZCBjaGFuZ2VkCiAgICAgICAgSTE4blRyYW5zZm9ybWVyIHVzZSB0byB0YWtlIGxvY2FsZSBpbmZvIGZyb20gZW5jbG9zaW5nIExvY2FsZUFjdGlvbiBldmVyeXdoZXJlLgogICAgICAgQ29tbWl0dGVkIGJ5IEJELiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi04ODciPkZPUi04ODc8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgVXBkYXRlZCB0byBBcGFjaGUtQW50LTEuNi41IHJlbGVhc2UsIGpzY2gtMC4xLjI4LCBhcGFjaGUtamFrYXJ0YS1jb21tb25zLW5ldC0xLjQuMQogICAgICAgQ29tbWl0dGVkIGJ5IERDLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgVXNlIGxvY2F0aW9ubWFwIHRvIHJlc29sdmUgaTE4biBjYXRhbG9ndWVzLgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy4gVGhhbmtzIHRvIEJyaWFuIER1YmUuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTY5MCI+Rk9SLTY5MDwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBVcGRhdGVkIHhlcmNlcyB0byAyLjguMCwgeG1sLWFwaXMgdG8gMS4zLjAzLCBsb2c0aiB0byAxLjIuMTMgYW5kIGVoY2FjaGUgdG8gMS4yLgogICAgICAgQ29tbWl0dGVkIGJ5IEFHLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgSG93dG8tdjIwIG5vdyBwcm9wZXJseSBoYW5kbGVzIGEvQGNsYXNzPWZvcmsgZXRjLiBhdHRyaWJ1dGUgdG8gZW5hYmxlCiAgICAgICAgbGlua3MgdG8gb3BlbiBpbiBhIG5ldyBicm93c2VyIHdpbmRvdy4KICAgICAgIENvbW1pdHRlZCBieSBEQy4gVGhhbmtzIHRvIFN0ZXZlIE1hc292ZXIuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTgyNCI+Rk9SLTgyNDwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBGaXhlZCBpbmNvbnNpc3RlbnQgbGluZS1lbmRpbmdzIGluIGNvbW1lbnRzIG9mIGdlbmVyYXRlZCBodG1sLgogICAgICAgQ29tbWl0dGVkIGJ5IERDLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi00OTIiPkZPUi00OTI8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgQWRkZWQgaW5pdGlhbCB3aGl0ZWJvYXJkIGlucHV0IHBsdWdpbiAiY2l0YXRpb25zIi4gVGhhbmtzIHRvIEdhdmluIGZvcgogICAgICAgIHR1cm5pbmcgdGhlIGNvbnRyaWJ1dGlvbiBpbnRvIGEgcGx1Z2luLgogICAgICAgIFVzZSBpbnB1dCBkb2NzIHRoYXQgYXJlIGxpc3RzIG9mIGNpdGF0aW9ucy4KICAgICAgIENvbW1pdHRlZCBieSBEQy4gVGhhbmtzIHRvIFJvc3MgR2FyZGxlci4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItNzU2Ij5GT1ItNzU2PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBpbnB1dCBwbHVnaW4gImdsb3NzYXJ5Ii4gVGhhbmtzIHRvIEdhdmluIGZvcgogICAgICAgIHR1cm5pbmcgdGhlIGNvbnRyaWJ1dGlvbiBpbnRvIGEgcGx1Z2luLgogICAgICAgIEVuYWJsZSBnbG9zc2FyeSBpbnB1dDogYSBsaXN0IG9mIHRlY2huaWNhbCB0ZXJtcyBhbmQgZGVmaW5pdGlvbnMuCiAgICAgICBDb21taXR0ZWQgYnkgREMuIFRoYW5rcyB0byBSb3NzIEdhcmRsZXIuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTc1NSI+Rk9SLTc1NTwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBBYmxlIHRvIDxsaW5rIGhyZWY9InNpdGU6cGx1Z2lucy91c2luZyI+ZGVjbGFyZTwvbGluaz4KICAgICAgICBhZGRpdGlvbmFsIHNvdXJjZXMgZm9yIHBsdWdpbnMuIEFzc2lzdHMgd2l0aCBkZXZlbG9wbWVudCBvZiBwcml2YXRlCiAgICAgICAgYW5kIGxvY2FsIHByb2plY3Qtc3BlY2lmaWMgcGx1Z2lucy4KICAgICAgIENvbW1pdHRlZCBieSBDRC48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIEZvcnJlc3Rib3QgZGVwbG95LnNjcCB3b3Jrc3RhZ2Ugbm93IHVzZXMga2V5ZmlsZS9wYXNzcGhyYXNlIGluIHByZWZlcmVuY2UsCiAgICAgICAgdGhlbiBmYWxsYmFjayB0byByZW1vdGUgcGFzc3dvcmQuCiAgICAgICBDb21taXR0ZWQgYnkgREMuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTgxOCI+Rk9SLTgxODwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBSZXRyaWV2ZSBpMThuIGNhdGFsb2d1ZSBmcm9tIHdoYXRldmVyIHNraW5zIGRpcmVjdG9yeSBpcyBpbiB1c2UuCiAgICAgICBDb21taXR0ZWQgYnkgUkRHLiBUaGFua3MgdG8gVG9yc3RlbiBTdG9scG1hbm4uIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTgwNiI+Rk9SLTgwNjwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBBZGQgZXhwbGFuYXRpb24gb2YgcHJvY2Vzc2luZyB0byB0aGUgcGF0aHV0aWxzIHN0eWxlc2hlZXQuCiAgICAgICBDb21taXR0ZWQgYnkgRlNPLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgRW5hYmxlIG9wdGlvbmFsIHByaW50aW5nIG9mIGltYWdlIGFsdCB0ZXh0IGluIFBERnMuCiAgICAgICBDb21taXR0ZWQgYnkgUkRHLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgVXBkYXRlIHRoZSBGb3JyZXN0IHBsdWdpbiBmb3IgdGhlIFhNTG1pbmQgWE1MIEVkaXRvciBhdCAKICAgICAgICA8bGluayBocmVmPSJzaXRlOnRvb2xzL3h4ZSI+dG9vbHMveHhlPC9saW5rPgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy4gVGhhbmtzIHRvIFNqdXIgTi4gTW9zaGFnZW4uIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTc3OSI+Rk9SLTc3OTwvbGluaz4sIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItNzgwIj5GT1ItNzgwPC9saW5rPiwgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi03MjIiPkZPUi03MjI8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgUGx1Z2luOiBQaG90b0dhbGxlcnkuCiAgICAgICAgQXV0b21hdGVkIHRoZSBpbWFnZSB2YXJpYW50IChlLmcuIHRodW1iLCBzbWFsbCkgY3JlYXRpb24uIE5vdGUgdGhhdCB0aGlzCiAgICAgICAgaXMgbm90CiAgICAgICAgYmFja3dhcmQtY29tcGF0aWJsZSwgc28gZXhpc3RpbmcgdXNlcnMgbmVlZCB0byBtb3ZlIG9yaWdpbmFsIGltYWdlcwogICAgICAgIGZyb20gdGhlIG9sZCAiYmlnIiBkaXJlY3RvcnkgYW5kIHJlbW92ZSB0aGUgInByZXZpZXciIGFuZCAic21hbGwiIGRpcmVjdG9yaWVzLgogICAgICAgQ29tbWl0dGVkIGJ5IFRXVy48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFVwZ3JhZGUgb3VyIHBhY2thZ2VkIENvY29vbiB0byBjb2Nvb24tMi4yLjAtZGV2LXIzNTE5OTAgYW5kIGVuaGFuY2VkIHRoZSBub3RlcwogICAgICAgIGFib3V0IGhvdyB0byB1cGdyYWRlLgogICAgICAgQ29tbWl0dGVkIGJ5IERDLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgTmV3IHNraW5jb25mIHBhcmFtZXRlciAiZGlzYWJsZS1jb3B5cmlnaHQtZm9vdGVyIiAoZGVmYXVsdD1mYWxzZSkKICAgICAgICB0byBub3Qgc2hvdyB0aGUgY29weXJpZ2h0IG5vdGljZSBpbiBodG1sIHBhZ2UgZm9vdGVyLgogICAgICAgQ29tbWl0dGVkIGJ5IERDLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgRW5zdXJlIHRoYXQgY29udGVudCBleGlzdHMgYmVmb3JlIGZvcnJlc3Qgc3RhcnRzLgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIEFkZCBhIG5ldyB4c2x0IHRlbXBsYXRlICJhZGQuY2xhc3MiIHRvIHByb3Blcmx5IGFwcGVuZCBleHRyYSBjbGFzcyBhdHRyaWJ1dGVzCiAgICAgICAgdG8gbm90ZXx3YXJuaW5nfGZpeG1lfGNvZGUgZWxlbWVudHMgdG8gZW5hYmxlIGV4dHJhIENTUyBjbGFzc2lmaWNhdGlvbi4KICAgICAgICA8bGluayBocmVmPSJodHRwOi8vc3ZuLmFwYWNoZS5vcmcvdmlld3ZjP3Jldj0zNTgzMjUmYW1wO3ZpZXc9cmV2Ij5EaWZmPC9saW5rPiAKICAgICAgIENvbW1pdHRlZCBieSBKUy48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFJldmlldyBhbmQgc3luY2hyb25pc2Ugb3VyIENvY29vbiBjb25maWd1cmF0aW9uLgogICAgICAgQ29tbWl0dGVkIGJ5IERDLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgUmVkdWNlIHNvbWUgbG9nIG1lc3NhZ2VzIGR1cGxpY2F0aW9uLiBUaWR5IHVwIHRoZSBsb2cgY29uZmlndXJhdGlvbiBmaWxlLgogICAgICAgIEFkZCBhIGNvbW1lbnRlZCBleGFtcGxlIG9mIGFkZGluZyBjb250ZXh0dWFsIGluZm8gdG8gb3RoZXIgbG9ncy4KICAgICAgIENvbW1pdHRlZCBieSBEQy48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIEltcHJvdmUgc3ltbGluayByZXNvbHV0aW9uIGFuZCBmaXggaW5jb3JyZWN0IGFyZ3VtZW50IHBhc3NpbmcKICAgICAgICBpbiB0aGUgYmluL2ZvcnJlc3Qgc2hlbGwgc2NyaXB0LgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy4gVGhhbmtzIHRvIFJpY2hhcmQgQ2FsbWJhY2guIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTc3MSI+Rk9SLTc3MTwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBFbmFibGUgdXNlIG9mIGNvbW1vbiBjaGFyYWN0ZXIgZW50aXRpZXMgaW4gc2tpbmNvbmYueG1sLAogICAgICAgIGUuZy4gYWNjZW50ZWQgY2hhcmFjdGVycyBhbmQgdHJhZGVtYXJrIHN5bWJvbHMuCiAgICAgICBDb21taXR0ZWQgYnkgREMuIFRoYW5rcyB0byBQYXVsIERldmluZS48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgICAgICBDaGFuZ2VkIGhhbmRsaW5nIG9mIHRhYmxlIGVsZW1lbnRzIHdpdGggY2xhc3MtYXR0cmlidXRlcyBpbiBzb3VyY2U6CiAgICAgICAgICAgIFRhYmxlIGVsZW1lbnRzIHcvbyBjbGFzcyBlbGVtZW50cyB3aWxsIHJlY2VpdmUgc3RhbmRhcmQgRm9ycmVzdCBzdHlsaW5nIGxpa2UgYmVmb3JlCiAgICAgICAgICAgIChjZWxscGFkZGluZz0iNCIgY2VsbHNwYWNpbmc9IjEiIGNsYXNzPSJGb3JyZXN0VGFibGUiKQogICAgICAgICAgICB3aGlsZSBlbGVtZW50cyB0aGF0IGhhdmUgY2xhc3Mgd2lsbCBwYXNzIHVuY2hhbmdlZC4KICAgICAgICAgICAgTm90ZTogVG8gc3R5bGUgdGFibGVzIHdpdGggY2xhc3MgZWxlbWVudHMgbGlrZSBiZWZvcmUgeW91IGhhdmUgdG8gYWRkIHN0eWxpbmcgY29kZQogICAgICAgICAgICBpbiB0aGUgZXh0cmEtY3NzLXNlY3Rpb24gb2Ygc2tpbmNvbmZpZy4KICAgICAgICAgQ29tbWl0dGVkIGJ5IEZTTy48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgICAgICBGaXhlZCBwcm9ibGVtcyB3aXRoIGRpc2FwcGVhcmluZyBvZiBpZC1hdHRyaWJ1dGVzIGluIGltZy1lbGVtZW50IGFuZCBzZXZlcmFsIG90aGVycy4gICAgCiAgICAgICAgIENvbW1pdHRlZCBieSBGU08uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4gQWRkZWQgCiAgICAgICAgTG9jYXRpb25tYXBTb3VyY2VGYWN0b3J5LmphdmEuIFdpdGggdGhpcyBpdCBpcyBwb3NzaWJsZSB0byByZXF1ZXN0IAogICAgICAgIGxvY2F0aW9ubWFwIHNvdXJjZSB2aWEgbG06Ly9teS1sb2NhdGlvbiB3aGljaCBtYWtlcyBpdCBlYXNpZXIgdG8gdXNlIGl0IAogICAgICAgIHdpdGhvdXQgY29udGFjdGluZyBhIGlucHV0IG1vZHVsZSBpbiBqYXZhIGFuZCBhbnkgb3RoZXIgZmlsZXMuIDxsaW5rIGhyZWY9Imh0dHA6Ly9zdm4uYXBhY2hlLm9yZy92aWV3Y3ZzLmNnaT9yZXY9MzU1NDc0JmFtcDt2aWV3PXJldiI+RGlmZjwvbGluaz4gCiAgICAgICBDb21taXR0ZWQgYnkgVFMuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4gQWRkZWQgdmFyaWFibGUuaGVscGVyLnhzbCAKICAgICAgICB0byB0aGUgY29yZSwgc2hvdWxkIGJlIGVuaGFuY2VkIGJ5IG1hdGNoaW5nIHRoZSAKICAgICAgICBkZWZhdWx0LmZvcnJlc3QucHJvcGVydGllcy54bWwuIFRoaXMgeHNsIHdpbGwgcHJvZHVjZSBhbGwgdmFyaWFibGVzIHdlIAogICAgICAgIHVzZSBpbiBza2lucyB0byB0aGUgbmV3IHByb3BlcnR5IHN5c3RlbS4gTW92ZWQgcGF0aHV0aWxzLnhzbCB0byB0aGUgCiAgICAgICAgY29yZSBmcm9tIHRoZSBza2lucy4gPGxpbmsgaHJlZj0iaHR0cDovL3N2bi5hcGFjaGUub3JnL3ZpZXdjdnMuY2dpP3Jldj0zNTYyNDAmYW1wO3ZpZXc9cmV2Ij5EaWZmPC9saW5rPiAKICAgICAgIENvbW1pdHRlZCBieSBUUy48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPiBBZGRlZCBoZWxwZXIgCiAgICAgICAgc3R5bGVzaGVldHMgdG8gbG9jYXRpb25tYXAgYW5kIGNvcmUgc3R5bGVzaGVldHMuIGdlbmVyYXRlSWQueHNsICh3aWxsIAogICAgICAgIGdlbmVyYXRlIGEgdW5pcXVlIGlkKSBhbmQgcmVwbGFjZUNoYXJzSW5TdHJpbmcueHNsICh3aWxsIGZpbmQgYW5kIAogICAgICAgIHJlcGxhY2UgY2hhcmFjdGVyIGluIGEgc3RyaW5nKSA8bGluayBocmVmPSJodHRwOi8vc3ZuLmFwYWNoZS5vcmcvdmlld2N2cy5jZ2k/cmV2PTM1ODE1MCZhbXA7dmlldz1yZXYiPkRpZmY8L2xpbms+IAogICAgICAgICBDb21taXR0ZWQgYnkgVFMuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBGaXhlZCBhbmQgZW5oYW5jZWQgdGhlIEZvcnJlc3QgcGx1Z2luIGZvciB0aGUgWE1MbWluZCBYTUwgRWRpdG9yIGF0CiAgICAgICAgPGxpbmsgaHJlZj0ic2l0ZTp0b29scy94eGUiPnRvb2xzL3h4ZTwvbGluaz4KICAgICAgIENvbW1pdHRlZCBieSBEQy4gVGhhbmtzIHRvIFNqdXIgTi4gTW9zaGFnZW4uIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTU4MSI+Rk9SLTU4MTwvbGluaz4sIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItNzIwIj5GT1ItNzIwPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFVwZGF0ZWQgdG9vbHMvZm9ycmVzdGJhciB0byBiZSBjb21wYXRpYmxlIHdpdGggcmVjZW50IHZlcnNpb25zIG9mIEZpcmVmb3guCiAgICAgICBDb21taXR0ZWQgYnkgREMuIFRoYW5rcyB0byBBZGRpc29uIEJlcnJ5LiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi0xODAiPkZPUi0xODA8L2xpbms+LCA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTcxNiI+Rk9SLTcxNjwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBDb3JyZWN0bHkgaGFuZGxlIHczYy14bWwtc2NoZW1hIHJ1bGVzIGluIAogICAgICAgIDxsaW5rIGhyZWY9InNpdGU6Y2FwIj5Tb3VyY2VUeXBlQWN0aW9uPC9saW5rPi4KICAgICAgIENvbW1pdHRlZCBieSBSREcuIFRoYW5rcyB0byBKb3NpYXMgVGhvZW55LiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi03MTAiPkZPUi03MTA8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgVXBncmFkZSBvdXIgcGFja2FnZWQgQ29jb29uIHRvIGNvY29vbi0yLjIuMC1kZXYtcjI3OTk4NyBhbmQgZW5oYW5jZWQgdGhlIG5vdGVzCiAgICAgICAgYWJvdXQgaG93IHRvIHVwZ3JhZGUuCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+UmVtb3ZlZCAKICAgICAgICB0aGUgcHJvamVjdC50aGVtZS1kaXIgcHJvcGVydHkgYnkgYWRkaW5nIGl0IHRvIHRoZSBsbSBsaWtlIHN1Z2dlc3QgYnkgCiAgICAgICAgUm9zcy4gPGxpbmsgaHJlZj0iaHR0cDovL3N2bi5hcGFjaGUub3JnL3ZpZXdjdnMuY2dpP3Jldj0zMjg4MzkmYW1wO3ZpZXc9cmV2Ij5EaWZmPC9saW5rPiAKICAgICAgICAgQ29tbWl0dGVkIGJ5IFRTLiBUaGFua3MgdG8gUm9zcyBHYXJkbGVyLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+IENoYW5nZWQgdGhlICdsb2NhbCAKICAgICAgICBmb3JyZXN0JyBjYXB0aW9uIHRvIGhvc3Q6cG9ydCBmb3JtYXQuIEFkZGVkIGxvY2FsaG9zdCBhcyBvcHRpb24uIGFkZGVkIAogICAgICAgIHN0cnVjdHVyZXIgeG1sIHZpZXcgdG8gZGV2cy4gPGxpbmsgaHJlZj0iaHR0cDovL3N2bi5hcGFjaGUub3JnL3ZpZXdjdnMuY2dpP3Jldj0zMjk0MzEmYW1wO3ZpZXc9cmV2Ij5EaWZmPC9saW5rPiAKICAgICAgICAgQ29tbWl0dGVkIGJ5IFRTLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+QWxsb3dlZCBhcyB3ZWxsIAogICAgICAgIGxvY2FsaG9zdCBhcyBsb2NhbCBhZGRyZXNzIGZvciBqZXR0eSBmb3IgdGhlIGZvcnJlc3RiYXIuIDxsaW5rIGhyZWY9Imh0dHA6Ly9zdm4uYXBhY2hlLm9yZy92aWV3Y3ZzLmNnaT9yZXY9MzI5MTc3JmFtcDt2aWV3PXJldiI+RGlmZjwvbGluaz4gCiAgICAgICAgIENvbW1pdHRlZCBieSBUUy48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFRoZSB4bWwgY29tbWVudHMgZnJvbSBzb3VyY2UgZmlsZXMgd2VyZSBub3QgYmVpbmcgZ2VuZXJhdGVkIHRvIHRoZSBvdXRwdXQuCiAgICAgICBDb21taXR0ZWQgYnkgREcuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTU1NSI+Rk9SLTU1NTwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBBZGQgQ29jb29uIFByb2ZpbGVyIGJsb2NrLiBVc2UgdGhpcyBkdXJpbmcgZGV2ZWxvcG1lbnQgdG8gbGlzdCB0aGUKICAgICAgICB2YXJpb3VzIHNpdGVtYXAgcGlwZWxpbmVzIGFuZCBjb21wb25lbnRzIHRoYXQgYXJlIGJlaW5nIHVzZWQsIGhvdwogICAgICAgIG11Y2ggdGltZSB3YXMgdXNlZCBieSBlYWNoLCB3aGV0aGVyIGVhY2ggY29tcG9uZW50IHVzZXMgdGhlIENvY29vbgogICAgICAgIGNhY2hlLCBhbmQgc2hvdyB0aGUgYWN0dWFsIHhtbCBkYXRhLgogICAgICAgIFNlZSA8bGluayBocmVmPSJzaXRlOnByb2NlZHVyZXMvZm9ycmVzdC1kZXYvZGVidWctY29jb29uLXByb2ZpbGVyIj5kb2N1bWVudGF0aW9uPC9saW5rPi4KICAgICAgICBUaGFua3MgdG8gUm9uIEJsYXNjaGtlIGZvciB0aGUgc3VnZ2VzdGlvbi4KICAgICAgIENvbW1pdHRlZCBieSBEQy4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItNTcyIj5GT1ItNTcyPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFRoZSBobGluayBhbmQgdmxpbmsgY29sb3JzIHdlcmUgbm90IHNldCBjb3JyZWN0bHkgYnkgU2tpbmNvbmZUcmFuc2Zvcm1lci4KICAgICAgIENvbW1pdHRlZCBieSBEQy4gVGhhbmtzIHRvIERhdmUgQnJvc2l1cy4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItNjQ5Ij5GT1ItNjQ5PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFN5bmNocm9uaXNlIHRoZSBhcHBlYXJhbmNlIG9mIHdhcm5pbmcsIGZpeG1lLCBhbmQgbm90ZSBlbGVtZW50cwogICAgICAgIGluIHRoZSBwZWx0IHNraW4uCiAgICAgICBDb21taXR0ZWQgYnkgREMuIFRoYW5rcyB0byBHYXZpbiBNY0RvbmFsZC4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItNjA0Ij5GT1ItNjA0PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIEVuaGFuY2VkIG5vdGVzIGFib3V0IHVzaW5nIHBsdWdpbnMuCiAgICAgICBDb21taXR0ZWQgYnkgUkRHLiBUaGFua3MgdG8gUGhpbGxpcCBFdmVucy48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFN0cmlwIHJlbWFpbmluZyAmbHQ7aTE4bjp0ZXh0Jmd0OyBlbGVtZW50cyB0aGF0IHJlbWFpbiBpZiBpMThuIHByb2Nlc3NpbmcKICAgICAgICBoYXMgYmVlbiBkaXNhYmxlZC4gVGhpcyB3YXMgY2F1c2luZyBpbnZhbGlkIEhUTUwgb3V0cHV0LgogICAgICAgIFRoYW5rcyB0byBhc3Npc3RhbmNlIGZyb20gR2F2aW4gTWNEb25hbGQuCiAgICAgICBDb21taXR0ZWQgYnkgREMuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTU5MiI+Rk9SLTU5MjwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBFbmhhbmNlZCB0aGUgaW5pdGlhbCBFY2xpcHNlIHBsdWdpbiBmb3IgdXNpbmcgRm9ycmVzdCB2aWEgRWNsaXBzZS4KICAgICAgICBUaGlzIHdvcmsgd2FzIGVuYWJsZWQgdmlhIGEgIkdvb2dsZSBTdW1tZXIgb2YgQ29kZSIgcHJvamVjdC4KICAgICAgICBTZWUgPGxpbmsgaHJlZj0ic2l0ZTp0b29scy9lY2xpcHNlIj5kb2NzPC9saW5rPi4KICAgICAgIENvbW1pdHRlZCBieSBSREcuIFRoYW5rcyB0byBBbmlsIFJhbW5hbmFuLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+IEFkZGVkIG5ldyAKICAgICAgICBzZWVkIHRhcmdldHMgc2VlZC1iYXNpYyBhbmQgc2VlZC1zYW1wbGUuIFRoYXQgY2xvc2VzIEZPUi0yNTMuIDxsaW5rIGhyZWY9Imh0dHA6Ly9zdm4uYXBhY2hlLm9yZy92aWV3Y3ZzLmNnaT9yZXY9MjMxMTMwJmFtcDt2aWV3PXJldiI+RGlmZjwvbGluaz4gCiAgICAgICAgIENvbW1pdHRlZCBieSBUUy4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMjUzIj5GT1ItMjUzPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPiBGaXhlZCBzYW1wbGUgCiAgICAgICAgc2l0ZXMgZnJvbSB0aGUgc2VlZFRlc3RCdXNpbmVzcyBGT1ItNjcwOiBmb3JyZXN0IHNlZWRUZXN0QnVzaW5lc3M7IAogICAgICAgIGZvcnJlc3Qgc2l0ZSBmYWlscyByZXN1bWUgZHRkIHZhbGlkYXRpb24gPGxpbmsgaHJlZj0iaHR0cDovL3N2bi5hcGFjaGUub3JnL3ZpZXdjdnMuY2dpP3Jldj0yNzk4OTImYW1wO3ZpZXc9cmV2Ij5EaWZmPC9saW5rPiAKICAgICAgICAgQ29tbWl0dGVkIGJ5IFRTLiBUaGFua3MgdG8ga2V2aW4uIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTY3MCI+Rk9SLTY3MDwvbGluaz4uPC9saT48L3VsPjwvc2VjdGlvbj48c2VjdGlvbj48dGl0bGU+Q2hhbmdlcyB0byBEb2N1bWVudGF0aW9uPC90aXRsZT48dWw+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CjwhLS0gUGxlYXNlIGtlZXAgdGhpcyBhY3Rpb24gYXQgdGhlIHRvcCAtLT4KICAgICAgICBBZGRlZCBkb2N1bWVudCB0byBmYWNpbGl0YXRlCiAgICAgICAgPGxpbmsgaHJlZj0ic2l0ZTp1cGdyYWRpbmdfMDgiPnVwZ3JhZGluZyB0byB2MC44PC9saW5rPgogICAgICAgQ29tbWl0dGVkIGJ5IERDLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkZWQgZG9jIHRvIGV4cGxhaW4KICAgICAgICA8bGluayBocmVmPSJzaXRlOnN0YXR1cy10aGVtZXMiPlNraW5zIGFuZCBEaXNwYXRjaGVyIHN0YXR1czwvbGluaz4uIAogICAgICAgQ29tbWl0dGVkIGJ5IERDLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgTW92ZSBkb2N1bWVudGF0aW9uIGZyb20gdGV4dCBmaWxlIGludG8gaG93dG8KICAgICAgICA8bGluayBocmVmPSJzaXRlOmhvd1RvUmVsZWFzZSI+UmVsZWFzZTwvbGluaz4gZG9jIGFuZCBlbmhhbmNlIGl0LgogICAgICAgQ29tbWl0dGVkIGJ5IEZTTy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIFJlLWFycmFuZ2UgZG9jdW1lbnRhdGlvbiBtZW51cywgYWRkZWQgYmVzdCBwcmFjdGljZSBhbmQgcHJvY2VkdXJlcyBzZWN0aW9ucy4KICAgICAgIENvbW1pdHRlZCBieSBGU08uPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGQgZG9jdW1lbnQgYWJvdXQgcHJvamVjdAogICAgICAgIDxsaW5rIGhyZWY9InNpdGU6cm9sZXMiPnJvbGVzPC9saW5rPi4KICAgICAgIENvbW1pdHRlZCBieSBEQy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZCBpbml0aWFsIDxsaW5rIGhyZWY9InNpdGU6Z2xvc3NhcnkiPmdsb3NzYXJ5PC9saW5rPiB0byBleHBsYWluCiAgICAgICAgc29tZSBGb3JyZXN0IHRlcm1pbm9sb2d5LgogICAgICAgQ29tbWl0dGVkIGJ5IERDLiBUaGFua3MgdG8gR2F2aW4uPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGQgRkFRIGFib3V0IHVzaW5nIG9sZGVyIHZlcnNpb25zIG9mIHNwZWNpZmljIHBsdWdpbnMuCiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBMaW5rIGZyb20gd2hpdGVib2FyZC9mb3JyZXN0ZG9jL1JFQURNRS50eHQgdG8gc29tZSBwYXN0IG1haWwgZGlzY3Vzc2lvbgogICAgICAgIHRvIGVuY291cmFnZSBpdHMgZGV2ZWxvcG1lbnQuIEZvcnJlc3Rkb2MgaXMgYSBKYXZhZG9jLWxpa2UvU291cmNlY29kZS9Eb2N1bWVudGF0aW9uCiAgICAgICAgbWFuYWdlbWVudCBzeXN0ZW0uCiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBOZXcgcGFnZSBmb3IgPGxpbmsgaHJlZj0ic2l0ZTp0aGFua3MiPnRoYW5rczwvbGluaz4uCiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGQgRkFRIGFib3V0IDxsaW5rIGhyZWY9InNpdGU6ZmFxL2pvYnMiPmpvYiBwb3N0aW5nczwvbGluaz4uCiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGQgRkFRIGFib3V0IAogICAgICAgIDxsaW5rIGhyZWY9InNpdGU6ZmFxL2NoZWNrc3VtcyI+RW5hYmxpbmcgQ29jb29uIENoZWNrc3VtPC9saW5rPi4KICAgICAgIENvbW1pdHRlZCBieSBEQy4gVGhhbmtzIHRvIFBhdWwgS3JvbmVud2V0dGVyLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi03NzgiPkZPUi03Nzg8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkIGV4cGxhbmF0aW9uIG9mCiAgICAgICAgPGxpbmsgaHJlZj0ic2l0ZTpwcm9jZWR1cmVzL2ZvcnJlc3QtZGV2L2RlYnVnLXNpdGVtYXAtZXhlYyI+VXNpbmcgQ29jb29uIHNpdGVtYXAgZXhlY3V0aW9uIGxvZ2dlcjwvbGluaz4uCiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGQgRkFRICNjcmF3bGVyIHRvIGV4cGxhaW4gaG93IHRoZSBDb2Nvb24gY3Jhd2xlciBnYXRoZXJzIGxpbmtzLgogICAgICAgQ29tbWl0dGVkIGJ5IERDLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkIG5vdGVzIGFib3V0IGhvdyB0byB1c2UgdGhlIDxsaW5rIGhyZWY9InNpdGU6YnVncyI+SXNzdWUgVHJhY2tlcjwvbGluaz4uCiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz5BZGRlZCBiYXNpYyBpbnN0cnVjdGlvbnMgdG8gCiAgICAgICAgZGVwbG95IGFuZCBpbnN0YWxsIHRoZSBmb3JyZXN0YmFyIGZyb20gdGhlIHNvdXJjZSBhcyByZWFkbWUudHh0PGxpbmsgaHJlZj0iaHR0cDovL3N2bi5hcGFjaGUub3JnL3ZpZXdjdnMuY2dpP3Jldj0zMjg2ODgmYW1wO3ZpZXc9cmV2Ij5EaWZmPC9saW5rPiAKICAgICAgICAgQ29tbWl0dGVkIGJ5IFRTLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgV2Ugbm93IGhhdmUgYSByZWd1bGFyIDI0LWhvdXIgSVJDIHNlc3Npb24gb25jZSBwZXIgbW9udGguIERldmVsb3BlcnMgZ2V0IHRvZ2V0aGVyLgogICAgICAgIFNlZSA8bGluayBocmVmPSJzaXRlOmZvcnJlc3QtZnJpZGF5Ij5Gb3JyZXN0RnJpZGF5PC9saW5rPi4KICAgICAgIENvbW1pdHRlZCBieSBEQy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIERvY3VtZW50aW5nIHNvbWUgb2YgdGhlIGxvY2F0aW9ubWFwIHN5bnRheCBhbmQgbmFtaW5nIGNvbnZlbnRpb25zCiAgICAgICAgYXMgY29tbWVudHMvZXhhbXBsZXMgCiAgICAgICAgdW50aWwgaXQgY2FuIGJlIGRvbmUgbW9yZSBmb3JtYWxseS4KICAgICAgICBTZWUgJ2ZvcnJlc3Qgc2VlZC1zYW1wbGUnIGFuZAogICAgICAgIDxsaW5rIGhyZWY9InNpdGU6bG9jYXRpb25tYXAiPmxvY2F0aW9ubWFwIGRvY3M8L2xpbms+LgogICAgICAgQ29tbWl0dGVkIGJ5IFRXVy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZCBhbgogICAgICAgICI8bGluayBocmVmPSJodHRwOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2ZvcnJlc3QvZXZlbnRzLyI+ZXZlbnRzPC9saW5rPiIKICAgICAgICBzZWN0aW9uIHRvIG91ciBTVk4gdG8gaG9sZCBtYXRlcmlhbHMgZm9yIGdhdGhlcmluZ3Mgb2YgZGV2ZWxvcGVycyB0aGF0CiAgICAgICAgaGF2ZSBiZWVuIGhlbGQgb3V0c2lkZSB0aGUgbWFpbGluZyBsaXN0IGNvbW11bml0eS4KICAgICAgIENvbW1pdHRlZCBieSBEQy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZCBhIG5ldyBkb2N1bWVudAogICAgICAgIDxsaW5rIGhyZWY9InNpdGU6cHJvY2VkdXJlcy9mb3JyZXN0LWRldiI+SG93IGJlIGEgRm9ycmVzdCBkZXZlbG9wZXI8L2xpbms+LgogICAgICAgIFByb3ZpZGVzIHNvbWUgdGlwcyBhbmQgcHJvY2VkdXJlcyBmb3IgYWxsIGFzcGVjdHMgb2YgdXNpbmcgRm9ycmVzdC4KICAgICAgIENvbW1pdHRlZCBieSBEQy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIGRvY3VtZW50IHRvIGV4cGxhaW4gdGhlIHByb2Nlc3MgZm9yCiAgICAgICAgPGxpbmsgaHJlZj0ic2l0ZTpjb21taXR0ZWQiPkJlY29taW5nIGFuIEFwYWNoZSBGb3JyZXN0CiAgICAgICAgY29tbWl0dGVyPC9saW5rPi4KICAgICAgIENvbW1pdHRlZCBieSBEQy4gVGhhbmtzIHRvIEFkZGlzb24gQmVycnkuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTYwMyI+Rk9SLTYwMzwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICA8c3Ryb25nPkZPUi05MjA8L3N0cm9uZz4gLSBBZGRpbmdzIG5vdGVzIGhvdyB0bwogICAgICAgIDxsaW5rIGhyZWY9InNpdGU6dXBncmFkaW5nXzA4Ij51cGRhdGU8L2xpbms+IHRoZSBkaWZmZXJlbnQgbW9kdWxlIGNhbGxzIGluCiAgICAgICAgY3VzdG9tIGNvZGUuICBDb21taXR0ZWQgYnkgVFMuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBBZGRlZCBGQVEgdG8gZXhwbGFpbiB0aGUgQ29jb29uIENhY2hlIGFuZCBzb21lIHdheXMgdG8gZW5oYW5jZSByZXNwb25zaXZlbmVzcy4KICAgICAgICBJbnNwaXJlZCBieSBjb21tZW50cyBmcm9tIFRvcnN0ZW4gU3RvbHBtYW5uLgogICAgICAgQ29tbWl0dGVkIGJ5IERDLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgRW5oYW5jZSB0aGUgZXhwbGFuYXRpb24gb2YgaW50ZWdyYXRpbmcgCiAgICAgICAgPGxpbmsgaHJlZj0ic2l0ZTpmYXEvZG9jYm9vayI+RG9jQm9vazwvbGluaz4gc291cmNlcyB0byBhbHNvIGV4cGxhaW4KICAgICAgICBob3cgdG8gdXNlIENvbnRlbnQgQXdhcmUgUGlwZWxpbmVzIChTb3VyY2VUeXBlQWN0aW9uKS4KICAgICAgIENvbW1pdHRlZCBieSBEQy4gVGhhbmtzIHRvIEJyaWFuIER1YmUuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBFbmhhbmNlIHRoZSBGQVEgYWJvdXQgZWZmaWNpZW50bHkgZ2VuZXJhdGluZwogICAgICAgIDxsaW5rIGhyZWY9InNpdGU6ZmFxL3NpbmdsZS1kb2N1bWVudCI+c2luZ2xlIGRvY3VtZW50czwvbGluaz4uCiAgICAgICAgVXNlICd3Z2V0JyBvciBBbnQgdG8gcmV0cmlldmUgaW5kaXZpZHVhbCBmaWxlcy4KICAgICAgIENvbW1pdHRlZCBieSBEQy4gVGhhbmtzIHRvIEphbiBNYXRlcm5lLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgUmV2aWV3IGFuZCBlbmhhbmNlIHRoZSAKICAgICAgICA8bGluayBocmVmPSJzaXRlOmhvd1RvUmVsZWFzZSI+UmVsZWFzZTwvbGluaz4gZG9jLgogICAgICAgQ29tbWl0dGVkIGJ5IERDLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgQWRkIG5vdGUgYWJvdXQgdXNpbmcgZW50aXR5IGNhdGFsb2dzIGZvciBEVERzIGV0Yy4gZm9yCiAgICAgICAgPGxpbmsgaHJlZj0ic2l0ZTpidWlsZFBsdWdpbiI+cGx1Z2luczwvbGluaz4uCiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBJbXByb3ZlZCB0aGUgZXhwbGFuYXRpb24gb2YKICAgICAgICA8bGluayBocmVmPSJzaXRlOnBsdWdpbnMvdXNpbmciPnVzaW5nIHBsdWdpbnM8L2xpbms+OgogICAgICAgIGhvdyB0aGV5IGFyZSBkZWNsYXJlZCwgd2hhdCB2ZXJzaW9uIG9mIGEgcGx1Z2luIGlzIHVzZWQsIHdoYXQgbG9jYXRpb25zIGFyZQogICAgICAgIHNlYXJjaGVkIGZvciBwbHVnaW5zIHNvdXJjZXMuCiAgICAgICBDb21taXR0ZWQgYnkgQ0QuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBFbmhhbmNlIHRoZSBGQVEgYWJvdXQgZWZmaWNpZW50bHkgZ2VuZXJhdGluZwogICAgICAgIDxsaW5rIGhyZWY9InNpdGU6ZmFxL3NpbmdsZS1kb2N1bWVudCI+c2luZ2xlIGRvY3VtZW50czwvbGluaz4uCiAgICAgICBDb21taXR0ZWQgYnkgREMuIFRoYW5rcyB0byBDbGF5IExlZWRzLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi04NDAiPkZPUi04NDA8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+IEFkZGVkIGxlbnlhLnpvbmUgCiAgICAgICAgc2l0ZSB0byB0aGUgZGlzcGF0Y2hlciBzZWN0aW9uIGluIHRoZSBsaXZlIHNpdGVzLiAKICAgICAgIENvbW1pdHRlZCBieSBUUy48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFVwZGF0ZSB0aGUgbm90ZXMgb24gPGxpbmsgaHJlZj0ic2l0ZTpjb250cmliL3BhdGNoIj5wYXRjaDwvbGluaz4gc3VibWlzc2lvbi4KICAgICAgICBUZWNobmlxdWVzIHN1Z2dlc3RlZCBieSBSaWNoYXJkIENhbG1iYWNoIGFuZCBSb3NzIEdhcmRsZXIuCiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBJbXByb3ZlZCBmb3JyZXN0Ym90IGRvY3MuCiAgICAgICBDb21taXR0ZWQgYnkgREMuIFRoYW5rcyB0byBSaWNoYXJkIENhbG1iYWNoLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi01NjgiPkZPUi01Njg8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgRW5oYW5jZSB0aGUgRkFRICNzaW5nbGUtZG9jdW1lbnQgYWJvdXQgInByb2plY3Quc3RhcnQtdXJpIiB0byBjb250cm9sIHdoaWNoIGZpbGVzIHRvIHByb2Nlc3MuCiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBFeHBsYWluIGhvdyBkZXZlbG9wZXJzIGNhbiBhZGQgc2l0ZXMgdG8gPGxpbmsgaHJlZj0ic2l0ZTpsaXZlLXNpdGVzIj5FeGFtcGxlIHNpdGVzPC9saW5rPi4KICAgICAgIENvbW1pdHRlZCBieSBEQy48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgogICAgICAgQ29tbWl0dGVkIGJ5IERDLiBUaGFua3MgdG8gUmljaGFyZCBDYWxtYmFjaC4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItNzUxIj5GT1ItNzUxPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIEVuaGFuY2UgZXRjL1JFTEVBU0VfTk9URVMudHh0CiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBBZGQgc2VjdGlvbiBhYm91dCB1c2luZyBuZXcvZXhwZXJpbWVudGFsIGZlYXR1cmVzIChlLmcuIExvY2F0aW9ubWFwLCBEaXNwYXRjaGVyKSB0b2dldGhlciB3aXRoIHBsdWdpbnMuCiAgICAgICAgU2VlIDxsaW5rIGhyZWY9InNpdGU6YnVpbGRQbHVnaW4iPkhvd3RvIEJ1aWxkIFBsdWdpbnM8L2xpbms+IGRvYy4KICAgICAgIENvbW1pdHRlZCBieSBSREcuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBBZGQgc2VjdGlvbiBhYm91dCBtYW5hZ2luZyB0aGUgcGx1Z2lucyBkZXNjcmlwdG9ycyB0bwogICAgICAgIDxsaW5rIGhyZWY9InNpdGU6YnVpbGRQbHVnaW4iPkhvd3RvIEJ1aWxkIFBsdWdpbnM8L2xpbms+IGRvYy4KICAgICAgIENvbW1pdHRlZCBieSBEQy48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgQWRkZWQgc2VjdGlvbiAibGlua2luZyB0byBleHRlcm5hbCBjc3MgZmlsZXMiIHRvIGhvd3RvLXN0cnVjdHVyZXItZHNsIGRvYy4KICAgICAgIENvbW1pdHRlZCBieSBUUy4gVGhhbmtzIHRvIFBhdWwgQm9sZ2VyLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi03NjgiPkZPUi03Njg8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgQ2xhcmlmeSB0aGUgRkFRIGFib3V0IHVzaW5nCiAgICAgICAgPGxpbmsgaHJlZj0ic2l0ZTpmYXEvcmF3SFRNTCI+cmF3IEhUTUw8L2xpbms+CiAgICAgICAgZG9jcyB3aXRoIG5vIGRlY29yYXRpb24uCiAgICAgICBDb21taXR0ZWQgYnkgUkRHLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi02NjYiPkZPUi02NjY8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgQ2xhcmlmeSBkb2N1bWVudGF0aW9uIGZvciBGb3JyZXN0Ym90LgogICAgICAgQ29tbWl0dGVkIGJ5IERDLiBUaGFua3MgdG8gQWRkaXNvbiBCZXJyeS4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItNTY4Ij5GT1ItNTY4PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPiBBZGRlZCBpbmZvcm1hdGlvbiBhYm91dCAKICAgICAgICBob3cgdG8gZGVidWcgZm9ycmVzdCBqYXZhIGNsYXNzZXMgdG8gdGhlIGZhcSA8bGluayBocmVmPSJodHRwOi8vc3ZuLmFwYWNoZS5vcmcvdmlld2N2cy5jZ2k/cmV2PTI5MTM2MSZhbXA7dmlldz1yZXYiPkRpZmY8L2xpbms+IAogICAgICAgICBDb21taXR0ZWQgYnkgVFMuPC9saT48L3VsPjwvc2VjdGlvbj48c2VjdGlvbj48dGl0bGU+Q29udHJpYnV0b3JzIHRvIHRoaXMgcmVsZWFzZTwvdGl0bGU+PHA+V2UgdGhhbmsgdGhlIGZvbGxvd2luZyBwZW9wbGUgZm9yIHRoZWlyIGNvbnRyaWJ1dGlvbnMgdG8gdGhpcyByZWxlYXNlLjwvcD48cD5UaGlzIGlzIGEgbGlzdCBvZiBhbGwgcGVvcGxlIHdobyBwYXJ0aWNpcGF0ZWQgYXMgY29tbWl0dGVyczo8YnIvPkFudG9uaW8gR2FsbGFyZG8gKEFHKSwgQmVydHJhbmQgRGVsYWNyZXRheiAoQkQpLCBDeXJpYXF1ZSBEdXBvaXJpZXV4IChDRCksIERhdmlkIENyb3NzbGV5IChEQyksIERpd2FrZXIgR3VwdGEgKERHKSwgRmVyZGluYW5kIFNvZXRoZSAoRlNPKSwgSnVhbiBKb3NlIFBhYmxvcyAoSkpQKSwgSm9oYW5uZXMgU2NoYWVmZXIgKEpTKSwgUm9zcyBHYXJkbGVyIChSREcpLCBUaG9yc3RlbiBTY2hlcmxlciAoVFMpLCBUaW0gV2lsbGlhbXMgKFRXVykuPC9wPjxwPlRoaXMgaXMgYSBsaXN0IG9mIG90aGVyIGNvbnRyaWJ1dG9yczo8YnIvPkFkZGlzb24gQmVycnksIEFsYW4gQ2hhbmRsZXIsIEFuaWwgUmFtbmFuYW4sIEJyaWFuIER1YmUsIENsYXkgTGVlZHMsIENvbW11bml0eSwgRGF2ZSBCcm9zaXVzLCBEYXZpZCBDcm9zc2xleSwgR2F2aW4sIEdhdmluIE1jRG9uYWxkLCBKYW4gTWF0ZXJuZSwgSmltIERpeG9uLCBKb2FjaGltIEJyZWl0c3ByZWNoZXIsIEpvc2lhcyBUaG9lbnksIGtldmluLCBNYXJ0aW4gU3RvY2toYW1tZXIsIE1hdGhpZXUgQ2hhbXBsb24sIFBhdWwgQm9sZ2VyLCBQYXVsIERldmluZSwgUGF1bCBLcm9uZW53ZXR0ZXIsIFBoaWxsaXAgRXZlbnMsIFBpZXIgRnVtYWdhbGxpLCBSYXNpayBQYW5kZXksIFJpY2hhcmQgQ2FsbWJhY2gsIFJvc3MgR2FyZGxlciwgU2p1ciBOLiBNb3NoYWdlbiwgU3RldmUgTWFzb3ZlciwgVG9tIEhBTkFYLCBUb3JzdGVuIFN0b2xwbWFubi48L3A+PC9zZWN0aW9uPjwvc2VjdGlvbj4KICAgIDxzZWN0aW9uIGlkPSJ2ZXJzaW9uXzAuNy4xLWRldiI+PHRpdGxlPlZlcnNpb24gMC43LjEtZGV2IChub3QgcmVsZWFzZWQpPC90aXRsZT4KICAgICAgICA8cD5TZWUgZWFjaAogICAgICAgICAgPGxpbmsgaHJlZj0ic2l0ZTp2MC43MC8vcGx1Z2lucy9pbmRleCI+cGx1Z2luPC9saW5rPgogICAgICAgICAgZm9yIGl0cyBkZXRhaWxlZCBjaGFuZ2VzLgogICAgICAgIDwvcD4KICAgICAgPHNlY3Rpb24+PHRpdGxlPkNoYW5nZXMgdG8gdGhlIENvZGUgQmFzZTwvdGl0bGU+PHVsPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIEhvd3RvLXYyMCBub3cgcHJvcGVybHkgaGFuZGxlcyBhL0BjbGFzcz1mb3JrIGV0Yy4gYXR0cmlidXRlIHRvIGVuYWJsZQogICAgICAgIGxpbmtzIHRvIG9wZW4gaW4gYSBuZXcgYnJvd3NlciB3aW5kb3cuCiAgICAgICBDb21taXR0ZWQgYnkgREMuIFRoYW5rcyB0byBTdGV2ZSBNYXNvdmVyLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi04MjQiPkZPUi04MjQ8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgRm9ycmVzdGJvdCBkZXBsb3kuc2NwIHdvcmtzdGFnZSBub3cgdXNlcyBrZXlmaWxlL3Bhc3NwaHJhc2UgaW4gcHJlZmVyZW5jZSwKICAgICAgICB0aGVuIGZhbGxiYWNrIHRvIHJlbW90ZSBwYXNzd29yZC4KICAgICAgIENvbW1pdHRlZCBieSBEQy4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItODE4Ij5GT1ItODE4PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgICAgICBDaGFuZ2VkIGhhbmRsaW5nIG9mIHRhYmxlIGVsZW1lbnRzIHdpdGggY2xhc3MtYXR0cmlidXRlcyBpbiBzb3VyY2U6CiAgICAgICAgICAgIFRhYmxlIGVsZW1lbnRzIHcvbyBjbGFzcyBlbGVtZW50cyB3aWxsIHJlY2VpdmUgc3RhbmRhcmQgRm9ycmVzdCBzdHlsaW5nIGxpa2UgYmVmb3JlCiAgICAgICAgICAgIChjZWxscGFkZGluZz0iNCIgY2VsbHNwYWNpbmc9IjEiIGNsYXNzPSJGb3JyZXN0VGFibGUiKQogICAgICAgICAgICB3aGlsZSBlbGVtZW50cyB0aGF0IGhhdmUgY2xhc3Mgd2lsbCBwYXNzIHVuY2hhbmdlZC4KICAgICAgICAgICAgTm90ZTogVG8gc3R5bGUgdGFibGVzIHdpdGggY2xhc3MgZWxlbWVudHMgbGlrZSBiZWZvcmUgeW91IGhhdmUgdG8gYWRkIHN0eWxpbmcgY29kZQogICAgICAgICAgICBpbiB0aGUgZXh0cmEtY3NzLXNlY3Rpb24gb2Ygc2tpbmNvbmZpZy4KICAgICAgICAgQ29tbWl0dGVkIGJ5IEZTTy48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgICAgICBGaXhlZCBwcm9ibGVtcyB3aXRoIGRpc2FwcGVhcmluZyBvZiBpZC1hdHRyaWJ1dGVzIGluIGltZy1lbGVtZW50IGFuZCBzZXZlcmFsIG90aGVycy4gICAgCiAgICAgICAgIENvbW1pdHRlZCBieSBGU08uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBBZGRlZCBuZXcgImNsZWFuIiB0YXJnZXRzLiBEb2luZyAnZm9ycmVzdCBjbGVhbi1zaXRlJyB3aWxsIHJlbW92ZQogICAgICAgIHRoZSBjb250ZW50cyBvZiB0aGUgcHJvamVjdCdzIGdlbmVyYXRlZCBkb2N1bWVudHMgZGlyZWN0b3J5LgogICAgICAgIERvaW5nICdmb3JyZXN0IGNsZWFuLXdvcmsnIHdpbGwgcmVtb3ZlIHRoZSBwcm9qZWN0J3Mgd29yayBkaXJlY3RvcmllcwogICAgICAgICh1c3VhbGx5IGJ1aWxkL3RtcCBhbmQgYnVpbGQvd2ViYXBwIHdoaWNoIGluY2x1ZGUgdGhlIENvY29vbiBjYWNoZQogICAgICAgIGFuZCB0aGUgQ29jb29uIGxvZ3MpLgogICAgICAgIERvaW5nICdmb3JyZXN0IGNsZWFuJyB3aWxsIHJlbW92ZSBib3RoIHNlY3Rpb25zLgogICAgICAgQ29tbWl0dGVkIGJ5IERDLjwvbGk+PC91bD48L3NlY3Rpb24+PHNlY3Rpb24+PHRpdGxlPkNoYW5nZXMgdG8gRG9jdW1lbnRhdGlvbjwvdGl0bGU+PHVsPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgo8IS0tIFBsZWFzZSBrZWVwIHRoaXMgYWN0aW9uIGF0IHRoZSB0b3AgLS0+CiAgICAgICAgQWRkZWQgZG9jdW1lbnQgdG8gZmFjaWxpdGF0ZQogICAgICAgIDxsaW5rIGhyZWY9InNpdGU6djAuNzAvL3VwZ3JhZGluZ18wNyI+dXBncmFkaW5nIHRvIHYwLjc8L2xpbms+CiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48L3VsPjwvc2VjdGlvbj48c2VjdGlvbj48dGl0bGU+Q29udHJpYnV0b3JzIHRvIHRoaXMgcmVsZWFzZTwvdGl0bGU+PHA+V2UgdGhhbmsgdGhlIGZvbGxvd2luZyBwZW9wbGUgZm9yIHRoZWlyIGNvbnRyaWJ1dGlvbnMgdG8gdGhpcyByZWxlYXNlLjwvcD48cD5UaGlzIGlzIGEgbGlzdCBvZiBhbGwgcGVvcGxlIHdobyBwYXJ0aWNpcGF0ZWQgYXMgY29tbWl0dGVyczo8YnIvPkRhdmlkIENyb3NzbGV5IChEQyksIEZlcmRpbmFuZCBTb2V0aGUgKEZTTykuPC9wPjxwPlRoaXMgaXMgYSBsaXN0IG9mIG90aGVyIGNvbnRyaWJ1dG9yczo8YnIvPlN0ZXZlIE1hc292ZXIuPC9wPjwvc2VjdGlvbj48L3NlY3Rpb24+CiAgICA8c2VjdGlvbiBpZD0idmVyc2lvbl8wLjciPjx0aXRsZT5WZXJzaW9uIDAuNyAoMjAwNS0wNi0yMyk8L3RpdGxlPgogICAgICAgIDxwPlNlZSBlYWNoCiAgICAgICAgICA8bGluayBocmVmPSJzaXRlOnYwLjcwLy9wbHVnaW5zL2luZGV4Ij5wbHVnaW48L2xpbms+CiAgICAgICAgICBmb3IgaXRzIGRldGFpbGVkIGNoYW5nZXMuCiAgICAgICAgPC9wPgogICAgICA8c2VjdGlvbj48dGl0bGU+Q2hhbmdlcyB0byBQcm9qZWN0IEFkbWluaXN0cmF0aW9uPC90aXRsZT48dWw+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkZWQgdGVzdGluZyBmYWNpbGl0aWVzIHRvIHBsdWdpbnMgdG8gZmFjaWxpdGF0ZSBpbnRlZ3JhdGlvbiB0ZXN0aW5nLiAKICAgICAgIENvbW1pdHRlZCBieSBSREcuPC9saT48L3VsPjwvc2VjdGlvbj48c2VjdGlvbj48dGl0bGU+Q2hhbmdlcyB0byBCdWlsZDwvdGl0bGU+PHVsPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIENoYW5nZWQgQW50IGJ1aWxkIHByb3BlcnR5IG5hbWUgInZlcnNpb24iIHRvICJmb3JyZXN0LnZlcnNpb24iCiAgICAgICAgdG8gcHJldmVudCBjb2xsaXNpb25zIHdpdGggb3RoZXIgYnVpbGQgc3lzdGVtcyB3aGVuIHVzaW5nIHRoZQogICAgICAgIEFudCAiaW1wb3J0IiB0YXNrLgogICAgICAgQ29tbWl0dGVkIGJ5IERDLjwvbGk+PC91bD48L3NlY3Rpb24+PHNlY3Rpb24+PHRpdGxlPkNoYW5nZXMgdG8gdGhlIENvZGUgQmFzZTwvdGl0bGU+PHVsPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBpbnB1dCBwbHVnaW4gIkRhaXN5Ii4KICAgICAgICBJbnB1dCBpcyBjb250ZW50IHJldHJpZXZlZCBmcm9tIGEgIkRhaXN5IENNUyByZXBvc2l0b3J5Ii4KICAgICAgIENvbW1pdHRlZCBieSBSREcuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgb3V0cHV0IHBsdWdpbiAiT3Blbk9mZmljZS5vcmciLgogICAgICAgIE91dHB1dCBPT28gd3JpdGVyIGZpbGVzLgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBvdXRwdXQgcGx1Z2luICJDaGFydCIuCiAgICAgICAgRHJhdyBjaGFydHMgdXNpbmcgakNoYXJ0cy4KICAgICAgIENvbW1pdHRlZCBieSBSREcuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgaW5wdXQgcGx1Z2luICJEYXRhYmFzZSIuCiAgICAgICAgVXNlcyBtdWNoIG9mIHRoZSBDb2Nvb24gREIgYmxvY2sgY29kZSBhbmQgaXMgcGFydCBvZiBhIGxhcmdlciBleHBlcmltZW50CiAgICAgICAgdG8gZ2V0IENvY29vbiBibG9ja3Mgd29ya2luZyBhcyBGb3JyZXN0IHBsdWdpbnMuCiAgICAgICBDb21taXR0ZWQgYnkgUkRHLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgICBQbHVnaW5zIGFyZSBub3cgdmVyc2lvbiBjb250cm9sbGVkLgogICAgICAgIENvbW1pdHRlZCBieSBSREcuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTUyOCI+Rk9SLTUyODwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgQWRkZWQgaW1wb3J0YW5jZSBhdHRyaWJ1dGUgdG8gYWN0aW9ucyBvbiBzdGF0dXMuZHRkCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi00ODciPkZPUi00ODc8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkZWQgb3JnLmFwYWNoZS5mb3JyZXN0LnBsdWdpbi5pbnB1dC5saXN0TG9jYXRpb25zIHBsdWdpbi4KICAgICAgICBVc2UgbGlzdHMgb2YgbG9jYXRpb25zIG1haW50YWluZWQgaW4gYSBzaW1wbGUgeG1sIGZvcm1hdAogICAgICAgIGFuZCB0cmFuc2Zvcm0gdGhlbSB0byBkb2N1bWVudHMuCiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBvcmcuYXBhY2hlLmZvcnJlc3QucGx1Z2luLmlucHV0LmR0ZHggcGx1Z2luIGJ5IG1vdmluZyBmdW5jdGlvbmFsaXR5CiAgICAgICAgb3V0IG9mIHRoZSBjb3JlLgogICAgICAgIEdlbmVyYXRlcyBEVEQgZG9jdW1lbnRhdGlvbiB1c2luZyBhIGN1c3RvbSBDb2Nvb24gR2VuZXJhdG9yLgogICAgICAgQ29tbWl0dGVkIGJ5IERDLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi0zODkiPkZPUi0zODk8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQ2hhbmdlZCBwbHVnaW4gdGVtcGxhdGUgbG9jYXRpb24gdG8ge2ZvcnJlc3QucGx1Z2lucy5kaXJ9L3BsdWdpblRlbXBsYXRlIAogICAgICAgIGluIHRoZSBidWlsZC54bWwgb2YgcGx1Z2lucy8gYW5kIHdoaXRlYm9hcmQvcGx1Z2lucy8uIFRoYXQgYWxsb3dzIHRvIGNyZWF0ZQogICAgICAgIG5ldyBwbHVnaW5zIGluIHRoZSB3aGl0ZWJvYXJkL3BsdWdpbi8gZGlyZWN0b3J5LgogICAgICAgQ29tbWl0dGVkIGJ5IFRTLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWN0aXZhdGVkIG11bHRpcGxlIG91dHB1dCBmb3JtYXRzIHRvIGJlIGNvbmZpZ3VyZWQgdmlhIGEgVmlldy4KICAgICAgIENvbW1pdHRlZCBieSBUUy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIHZpZXdIZWxwZXIgcGx1Z2luIGFuZCByZW1vdmVkIGV4cGVyaW1lbnRhbCBsZWF0aGVyIHBsdWdpbi4KICAgICAgICBFbmhhbmNlZCB0aGUgZG9jdW1lbnRhdGlvbiBvZiB2aWV3L3ZpZXdIZWxwZXIuCiAgICAgICBDb21taXR0ZWQgYnkgVFMuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBjb250cmFjdHMgYW5kIG51Z2dldHMgdG8gdGhlICJ2aWV3IiBwbHVnaW5zLgogICAgICAgQ29tbWl0dGVkIGJ5IFRTLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQ3JlYXRlZCBhIG5ldyBwbHVnaW4gb3JnLmFwYWNoZS5mb3JyZXN0LnBsdWdpbi5pbnRlcm5hbC52aWV3IGZyb20gdGhlIGZiaXRzIGNvcmUKICAgICAgICBhbmQgcmVtb3ZlZCB0aGUgZmJpdHMgcGx1Z2luLgogICAgICAgQ29tbWl0dGVkIGJ5IFRTLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkZWQgcHJveHkuaG9zdCwgcHJveHkucG9ydCwgcHJveHkudXNlciBhbmQgcHJveHkucGFzc3dvcmQgdG8gYWxsb3cgcGx1Z2luIGRvd25sb2FkcyBmcm9tIGJlaGluZCBhCiAgICAgICAgcHJveHkuCiAgICAgICBDb21taXR0ZWQgYnkgUkRHLiBUaGFua3MgdG8gQ3lyaWFxdWUgRHVwb2lyaWV1eC4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItNDQ1Ij5GT1ItNDQ1PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIGEgcGx1Z2luIHRvIGhhbmRsZSBpbnB1dCBkb2N1bWVudHMgZnJvbSBNaWNyb3NvZnQgRXhjZWwuCiAgICAgICBDb21taXR0ZWQgYnkgUkRHLiBUaGFua3MgdG8gSm9oYW5uZXMgU2NoYWVmZXIuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTM3MyI+Rk9SLTM3MzwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBFbmFibGVkIFhJbmNsdWRlIGluIHNpdGUueG1sIGFuZCB0YWJzLnhtbAogICAgICAgQ29tbWl0dGVkIGJ5IFJERy4gVGhhbmtzIHRvIFNqdXIgTi4gTW9zaGFnZW4uIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTQxNyI+Rk9SLTQxNzwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBleHRlcm5hbCBwbHVnaW4gUE9ELWlucHV0IHRvIGFsbG93IFBsYWluIE9sZCBEb2N1bWVudGF0aW9uIChQT0QpIGZpbGVzIHRvCiAgICAgICAgYmUgaW5jbHVkZWQgaW4gYSBGb3JyZXN0IHNpdGUuCiAgICAgICBDb21taXR0ZWQgYnkgUkRHLiBUaGFua3MgdG8gUm9uIEJsYXNjaGtlLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgTW92ZWQgUE9EIG91dHB1dCBmcm9tIHRoZSBjb21tb24gc2tpbiB0byBpdHMgb3duIHBsdWdpbi4KICAgICAgIENvbW1pdHRlZCBieSBSRlQuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBhIHRleHQtb3V0cHV0IHBsdWdpbi4KICAgICAgIENvbW1pdHRlZCBieSBSRlQuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTEyNSI+Rk9SLTEyNTwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBXWVNJV1lHIGVkaXRvciBhcyBhIHBsdWdpbiAob25seSB3b3JrcyBpbiBkeW5hbWljIHdlYmFwcHMpLgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIHBob3RvR2FsbGVyeSBwbHVnaW4uCiAgICAgICBDb21taXR0ZWQgYnkgUkRHLiBUaGFua3MgdG8gSvZyZyBXZXJuZXIuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTM4NyI+Rk9SLTM4NzwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBjYXBhYmlsaXR5IHRvIGRlcGxveSBkaXJlY3RseSB0byBzaXRlIGluIFNWTiB1c2luZyAiYW50IGRlcGxveSIKICAgICAgICBmcm9tIHdpdGhpbiBwbHVnaW4gZGlyZWN0b3J5LgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIHRvIHRoZSBkb2N1bWVudC12MjAgRFREIHRvIHN1cHBvcnQgInVzZW1hcCIgYXR0cmlidXRlIGluIGltZyB0YWcuCiAgICAgICAgQWxzbyBhZGRlZCBkZW1vbnN0cmF0aW9uIG9mIGNsaWVudC1zaWRlIGltYWdlbWFwIHRvIHRoZSAic2VlZCBzaXRlIi4KICAgICAgIENvbW1pdHRlZCBieSBEQy4gVGhhbmtzIHRvIFRhbWFyYSBIYXJwc3Rlci4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMzIyIj5GT1ItMzIyPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEVuYWJsZSBzaXRlbWFwIHBsdWdpbnMuIFBsdWdpbnMgYWxsb3cgRm9ycmVzdCB0byBoYXZlIGZ1bmN0aW9uYWxpdHkKICAgICAgICBhZGRlZCB0aHJvdWdoIHRoZSBhZGRpdGlvbiBvZiBzbWFsbCBjb2RlIGJsb2NrcyAocGx1Z2lucykuIFBsdWdpbnMKICAgICAgICBhcmUgZG93bmxvYWRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYSBzaXRlIHRoYXQgcmVxdWlyZXMgdGhlbSBpcyBidWlsdC4KICAgICAgICBTZWUgPGxpbmsgaHJlZj0ic2l0ZTpwbHVnaW5zL3VzaW5nIj5FeHRlbmRpbmcgRm9ycmVzdCB3aXRoIFBsdWdpbnM8L2xpbms+LgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIGluaXRpYWwgd2hpdGVib2FyZCBvdXRwdXQgcGx1Z2luICJodG1sQXJlYSIuCiAgICAgICAgT3V0cHV0IHBhZ2VzIHRoYXQgZW5hYmxlIGVkaXRpbmcgb2YgdGhlIGlucHV0LiBPbmx5IGh0bWwgYXQgdGhpcyBzdGFnZS4KICAgICAgIENvbW1pdHRlZCBieSBSREcuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgb3V0cHV0IHBsdWdpbiAicnRmIi4KICAgICAgICBPdXRwdXQgZG9jdW1lbnRzIGFzIFJURi4KICAgICAgIENvbW1pdHRlZCBieSBSREcuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBpbml0aWFsIHdoaXRlYm9hcmQgaW5wdXQgcGx1Z2luICJsb2dzIi4KICAgICAgICBVc2UgdmFyaW91cyBsb2dmaWxlcyBhcyBpbnB1dC4gQ3VycmVudGx5IG9ubHkgSmF2YSBMb2dnaW5nIEFQSS4KICAgICAgIENvbW1pdHRlZCBieSBSREcuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBUaGUgYnJva2VubGlua3MgZmlsZSBub3cgY29udGFpbnMgcmVmZXJlciBpbmZvcm1hdGlvbi4KICAgICAgICBVcGdyYWRlZCBsaWIvY29yZS9jb2Nvb24uamFyIGFuZCBhZGRlZCBhdHRyaWJ1dGUgInNob3ctcmVmZXJyZXJzIgogICAgICAgIHRvIHRoZSBDb2Nvb24gY2xpLnhjb25mCiAgICAgICBDb21taXR0ZWQgYnkgREMuIFRoYW5rcyB0byBVcGF5YXZpcmEuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTIwNCI+Rk9SLTIwNDwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBUaGUgImV4dHJhLWNzcyIgZnJvbSBza2luY29uZi54bWwgaXMgbm93IGluc2VydGVkIGF0IHRoZSB2ZXJ5IGVuZAogICAgICAgIG9mIHRoZSBDU1MuIFRoYXQgZW5hYmxlcyBpdCB0byBwcm9wZXJseSBvdmVycmlkZSBvdGhlciBlbGVtZW50cy4KICAgICAgIENvbW1pdHRlZCBieSBEQy48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEZpeGVkIGEgYnVnIHdpdGggaW5kaXZpZHVhbCAiY3JlZGl0IGltYWdlIiBwbGFjZW1lbnQgaW4gdGhlIHBlbHQgc2tpbi4KICAgICAgICBJZiBvbmUgY3JlZGl0IHdhcyBzcGVjaWZpZWQgdG8gYmUgaW4gdGhlIGFsdGVybmF0aXZlIGxvY2F0aW9uLCB0aGVuCiAgICAgICAgYWxsIGNyZWRpdHMgd2VyZSBwbGFjZWQgdGhlcmUuIEFsc28gYWRkZWQgYSBzZWNvbmQgYWx0ZXJuYXRpdmUgbG9jYXRpb24uCiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBHZW5lcmF0ZSBodG1sL2hlYWQvbWV0YSBlbGVtZW50cyBmcm9tIGRvY3VtZW50LXYyLgogICAgICAgQ29tbWl0dGVkIGJ5IERDLiBUaGFua3MgdG8gTWFyayBFZ2dlcnMuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTQ4MiI+Rk9SLTQ4MjwvbGluaz4sIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItNDU3Ij5GT1ItNDU3PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEltYWdlcyBncm91cC5zdmcgYW5kIHByb2plY3Quc3ZnIHdlcmUgcmVuZGVyZWQgd2l0aCB0aGUgc2hhZG93IGVmZmVjdCBzbGlnaHRseSBjbGlwcGVkLiAKICAgICAgICBOZWVkZWQgdG8gYWRkIHdpZHRoIGFuZCBoZWlnaHQgdG8gZmlsdGVyIGVsZW1lbnQuCiAgICAgICBDb21taXR0ZWQgYnkgVFMuIFRoYW5rcyB0byBLZXZpbi4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItNDc3Ij5GT1ItNDc3PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEZpeCBicm9rZW4gbGlua3MgaW4gVGFibGUgb2YgQ29udGVudHMgd2hlbiB0aXRsZXMgY29udGFpbiBhY2NlbnRlZCBjaGFyYWN0ZXJzLgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy4gVGhhbmtzIHRvIEN5cmlhcXVlIER1cG9pcmlldXguIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTM0NSI+Rk9SLTM0NTwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBJMThuIHVzZXMgb3JnLmFwYWNoZS5jb2Nvb24ubWF0Y2hpbmcuTG9jYWxlTWF0Y2hlciBpbnN0ZWFkIG9mIGkxOG4gdHJhbnNmb3JtZXIuCiAgICAgICBUaGlzIHJlcXVpcmVzIHRoYXQgeW91ciBzb3VyY2UgbXVzdCBub3cgYmUgZm9vLmxhbmcueG1sIGluc3RlYWQgb2YgZm9vX2xhbmcueG1sCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi0xOCI+Rk9SLTE4PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEZpeCB2YXJpb3VzIGJ1Z3Mgd2l0aCBMdWNlbmUgc2VhcmNoLgogICAgICAgQ29tbWl0dGVkIGJ5IERDLiBUaGFua3MgdG8gRmxvcmlhbiBHLiBIYWFzLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi0yNDYiPkZPUi0yNDY8L2xpbms+LCA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTQzMSI+Rk9SLTQzMTwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBGaXhlZCBxdW90ZXMgaW4gZm9ycmVzdC5iYXQgc28gZm9ycmVzdCBjYW4gYmUgaW4gYSBkaXJlY3Rvcnkgd2l0aCBzcGFjZXMuCiAgICAgICBDb21taXR0ZWQgYnkgREIuIFRoYW5rcyB0byBHYXJ5IEZlbGRtYW4uIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTMzMCI+Rk9SLTMzMDwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgTG9jYWxlQWN0aW9uIGNoYW5nZWQgaXRzIEFQSS4gVGhlICJsYW5nIiB2YWx1ZSBpcyAibGFuZ3VhZ2UiIG5vdy4gCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi0xOCI+Rk9SLTE4PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgSWdub3JlIGRpcmVjdG9yeSBsaW5rcyBmb3IgYWdncmVnYXRpb25zLgogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMzcwIj5GT1ItMzcwPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEZpeGVkIHNvbWUgcHVibGljIGlkZW50aWZpZXJzIChmb3IgRFRELXYyLjApIHdoaWNoIHdlcmUgc3RpbGwgcG9pbnRpbmcKICAgICAgICB0byBvbGQgdmVyc2lvbnMgb2YgRFREcy4KICAgICAgIENvbW1pdHRlZCBieSBEQy48L2xpPjxsaT48aWNvbiBhbHQ9InJlbW92ZSIgc3JjPSJpbWFnZXMvcmVtb3ZlLmpwZyIvPgogICAgICAgIFN0b3BwZWQgZG9pbmcgZGVsZXRpb24gb2YgdGhlIGNhY2hlLWRpciwgc28gY29uc2VjdXRpdmUgImZvcnJlc3Qgc2l0ZSIgYWN0aW9ucwogICAgICAgIGNhbiBiZSBjYWNoZWQuCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLjwvbGk+PGxpPjxpY29uIGFsdD0icmVtb3ZlIiBzcmM9ImltYWdlcy9yZW1vdmUuanBnIi8+IAogICAgICBNZXJnZSB4ZG9jcyBhbmQgcmF3IGZpbGVzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBzcmMvZG9jdW1lbnQvY29udGVudC94ZG9jcwogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgICAgQ29uZmlnIGNoZWNrIGZvciB0aGUgaThuIGF0dHJpYnV0ZSBmb3IgaTE4biB0cmFuc2Zvcm1lcgoJICBzbyBpdCBpcyB1c2VkIG9ubHkgd2hlbiBuZWNlc3NhcnkuCiAgICAgICAgQ29tbWl0dGVkIGJ5IEpKUC4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMTgiPkZPUi0xODwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBFbmhhbmNlZCB0aGUgTWVzc2FnZSBvZiB0aGUgRGF5IChNT1REKSBmYWNpbGl0eS4KICAgICAgICBTZWUgc2tpbmNvbmYueG1sIGZyb20gYSAic2VlZCIgc2l0ZSBmb3IgY29uZmlndXJhdGlvbiBkZXRhaWxzLgogICAgICAgIEFwcGVuZCBhIHNtYWxsIHRleHQgc3RyaW5nIGFmdGVyIGh0bWwgdGl0bGUuCiAgICAgICAgQWRkIHRleHQgdG8gYSBwYW5lbCBvbiB0aGUgcGFnZS4KICAgICAgICBTZWxlY3QgZGlmZmVyZW50IG1lc3NhZ2VzIGRlcGVuZGluZyBvbiB0aGUgVVJJIHN0cmluZyBwYXR0ZXJuLgogICAgICAgIFRvIHVzZSBpdCwgZGVjbGFyZSBza2luY29uZmlnLXYwNy0xLmR0ZCBpbiB5b3VyIHNraW5jb25mLnhtbCBmaWxlLgogICAgICAgQ29tbWl0dGVkIGJ5IERDLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgICBFbmFibGUgc2tpbmNvbmYgdG8gc3BlY2lmeSBvcHRpb25hbCBwYWdlIG51bWJlciBmb3JtYXQgZm9yIFBERi4KICAgICAgICBDb21taXR0ZWQgYnkgREMuIFRoYW5rcyB0byBDeXJpYXF1ZSBEdXBvaXJpZXV4LiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi0zNTUiPkZPUi0zNTU8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgICBEbyBub3QgbGltaXQgc3RhdHVzLnhtbCBjb250ZXh0cyBpbiBwcm9qZWN0SW5mbyBwbHVnaW4uCiAgICAgICAgQ29tbWl0dGVkIGJ5IEpKUC4gVGhhbmtzIHRvIEN5cmlhcXVlIER1cG9pcmlldXguIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTUxNCI+Rk9SLTUxNDwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBTcGxpdCBwbHVnaW5zLnhtbCBiZXR3ZWVuIHBsdWdpbnMueG1sIGluIG1haW4gcGx1Z2lucyBkaXIgYW5kCiAgICAgICAgd2hpdGVib2FyZC1wbHVnaW5zLnhtbCBpbiB3aGl0ZWJvYXJkL3BsdWdpbnMgYW5kIGFkZGVkIHJlbGV2YW50IGRvY3MKICAgICAgICB0byBwbHVnaW5zIGluZGV4IHBhZ2UuCiAgICAgICBDb21taXR0ZWQgYnkgUkRHLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgQWRkZWQgYWJpbGl0eSB0byBhZGQgcGFnZSBicmVha3MgdG8gb3V0cHV0LiBTZWUgPGxpbmsgaHJlZj0ic2l0ZTp2MC43MC8vZmFxL3BhZ2VCcmVha3MiPlBhZ2UgQnJlYWtzIEZBUTwvbGluaz4KICAgICAgIENvbW1pdHRlZCBieSBSREcuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICAqIFVzZXMgc2tpbmNvbmYueG1sIHRvIGRldGVybWluZSBiYWNrZ3JvdW5kIGFuZCBib3JkZXIgY29sb3IgZm9yIG5vdGVzLCB3YXJuaW5ncywgYW5kIGZpeG1lczsKICAgICAgICAqIFVzZXMgc2tpbmNvbmYueG1sIHRvIGRldGVybWluZSBiYWNrZ3JvdW5kIGFuZCBib3JkZXIgY29sb3IgZm9yIHRhYmxlIGNlbGxzIChoZWFkZXJzIGFuZCBkYXRhKTsKICAgICAgICAqIEhvbm9ycyBoZWFkaW5ncyB0eXBlIHNldCBpbiBza2luY29uZi54bWwgKGNsZWFufHVuZGVybGluZWR8Ym94ZWQpIGFuZCBjb2xvcnMgaGVhZGluZ3MgYWNjb3JkaW5nbHk7CiAgICAgICAgKiBVc2VzIHNraW5jb25mLnhtbCB0byBkZXRlcm1pbmUgZm9udCBjb2xvciBmb3IgbGlua3MuCgogICAgICAgIEluIGFkZGl0aW9uLCB0aGlzIHBhdGNoIGV4dGVuZHMgdGhlICJsaW5rIiB0ZW1wbGF0ZSB0byBhbHNvIGFwcGx5IHRvIHRoZSAiZm9yayIsICJqdW1wIiwgYW5kICJhIiBlbGVtZW50cy4KICAgICAgIENvbW1pdHRlZCBieSBSREcuIFRoYW5rcyB0byBGbG9yaWFuIEcuIEhhYXMuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTQzMCI+Rk9SLTQzMDwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBSZWluc3RhdGUgZXJyb3IgcmVwb3J0aW5nIGZvciBicm9rZW4gInNpdGU6IiBhbmQgImV4dDoiIGxpbmtzCiAgICAgICAgd2hpY2ggYXJlIGR1ZSB0byBtaXNzaW5nIGVudHJpZXMgaW4gc2l0ZS54bWwgb3IgdHlwb3MgaW4gc2l0ZTogbGlua3MuCiAgICAgICAgVGhlIHRleHQgImVycm9yOiIgaXMgYWxzbyBwcmVwZW5kZWQuCiAgICAgICAgVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGJ1ZyBGT1ItMjg0ICJsaW5rIHJld3JpdGluZyBicm9rZW4KICAgICAgICB3aGVuIGxpbmtpbmcgdG8geG1sIHNvdXJjZSB2aWV3cyB3aGljaCBjb250YWluIHNpdGU6IGxpbmtzIi4KICAgICAgICBUaGlzIGxhdHRlciBpc3N1ZSBpcyBoYW5kbGVkIGJ5IHRoZSBjb3JlLiBIb3dldmVyLCBpZgogICAgICAgIHlvdXIgcHJvamVjdCB1c2VzIGEgQ29jb29uCiAgICAgICAgPGxpbmsgaHJlZj0ic2l0ZTp2MC43MC8vZmFxL2NsaS14Y29uZiI+Y2xpLnhjb25mPC9saW5rPgogICAgICAgIHRoZW4geW91IHdpbGwgbmVlZCBhZGQgdGhlIHNhbWUgImV4Y2x1ZGUiIGVudHJpZXMuCiAgICAgICBDb21taXR0ZWQgYnkgREMuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTI4NCI+Rk9SLTI4NDwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgIEhhbmRsZSBGQVFzIHNlY3Rpb25zIGFuZCBmYXFzIHdpdGggYm90aCBob3d0by12MS4qIGFuZCBob3d0by12Mi4qIGRvY3MuCiAgICAgICBBcHBseSBwcm9wZXIgc2VjdGlvbiBudW1iZXJpbmcuCiAgICAgICBDb21taXR0ZWQgYnkgREMuIFRoYW5rcyB0byBNYXJrIEVnZ2Vycy4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItNDc5Ij5GT1ItNDc5PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIEFkZGVkIEZBUSBhYm91dCAicGFnZUJyZWFrQmVmb3JlIiBhbmQgInBhZ2VCcmVha0FmdGVyIiBjbGFzcyBpbnQgUERGIAogICAgICAgIGRvY3VtZW50cyBhbmQgZGVzY3JpYmUgaG93IHRvIGVuYWJsZSB0aGUgcGFnZSBicmVhayBiZWhhdmlvdXIgaW4gSFRNTAogICAgICAgIGRvY3VtZW50cy4KICAgICAgIENvbW1pdHRlZCBieSBSREcuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBVc2UgInBhZ2VCcmVha0JlZm9yZSIgYW5kICJwYWdlQnJlYWtBZnRlciIgY2xhc3MgdG8gc2VjdGlvbnMgdG8gZm9yY2UgYQogICAgICAgIHBhZ2UgYnJlYWsgaW4gUERGIG91dHB1dC4KICAgICAgIENvbW1pdHRlZCBieSBSREcuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBNb3ZlZCBzdGF0dXMgImNoYW5nZXMiIGFuZCAidG9kbyIgcGFnZSBnZW5lcmF0aW9uIHRvIHRoZQogICAgICAgIG9yZy5hcGFjaGUuZm9ycmVzdC5wbHVnaW4uaW5wdXQucHJvamVjdEluZm8gcGx1Z2luLgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFVwZGF0ZWQgbmVrb2R0ZCB0byAwLjEuMTEKICAgICAgIENvbW1pdHRlZCBieSBBRy48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFVwZGF0ZSBmb3AtMC4yMC41IGp1c3Qgd2l0aCBvcHRpb25hbCBqaW1pIHN1cHBvcnQuCiAgICAgICAgVGhpcyBmaXhlcyB0aGUgaXNzdWUgYnVpbGRpbmcgdGhlIEFwYWNoZSBGT1Agc2l0ZS4KICAgICAgICBSZXBsYWNlIGxpYnJhcmllcyB0byB1c2UgdGhlIGNvY29vbi0yLjIuMC1kZXYgdmVyc2lvbi4KICAgICAgIENvbW1pdHRlZCBieSBKSlAuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICA8bGluayBocmVmPSJzaXRlOnYwLjcwLy9mYXEvcmVxdWlyZW1lbnRzIj5KYXZhIDEuNCBpcyByZXF1aXJlZDwvbGluaz4KICAgICAgICBzdGFydGluZyB3aXRoIEZvcnJlc3QtMC43LWRldgogICAgICAgQ29tbWl0dGVkIGJ5IERDLjwvbGk+PC91bD48L3NlY3Rpb24+PHNlY3Rpb24+PHRpdGxlPkNoYW5nZXMgdG8gRG9jdW1lbnRhdGlvbjwvdGl0bGU+PHVsPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgo8IS0tIFBsZWFzZSBrZWVwIHRoaXMgYWN0aW9uIGF0IHRoZSB0b3AgLS0+CiAgICAgICAgQWRkZWQgZG9jdW1lbnQgdG8gZmFjaWxpdGF0ZQogICAgICAgIDxsaW5rIGhyZWY9InNpdGU6djAuNzAvL3VwZ3JhZGluZ18wNyI+dXBncmFkaW5nIHRvIHYwLjc8L2xpbms+CiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBSZW1vdmVkIHRoZSBsZWF0aGVyLWRldiBkb2NzIGFuZCBhZGRlZCB0aGUgYmVnaW5pbmcgb2YgdGhlIFZpZXcgcGx1Z2luIGRvY3MuCiAgICAgICBDb21taXR0ZWQgYnkgVFMuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgQWRkZWQgCiAgICAgIDxsaW5rIGhyZWY9InNpdGU6djAuNzAvL2hvd3RvL2N1c3RvbS1odG1sLXNvdXJjZSI+SG93IHRvIGN1c3RvbWl6ZQogICAgICBwcm9jZXNzaW5nIG9mIGh0bWwgc291cmNlPC9saW5rPgogICAgICAgQ29tbWl0dGVkIGJ5IERDLiBUaGFua3MgdG8gRmVyZGluYW5kIFNvZXRoZS4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItNDQ2Ij5GT1ItNDQ2PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICBBZGRlZCA8bGluayBocmVmPSJzaXRlOnYwLjcwLy9ob3d0by9tYXZlbiI+SG93LVRvIFJ1biBGb3JyZXN0IGZyb20gTWF2ZW48L2xpbms+LgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy4gVGhhbmtzIHRvIElhbiBQLiBTcHJpbmdlci4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMzY5Ij5GT1ItMzY5PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICBBZGRlZCA8bGluayBocmVmPSJzaXRlOnYwLjcwLy9ob3d0by9idWlsZFBsdWdpbiI+SG93LVRvIEJ1aWxkIGEgcGx1Z2luPC9saW5rPi4KICAgICAgIENvbW1pdHRlZCBieSBSREcuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgU3BsaXQgcGx1Z2luIGRvY3VtZW50YXRpb24gYmV0d2VlbiAKICAgICAgPGxpbmsgaHJlZj0ic2l0ZTpwbHVnaW5zL3VzaW5nIj51c2VyPC9saW5rPiBhbmQKICAgICAgPGxpbmsgaHJlZj0ic2l0ZTpwbHVnaW5zL2luZnJhc3RydWN0dXJlIj5kZXZlbG9wZXI8L2xpbms+IHRvcGljcy4KICAgICAgIENvbW1pdHRlZCBieSBSREcuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBIb3dUbyBhYm91dAogICAgICAgIDxsaW5rIGhyZWY9InNpdGU6djAuNzAvL2hvd3RvL2VkaXRjc3MiPmVkaXRpbmcgQ1NTPC9saW5rPiBpbiBhIFdZU0lXWUcgZmFzaGlvbiB1c2luZyBNb3ppbGxhIEZpcmVmb3gKICAgICAgICBhbmQgaXRzIEVkaXQtQ1NTIHBsdWdpbi4KICAgICAgIENvbW1pdHRlZCBieSBSREcuIFRoYW5rcyB0byBGZXJkaW5hbmQgU29ldGhlLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkZWQgY3VzdG9tIHhtbCBzYW1wbGUgYW5kIHByb2plY3Qgc2l0ZW1hcCB0byB0aGUgJ2ZvcnJlc3Qgc2VlZCBzaXRlJy4KICAgICAgIENvbW1pdHRlZCBieSBKSlAuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCAKICAgICAgICA8bGluayBocmVmPSJzaXRlOnYwLjcwLy9ob3d0by9jb3JuZXItY3NzIj5Ib3cgdG8gbW9kaWZ5IHRoZSBjb2xvciBvZiBnZW5lcmF0ZWQgY29ybmVyIGltYWdlczwvbGluaz4uIAogICAgICAgQ29tbWl0dGVkIGJ5IERDLiBUaGFua3MgdG8gU3RlcGhhbiBFLiBTY2hsaWVyZi4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMzUxIj5GT1ItMzUxPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIGxpbmtzIHRvIGV4YW1wbGUgd2Vic2l0ZXMgdG8gZGVtb25zdHJhdGUgZWFjaCBhdmFpbGFibGUKICAgICAgICA8bGluayBocmVmPSJzaXRlOnYwLjcwLy9za2lucyI+ZGVmYXVsdCBza2luPC9saW5rPi4gCiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBSZXdyb3RlIGV4YW1wbGUgb2YgcmF3IGNvbnRlbnQgaW4gZnJlc2gtc2l0ZSB0byBjb3JyZWN0bHkgZG9jdW1lbnQgdGhlCiAgICAgICAgYmVoYXZpb3VyIGluIDAuNy4KICAgICAgIENvbW1pdHRlZCBieSBSREcuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTQ3MCI+Rk9SLTQ3MDwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBSZW1vdmVkIGlodG1sIGV4YW1wbGUgZnJvbSBmcmVzaC1zaXRlIGFuZCByZXBsYWNlZCB3aXRoIGFuIGV4YW1wbGUgb2YgZW1iZWRkZWQgSFRNTC4KICAgICAgICBUaGUgdXNlIG9mIGlodG1sIGlzIG5vdyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBlbWJlZGRlZCBIVE1MLgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIEFsbG93IHRoZSBzZXJ2aW5nIG9mIHJhdyBTVkcgZmlsZXMgdG8gYWxsb3cgY2xpZW50cyB0byByZW5kZXIgbG9jYWxseS4KICAgICAgIENvbW1pdHRlZCBieSBSREcuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTE4NSI+Rk9SLTE4NTwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBQbHVnaW4gZG9jcyBhcmUgbm93IHVwYXRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYSBwbHVnaW4gaXMgZGVwbG95ZWQuCiAgICAgICAgQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHVwZGF0ZSB0aGUgZG9jcyBpbmRlcGVuZGFudGx5IGJ5IHJ1bm5pbmcgdGhlIAogICAgICAgIGRlcGxveS1kb2NzIHRhcmdldCBpbiB0aGUgcGx1Z2luIGRpcmVjdG9yeS4KICAgICAgIENvbW1pdHRlZCBieSBSREcuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBSZW1vdmVkIG9sZCB2ZXJzaW9ucyBvZiBwcmUtcmVsZWFzZSBwbHVnaW5zIGZvbGxvd2luZyByZW5hbWluZyB0byB0aGUKICAgICAgICBjb252ZW50aW9uIGRlZmluZWQgaW4KICAgICAgICA8bGluayBocmVmPSJzaXRlOnBsdWdpbnMvaW5mcmFzdHJ1Y3R1cmUiPlBsdWdpbiBJbmZyYXN0cnVjdHVyZTwvbGluaz4uCiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBBZGRlZCBGQVEgdG8gZXhwbGFpbiBjaGFyYWN0ZXIgZW5jb2RpbmcgZm9yIGNlcnRhaW4gbGFuZ3VhZ2VzLgogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC4gVGhhbmtzIHRvIEpvYW8gRmVycmVpcmEuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTMwNSI+Rk9SLTMwNTwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBVcGRhdGVkIEhvdy1UbzoKICAgICAgICA8bGluayBocmVmPSJzaXRlOnYwLjcwLy9wZGYtdGFiIj5Ib3cgdG8gY3JlYXRlIGEgUERGIGRvY3VtZW50IGZvciBlYWNoCiAgICAgICAgdGFiPC9saW5rPiB0byBjcmVhdGUgc3ViamVjdC1zcGVjaWZpYyBhZ2dyZWdhdGVkIGRvY3VtZW50cy4KICAgICAgIENvbW1pdHRlZCBieSBUUy48L2xpPjwvdWw+PC9zZWN0aW9uPjxzZWN0aW9uPjx0aXRsZT5Db250cmlidXRvcnMgdG8gdGhpcyByZWxlYXNlPC90aXRsZT48cD5XZSB0aGFuayB0aGUgZm9sbG93aW5nIHBlb3BsZSBmb3IgdGhlaXIgY29udHJpYnV0aW9ucyB0byB0aGlzIHJlbGVhc2UuPC9wPjxwPlRoaXMgaXMgYSBsaXN0IG9mIGFsbCBwZW9wbGUgd2hvIHBhcnRpY2lwYXRlZCBhcyBjb21taXR0ZXJzOjxici8+QW50b25pbyBHYWxsYXJkbyAoQUcpLCBEYXZlIEJyb25kc2VtYSAoREIpLCBEYXZpZCBDcm9zc2xleSAoREMpLCBKdWFuIEpvc2UgUGFibG9zIChKSlApLCBSb3NzIEdhcmRsZXIgKFJERyksIFJpY2sgVGVzc25lciAoUkZUKSwgVGhvcnN0ZW4gU2NoZXJsZXIgKFRTKS48L3A+PHA+VGhpcyBpcyBhIGxpc3Qgb2Ygb3RoZXIgY29udHJpYnV0b3JzOjxici8+Q3lyaWFxdWUgRHVwb2lyaWV1eCwgRmVyZGluYW5kIFNvZXRoZSwgRmxvcmlhbiBHLiBIYWFzLCBHYXJ5IEZlbGRtYW4sIElhbiBQLiBTcHJpbmdlciwgSm9hbyBGZXJyZWlyYSwgSm9oYW5uZXMgU2NoYWVmZXIsIEr2cmcgV2VybmVyLCBLZXZpbiwgTWFyayBFZ2dlcnMsIFJvbiBCbGFzY2hrZSwgU2p1ciBOLiBNb3NoYWdlbiwgU3RlcGhhbiBFLiBTY2hsaWVyZiwgVGFtYXJhIEhhcnBzdGVyLCBVcGF5YXZpcmEuPC9wPjwvc2VjdGlvbj48L3NlY3Rpb24+CiAgICA8c2VjdGlvbiBpZD0idmVyc2lvbl8wLjYiPjx0aXRsZT5WZXJzaW9uIDAuNiAoMjAwNC0xMC0xNSk8L3RpdGxlPjxzZWN0aW9uPjx0aXRsZT5DaGFuZ2VzIHRvIFByb2plY3QgQWRtaW5pc3RyYXRpb248L3RpdGxlPjx1bD48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBNb3ZlZCBmb3JyZXN0Ym90MiBmcm9tIHNjcmF0Y2hwYWQgaW50byBtYWluLiAgVXNlcyBhbnQgMS42J3MgCiAgICAgICAgJ2ltcG9ydCcgdGFzayBpbnN0ZWFkIG9mIFhTTFQvYW50LiAgV2ViYXBwIGNvbXBsZXRlbHkKICAgICAgICByZXdyaXR0ZW4gdG8gdXNlIEpTVEwsIFN0cnV0cywgSmF2YSB1dGlsaXR5IGNsYXNzZXMsIGFuZCAKICAgICAgICBPcGVuU3ltcGhvbnkncyBPU1VzZXIgZm9yIGZsZXhpYmxlIGF1dGhlbnRpY2F0aW9uLgogICAgICAgQ29tbWl0dGVkIGJ5IERCLjwvbGk+PC91bD48L3NlY3Rpb24+PHNlY3Rpb24+PHRpdGxlPkNoYW5nZXMgdG8gQnVpbGQ8L3RpdGxlPjx1bD48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBOZXcgJ2NsZWFuLWRpc3QnIHRhcmdldCBmb3IgYnVpbGQueG1sLCB3aGljaCBpcyBub3cgdGhlIGRlZmF1bHQgdGFyZ2V0LgogICAgICAgQ29tbWl0dGVkIGJ5IERCLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi0xMDgiPkZPUi0xMDg8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgVGhlICd2YWxpZGF0ZS1zaXRlJyBidWlsZCB0YXJnZXQgd2lsbCB2YWxpZGF0ZSB0aGUgaW50ZXJtZWRpYXRlIHhkb2NzLgogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFN1cHBvcnQgcnVubmluZyBGb3JyZXN0IG9uIFdpbjl4LgogICAgICAgQ29tbWl0dGVkIGJ5IERCLiBUaGFua3MgdG8gUGllcnJpY2sgQnJpaGF5ZS4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMTEzIj5GT1ItMTEzPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIERvbid0IGNvcHkgdW5uZWVkZWQgcHJvamVjdCBmaWxlcyBpbiAnd2FyJyBhbmQgJ3dlYmFwcCcgdGFyZ2V0cy4KICAgICAgIENvbW1pdHRlZCBieSBEQi4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMjA3Ij5GT1ItMjA3PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIEFkZCBtb3JlIGRlc2NyaXB0aW9ucyB0byBmb3JyZXN0IHRhcmdldHMuICBIaWdobGlnaHQgdGhlIG1vc3QgY29tbW9uIG9uZXMuCiAgICAgICBDb21taXR0ZWQgYnkgREIuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTIxNiI+Rk9SLTIxNjwvbGluaz4uPC9saT48L3VsPjwvc2VjdGlvbj48c2VjdGlvbj48dGl0bGU+Q2hhbmdlcyB0byB0aGUgQ29kZSBCYXNlPC90aXRsZT48dWw+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkZWQgaW5pdGlhbCB3aGl0ZWJvYXJkIGludGVybmFsIHBsdWdpbiAiSU1TTWFuaWZlc3QiLgogICAgICAgIEFsdGVybmF0aXZlIG5hdmlnYXRpb24gbWV0aG9kLiBHZW5lcmF0ZXMgbWVudSBsaW5rcyBmcm9tCiAgICAgICAgSU1TIE1hbmlmZXN0cyAoTGVhcm5pbmcgT2JqZWN0cykuCiAgICAgICBDb21taXR0ZWQgYnkgUkRHLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+IAogICAgICAgIGdldE1lbnUuanMgLSBmaXhlcyBhIHBhdGggaXNzdWUgYW5kIHRoZSBkb3VibGUgY2xpY2sgYmVoYXZpb3VyIG9mIHBlbHQuCiAgICAgICBDb21taXR0ZWQgYnkgVFMuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4gCiAgICAgICAgRXhwbGFpbmVkIHRoZSB1c2FnZSBvZiB0aGUgZXh0cmEtY3NzIGVsZW1lbnQgaW4gc2tpbmNvbmYueG1sIG9mIHRoZSBmcmVzaCBzaXRlLgogICAgICAgQ29tbWl0dGVkIGJ5IFRTLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgSW5pdGlhbCBDaGFwZXJvbiBncmFtbWFyIGZvciBtaW5pbWFsIE1vaW5Nb2luIFdpa2kgdG8gRm9ycmVzdCB4ZG9jcwogICAgICAgIHRyYW5zZm9ybWF0aW9uLiBTb3VyY2UgZG9jdW1lbnRzIHVzZSB0aGUgKi5tb2lud2lraSBmaWxlbmFtZSBleHRlbnNpb24uCiAgICAgICBDb21taXR0ZWQgYnkgREMuIFRoYW5rcyB0byBGYWJpbyBSaW5hbGRpLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi0yNjgiPkZPUi0yNjg8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgUmVxdWVzdGluZyBsaW5rbWFwLmh0bWwgRm9ycmVzdCBub3cgcmVuZGVycyB0aGUgc2l0ZS54bWwgCiAgICAgICAgZmlsZSBhcyBhIHRhYmxlIG9mIGNvbnRlbnRzLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIE5vdyB0aGUgKi5paHRtbCBhbmQgKi5jd2lraSBleHRlbnNpb25zIGFyZSBkZXByZWNhdGVkLiAKICAgICAgICBUbyBnZXQgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBpdCBpcyByZWNvbW1lbmRlZCB0byBzd2l0Y2ggdG8gCiAgICAgICAgKi5odG1sIGFuZCAqLmpzcHdpa2kuIFdpdGggdGhpcyBpdCdzIG5vdyBwb3NzaWJsZSB0byBoYXZlIGEgCiAgICAgICAgc2l0ZSBpbiBzaW1wbGUgaHRtbCwgZWRpdGVkIHdpdGggYW55IGh0bWwgZWRpdG9yLiAKICAgICAgICBUaGUgKi5qc3B3aWtpIGV4dGVuc2lvbiB3YXMgcHV0IHRvIG1ha2UgaXQgY2xlYXIgd2hhdCB0aGUgCiAgICAgICAgZm9ybWF0IGlzIGFib3V0LgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIE5ldyBwcm9qZWN0IHNpdGVtYXAgZXh0ZW5zaW9uIG1lY2hhbmlzbS4gTm93IGl0IGlzIHBvc3NpYmxlIHRvIGFkZAogICAgICAgIGEgcHJvamVjdCBzaXRlbWFwIHRoYXQgcGx1Z3MgaW50byB0aGUgcHJvY2Vzc2luZyBhdCB0aGUgYmVnaW5uaW5nLgogICAgICAgIElmIHRoZSByZXF1ZXN0ZWQgdXJsIGlzIHJlc29sdmVkIGJ5IGl0LCBpdCB3aWxsIHNlcnZlIHRoZSBmaWxlIGRpcmVjdGx5LgogICAgICAgIElmIHRoZSByZXF1ZXN0ZWQgdXJsIHdpdGggdGhlIGV4dGVuc2lvbiBjaGFuZ2VkIHRvIHhtbCBpcyBtYXRjaGVkLCB0aGVuCiAgICAgICAgRm9ycmVzdCB3aWxsIHVzZSB0aGF0IHJlc3VsdCBhcyB0aGUgaW50ZXJtZWRpYXRlIGZvcm1hdCBhbmQgcmVuZGVyIGl0LgogICAgICAgIFRoaXMgd2lsbCBlbmFibGUgcHJvamVjdC1zcGVjaWZpYyBzaXRlbWFwcyB0byBub3QgY29sbGlkZSB3aXRoIGZ1dHVyZQogICAgICAgIEZvcnJlc3QgdXBkYXRlcy4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICAgQWRkZWQgY29uZmlndXJhdGlvbiBmb3IgWE1MTWluZCBYTUwgRWRpdG9yIHRvIHNjcmF0Y2hwYWQuICBPcmlnaW5hbGx5CiAgICAgICAgIGZyb20gc3BsaWtlLmNvbQogICAgICAgQ29tbWl0dGVkIGJ5IERCLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQXV0b21hdGljYWxseSBhZGQgc29tZSBtZXRhIGVsZW1lbnRzIHRvIGhlYWQgb2YgaHRtbAogICAgICAgIChHZW5lcmF0b3IgbmFtZSwgRm9ycmVzdCB2ZXJzaW9uLCBza2luIG5hbWUpCiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBPcHRpb25hbCBmZWVkYmFjayBsaW5rIGZvciB0aGUgZm9vdGVyIG9mIGFsbCBza2lucy4KICAgICAgIENvbW1pdHRlZCBieSBEQy48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIE5ldyBvdXRwdXQgZm9ybWF0IGZvciBQT0QgKHRoZSBQZXJsIGNvbW11bml0eSdzIFBsYWluIE9sZCBEb2N1bWVudGF0aW9uKQogICAgICAgIHRyaWdnZXJlZCB1c2luZyB0aGUgLnBvZCBmaWxlbmFtZSBleHRlbnNpb24uCiAgICAgICAgSW5pdGlhbCB3b3JrLCBuZWVkcyBlbmhhbmNlbWVudC4gU2VlCiAgICAgICAgPGxpbmsgaHJlZj0iaHR0cDovL21hcmMudGhlYWltc2dyb3VwLmNvbS8/dD0xMDc1MTI1NjM0MDAwMDEiPmZvcnJlc3QtZGV2CiAgICAgICAgICBkaXNjdXNzaW9uPC9saW5rPgogICAgICAgQ29tbWl0dGVkIGJ5IERDLiBUaGFua3MgdG8gUmljayBUZXNzbmVyLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgRWNsaXBzZSBwbHVnaW4gY29kZSBhZGRlZCB0byBzY3JhdGNocGFkIChkb25hdGVkIGJ5IDxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuYnVycm9rZWV0Lm9yZy8iPkJ1cnJva2VldDwvbGluaz4pLgogICAgICAgIEluaXRpYWwgd29yaywgbmVlZHMgZW5oYW5jZW1lbnQuCiAgICAgICBDb21taXR0ZWQgYnkgUkRHLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkZWQgZm9ycmVzdGJvdCBkZXBsb3kuc3ZuIGltcGxtZW50YXRpb24uCiAgICAgICBDb21taXR0ZWQgYnkgREIuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTIxOSI+Rk9SLTIxOTwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBUaGUgbmV3ICJwZWx0IiBza2luICh1c2VzIENTUyBhbmQgZGl2KS4KICAgICAgICBTZWUgbm90ZXMgYWJvdXQgPGxpbmsgaHJlZj0ic2l0ZTp2MC43MC8vc2tpbnMiPkRlZmF1bHQgc2tpbnM8L2xpbms+LgogICAgICAgQ29tbWl0dGVkIGJ5IFRTLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi0xODIiPkZPUi0xODI8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgSW4gc2tpbmNvbmZpZywgYWRkIGJveC1sb2NhdGlvbiBhdHRyaWJ1dGUgdG8gc2VhcmNoIGVsZW1lbnQuCiAgICAgICBDb21taXR0ZWQgYnkgREIuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTE0MiI+Rk9SLTE0MjwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBMb2NhdGlvbm1hcCBtb2R1bGVzIGFkZGVkLiAgTm90IGluIHVzZSB5ZXQuCiAgICAgICBDb21taXR0ZWQgYnkgTktCLiBUaGFua3MgdG8gVW5pY28gSG9tbWVzLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgRm9ycmVzdGRvYyBjb2RlIGFkZGVkIHRvIHNjcmF0Y2hwYWQ7IHByZXZpb3VzbHkgd2FzIDxsaW5rIGhyZWY9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvYWxleGFuZHJpYS8iPkpha2FydGEgQWxleGFuZHJpYTwvbGluaz4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGQgJmx0O2NvcHlyaWdodC1saW5rJmd0OyBlbGVtZW50IHRvIHNraW5jb25mCiAgICAgICBDb21taXR0ZWQgYnkgREIuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTEyMCI+Rk9SLTEyMDwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBOZXcgc3R5bGVzaGVldCB0byBpbXBvcnQgdGhlIG9yaWdpbmFsIGNvY29vbi54Y29uZiBmaWxlCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgTW92ZSBjb250ZXh0IHRhcmdldHMgZnJvbSBmb3JyZXN0LmJ1aWxkLnhtbCB0byB0YXJnZXRzL2NvbnRleHQKICAgICAgICBVc2Ugc2tpbmNvbmYgRFRELgogICAgICAgIFVzZSB4bWx2YWxpZGF0ZSBmb3Igc2tpbmNvbmYuCiAgICAgICAgQ3JlYXRlIHVwZ3JhZGVza2luY29uZi54c2wgZm9yIG9sZCBza2luY29uZi54bWwgZmlsZXMKICAgICAgIENvbW1pdHRlZCBieSBKSlAuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBUaGUgbGFuZ3VhZ2UgYWx0ZXJuYXRpdmUgZGl2IGRpc3BsYXlzIGxhbmd1YWdlIGluIHlvdXIgb3duIGxhbmd1YWdlLgogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIERvY2Jvb2sgc3VwcG9ydCBmb3IgcmVmZW50cnkgZWxlbWVudCBhbmQgaXQncyBjaGlsZHJlbi4gIEdlbmVyYWxseSB1c2VkIGZvciBtYW4gcGFnZXMuCiAgICAgICBDb21taXR0ZWQgYnkgREIuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBEbyBub3QgY3JlYXRlIFRvQyB1bmxlc3MgaXQgaGFzIGJlZW4gZGVmaW5lZCBvbiB0aGUgc2tpbmNvbmYuCiAgICAgICAgQ2hhbmdlIGxldmVsIGF0dHJpYnV0ZSB0byBtYXgtZGVwdGggYXR0cmlidXRlLgogICAgICAgIEFkZCBhIG1pbi1zZWN0aW9ucyBhdHRyaWJ1dGUgdG8gZGVmaW5lIGEgbWluaW11biBudW1iZXIgb2Ygc2VjdGlvbnMgCiAgICAgICAgYmVmb3JlIGNyZWF0ZSBhIHRvYy4KICAgICAgIENvbW1pdHRlZCBieSBKSlAuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGQgTGFuZ3VhZ2UgYWx0ZXJuYXRpdmVzIGRpdi4gVG8gdGVzdCBpdDoKICAgICAgICBpMThuLWZvby5odG1sCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgUGFnZSBzaXplIGFuZCBvcmllbnRhdGlvbiBmb3IgcGRmLgogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC4gVGhhbmtzIHRvIEZsb3JpYW4gRy4gSGFhcy4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMTEyIj5GT1ItMTEyPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIFNraW5jb25mVHJhbnNmb3JtZXIsIHRoYXQgYXVnbWVudHMgdGhlIHNraW5jb25mLnhtbCAKICAgICAgICBieSBhZGRpbmcgdGhlc2UgYXR0cmlidXRlcyB0byBjb2xvcnMgaWYgbm90IHByZXNlbnQ6CiAgICAgICAgQGhpZ2hsaWdodCwgQGxvd2xpZ2h0LCBAZm9udCwgQGxpbmssIEB2bGluaywgQGhsaW5rLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIE5vdyBza2lucyBjYW4gZ2V0IGEgc3RhYiBhdCBlbmhhbmNpbmcgc2tpbmNvbmYueG1sLCBieSBwbGFjaW5nCiAgICAgICAgYSBza2luY29uZi54c2wgZmlsZSBpbiB0aGUgc2tpbiBkaXJlY3RvcnkuCiAgICAgICAgQnkgZGVmYXVsdCBzb21lIHZhbHVlcyBhcmUgYWRkZWQgYnkgdGhlIGNvbW1vbiBza2luLCBsaWtlCiAgICAgICAgZGVmYXVsdCBGb3JyZXN0IGNvbG9ycy4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGQgc3VwcG9ydCBmb3IgT3Blbm9mZmljZSBXcml0ZXIgMS4xIGZpbGVzLgogICAgICAgQ29tbWl0dGVkIGJ5IFJQLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICBGaXhlcyB0byB0aGUga3J5c2FsaXMgc2tpbiB0byBicmluZyBpdCB1cCB0byBzbnVmZi4KICAgICAgIEFkZGVkIGxhdGVyYWwgc2VhcmNoIGJhci4KICAgICAgIEFkZGVkIGNyZWRpdHMgc2VjdGlvbi4KICAgICAgIFVzZSBhdXRvbWF0aWNhbGx5IHNraW5uYWJsZSBib3JkZXJzCiAgICAgICBGaXggY29kZSBmb250IHNpemUuCiAgICAgICBPdGhlciBzbWFsbCBlbmhhbmNlbWVudHMuCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgTmV3ICJleHRyYS1jc3MiIHRhZyBpbiBza2luY29uZiBjYW4gY29udGFpbiBjc3MgdGhhdCBpcyBpbmplY3RlZCBpbgogICAgICAgIGZvcnJlc3QuY3NzLCBhZGRlZCBpbiB0aGUgc2tpbnMgYnkgZGVmYXVsdC4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBOZXcgc2VjdGlvbiBpbiBza2luY29uZiBhYm91dCBjb2xvcnMgdXNlZCBieSB0aGUgc2l0ZS4gCiAgICAgICAgRW5hYmxlZCBmb3Iga3J5c2FsaXMtc2l0ZSBhbmQgdGlncmlzLXN0eWxlLiAKICAgICAgICBJZiBhIG5lZWRlZCBjb2xvciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBvbmUgaXMgdXNlZC4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBOb3cgc2tpbiByZXNvdXJjZXMgY2FuIGJlIGdlbmVyYXRlZCBmcm9tIHNraW5jb25mLnhtbCBmcm9tIHhzbHQuCiAgICAgICAgRm9yIGV4YW1wbGUgJy9teXNraW4vY3NzL215LmNzcy54c2x0JyBpcyB1c2VkIGJ5IGZvcnJlc3Qgb24gJ3NraW5jb25mLnhtbCcKICAgICAgICB0byBnZXQgJ215LmNzcycKICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBJdCBpcyBub3cgcG9zc2libGUgdG8gaGF2ZSB0d28gbGV2ZWxzIG9mIHRhYnMuCiAgICAgICBDb21taXR0ZWQgYnkgTktCLiBUaGFua3MgdG8gPGxpbmsgaHJlZj0ibWFpbHRvOnJvc3NAc2FhZmUub3JnIj5Sb3NzIEdhcmRsZXI8L2xpbms+LiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi05OCI+Rk9SLTk4PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEV4dGVybmFsIGxpbmtzIGFyZSBub3cgaWRlbnRpZmllZCBieSBhIHNtYWxsIHRyYWlsaW5nIGljb24uCiAgICAgICAgVGhlIGljb24gY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHNraW4gYW5kIHRoZSBiZWhhdmlvdXIKICAgICAgICBjYW4gYmUgZGlzYWJsZWQgaW4gc2tpbmNvbmYueG1sLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIG5ldyAndGlncmlzJyBza2luLCBieSB1c2luZyBleGFjdGx5IHRoZSBzYW1lIAogICAgICAgIHNraW4gdmVyc2lvbiAxLjEuIGZyb20gdGhlIHByb2plY3QgU3R5bGUgYXQgaHR0cDovL3N0eWxlLnRpZ3Jpcy5vcmcvLgogICAgICAgIFRoaXMgd2lsbCBjb21wbGV0ZWx5IHJlcGxhY2UgdGhlIGF2YWxvbi10aWdyaXMgc2tpbiBpbiBzdWJzZXF1ZW50IHZlcnNpb25zLgogICAgICAgIFRoZSBhdmFsb24tdGlncmlzIHNraW4gaXMgdG8gYmUgY29uc2lkZXJlZCBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgCiAgICAgICAgZGV2ZWxvcGVkLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIFByb3BlcnRpZXMgZnJvbSAke3VzZXIuaG9tZX0vZm9ycmVzdC5wcm9wZXJ0aWVzIGFyZSBsb2FkZWQsIGFmdGVyCiAgICAgICAgdGhlIHByb2plY3QncyBmb3JyZXN0LnByb3BlcnRpZXMgYW5kIGJlZm9yZSB0aGUgZGVmYXVsdC1mb3JyZXN0LnByb3BlcnRpZXMgYXJlLgogICAgICAgQ29tbWl0dGVkIGJ5IERCLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICBOZXcgZmlsZSBmb3JtYXQ6ICcuYWFydCcuIFRoZXNlIGFyZSB0ZXh0IGZpbGVzIHRoYXQgYXJlIGNvbnZlcnRlZAogICAgICAgYXV0b21hdGljYWxseSBiZSBDb2Nvb24gaW4gU1ZHLCBpZiByZXF1ZXN0ZWQgd2l0aCBhICcucG5nJyBleHRlbnNpb24uCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgICBOb3cgaW1hZ2VzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgeGRvY3MgY29udGVudCBkaXIgYXMgaWYgdGhleQogICAgICAgICAgd2VyZSBpbiB0aGUgcmVzb3VyY2VzL2ltYWdlcyBkaXIuIFRoZSBsYXR0ZXIgd2lsbCBiZSBwaGFzZWQgb3V0LgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgICAgQWRkZWQgYSBuZXcgcHJvcGVydHkgdG8gZm9ycmVzdC5wcm9wZXJ0aWVzCiAgICAgICAgICAgKHByb2plY3QucmF3LWNvbnRlbnQtZGlyPSR7cHJvamVjdC5jb250ZW50LWRpcn0vY29udGVudCkKICAgICAgICAgICB0byBkZWZpbmUgd2hlcmUgcmF3IGZpbGVzIGFyZSB0byBiZSBzZXJ2ZWQgZnJvbS4KICAgICAgICAgICBBbHNvIHJlbW92ZWQgdGhlIGludGVybmFsIHByb3BlcnR5IHJlYWwtY29udGVudC5kaXIgdGhhdCB3YXMKICAgICAgICAgICB1c2VkIGludGVybmFsbHkgZm9yIHRoaXMgYW5kIHJlcGxhY2VkIGl0IHdpdGggYSByYXctY29udGVudC5kaXIKICAgICAgICAgICBwcm9wZXJ0eS4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICAgIFBhdGNoIGZhY2lsaXR5IHRvIGJlIHVzZWQgYnkgYW55IGNvbnRyaWJ1dG9yIChGcm9tIEFudCdzIHByb2plY3QpLgoJICBUbyB1c2UgaXQgcnVuICJidWlsZC5bc2h8YmF0XSBwYXRjaCIuCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLiBUaGFua3MgdG8gPGxpbmsgaHJlZj0ibWFpbHRvOkphbi5NYXRlcm5lQHJ6Zi5maW4tbnJ3LmRlIj5KYW4gTWF0ZXJuZTwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBTa2lucyBjYW4gbm93IGJlIHBhY2thZ2VkLCBkb3dubG9hZGVkIGFuZCBhdXRvbWF0aWNhbGx5IGluc3RhbGxlZC4KICAgICAgICBTZWUgPGxpbmsgaHJlZj0ic2l0ZTp2MC43MC8vc2tpbi1wYWNrYWdlIj5kb2N1bWVudGF0aW9uPC9saW5rPi4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgIEZpcnN0IEkxOG4gaW50ZWdyYXRpb24gZm9yIG1lbnVzIGluIGZvcnJlc3QuCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi05Ij5GT1ItOTwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBJbnRlZ3JhdGUgTHVjZW5lIG9uIEZvcnJlc3QuIENoZWNrIHRoZSBidWcgcmVwb3J0IGZvciBtb3JlIGluZm8uCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLiBUaGFua3MgdG8gPGxpbmsgaHJlZj0ibWFpbHRvOnJwcmFkZXNAcG9yY2VsYW5vc2EuY29tIj5SYW3zbiBQcmFkZXM8L2xpbms+LiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi05Ij5GT1ItOTwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBYU1Agc3VwcG9ydC4KCUZvciBvbGQgc2l0ZW1hcC54bWFwIGFkZCB0aGlzIHRhZzoKCSZsdDttYXA6Z2VuZXJhdG9yIG5hbWU9InNlcnZlcnBhZ2VzIiAKCXNyYz0ib3JnLmFwYWNoZS5jb2Nvb24uZ2VuZXJhdGlvbi5TZXJ2ZXJQYWdlc0dlbmVyYXRvciIvJmd0OwogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItNTYiPkZPUi01NjwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBkb2Nib29rMmRvY3VtZW50LnhzbDogcmVtb3ZlIHVubmVjZXNzYXJ5IC8gZnJvbSB0ZW1wbGF0ZSBtYXRjaGVzLgogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC4gVGhhbmtzIHRvIFNlYW4gV2hlbGxlci4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMzE3Ij5GT1ItMzE3PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIGRvY2Jvb2syZG9jdW1lbnQueHNsOiBkb2NpbmZvIGVsZW1lbnQuIG5ldmVyIGluIE9BU0lTIERvY2Jvb2sgWE1MIERURCAKICAgICAgIENvbW1pdHRlZCBieSBKSlAuIFRoYW5rcyB0byBTZWFuIFdoZWxsZXIuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTMxNiI+Rk9SLTMxNjwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBkb2Nib29rMmRvY3VtZW50LnhzbDogaGFuZGxlIHRoZSB4cmVmIGFuZCB4cmVmbGFiZWwuCiAgICAgICBDb21taXR0ZWQgYnkgREMuIFRoYW5rcyB0byBTZWFuIFdoZWxsZXIuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTMwOCI+Rk9SLTMwODwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBQcm9wZXIgcG9zaXRpb25pbmcgb2YgaWNvbi9saW5rcyBmb3IgUERGLCBYTUwsIFBPRCwgUHJpbnQgY29udGVudAogICAgICAgIG9wdGlvbnMgb24gcGVsdCBza2luLgogICAgICAgQ29tbWl0dGVkIGJ5IERDLiBUaGFua3MgdG8gQXJ0dXJvIFZhenF1ZXouPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBBbGxvdyBmb3JyZXN0IHRvIHJ1biBpbiBhIHByb2plY3QgZGlyZWN0b3J5IHdpdGggYSBzcGFjZSBpbiB0aGUgbmFtZS4KICAgICAgIENvbW1pdHRlZCBieSBEQi4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMjY3Ij5GT1ItMjY3PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIE9wZW5vZmZpY2UyZm9ycmVzdDogYWRkIHN1cHBvcnQgZm9yIG1lcmdlZCBjZWxscyBpbiB0YWJsZXMuCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi0yNjIiPkZPUi0yNjI8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+IAogICAgICAgIEZpeGVkIHRoZSBkb21haW4gYnVnIG9mIHRoZSBzZWFyY2hib3ggaW4gcGVsdC4gIAogICAgICAgQ29tbWl0dGVkIGJ5IFRTLjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+IAogICAgICAgIEZpeGVkIHRoZSBtZW51IGluIHBlbHQgYnkgYWRkaW5nIGdldE1lbnUuanMgYW5kIGNoYW5naW5nIHRoZSBzaXRlMnhodG1sLnhzbC4gCiAgICAgICAgTm93IHRoZSBjaGFwdGVyIGltYWdlIHdpbGwgZ2V0IGV4cGFuZCBhZ2Fpbi4KICAgICAgIENvbW1pdHRlZCBieSBUUy48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIFJlbGF0aXZlIFVSSXMgd2l0aCBhYnNvbHV0ZSBwYXRocyB3ZXJlIGJyb2tlbiBpbiB0aGUgc2l0ZS54bWwKICAgICAgICBsaW5raW5nIG1lY2hhbmlzbS4KICAgICAgIENvbW1pdHRlZCBieSBEQy4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMjY4Ij5GT1ItMjY4PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIFJlLXdyaXRlIHRoZSBDaGFwZXJvbiBncmFtbWFyIGZvciBKU1BXaWtpIHRvIGFkZHJlc3MgYW1iaWd1aXR5IHdpdGgKICAgICAgICBwYXJhZ3JhcGhzIGFuZCBzdWItc2VjdGlvbnMuCiAgICAgICBDb21taXR0ZWQgYnkgREMuIFRoYW5rcyB0byBGYWJpbyBSaW5hbGRpLjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgSkNTIGxvZyBtZXNzYWdlcyBnbyB0aHJvdWdoIGNvY29vbiBpbnN0ZWFkIG9mIHRvIHN0ZG91dC4KICAgICAgIENvbW1pdHRlZCBieSBEQi4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMjE0Ij5GT1ItMjE0PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEdlbmVyYXRlIHByb3BlciBodG1sIGZvciBmaWd1cmVzIGluIHNpbXBsaWZpZWQgZG9jYm9vay4KICAgICAgIENvbW1pdHRlZCBieSBEQi4gVGhhbmtzIHRvIEpvaGFubmVzIFNjaGFlZmVyLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi0yMjYiPkZPUi0yMjY8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgUERGIHBhZ2VzIHJlY2VpdmUgc2tpbmNvbmYgcHJvcGVybHkgKHRocm91Z2ggdGhlIHNraW5jb25mIHBpcGVsaW5lKS4KICAgICAgIENvbW1pdHRlZCBieSBEQi4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMTM4Ij5GT1ItMTM4PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEZBUSBwYWdlIGRvZXMgbm90IG5lZWQgdG8gcHJvdmlkZSBpdCdzIG93biBleHRyYSBpbmRleC4KICAgICAgIENvbW1pdHRlZCBieSBEQi4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMTU0Ij5GT1ItMTU0PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEJyb2tlbmxpbmtzIGZpbGUgaXMgbm93IGdlbmVyYXRlZCBpbiBwcm9qZWN0LmhvbWUgcmF0aGVyIHRoYW4gZm9ycmVzdC5ob21lCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi0xNjUiPkZPUi0xNjU8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgQWRkIG1pc3NpbmcgeGRvY3MgZnJvbSB0aGUgdmFsaWRhdGUuZXhjbHVkZSBwcm9wZXJ0eS4gQWxsb3dpbmcgdG8gZXhjbHVkZSBmaWxlcy4gCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi0xMzAiPkZPUi0xMzA8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgSW1wcm92ZWQgcmVzb2x2aW5nIGltYWdlIHJlZmVyZW5jZXMgaW4gUERGcy4KICAgICAgIENvbW1pdHRlZCBieSBEQi4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMTE0Ij5GT1ItMTE0PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIE5vdyBDU1MgZmlsZXMgYXJlIHBhcnNlZCBpbnRlcm5hbGx5LCBzbyB0aGF0IHRoZSB1cmxzIGFyZSBpbmNsdWRlZCBpbiB0aGUgc3RhdGljCiAgICAgICAgc2l0ZSBnZW5lcmF0aW9uLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEx1Y2VuZS1pbmRleCB0YXJnZXQgd29ya3MuIElmIHNlYXJjaEBwcm92aWRlcj0ibHVjZW5lIiBpcyBzZXQgY3JlYXRlIGEgc2VhcmNoIGluZGV4LgogICAgICAgIEJ1aWxkIHNpdGUgYW5kIHJ1biB0YXJnZXRzIGFzIHBlciBwcm9qZWN0IGRpcmVjdG9yeSBpbnN0ZWFkIG9mIGZvcnJlc3QuaG9tZS4KICAgICAgIENvbW1pdHRlZCBieSBKSlAuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBNb3ZlZCBhbGwgcmVmZXJlbmNlcyB0byAvL3NraW5jb25maWcgb3V0IG9mIHRoZSBkb2N1bWVudDJodG1sLnhzbAogICAgICAgIGludG8gdGhlIHNpdGUyeGh0bWwueHNsIGZpbGUuCiAgICAgICAgKiBSYXRpb25hbGl6ZWQgdGhlIFRhYmxlIG9mIENvbnRlbnRzIHN0dWZmIGJ5IGNyZWF0aW5nIGEgInRvYyIKICAgICAgICBtb2RlIGluIHRoZSBjb21tb24veHNsdC9odG1sL2RvY3VtZW50Mmh0bWwueHNsLiBUaGF0IGlzIHRoZW4KICAgICAgICB1c2VkIHRvIGdlbmVyYXRlIHRoZSBwZXItcGFnZSBUb0MgYW5kIHRoZSBUb0MgYXR0YWNoZWQgdG8gdGhlIG1lbnUuCiAgICAgICAgKiBSZW1vdmVkIGV4dHJhbmVvdXMgZGVmYXVsdCB4c2wgbWF0Y2hlcnMgb24gdGhlIG5vbi1jb21tb24KICAgICAgICBkb2N1bWVudDJodG1sIGFuZCBzaXRlMnhodG1sIFhTTHMuIFRoaXMgYWxsb3dzIG1hdGNoZXMKICAgICAgICBkZWZpbmVkIGluIHRoZSBpbXBvcnRlZCB0cmFuc2Zvcm1hdGlvbiBzaGVldHMgdG8gbWF0Y2gKICAgICAgICAoaW1wb3J0ZWQgc2hlZXRzIGhhdmUgbG93ZXIgcHJlY2VkZW5jZSkuCiAgICAgICAgKiBEZWZpbmVkIGEgY291cGxlIG9mIDxjb2RlPiZsdDtkaXYgaWQ9Ii4uLiImZ3Q7PC9jb2RlPiBwbGFjZSBob2xkZXIKICAgICAgICB0YWdzIHVzZWQgYnkgdGhlIGRvY3VtZW50Mmh0bWwuIFRob3NlIGFyZSB0aGVuIHNraW5uZWQgYnkgdGhlCiAgICAgICAgc2l0ZTJ4aHRtbCBzaGVldHMuCiAgICAgICAgKiBOb3RlOiBJZiB5b3UgaGF2ZSB5b3VyIG93biBza2lucyB0aGF0IHdlcmUgcmVmZXJlbmNpbmcgIiRjb25maWciIG9yCiAgICAgICAgIi8vc2tpbmNvbmZpZyIgaW4gdGhlIGRvY3VtZW50Mmh0bWwueHNsIHRoZW4geW91IG5lZWQgdG8gbWFrZSBzaW1pbGFyCiAgICAgICAgY2hhbmdlcy4KICAgICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgRk9SLTE0NiBpc3N1ZSByZXBvcnQuCiAgICAgICBDb21taXR0ZWQgYnkgREMuIFRoYW5rcyB0byBSaWNrIFRlc3NuZXIuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTE0NiI+Rk9SLTE0NjwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBSZW1vdmUgbWlzbGVhZGluZyBlcnJvciBtZXNzYWdlLiBSZXBvcnRlZCBhIGNvY29vbiBidWcgIzI4OTM5IAogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIHNraW5jb25mIHdhcyBiZWluZyBpZ25vcmVkIGZvciB0aGUgc3ZnIGFuZCBmbyBmb3JtYXRzLgogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMTM5Ij5GT1ItMTM5PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgICJXYXJuaW5nIiB3YXMgbWlzdGFrZW5seSBsYWJlbGVkIGFzICJOb3RlIiBpbiBQREYuCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLiBUaGFua3MgdG8gTmljayBDaGFsa28uIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTEzNiI+Rk9SLTEzNjwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBzaXRlMmJvb2sueHNsIGhhbmRsZSBhbGwgbWVudS1pdGVtIGFuZCBtZW51IGF0dHJpYnV0ZXMKICAgICAgIENvbW1pdHRlZCBieSBKSlAuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTY5Ij5GT1ItNjk8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgUHJvcGVyIHRhYmxlIGFyb3VuZCAnZ3JhcGhpYycgaW4gc2ltcGxpZmllZCBkb2Nib29rLgogICAgICAgQ29tbWl0dGVkIGJ5IERCLiBUaGFua3MgdG8gUm9iIEV4bGV5LiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi0xMTUiPkZPUi0xMTU8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgUmVwbGFjZSBkb2N1bWVudCgpIGZ1bmN0aW9uIHRvIGdldCBza2luY29uZiB2YWx1ZXMgYW5kIHVzZSAiLy9za2luY29uZmlnIi4KICAgICAgICBGaXggb3JkZXIgc28gaXQgY2FuIHZhbGlkYXRlIHNraW5jb25mLgogICAgICAgIFVzZSA8Y29kZT4mbHQ7c2VhcmNoLyZndDs8L2NvZGU+IGluc3RlYWQgb2YKICAgICAgICA8Y29kZT4mbHQ7ZGlzYWJsZS1zZWFyY2gvJmd0OyAmbHQ7ZGlzYWJsZS1sdWNlbmUvJmd0OwogICAgICAgICZsdDtzZWFyY2hzaXRlLWRvbWFpbi8mZ3Q7ICZsdDtzZWFyY2hzaXRlLW5hbWUvJmd0OzwvY29kZT4uCiAgICAgICAgRml4IHNraW5jb25mLnhzbCBzbyBpdCBwcm9kdWNlcyBhIHByb3BlciBza2luY29uZgogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIFVwZGF0ZWQgamV0dHkgdG8gNC4yLjE5CiAgICAgICBDb21taXR0ZWQgYnkgQUcuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBVcGRhdGUgc2NyaXB0cyBhbmQgY29uZmlnIGZpbGVzIHRvIGFsbG93IHVwZ3JhZGUgdG8gY29jb29uIDIuMS41LWRldgogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIFN0b3Agb3ZlcndyaXRpbmcgc2tpbmNvbmYgYW5kIGNvY29vbi54Y29uZiBvbiB3ZWJhcHAgdGFyZ2V0LgogICAgICAgIExpYnMgd2VyZSBub3QgY29waWVkIG9uIHRoZSB3ZWJhcHAgdGFyZ2V0LgogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgVG9DIGVsZW1lbnQgaXMgb3B0aW9uYWwgb24gc2tpbmNvbmYuIAogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEFsbG93IGEgZnVsbCB1cmwgaW1hZ2UgdG8gYmUgaW5jbHVkZWQgb24gYSBwZGYgZmlsZS4KICAgICAgICBVc2Ugb25seSB0bXAgYXMgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkuCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgU3BsaXQgYnVpbGQgZmlsZSBpbiB2YXJpb3VzIHBhcnRzICh3ZWJhcHAsd2FyLHZhbGlkYXRlLHNpdGUpCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgTW92ZSBhbnQgKyBKZXR0eSB1bmRlciB0b29scyBvbiB0aGUgYnVpbGQgdGFyZ2V0CiAgICAgICBDb21taXR0ZWQgYnkgSkpQLjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgV3JvbmcgZGlyZWN0b3J5IGJlaW5nIHVzZWQgZm9yIHdpa2kgZ3JhbW1hcnMuCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgTm93IHNraW5zIHRoYXQgYXJlIGVkaXRlZCBpbiBwbGFjZSBoYXZlIHRoZWlyIG5vbi10cmF2ZXJzYWJsZQogICAgICAgIHJlc291cmNlcyBhbHNvIGNvcGllZCBmb3Igc3RhdGljIHJlbmRlcmluZy4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuIFRoYW5rcyB0byA8bGluayBocmVmPSJtYWlsdG86cm9zc0BzYWFmZS5vcmciPlJvc3MgR2FyZGxlcjwvbGluaz4uIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTg3Ij5GT1ItODc8L2xpbms+LCA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTg4Ij5GT1ItODg8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgREhUTUwgbWVudXMgaW4gS3J5c2FsaXMgc2tpbiBub3cgd29yayBvbiBhbGwgbGV2ZWxzLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi4gVGhhbmtzIHRvIDxsaW5rIGhyZWY9Im1haWx0bzpyb3NzQHNhYWZlLm9yZyI+Um9zcyBHYXJkbGVyPC9saW5rPi4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItODYiPkZPUi04NjwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgV3JvbmcgZGVmYXVsdCB2YWx1ZSBmb3IgdHJhbnNsYXRpb25zIGRpcmVjdG9yeS4KICAgICAgIENvbW1pdHRlZCBieSBKSlAuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICAgIEZpeGVkIHRoZSBoYW5kbGluZyBvZiBpbWFnZXMgYW5kIHJlc291cmNlcyBpbiB0aGUgcmVzb3VyY2VzLnhtYXAKICAgICAgICAgIHBpcGVsaW5lLCB0byBjYXRlciBmb3IgdGhlIG5ldyBzeXN0ZW0gdGhhdCBkb2VzIG5vdCBjb3B5IGRvY3MgcHJpb3IKICAgICAgICAgIHRvIHJlbmRlcmluZy4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICAgIEZpeGVkIGJ1ZyBpbiB0aGUgYXV0b2Rvd25sb2FkIHN1cHBvcnQgZm9yIHNraW5zIHRoYXQgd2FzIHByZXZlbnRpbmcgCiAgICAgICAgICBjdXN0b20gc2tpbnMgaW4gdGhlIHByb2plY3Qgc291cmNlIGRpciBmcm9tIHdvcmtpbmcuCiAgICAgICBDb21taXR0ZWQgYnkgTktCLiBUaGFua3MgdG8gPGxpbmsgaHJlZj0ibWFpbHRvOnNiQHNlYmFzdGlhbi1iZXJnbWFubi5kZSI+U2ViYXN0aWFuIEJlcmdtYW5uPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgICAgQWRkZWQgZGVmYXVsdCB0cmFuc2xhdGlvbiBmb3IgbWVudSBvbiBmcmVzaC1zaXRlIHNvIGl0IGlzIHVzZWQgCgkgIHdoZW4gdGhlIHVzZXIgbG9jYWxlIGNhbiBub3QgYmUgZm91bmQuCiAgICAgICAgICBTeW5jaHJvbml6ZWQgc29tZSBJMThuIGxhYmVscyBhZnRlciBhIG1vZGlmaWNhdGlvbiBvbiBmcmVzaC1zaXRlLgogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgICAgUGF0Y2hlZCBkaXJlY3RvcnkyYm9vay54c2wgdG8gYmUgYWJsZSB0byBzZXJ2ZSByYXcgZG9jdW1lbnRzIGZyb20gdGhlIAogICAgICAgICAgc2lkZSBtZW51IChlLmcuIHBkZik7IHByZXZpb3VzbHkgaXQgYWx3YXlzIGdlbmVyYXRlZCAuaHRtbCBsaW5rcy4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuIFRoYW5rcyB0byA8bGluayBocmVmPSJtYWlsdG86ZWJ1cmdoYXJAZnJlZS5mciI+RXJpYyBCVVJHSEFSRDwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJyZW1vdmUiIHNyYz0iaW1hZ2VzL3JlbW92ZS5qcGciLz4KICAgICAgICBTa2lucyAiZm9ycmVzdC1jc3MiIGFuZCAiYXZhbG9uLXRpZ3JpcyIgYXJlIGRlbGV0ZWQuIFRoZQogICAgICAgICJ0aWdyaXMtc3R5bGUiIGlzIHJlbmFtZWQgdG8gInRpZ3JpcyIuIEFsaWFzZXMKICAgICAgICBzZXQgaW4gcGxhY2UgZm9yIGJhY2t3YXJkLWNvbXBhdGliaWxpdHkuCiAgICAgICAgVGhlIG9sZCAiZm9ycmVzdC1zaXRlIiBhbmQgImtyeXNhbGlzLXNpdGUiIHNraW5zIGFyZSByZXRhaW5lZCBmb3IKICAgICAgICBhIGxpdHRsZSB3aGlsZSBsb25nZXIsCiAgICAgICAgYnV0IGFyZSBkZXByZWNhdGVkLCBzbyBwbGVhc2UgbW92ZSB0byBvbmUgb2YgdGhlIG90aGVyIHNraW5zLgogICAgICAgIFNlZSBub3RlcyBhYm91dCA8bGluayBocmVmPSJzaXRlOnYwLjcwLy9za2lucyI+RGVmYXVsdCBza2luczwvbGluaz4uCiAgICAgICBDb21taXR0ZWQgYnkgREIuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTE4MSI+Rk9SLTE4MTwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJyZW1vdmUiIHNyYz0iaW1hZ2VzL3JlbW92ZS5qcGciLz4KICAgICAgICBSZW1vdmUgJ3RlbXBsYXRlJyBza2luOyBiZXR0ZXIgdG8gYmFzZSBhIG5ldyBza2luIG9uIGFuIGV4aXN0aW5nIG9uZS4KICAgICAgIENvbW1pdHRlZCBieSBEQi48L2xpPjxsaT48aWNvbiBhbHQ9InJlbW92ZSIgc3JjPSJpbWFnZXMvcmVtb3ZlLmpwZyIvPgogICAgICAgICBDbGVhbiB1cCBmaXJzdCBMdWNlbmUgc2VhcmNoIGltcGxlbWVudGF0aW9uIGluIEZvcnJlc3QuCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLjwvbGk+PGxpPjxpY29uIGFsdD0icmVtb3ZlIiBzcmM9ImltYWdlcy9yZW1vdmUuanBnIi8+CiAgICAgICAgVGhlIC5laHRtbCBmaWxlcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gIFVzZSAuaWh0bWwgaW5zdGVhZC4gIEZ1dHVyZSBodG1sIGlucHV0IHN1cHBvcnQgd2lsbCBiZQogICAgICAgIGJhc2VkIG9uIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9leWVicm93c2UvQnJvd3NlTGlzdD9saXN0SWQ9NjUmYW1wO2J5PXRocmVhZCZhbXA7ZnJvbT03NDgzMjEiPnRoaXMKICAgICAgICBkaXNjdXNzaW9uPC9saW5rPi4KICAgICAgIENvbW1pdHRlZCBieSBEQi4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMTMxIj5GT1ItMTMxPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InJlbW92ZSIgc3JjPSJpbWFnZXMvcmVtb3ZlLmpwZyIvPgogICAgICAgUmV2ZXJ0IHRoZSBjaGFuZ2VzIHRvIGFjY2VzcyBza2luY29uZiB1c2luZyAic2tpbmNvbmYvLyIgZG9uZSBvbiByMTAyNTkKICAgICAgIENvbW1pdHRlZCBieSBKSlAuPC9saT48bGk+PGljb24gYWx0PSJyZW1vdmUiIHNyYz0iaW1hZ2VzL3JlbW92ZS5qcGciLz4KICAgICAgICBGb3JyZXN0LXRhcmdldHMgd2l0aCBhbnQgcHJveHkgaXMgb2Jzb2xldGU7IHVzZSBmb3JyZXN0Ym90IG5vdy4KICAgICAgIENvbW1pdHRlZCBieSBEQi4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMTQwIj5GT1ItMTQwPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFVwZGF0ZWQgY29tbW9ucy1jb2xsZWN0aW9ucyB0byAzLjEsCiAgICAgICAgY29tbW9ucy1sb2dnaW5nIHRvIDEuMC40LCBqY3MgdG8gMS4xLWRldi4yMDA0MDgxMSwgbHVjZW5lIHRvIDEuNC4xCiAgICAgICBDb21taXR0ZWQgYnkgQUcuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBFbmFibGUgZW1haWwgYWRkcmVzcyBvYmZ1c2NhdGlvbiB0byBiZSBjb25maWd1cmFibGUgdXNpbmcgdGhlCiAgICAgICAgb2JmdXNjYXRlLW1haWwtdmFsdWUgb3B0aW9uIGluIHNraW5jb25mLnhtbAogICAgICAgQ29tbWl0dGVkIGJ5IERDLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi0xMjIiPkZPUi0xMjI8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgIEVuaGFuY2UgdGhlIGRvY3VtZW50MnBvZCBmdW5jdGlvbmFsaXR5IHRvIGhhbmRsZSBtYW55IG90aGVyIGVsZW1lbnRzCiAgICAgICAgIGFuZCBlbmFibGUgdGhlIGxpbmsgdG8gdGhpcyBmb3JtYXQgdG8gYmUgY29uZmlndXJlZCB2aWEgc2tpbmNvbmYuCiAgICAgICAgIFNlZSB0aGUgaXNzdWUgcmVwb3J0IGZvciBzb21lIG5vdGVzLgogICAgICAgQ29tbWl0dGVkIGJ5IERDLiBUaGFua3MgdG8gUmljayBUZXNzbmVyLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi0yNDAiPkZPUi0yNDA8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgVXBkYXRlZCBBbnQgMS42LjIuCiAgICAgICBDb21taXR0ZWQgYnkgQUcuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBIYXZlIEBjbGFzcyBhdHRyaWJ1dGUgaW4gRFREIGZvciBldmVyeSBlbGVtZW50LCB3aGljaCBlbmFibGVzIHRoZQogICAgICAgICJleHRyYS1jc3MiIHNlY3Rpb24gaW4gdGhlIHNraW5jb25mIHRvIGJlIHB1dCB0byBnb29kIHVzZS4KICAgICAgICBVcGRhdGVkIGFsbCB2MS4yIERURHMgdG8gYmVjb21lIHYxLjMgRFREcyAoZm9yd2FyZCBjb21wYXRpYmlsaXR5OgogICAgICAgIHYxLjIgZG9jcyB3aWxsIHdvcmsgZmluZSBhcyBWMS4zKS4KICAgICAgICBVcGRhdGVkIHRoZSB2Mi4wYSBEVERzIHRvIGJlY29tZSB2Mi4wIERURHMgKGZvcndhcmQgaW5jb21wYXRpYmlsaXR5OgogICAgICAgIHYxLjIvMS4zIGRvY3MgYXJlIG5vdCBmb3J3YXJkLWNvbXBhdGlibGUgYXMgVjIuMCkuCiAgICAgICAgQWRkZWQgZGVtbyBvZiBleHRyYS1jc3MgdG8gdGhlIHNlZWQgc2l0ZSBhbmQgdXBkYXRlZCBzb21lCiAgICAgICAgc2FtcGxlIGRvY3MgdG8gdXNlIG5ldyB2MS4zIERURHMuCiAgICAgICAgU2VlIHRoZSA8bGluayBocmVmPSJzaXRlOnYwLjcwLy9kdGQtZG9jcyI+c2FtcGxlcyBhbmQgcmVmZXJlbmNlIGRvY3M8L2xpbms+LgogICAgICAgIFNlZSB0aGUgaXNzdWUgcmVwb3J0IGZvciBmdWxsIGxpc3Qgb2YgY2hhbmdlcy4KICAgICAgIENvbW1pdHRlZCBieSBEQy4gVGhhbmtzIHRvIFJpY2sgVGVzc25lci4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMTc0Ij5GT1ItMTc0PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFByb2plY3RzIGNhbiB1c2UgYSBsb2NhbCBDYXRhbG9nTWFuYWdlci5wcm9wZXJ0aWVzIHRvIGRlY2xhcmUKICAgICAgICBhZGRpdGlvbmFsIENhdGFsb2dzIGZvciBEVERzIGFuZCBvdGhlciBlbnRpdGllcy4KICAgICAgIENvbW1pdHRlZCBieSBEQy48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIEltcHJvdmUgbG9vayBvZiBQREYgcGFnZXMuCiAgICAgICBDb21taXR0ZWQgYnkgREIuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICAgRml4IHJlbGF0aXZlIGxpbmtzIGFuZCBpbWFnZSByZWZlcmVuY2VzIGluIGFnZ3JlZ2F0ZSBwYWdlcy4KICAgICAgIENvbW1pdHRlZCBieSBEQi4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMTQ4Ij5GT1ItMTQ4PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgICAgV29ya2VkIHNlYXJjaCBmdW5jdGlvbmFsaXR5IGludG8gYWxsIHNraW5zLgogICAgICAgICAgRml4ZWQgcXVlcnkgcGFyYW1ldGVycyBmb3IgR29vZ2xlIHNpdGUgc2VhcmNoLgogICAgICAgICAgTGF0ZXJhbCBzZWFyY2ggYm94IHdhcyBpbmNvbXBhdGlibGUgd2l0aCBuZXcgc2tpbmNvbmYueG1sIGZvcm1hdC4KICAgICAgIENvbW1pdHRlZCBieSBKSlAuIFRoYW5rcyB0byBGbG9yaWFuIEcuIEhhYXMuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTkiPkZPUi05PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgICBVcGdyYWRlIHRvIGNvY29vbiAyLjEuNQogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFJlbW92ZWQgYXV0aG9yIGFuZCBjdnMtaWQgdGFncyBmcm9tIGNvZGUgYW5kIHhkb2NzLgogICAgICAgQ29tbWl0dGVkIGJ5IERCLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi0xMjMiPkZPUi0xMjM8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgUmVwYWNrIEpldHR5IHdpdGhvdXQgSlNQIHN1cHBvcnQuIE5vdyB3ZSBjYW4gcmVtb3ZlIG9yZy5hcGFjaGUuamFzcGVyLmphcgogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIEZvcnJlc3QgZG9lcyBub3QgY29weSBhbnl0aGluZyBhcm91bmQgYW55bW9yZS4gVGhlIG9ubHkgc3RlcAogICAgICAgIHRvIG1ha2UgaXQgd29yayBpcyB0byBoYXZlIGphdmEgY29tcGlsZSB0aGUgZm9ycmVzdCBqYXI7IGFsbAogICAgICAgIG90aGVyIHJlc291cmNlcyBhcmUgdXNlZCBpbiB0aGVpciBvcmlnaW5hbCBsb2NhdGlvbi4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBKZXR0eSBqYXIgd2FzIG1pc3Rha2VubHkgY29tcGlsZWQgZm9yIGpkayAxLjQKICAgICAgICAtIG5vdyByZS1jb21waWxlZCBmb3IgamRrIDEuMyAKICAgICAgIENvbW1pdHRlZCBieSBKSlAuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICAnYnVpbGQgcGF0Y2gnIGNvbW1hbmQgdXBkYXRlZCBmb3IgU1ZOLgogICAgICAgQ29tbWl0dGVkIGJ5IERCLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi0xMzciPkZPUi0xMzc8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgQ29tcGxldGVseSByZXdyaXR0ZW4gTHVjZW5lLWJhc2VkIGluZGV4IGFuZCBzZWFyY2ggZnVuY3Rpb25hbGl0eS4KICAgICAgIENvbW1pdHRlZCBieSBKSlAuIFRoYW5rcyB0byBGbG9yaWFuIEcuIEhhYXMuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTkiPkZPUi05PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIENvbnZlcnRlZCByZXBvc2l0b3J5IGZyb20gQ1ZTIHRvIFNWTi4KICAgICAgIENvbW1pdHRlZCBieSBEQi4gVGhhbmtzIHRvIEFwYWNoZSBJbmZyYXN0cnVjdHVyZS48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFVwZ3JhZGUgdG8gYmF0aWsgMS41LjEKICAgICAgIENvbW1pdHRlZCBieSBKSlAuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBBZGQgaTE4biB0byBzaW5nbGUgZmlsZSBjb250ZW50LgogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFVwZGF0ZWQgQW50IDEuNi4xCiAgICAgICBDb21taXR0ZWQgYnkgQUcuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBBZGQgaTE4biB0byB0YWJzLgogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFB1dHRpbmcgYSBqZXR0eWNvbmYueG1sIGZpbGUgaW4geW91ciBkb2N1bWVudCBkaXJlY3Rvcnkgd2lsbCBvdmVycmlkZQogICAgICAgIHRoZSBvbmUgc3VwcGxpZWQgaW4gdGhlIGRlZmF1bHQgRm9ycmVzdCBjb250ZXh0LiBBbHNvIG5vIGxvbmdlciBjb3BpZXMgCiAgICAgICAgamV0dHljb25mLnhtbCB0byBidWlsZCBkaXIgKG9uZSBtb3JlIGZpbGUgY2xvc2VyIHRvIG5vIGNvcHlpbmcgOy0pKQogICAgICAgQ29tbWl0dGVkIGJ5IFJERy48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFN1cHBvcnQgbXVsdGlwbGUgc2tpbiBkZXNjcmlwdG9yIGZpbGVzIHZpYSB0aGUgZm9ycmVzdC5za2lucy5kZXNjcmlwdG9ycyBwcm9wZXJ0eQogICAgICAgQ29tbWl0dGVkIGJ5IERCLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgTGlicmFyaWVzIGFyZSBub3QgY29waWVkIGFueW1vcmUgaW4gdGhlIHNlcnZsZXQgY29udGV4dCBvZgogICAgICAgIHRoZSBkaXN0IGFuZCBvZiB0aGUgcHJvamVjdCBiZWluZyBidWlsdDsgdGhleSBhcmUgYWRkZWQKICAgICAgICBpbnN0ZWFkIHRvIHRoZSBjbGFzc3BhdGggb2YgamV0dHkgZm9yIHRoZSAncnVuJyB0YXJnZXQgYW5kCiAgICAgICAgb2YgdGhlIENvY29vbiBDTEkgZm9yIHRoZSBkZWZhdWx0ICdzaXRlJyB0YXJnZXQuCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgVXBncmFkZSB0byBKaW5nIDIwMDMwNjE5LgogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFZhbGlkYXRpb24gaXMgbm93ICJkeW5hbWljIiwgYnkgc2V0dGluZyB0aGUgcGFyc2VyIGZlYXR1cmUKICAgICAgICAiaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL3ZhbGlkYXRpb24vZHluYW1pYyIuCiAgICAgICAgVGhpcyBtZWFucyB0aGF0IGRvY3VtZW50cyB3aXRoIERURCBhcmUgZnVsbHkgdmFsaWRhdGVkLAogICAgICAgIHdoaWxlIGRvY3VtZW50cyB3aXRob3V0IERURCBhcmUganVzdCBjaGVja2VkIGZvciB3ZWxsLWZvcm1lZG5lc3MuCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICBSZW1vdmVkIHhtbDJ4aHRtbC54c2wgaW1wb3J0IGluIHByb2ZpbGUycGFnZS54c2wgdGhhdCB3YXMgbm90IHVzZWQgKGZpbGUgbm90IHByZXNlbnQpLgogICAgICAgQ29tbWl0dGVkIGJ5IFJERy4gVGhhbmtzIHRvIDxsaW5rIGhyZWY9Im1haWx0bzpjaGVjaGVAYXBhY2hlLm9yZyI+SnVhbiBKb3NlIFBhYmxvczwvbGluaz4uIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTU5Ij5GT1ItNTk8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgTmV3IGJ1aWxkIHRhcmdldCB0byBidWlsZCBhIHdlYmFwcCB0aGF0IGNhbiBiZSBkaXN0cmlidXRlZC4KICAgICAgICAid2FyIiB0YXJnZXQgZGVwZW5kcyBvbiAiY29kZSIgd2hpY2ggd2lsbCBwcm9kdWNlIGFuIGRlcGxveWFibGUgd2ViYXBwLAogICAgICAgICJydW4iIHRhcmdldCBkZXBlbmRzIG9uICJ3ZWJhcHAtbG9jYWwiIHdoaWNoIGxlYXZlcyBtYW55IGZpbGVzIGluIHRoZSBwcm9qZWN0CiAgICAgICAgZGlyZWN0b3J5IHRvIGVhc2UgZWRpdGluZyAoZS5nLiBzcmMsIHJlc291cmNlcyBhbmQgc2tpbnMpCiAgICAgICBDb21taXR0ZWQgYnkgUkRHLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi05OCI+Rk9SLTk4PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFVwZ3JhZGUgdG8gY29jb29uIDIuMS4zCgluZWtvZHRkIDAuMS45CglyZW1vdmUgZXhjYWxpYnVyLWNvbmN1cnJlbnQtMjAwMjA4MjAuamFyCglyZW1vdmUgZXhjYWxpYnVyLWNsaS0xLjAuamFyCglyZW1vdmUgZXhjYWxpYnVyLWRhdGFzb3VyY2Utdm0xMi0yMDAyMTEyMS5qYXIKCXJlbW92ZSBqYWthcnRhLW9yby0yLjAuNi5qYXIgCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgSW5zdGVhZCBvZiBmb3JyZXN0LXRhcmdldHMuZW50IHdpdGggQW50IDEuNiBGb3JyZXN0IGNhbiBub3cgYWxzbyBiZSB1c2VkIHdpdGgKICAgICAgICB0aGUgbmV3IGltcG9ydCBmYWNpbGl0eTogJmx0O2ltcG9ydCBmaWxlPSJmb3JyZXN0LXRhcmdldHMueG1sIi8mZ3Q7CiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgQXV0b21hdGljIGdlbmVyYXRpb24gb2YgYm9yZGVycyBmcm9tIHNraW4gY29sb3JzIGFuZCBuYW1pbmcgY29udmVudGlvbi4KICAgICAgICBSb3VuZGVkIGFuZCBzdHJhaWdodCA0NSBkZWdyZWVzIGNvcm5lcnMgc3VwcGxpZWQuCgogICAgICAgRm9yIGV4YW1wbGUsIHRvIGdlbmVyYXRlIGEgJ3Inb3VuZGVkIGNvcm5lciBmb3IgJ3Qnb3AgJ2wnZWZ0IHRoZSBzaXplCiAgICAgICBvZiAnNScgcGl4ZWxzIG9mIGJhY2tncm91bmQgJ2hlYWRlcicsIGZvcmVncm91bmQgJ3RhYi1zZWxlY3RlZCcgYW5kCiAgICAgICBib3JkZXIgb2YgJ3RhYi11bnNlbGVjdGVkJyBJIGNhbiBqdXN0IGFzayBmb3I6CgogICAgICAgICAvc2tpbi9pbWFnZXMvcmMtdC1sLTUtMWhlYWRlci0ydGFiLXNlbGVjdGVkLTMtdGFiLXVuc2VsZWN0ZWQucG5nCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgUmVtb3ZlZCBhbGwgdmFsaWRhdGlvbiBpbmNsdWRlcyBhbmQgZXhjbHVkZXMgZnJvbSB0aGUgZnJlc2ggc2l0ZSwKICAgICAgICBleGNlcHQgdGhlIG1vc3QgYmFzaWMgb25lLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGZlYXR1cmUgaXMgdG8gCiAgICAgICAgYmUgY29uc2lkZXJlZCBkZXByZWNhdGVkLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFVwZGF0ZWQgQW50IDEuNi4wCiAgICAgICBDb21taXR0ZWQgYnkgQUcuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBSZWZhY3RvcmVkIGZvcnJlc3Rib3QgdG8gb3JnYW5pemUgd29ya3N0YWdlcyBhbmQgdGhlaXIgaW1wbGVtZW50YXRpb25zLgogICAgICAgIFByb3BlcnRpZXMgbmFtZWQgYnkgd29ya3N0YWdlIGFuZCBpbXBsZW1lbnRhdGlvbiBmb3IgY2xhcml0eSBhbmQgdG8KICAgICAgICBwcmV2ZW50IGNvbmZsaWN0cy4KICAgICAgIENvbW1pdHRlZCBieSBEQi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFRoZSAnY2xlYW4tc2l0ZScgdGFyZ2V0IGFwcGVhcnMgaW4gJ2ZvcnJlc3QgLXByb2plY3RoZWxwJy4gIERlbGV0ZXMKICAgICAgICB0ZW1wLCB3ZWJhcHAsIGFuZCBicm9rZW5saW5rcyBmaWxlcyB0b28uCiAgICAgICBDb21taXR0ZWQgYnkgREIuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBVcGRhdGVkIGFuZCBzZXBhcmF0ZWQgaW4gdGhlaXIgZGlyZWN0b3J5IGFsbCB0aGUgcmVzb3VyY2VzCiAgICAgICAgbmVlZGVkIGJ5IENoYXBlcm9uLCBhbmQgbWFrZSB0aGUgcGlwZWxpbmUgZ2VuZXJhdGUgdGhlIAogICAgICAgIHhtbCBncmFtbWFyIHZlcnNpb25zIGlmIHVuYXZhaWxhYmxlLgogICAgICAgIFRoaXMgZml4ZXMgc29tZSB3aWtpIHJlbmRlcmluZyBidWdzIGFuZCBtYWtlcyBzZWN0aW9ucwogICAgICAgIGZvbGxvdyB0aGUgY29ycmVjdCBsZXZlbCBuZXN0aW5nLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIE5vdyBhbHNvIGFsbCBmb3JyZXN0IC9yZXNvdXJjZXMgYXJlIGVkaXRhYmxlIGluIGZvcnJlc3QuaG9tZQogICAgICAgIGFuZCB0cmFuc2xhdGlvbnMgaW4gdGhlaXIgc291cmNlIHNwYWNlLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFNraW5zIGFyZSBub3cgZWRpdGFibGUgZGlyZWN0bHkgaW4gRk9SUkVTVF9IT01FLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi4gVGhhbmtzIHRvIDxsaW5rIGhyZWY9Im1haWx0bzpyb3NzQHNhYWZlLm9yZyI+Um9zcyBHYXJkbGVyPC9saW5rPi4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItODUiPkZPUi04NTwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBVcGRhdGVkIEVudGl0eSBSZXNvbHZlciBmcm9tIHByZS1yZWxlYXNlIHRvIG9mZmljaWFsCiAgICAgICAgeG1sLWNvbW1vbnMtcmVzb2x2ZXItMS4xIHJlbGVhc2UuCiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBVcGRhdGVkIEpldHR5IHRvIDQuMi4xNAogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFJlbW92ZWQgdGhlIGRlcHJlY2F0ZWQgQW50IEB0YWdAIHN1YnN0aXR1dGlvbiBtZXRob2QgZm9yIHNraW5zIHRvIAogICAgICAgIHJlZHVjZSBjb3B5aW5nIGZ1cnRoZXIuCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgIEFsbCByZXNvdXJjZXMgaW4gc2tpbnMvY29tbW9uL2ltYWdlc3xzY3JpcHRzIGFyZSB1c2VkIGlmIHRoZQogICAgICAgICBjb3JyZXNwb25kaW5nIHJlc291cmNlIGlzIG5vdCBmb3VuZCBpbiB0aGUgc2tpbiBiZWluZyB1c2VkLiAKICAgICAgICAgTW92ZWQgdW5kZXIgdGhlc2UgZGlycyB0aGUgaW1hZ2VzIGFuZCB0aGUgc2NyaXB0cyB0aGF0IHdlcmUgcGxhY2VkIGJ5IAogICAgICAgICBkZWZhdWx0IHVuZGVyIHJlc291cmNlcy9pbWFnZXMgb3IgY29waWVkIGluIGVhY2ggc2tpbiwgYW5kIGFkZGVkIGEgCiAgICAgICAgIHRlbXBvcmFyeSBzaXRlbWFwIHJ1bGUgdG8gcm91dGUgdGhlIHJlcXVlc3Qgb2YgdGhlIGltYWdlcyB0byB0aGUgbmV3CiAgICAgICAgIGxvY2F0aW9uLiAKICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICAgIE1vdmVkIHRoZSBpbWFnZXMgb2YgZnJlc2gtc2l0ZSB0byB0aGUgc3JjL2NvbnRlbnQveGRvY3MgZGlyZWN0b3J5LAogICAgICAgICAgZm9yIHRoZSBuZXcgbGF5b3V0IHRoYXQgaGFzIGJlZW4gZGVjaWRlZCBvbiBmb3JyZXN0LWRldi4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICAgIE1ham9yIHVwZGF0ZSB0byBpbm5lciB3b3JraW5nIG9mIHRoZSBrcnlzYWxpcy1zaXRlIHNraW46IAogICAgICAgICAgLSByZW1vdmVkIGFsbCB1c2Ugb2YgdGhlIHNwYWNlci5naWYgaW1hZ2UKICAgICAgICAgIC0gcmVwbGFjZWQgYWxsIHZpc3VhbCBlbmhhbmNlbWVudCBpY29ucyB3aXRoIGNzcyBpY29ucwogICAgICAgICAgLSBmaXhlZCBDU1MgYW5kIGh0bWwgdmFsaWRhdGlvbgogICAgICAgICAgLSByZWR1Y2VkIGZpbmFsIG91dHB1dCBzaXplLCAKICAgICAgICAgIC0gcmVtb3ZlZCBhbGwgZm9udCB0YWcgdXNhZ2UgaW4gZmF2b3Igb2YgY3NzCiAgICAgICAgICAtIGFkZGVkIGF1cmFsIChzcGVlY2gpIHN0eWxlIGluIGNzcwogICAgICAgICAgLSByZWR1Y2VkIHVzYWdlIG9mIG5lc3RlZCB0YWJsZXMKICAgICAgICAgIC0gcmVmYWN0b3JlZCBtYWluIHhodG1sIHN0eWxlc2hlZXQgdG8gYmUgbW9yZSBjbGVhciBhbmQgbWFpbnRhaW5hYmxlCiAgICAgICAgICAtIHJlZmFjdG9yZWQgY3NzIHRvIGhhdmUgYSBzaW5nbGUgc21hbGwgcGxhY2Ugd2hlcmUgdG8gZGVmaW5lIHRoZSBza2luIGNvbG9ycwogICAgICAgICAgLSBjaGFuZ2VkIGljb25zIHRvIG9yaWdpbmFsIGljb25zIChtYWRlIGJ5IG1lIGFuZCBub3QgZ290dGVuIGZyb20gZWxzZXdoZXJlKQogICAgICAgICAgLSByZW1vdmVkIHVudXNlZCBpY29ucy4KICAgICAgICAgIC0gbWFkZSBsb2NhdGlvbiBvZiBtaW5pdG9jIGNvbmZpZ3VyYWJsZSBhcyAicGFnZSIsICJtZW51Iiwgb3IgImJvdGgiCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgICBSZW1vdmVkIGR1cGxpY2F0ZWQgY29weWluZyBvZiBmaWxlcyBkdXJpbmcgdGhlIGNyZWF0aW9uIG9mIHRoZSAKICAgICAgICAgIGRpc3Ryby4gTm93IHRoZSBjb21tYW5kLWxpbmUgY29udGV4dCBkaXIgaXMgbGlrZSB0aGUgd2ViYXBwIGNvbnRleHQgZGlyLgogICAgICAgICAgVGhpcyByZWR1Y2VzIEZvcnJlc3QgYnVpbGQgdGltZSBmcm9tIDUzIHRvIDE5IHNlY29uZHMgb24gbXkgc3lzdGVtLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgZG9jYm9vayB2ZXJzaW9uIDQuMS4yLiBBbGxvd3MgaW1wb3J0aW5nIGZpbGVzCgkgIGZyb20gdmFyaW91cyBlZGl0b3JzIChPcGVuIG9mZmljZSwgQWJpd29yZCkuCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgICBBZGRlZCBHZXJtYW4gVHJhbnNsYXRpb24gZm9yIG1lbnUgaW4gZnJlc2gtc2l0ZSBleGFtcGxlIHNlZWQuCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLiBUaGFua3MgdG8gPGxpbmsgaHJlZj0ibWFpbHRvOkphbi5NYXRlcm5lQHJ6Zi5maW4tbnJ3LmRlIj5KYW4gTWF0ZXJuZTwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBBZGRlZCBjcmVhdGlvbiBvZiBUT0Mgc3VwcG9ydCBvbiBQREYgZmlsZXMuCglJbXByb3ZlZCBzbyBpdCB1c2VzIHZhbHVlIGZyb20gc2tpbmNvbmZpZy54bWwuCglJbXByb3ZlIGFsZ29yaXRtIHRvIGRlZmluZSBmb250IHNpemUgZm9yIHNlY3Rpb24vc3Vic2VjdGlvbi8uLi4KICAgICAgIENvbW1pdHRlZCBieSBKSlAuIFRoYW5rcyB0byA8bGluayBocmVmPSJtYWlsdG86ZWJ1cmdoYXJAZnJlZS5mciI+RXJpYyBCdXJnaGFyZDwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBJbiB0aGUgZ2VuZXJhdGVkICJjaGFuZ2VzIiBkb2N1bWVudCwgYWRkICJ2ZXJzaW9uXyIgdG8gc2VjdGlvbkBpZAogICAgICAgIGFzIHJlcXVpcmVkIGJ5IGRvY3VtZW50LXYxMi4KICAgICAgICBTb3J0IGFjdGlvbiB0eXBlcyBvcmRlciB0byAiYWRkIiwicmVtb3ZlIiwidXBkYXRlIiwiZml4Ii4KICAgICAgIENvbW1pdHRlZCBieSBKSlAuPC9saT48L3VsPjwvc2VjdGlvbj48c2VjdGlvbj48dGl0bGU+Q2hhbmdlcyB0byBEb2N1bWVudGF0aW9uPC90aXRsZT48dWw+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkZWQgYSBIb3ctVG86CiAgICAgICAgPGxpbmsgaHJlZj0ic2l0ZTp2MC43MC8vYXNmLW1pcnJvciI+R2VuZXJhdGUgYW4gQVNGIG1pcnJvcnMgcGFnZSB1c2luZwogICAgICAgIGludGVyYWN0aXZlIHdlYiBmb3JtPC9saW5rPiB1c2luZyBpaHRtbCB0byBpbmNsdWRlIGFkZGl0aW9uYWwgaHRtbAogICAgICAgIGZvcm0gZWxlbWVudHMuCiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBhIEhvdy1UbzoKICAgICAgICA8bGluayBocmVmPSJzaXRlOnYwLjcwLy9wZGYtdGFiIj5Ib3cgdG8gY3JlYXRlIGEgUERGIGRvY3VtZW50IGZvciBlYWNoCiAgICAgICAgdGFiPC9saW5rPiB0byBjcmVhdGUgc3ViamVjdC1zcGVjaWZpYyBhZ2dyZWdhdGVkIGRvY3VtZW50cy4KICAgICAgIENvbW1pdHRlZCBieSBUUy4gVGhhbmtzIHRvIFN0ZXBoYW4gRS4gU2NobGllcmYuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTIxOCI+Rk9SLTIxODwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBDcmVhdGVkIHRoZSA8bGluayBocmVmPSJzaXRlOnYwLjcwLy9ob3d0byI+SG93LVRvPC9saW5rPiBzZWN0aW9uIG9mIHRoZQogICAgICAgIGRvY3VtZW50YXRpb24uIENvbnRpbnVlIERpYW5uYSBTaGFubm9uJ3MgZ29vZCB3b3JrIHdpdGggZGVzaWduaW5nCiAgICAgICAgdGhlIERURHMsIGNvbmNlcHRzLCBhbmQgZG9jdW1lbnRhdGlvbiBlZmZvcnQgYXQgQ29jb29uLgogICAgICAgQ29tbWl0dGVkIGJ5IERDLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkZWQgYSBtZWNoYW5pc20gdG8gZW5hYmxlIGltcG92ZXJpc2hlZCBYTUwgdG9vbHMgdGhhdCBkbyBub3QgdXNlCiAgICAgICAgdGhlIENhdGFsb2cgRW50aXR5IFJlc29sdmVyIHRvIGZldGNoIHRoZSBEVERzIGRpcmVjdCBmcm9tIHRoZSB3ZWJzaXRlLgogICAgICAgIFNlZSA8bGluayBocmVmPSJzaXRlOnYwLjYwLy91cGdyYWRpbmdfMDYiPnVwZ3JhZGluZyB0byB2MC42PC9saW5rPgogICAgICAgIFBsZWFzZSBoZWxwIHRvIHVwZ3JhZGUgb3VyIC9kdGQvLmh0YWNjZXNzIGZpbGUgKHNlZSBpc3N1ZSBGT1ItMTA3KQogICAgICAgIGFuZCBwbGVhc2UgaGVscCB0byBhZGRyZXNzIHRoZSBTVk4gSXNzdWUKICAgICAgICA8bGluayBocmVmPSJodHRwOi8vc3VidmVyc2lvbi50aWdyaXMub3JnL2lzc3Vlcy9zaG93X2J1Zy5jZ2k/aWQ9MTIzMyI+MTIzMzwvbGluaz4uCiAgICAgICBDb21taXR0ZWQgYnkgREMuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTEwNyI+Rk9SLTEwNzwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICAgQWRkZWQgbmV3IGRvY3VtZW50YXRpb24gYWJvdXQKICAgICAgICA8bGluayBocmVmPSJzaXRlOnYwLjcwLy9zZWFyY2hpbmciPlNlYXJjaGluZyBGb3JyZXN0LWJ1aWx0IGRvY3VtZW50YXRpb248L2xpbms+CiAgICAgICAgd2hpY2ggZGVzY3JpYmVzIGJvdGggTHVjZW5lIGFuZCBHb29nbGUgc2VhcmNoLgogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC4gVGhhbmtzIHRvIEZsb3JpYW4gRy4gSGFhcy4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItOSI+Rk9SLTk8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICBJbmZvcm1hdGlvbiBhYm91dCB0aGUgbmV3IAogICAgICAgPGxpbmsgaHJlZj0ic2l0ZTptYWlsLWxpc3RzL2ZvcnJlc3QtdXNlciI+Zm9ycmVzdC11c2VyPC9saW5rPgogICAgICAgbWFpbCBsaXN0LgogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEJlZ2FuIGRvY3VtZW50YXRpb24gZm9yIG5ldyBmb3JyZXN0Ym90OyBtb3ZlZCBzdGFibGUgZm9ycmVzdGJvdCBkb2NzCiAgICAgICBDb21taXR0ZWQgYnkgREIuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBSZXBsYWNlIFVSTHMgaW4gYWxsIGRvY3MgdG8gYmUgaHR0cDovL2ZvcnJlc3QuYXBhY2hlLm9yZy8KICAgICAgIENvbW1pdHRlZCBieSBKSlAuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBGb3JyZXN0IGlzIG5vdyBhIHRvcC1sZXZlbCBBcGFjaGUgcHJvamVjdC4gVGhlIG5ldyB3ZWJzaXRlIGlzIGF0CiAgICAgICAgPGxpbmsgaHJlZj0iaHR0cDovL2ZvcnJlc3QuYXBhY2hlLm9yZy8iPmh0dHA6Ly9mb3JyZXN0LmFwYWNoZS5vcmcvPC9saW5rPgogICAgICAgQ29tbWl0dGVkIGJ5IERDLjwvbGk+PC91bD48L3NlY3Rpb24+PHNlY3Rpb24+PHRpdGxlPkNvbnRyaWJ1dG9ycyB0byB0aGlzIHJlbGVhc2U8L3RpdGxlPjxwPldlIHRoYW5rIHRoZSBmb2xsb3dpbmcgcGVvcGxlIGZvciB0aGVpciBjb250cmlidXRpb25zIHRvIHRoaXMgcmVsZWFzZS48L3A+PHA+VGhpcyBpcyBhIGxpc3Qgb2YgYWxsIHBlb3BsZSB3aG8gcGFydGljaXBhdGVkIGFzIGNvbW1pdHRlcnM6PGJyLz5BbnRvbmlvIEdhbGxhcmRvIChBRyksIERhdmUgQnJvbmRzZW1hIChEQiksIERhdmlkIENyb3NzbGV5IChEQyksIEp1YW4gSm9zZSBQYWJsb3MgKEpKUCksIE5pY29sYSBLZW4gQmFyb3p6aSAoTktCKSwgUm9zcyBHYXJkbGVyIChSREcpLCBSZWluaGFyZCBQ9nR6IChSUCksIFRob3JzdGVuIFNjaGVybGVyIChUUykuPC9wPjxwPlRoaXMgaXMgYSBsaXN0IG9mIG90aGVyIGNvbnRyaWJ1dG9yczo8YnIvPkFwYWNoZSBJbmZyYXN0cnVjdHVyZSwgQXJ0dXJvIFZhenF1ZXosIEVyaWMgQnVyZ2hhcmQsIEVyaWMgQlVSR0hBUkQsIEZhYmlvIFJpbmFsZGksIEZsb3JpYW4gRy4gSGFhcywgSmFuIE1hdGVybmUsIEpvaGFubmVzIFNjaGFlZmVyLCBKdWFuIEpvc2UgUGFibG9zLCBOaWNrIENoYWxrbywgUGllcnJpY2sgQnJpaGF5ZSwgUmFt824gUHJhZGVzLCBSaWNrIFRlc3NuZXIsIFJvYiBFeGxleSwgUm9zcyBHYXJkbGVyLCBTZWFuIFdoZWxsZXIsIFNlYmFzdGlhbiBCZXJnbWFubiwgU3RlcGhhbiBFLiBTY2hsaWVyZiwgVW5pY28gSG9tbWVzLjwvcD48L3NlY3Rpb24+PC9zZWN0aW9uPgoKICAgIDxzZWN0aW9uIGlkPSJ2ZXJzaW9uXzAuNS4xIj48dGl0bGU+VmVyc2lvbiAwLjUuMSAoMjAwMy0xMC0wNik8L3RpdGxlPjxzZWN0aW9uPjx0aXRsZT5DaGFuZ2VzIHRvIEJ1aWxkPC90aXRsZT48dWw+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgZm9ycmVzdC5hbnRwcm94eS54bWwgc2NyaXB0IG5vdyBwcm9wZXJseSBmYWlscyB3aGVuIENvY29vbiBmYWlscwogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PC91bD48L3NlY3Rpb24+PHNlY3Rpb24+PHRpdGxlPkNoYW5nZXMgdG8gdGhlIENvZGUgQmFzZTwvdGl0bGU+PHVsPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIG9iZnVzY2F0ZS1tYWlsLWxpbmtzIHNraW5jb25mLnhtbCBvcHRpb24sIG9uIGJ5IGRlZmF1bHQuCiAgICAgICBDb21taXR0ZWQgYnkgSlQuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTY3Ij5GT1ItNjc8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgVXBncmFkZSB0byBDb2Nvb24gMi4xLjIsIHdoaWNoIGZpeGVzIGEgYnVnIHRoYXQgY2F1c2VkIHNvbWUKICAgICAgICBwYWdlcyBpbiBhIHNpdGUgbm90IHRvIGJlIHJlbmRlcmVkIGZyb20gdGhlIGNvbW1hbmQtbGluZSwgYW5kCiAgICAgICAgaGFzIHNvbWUgY29zbWV0aWMgaW1wcm92ZW1lbnRzLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi02NiI+Rk9SLTY2PC9saW5rPiwgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi02MiI+Rk9SLTYyPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEluIHNraW5jb25mLnhtbCwgbWFkZSBwcm9qZWN0LWRlc2NyaXB0aW9uIG9wdGlvbmFsIHRvIGtlZXAKICAgICAgICBjb21wYXRpYmlsaXR5IHdpdGggMC40LgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgRml4IGZvcnJlc3Qtc2l0ZSB0YWJsZXMgYnVnIHRoYXQgYnJva2UgT3BlcmEKICAgICAgIENvbW1pdHRlZCBieSBKVC4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItNjUiPkZPUi02NTwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBGaXhlZCBVUkxzIGZvciBjb21tYS1zZXBhcmF0ZWQgYnVnIGtleXMgaW4gc3RhdHVzLnhtbAogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgRml4IGJ1Z3MgaW4gZm9ycmVzdC5iYXR8c2ggc2NyaXB0cyBlbmNvdW50ZXJlZCB3aGVuIHVzZWQgaW4KICAgICAgICBvZGQgZW52aXJvbm1lbnRzIChwZXJsIGFuZCBXaW45eCkuCiAgICAgICBDb21taXR0ZWQgYnkgSlQuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTQ3Ij5GT1ItNDc8L2xpbms+LCA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTQ4Ij5GT1ItNDg8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgVGhlICdmb3JyZXN0JyBjb21tYW5kIG5vIGxvbmdlciBzb3VyY2VzIC9ldGMvYW50cmMgYW5kCiAgICAgICAgfi8uYW50cmMsIHdoaWNoIHNvbHZlcyBwcm9ibGVtcyBvbiBzb21lICpuaXggZGlzdHJpYnV0aW9ucy4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjwvdWw+PC9zZWN0aW9uPjxzZWN0aW9uPjx0aXRsZT5Db250cmlidXRvcnMgdG8gdGhpcyByZWxlYXNlPC90aXRsZT48cD5XZSB0aGFuayB0aGUgZm9sbG93aW5nIHBlb3BsZSBmb3IgdGhlaXIgY29udHJpYnV0aW9ucyB0byB0aGlzIHJlbGVhc2UuPC9wPjxwPlRoaXMgaXMgYSBsaXN0IG9mIGFsbCBwZW9wbGUgd2hvIHBhcnRpY2lwYXRlZCBhcyBjb21taXR0ZXJzOjxici8+SmVmZiBUdXJuZXIgKEpUKS48L3A+PC9zZWN0aW9uPjwvc2VjdGlvbj4KCiAgICA8c2VjdGlvbiBpZD0idmVyc2lvbl8wLjUiPjx0aXRsZT5WZXJzaW9uIDAuNSAoMjAwMy0wOS0xMyk8L3RpdGxlPjxzZWN0aW9uPjx0aXRsZT5DaGFuZ2VzIHRvIHRoZSBDb2RlIEJhc2U8L3RpdGxlPjx1bD48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBAbGFiZWwgc3VwcG9ydCBmb3Igbm90ZSBhbmQgd2FybmluZyBlbGVtZW50cy4KICAgICAgIENvbW1pdHRlZCBieSBTTi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIGFiaWxpdHkgdG8gaGF2ZSB2ZXJzaW9uLXNwZWNpZmljIG92ZXJyaWRkZW4gc2l0ZW1hcHMuICBGb3IKICAgICAgICBleGFtcGxlLCBzcmMvZG9jdW1lbnRhdGlvbi9zaXRlbWFwLTAuNS54bWFwIHdpbGwgYmUgdXNlZCBieSBGb3JyZXN0IDAuNQogICAgICAgIGluIHByZWZlcmVuY2UgdG8gYW55IG90aGVycyBwcmVzZW50IGluIHRoZSBzYW1lIGRpcmVjdG9yeS4gIFRoaXMgbWVhbnMgYQogICAgICAgIHNpdGUgd2l0aCBvdmVycmlkZGVuIHNpdGVtYXBzIGNhbiBidWlsZCB3aXRoIENvY29vbiB2ZXJzaW9ucyBleHBlY3RpbmcKICAgICAgICBkaWZmZXJlbnQgc2l0ZW1hcCBmb3JtYXRzLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQ29tbWEgc2VwYXJhdGVkIGJ1Z3MgaGF2ZSBhIGxpbmsgdG8gYnVnemlsbGEgc3lzdGVtcy4KICAgICAgIENvbW1pdHRlZCBieSBKSlAuIFRoYW5rcyB0byA8bGluayBocmVmPSJtYWlsdG86am9lcmcuaGVpbmlja2VAZ214LmRlIj5Kb2VyZyBIZWluaWNrZTwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBOb3cgdGhlIEtyeXNhbGlzIHNraW4gaGFzIGphdmFzY3JpcHQtY29sbGFwc2FibGUgbWVudXMuCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgIEFkZGVkIGEgdGV4dDJkb2N1bWVudC54c2wgc3R5bGVzaGVldC4gQ29udmVydCB0byB1bml4IGZvcm1hdCBzbyBpdCBzdG9wICAKICAgICAgICAgRU9MIGNoYXJhY3Rlci4gU2ltcGxpZnkgc28gaXQgZG9lcyBub3QgdXNlIGNoYXBlcm9uIGZvcm1hdC4KICAgICAgICAgZm9ybWF0LgogICAgICAgIENvbW1pdHRlZCBieSBKSlAuIFRoYW5rcyB0byA8bGluayBocmVmPSJtYWlsdG86ZGF2ZUBicm9uZHNlbWEubmV0Ij5EYXZlIEJyb25kc2VtYTwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBhbHRlcm5hdGl2ZSBtZW51L3RhYiBzZWxlY3Rpb24gYWxnb3JpdGhtLCB0aGF0IHVzZXMgdGFiIGF0dHJpYnV0ZXMKICAgICAgICBpbiBzaXRlLnhtbCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gcGh5c2ljYWwgc2l0ZSBzdHJ1Y3R1cmUgKGRpcmVjdG9yaWVzKS4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIGEgPGNvZGU+Zm9ycmVzdC5tYXhtZW1vcnk8L2NvZGU+IHByb3BlcnR5IHNwZWNpZnlpbmcgdGhlIG1heGltdW0KICAgICAgICBhbW91bnQgb2YgbWVtb3J5IGFsbG9jYXRlZCB0byB0aGUgSlZNLiBVc2VmdWwgZm9yIHJlbmRlcmluZyBsYXJnZSBQREZzLgogICAgICAgIEFkZGVkIDxjb2RlPmZvcnJlc3QuanZtYXJnczwvY29kZT4gcHJvcGVydHkgZm9yIG90aGVyIEpWTSBvcHRpb25zLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICBPbiBrcnlzYWxpcyBza2luOiB1c2VycyBjYW4gc2VsZWN0IGZvbnQgc2l6ZSwgcmV3b3JrZWQgbGVmdC1iYXIgaW5jbHVzaW9uCiAgICAgICBvZiBwYWdlIHNlY3Rpb24gdGl0bGVzLCBtYWRlIHRoZW0gb25seSBvbmUgbGV2ZWwgZGVlcCwgbW92ZWQgYnV0dG9ucyBhZnRlcgogICAgICAgdGhlIGxlZnQgbmF2YmFyLCBhZGRlZCBwdWJsaXNoIGRhdGUgb24gdG9wIHJpZ2h0IG5hdmJhci4gCiAgICAgICBGb3IgYm90aCBGb3JyZXN0IGFuZCBrcnlzYWxpcyBza2lucywgYWRkZWQgc2luZ2xlIGJhY2tncm91bmQgcGl4ZWwgbGluZSBiZWxvdwogICAgICAgdW5zZWxlY3RlZCB0YWJzIGFuZCBtYWRlIHNlbGVjdGVkIHRhYiBtb3JlIHByb21pbmVudC4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBYSW5jbHVkZSBjYXBhYmlsaXR5ICB0byB0aGUgZG9jdW1lbnRzLiBSZW1lbWJlciB0byAKICAgICAgICBkaXNhYmxlIHZhbGlkYXRpb25zIGZvciBmaWxlcyB3aXRoIHhpbmNsdWRlcyBhcyB0aGUgeGluY2x1ZGUgaXMgbm90CiAgICAgICAgcGVyZm9ybWVkIGR1cmluZyB2YWxpZGF0aW9uLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIERvY0Jvb2sgNC4yIGFuZCBzaW1wbGlmaWVkIERvY0Jvb2sgMS4wIHRvIHRoZSBzY2hlbWFzIGFuZAogICAgICAgIHRvIHRoZSB2YWxpZGF0aW9uIGNhdGFsb2d1ZS4KICAgICAgICBBZGRlZCBEb2Nib29rIGFuZCBzaW1wbGlmaWVkIERvY2Jvb2sgcmVuZGVyaW5nIGNhcGFiaWxpdHkgZm9yIGRvY3VtZW50cy4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBGaXhlZCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGNhdXNlZCBieSBjYXRhbG9nIERURAogICAgICAgIEhUVFAgbG9va3VwLiBUaGUgYnVpbGQgaGFkIGFuIGV4dHJhIGFuZCBvbGRlciByZXNvbHZlci5qYXIKICAgICAgIENvbW1pdHRlZCBieSBEQy48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEZpeCBjaGFyYWN0ZXIgcmV0dXJuIG9uIGxpbmUgZmVlZCBmb3IgZnJlc2gtc2l0ZSBvbiB0aGUgemlwIGRpc3RyaWJ1dGlvbgogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC4gU2VlIElzc3VlIDxsaW5rIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9GT1ItMzEiPkZPUi0zMTwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICAgTmV3IHByb3BlcnR5ICJidWd0cmFja2luZy11cmwiIHRvIGFsbG93IGEgYnVnIHRyYWNraW5nIHN5c3RlbXMKICAgICAgICAgb3RoZXIgdGhhbiBidWd6aWxsYS4KICAgICAgIENvbW1pdHRlZCBieSBKSlAuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICAgQWRkZWQgYSAiZm9ycmVzdCBjbGVhbiIgdGFzayB0aGF0IHJlbW92ZXMgdGhlIHByb2plY3QgYnVpbGQgZGlyZWN0b3J5LgogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC4gVGhhbmtzIHRvIDxsaW5rIGhyZWY9Im1haWx0bzpiam9yc25vc0BzdHVkLm50bnUubm8iPkVpcmlrIEJq+HJzbvhzPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgICBTdXBwb3J0IGZvciB2ZXJzaW9uLCB0eXBlIGFuZCBub3RpY2Ugb24gaHRtbCBmb3JtYXQuCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLiBUaGFua3MgdG8gPGxpbmsgaHJlZj0ibWFpbHRvOmJqb3Jzbm9zQHN0dWQubnRudS5ubyI+RWlyaWsgQmr4cnNu+HM8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgU3R5bGUgaW5mb3JtYXRpb24gb24gdGhlIGNvbW1vbiBza2luLiAKICAgICAgIENvbW1pdHRlZCBieSBKSlAuIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTM0Ij5GT1ItMzQ8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgYnVpbGQgZGlyZWN0b3J5IGNyZWF0ZWQgaW4gd3JvbmcgZGlyZWN0b3JpZXMuCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLiBUaGFua3MgdG8gPGxpbmsgaHJlZj0ibWFpbHRvOnJvc3NAc2FhZmUub3JnIj5Sb3NzIEdhcmRsZXI8L2xpbms+LiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi00NiI+Rk9SLTQ2PC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIE9uIGZyZXNoLXNpdGU6CiAgICAgICAgU3luY2hyb25pemUgc2l6ZSBmb3IgZ3JvdXAgYW5kIHByb2plY3QgbG9nby4gCiAgICAgICAgQWRkZWQgZGVzY3JpcHRpb24gb24gc2l0ZS54bWwgZWxlbWVudHMgc28gaXQgZGlzcGxheXMgdG9vbHRpcC4KICAgICAgIENvbW1pdHRlZCBieSBKSlAuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgIFJlbW92ZSBlcnJvcnMgZm9yIGZvcHg6Ym9va21hcmtzIGVsZW1lbnQuCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi00MyI+Rk9SLTQzPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEFsbG93IGltYWdlcyB0byBzY2FsZSBvbiBwZGYgb3V0cHV0LgogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC4gVGhhbmtzIHRvIDxsaW5rIGhyZWY9Im1haWx0bzpwaWV0c2NoQGFwYWNoZS5vcmciPkouUGlldHNjaG1hbm48L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgRG9jYm9vayB0YWJsZSBoZWFkZXIgaXMgc2hpZnRlZCBvbmUgY29sdW1uLgogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC4gVGhhbmtzIHRvIDxsaW5rIGhyZWY9Im1haWx0bzpEZVNtZXRfUmluZ29AZW1jLmNvbSI+UmluZ28gZGUgU21ldDwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBpaHRtbCBub3cgd29ya3MgYWdhaW4uIEhhZCB0byBhZGQgYSBqdGlkeSBjb25maWd1cmF0aW9uIHRoYXQgcHJldmVudGVkIGl0IHRvIG91dHB1dAogICAgICAgIHRpZGllcyBodG1sIHRvIHRoZSBwaXBlbGluZSwgdGh1cyBtYWtpbmcgdGhlIHN0eWxlc2hlZXQgdW51c2FibGUuIEFsc28gaGFkIHRvIGZpeAogICAgICAgIHRoZSBzaXRlbWFwIHNjaGVtYS4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBDbGVhbnVwIG1hcHM6Y29tcG9uZW50cyBkZWZpbml0aW9ucyBvbiBzdWItbWFwcy4KICAgICAgICBSZW1vdmUgaW5kZW50IGF0dHIgZnJvbSB0aGUgeHNsOm91dHB1dCBhcyBpdCBpcyBkZWZpbmUgb24gc2VyaWFsaXplci4KICAgICAgICBNb3ZlIHhzbDpvdXRwdXQgZm9yICoyZG9jdW1lbnQueHNsIHRvICJ4bWwtZG9jdW1lbnQiIHNlcmlhbGl6ZXIuCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgYWJzdHJhY3QgZWxlbWVudCB3YXMgaWdub3JlZCBmb3IgaHRtbCBvdXRwdXQuCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLiBUaGFua3MgdG8gPGxpbmsgaHJlZj0ibWFpbHRvOmJqb3Jzbm9zQHN0dWQubnRudS5ubyI+RWlyaWsgQmr4cnNu+HM8L2xpbms+LiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi01MSI+Rk9SLTUxPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIFVuZXNjYXBlIHN0cmluZ3MsIHNvIHRoZXkgZGlzcGxheSBwcm9wZXJseSBvbiB0aGUgdHJhaWwgZm9yIGFsbCBza2lucy4KICAgICAgIENvbW1pdHRlZCBieSBKSlAuIFRoYW5rcyB0byA8bGluayBocmVmPSJtYWlsdG86cnByYWRlc0Bwb3JjZWxhbm9zYS5jb20iPlJhbfNuIFByYWRlczwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBVc2Ugc3luYyB0YXNrIHRvIGNsZWFuIHRoZSB0bXAgZGlyZWN0b3J5IGZvciB4ZG9jcy4KICAgICAgIENvbW1pdHRlZCBieSBKSlAuIFRoYW5rcyB0byA8bGluayBocmVmPSJtYWlsdG86ZGF2ZUBicm9uZHNlbWEubmV0Ij5EYXZlIEJyb25kc2VtYTwvbGluaz4uIFNlZSBJc3N1ZSA8bGluayBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvRk9SLTQ5Ij5GT1ItNDk8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgU3RvcHBlZCB0aGUgcmV3cml0aW5nIG9mIGV4dGVuc2lvbnMuCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBGaXhlZCBidWcgdGhhdCBzaG93ZWQgdGhlIGtyeXNhbGlzLXNpdGUgc2tpbiBpbiBJRSBicm93c2VycyBmcm9tIAogICAgICAgIGEgcmVtb3RlIHNpdGUgdG8gc3RhcnQgd2l0aCBhIGZvbnQgc2l6ZSBvZiAxMDAuIAogICAgICAgIEFsc28gbWFkZSB0aGUgZm9udCBzaXplIHNjcmlwdCBraWNrIGluIGF0IHRoZSBzdGFydCBvZiB0aGUKICAgICAgICBwYWdlIHJlbmRlcmluZywgYXMgYmVmb3JlIGl0IHJlc2l6ZWQgb25seSBhZnRlciBhbGwgdGhlIHBhZ2UKICAgICAgICB3YXMgbG9hZGVkLCB3aGljaCB3YXMgbm90IG5pY2UgdG8gc2F5IHRoZSBsZWFzdC4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBJbiBQREZzLCBzZWN0aW9uIHRpdGxlcyBhcmUgbm8gbG9uZ2VyIG51bWJlcmVkL3JlZHVjZWQgaW4gc2l6ZSBpbmRlZmluaXRlbHkuCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBNYWtlIEZBUSAnUXVlc3Rpb25zJyBzZWN0aW9uIG1vcmUgbGVnaWJsZSwgYW5kIGF2b2lkIGR1cGxpY2F0ZSBudW1iZXJpbmcKICAgICAgICBpbiBGQVEgUERGLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgTGlua3MgdG8gc3ViZGlyZWN0b3JpZXMgbm8gbG9uZ2VyIGJsb3cgdXAgdGhlIGNvbW1hbmQtbGluZSByZW5kZXJpbmcuCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBFbmFibGUgbGluayByZXdyaXRpbmcgZm9yICouZWh0bWwgZmlsZXMuCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBFbmFibGUgbGluayByZXdyaXRpbmcgZm9yIGltYWdlcyBhbmQgZmlndXJlcyAoQHNyYyBhdHRyaWJ1dGUpLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgR2V0IGJyZWFkY3J1bWJzIHdvcmtpbmcgaW4gTWFjIElFIDUsIGFuZCBkb24ndCBjYXBpdGFsaXplIHRoZSBmaXJzdAogICAgICAgIGxldHRlciBvZiBlYWNoIGxpbmsgaW4gdGhlIGZvcnJlc3Qtc2l0ZSBza2luLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULiBUaGFua3MgdG8gPGxpbmsgaHJlZj0ibWFpbHRvOmJvZGV3aWdAYXBhY2hlLm9yZyI+U3RlZmFuIEJvZGV3aWc8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgRml4ZWQgYnVnIHdoZXJlIGFic29sdXRlIHBhdGhzIHRvIGltYWdlcyB3ZXJlIGNyZWF0ZWQgaW4gdGhlCiAgICAgICAgPGNvZGU+YnVpbGQvc2l0ZTwvY29kZT4gZGlyZWN0b3J5LgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgR2V0IHRoZSBXaWtpIHN5bnRheCBzdXBwb3J0IHdvcmtpbmcgYWdhaW4uCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBGaXhlZCByZW5kZXJpbmcgb2YgaW1hZ2VzIGluIFBERiBmb3IgaW1hZ2VzIG5vdCBsb2NhdGVkIGluIHRoZQogICAgICAgIHJlc291cmNlcy9pbWFnZXMgZGlyLgogICAgICAgQ29tbWl0dGVkIGJ5IFNOLjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgQWRkIGF1dG9tYXRpYyAoZG9jdHlwZS10cmlnZ2VyZWQpIGhhbmRsaW5nIG9mIHRvZG8gYW5kIGNoYW5nZXMgWE1MCiAgICAgICAgZmlsZXMsIHJlZ2FyZGxlc3Mgb2YgZmlsZSBuYW1lIG9yIGxvY2F0aW9uIGluIHRoZSBkaXJlY3RvcnkgdHJlZS4gIFRoZQogICAgICAgIHJvb3QgY2hhbmdlcy5odG1sIGFuZCB0b2RvLmh0bWwgZmlsZXMgYXJlIHN0aWxsIGdlbmVyYXRlZCBmcm9tCiAgICAgICAgc3RhdHVzLnhtbC4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEluIDxjb2RlPnNraW5zL2NvbW1vbi94c2x0L2h0bWwvdGFiMm1lbnUueHNsPC9jb2RlPiwgcmVuYW1lZCB0ZW1wbGF0ZQogICAgICAgICd1bnNlbGVjdGVkLXRhYi1ocmVmJyB0byAnY2FsY3VsYXRlLXRhYi1ocmVmJywgcG90ZW50aWFsbHkgYnJlYWtpbmcgM3JkCiAgICAgICAgcGFydHkgc2tpbnMuCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBGaXggbWVudSBidWcgd2hlcmUgbGlua3Mgd2l0aCAjZnJhZ21lbnQgaWRlbnRpZmllcnMgd291bGRuJ3QgZGlzcGxheS4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEdldCBpbWFnZXMgaW4gUERGcyB3b3JraW5nIHdpdGggRk9QIDAuMjAueC4gIFRoaXMgcmVxdWlyZXMgdGhlIHVzZXIgdG8KICAgICAgICBkb3dubG9hZCBqaW1pLmphciBmcm9tIDxsaW5rIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vcHJvZHVjdHMvamltaS8iPlN1bjwvbGluaz4gYW5kIHBsYWNlIGl0IGluCiAgICAgICAgdGhlIDxjb2RlPmxpYi9jb3JlPC9jb2RlPiAoc3JjIGRpc3Rybykgb3IgPGNvZGU+V0VCLUlORi9saWI8L2NvZGU+CiAgICAgICAgKGJpbmFyeSBkaXN0cm8pIGRpcmVjdG9yeS4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgT24ga3J5c2FsaXMgc2tpbjogZml4ZWQgcHJpbnQgY3NzLCBhbHNvIHVzaW5nIHRleHQgaW5zdGVhZCBvZgogICAgICAgbG9nb3MgYW5kIGFkZGluZyB0aGUgZm9vdGVyLCBhbmQgY2hhbmdlZCBsaW5rIGNvbG9ycyB0byBibHVlcyBhbmQKICAgICAgIHJlZCBmb3IgYWN0aXZlIGxpbmtzLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEZpeGVkIDxjb2RlPmphdmEubGFuZy5Ob0NsYXNzRGVmRm91bmRFcnJvcjoKICAgICAgICAgIGphdmF4L3NlcnZsZXQvU2VydmxldElucHV0U3RyZWFtPC9jb2RlPiBlcnJvci4KICAgICAgIENvbW1pdHRlZCBieSBKVC4gVGhhbmtzIHRvIDxsaW5rIGhyZWY9Im1haWx0bzpjaGVjaGVAY2hlLWNoZS5jb20iPkp1YW4gSm9zZSBQYWJsb3M8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgQWxsb3cgdXNlcnMgdG8gZGV0ZXJtaW5lIHdoaWNoIFVSTHMgRm9ycmVzdCBzaG91bGQgaWdub3JlLCBieSBvdmVycmlkaW5nCiAgICAgICAgPGNvZGU+c3R5bGVzaGVldHMvZmlsdGVybGlua3MueHNsPC9jb2RlPiAoYW5kIG90aGVyIHN0eWxlc2hlZXRzIGluIHRoYXQKICAgICAgICBkaXJlY3RvcnkpLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgRG9jYm9vayBzdHlsZXNoZWV0IGltcHJvdmVtZW50cy4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEZpeCBhIGJ1ZyB3aXRoIGZvcnJlc3QuYW50cHJveHkueG1sIGludHJvZHVjZWQgaW4gMC40LCB3aGljaCBjYXVzZWQKICAgICAgICB1bnJlc29sdmVkICcke3Byb2plY3QuaG9tZX0nIHZhcmlhYmxlcy4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIEluIHRoZSBmb3JyZXN0LXNpdGUgc2tpbiBhbmQgZGVyaXZhdGl2ZXMsIGRpc3BsYXkgdGhlIGF1dGhvciBhbmQgdmVyc2lvbiBhdCB0aGUKICAgICAgICBib3R0b20gb2YgdGhlIHBhZ2UsIGFzIGtyeXNhbGlzLXNpdGUgZG9lcy4gIEFsc28gYWRkZWQgcGFyc2luZyBmb3IgQ1ZTIFJldmlzaW9uCiAgICAgICAgdGFncywgc28gPGNvZGU+Jmx0O3ZlcnNpb24mZ3Q7JFJldmlzaW9uOiAxLjI4OCAkJmx0Oy92ZXJzaW9uJmd0OzwvY29kZT4gY2FuIGJlIHVzZWQuCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBBZGRlZCBlbWFpbCB0ZW1wbGF0ZSBmb3IgaHRtbCBjb250ZW50IGluIGNvbW1vbiBza2luLgogICAgICAgQ29tbWl0dGVkIGJ5IEpKUC4gVGhhbmtzIHRvIDxsaW5rIGhyZWY9Im1haWx0bzpkYXZlQGJyb25kc2VtYS5uZXQiPkRhdmUgQnJvbmRzZW1hPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIEFkZCBkZXNjcmlwdGlvbiB0byB7Z3JvdXAsIHByb2plY3R9IGxvZ28uCiAgICAgICBDb21taXR0ZWQgYnkgSkpQLiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi0yMyI+Rk9SLTIzPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFN3aXRjaGVkIG9mZiBza2luY29uZi5ybmMgdmFsaWRhdGlvbiB0byBwcm9tb3RlIGJldHRlciBmb3J3YXJkcy1jb21wYXQuCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBVcGdyYWRlZCB0byBDb2Nvb24gMzAvMDgvMjAwMywgbm93IHdpdGggYWJpbGl0eSB0byBleGNsdWRlIFVSTHMgZnJvbQogICAgICAgIGJlaW5nIHByb2Nlc3NlZCwgaW4gY2xpLnhjb25mLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgQWRkICJ0aXRsZSIgYXR0cmlidXRlIHRvIG1lbnUgaXRlbSBsaW5rcyB1c2luZyB0aGUgImRlc2NyaXB0aW9uIgogICAgICAgIGF0dHJpYnV0ZSBmcm9tIGVudHJpZXMgaW4gc2l0ZS54bWwgb3IgYm9vay54bWwKICAgICAgIENvbW1pdHRlZCBieSBEQy4gVGhhbmtzIHRvIDxsaW5rIGhyZWY9Im1haWx0bzpoYXVzZXJAYWNtLm9yZyI+UmFsZiBIYXVzZXI8L2xpbms+LiBTZWUgSXNzdWUgPGxpbmsgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0ZPUi0yMCI+Rk9SLTIwPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFRoZSBnZW5lcmF0ZWQgVGFibGVzIG9mIENvbnRlbnRzIGNhbiBiZSBjb25maWd1cmVkIHRvIHNob3cgYSBjZXJ0YWluCiAgICAgICAgbnVtYmVyIG9mIHNlY3Rpb24gbGV2ZWxzLiBEZWZhdWx0IGlzIHR3byBsZXZlbHMuIExldmVsIDAgbWVhbnMgc2hvdwogICAgICAgIG5vIFRvQyBhdCBhbGwuIFNlZSB0aGUgZnJlc2gtc2l0ZSBza2luY29uZi54bWwgZm9yIGV4YW1wbGUgdXNhZ2UuCiAgICAgICBDb21taXR0ZWQgYnkgREMuIFRoYW5rcyB0byA8bGluayBocmVmPSJtYWlsdG86cnByYWRlc0Bwb3JjZWxhbm9zYS5jb20iPlJhbfNuIFByYWRlczwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBOZXcgJ2V4cGFuZC1kdGQnIHRhcmdldCBmb3IgZ2VuZXJhdGluZyBtb25vbGl0aGljIERURHMgc3VpdGFibGUgZm9yIHVzZQogICAgICAgIGluIGNhdGFsb2ctaWdub3JhbnQgWE1MIGVkaXRvcnMgc3VjaCBhcyBJREVBLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgc2l0ZS54bWwgY2hhbmdlcyBub3cgcGlja2VkIHVwIHdpdGhvdXQgcmVxdWlyaW5nIGEgcmVsb2FkIG9mIHRoZSB3ZWJhcHAuCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBVcGRhdGVkIHRvIENvY29vbiAyMC83LzAzLCBhbmQgdXNlIHRoZSBuZXcgY29tbWFuZC1saW5lIChjbGkueGNvbmYpLCB3aGljaAogICAgICAgIG1ha2VzIEZvcnJlc3Qgc3RhdGljIHJlbmRlcmluZyBtb3JlIHRoYW4gdHdpY2UgYXMgZmFzdCBhcyBiZWZvcmUuCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBOZXcgSWNvbnMuCiAgICAgICBDb21taXR0ZWQgYnkgTktCLiBUaGFua3MgdG8gPGxpbmsgaHJlZj0ibWFpbHRvOnJvZnJlQHN3aW5nLmJlIj5GcmVkZXJpYyBSb2Jlc3luPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFVwZGF0ZWQgQ29jb29uIHRvIC1EICIyMDAzLzA2LzIyIDEyOjAwIi4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSBmaWxlcwogICAgICAgIHdpdGggdW5rbm93biBleHRlbnNpb25zIHdlcmUgd3JpdHRlbiB3aXRoICdudWxsJyBhcHBlbmRlZCB0byB0aGVpcgogICAgICAgIGZpbGVuYW1lLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgQWxsb3cgYW55IHNvcnQgb2YgY29udGVudCBpbnNpZGUgPGNvZGU+cmVzb3VyY2VzLzwvY29kZT4sIHdoaWNoIHdpbGwgYmUKICAgICAgICBtYWRlIGF2YWlsYWJsZSB0byB0aGUgc2l0ZW1hcCBidXQgbm90IGF1dG9tYXRpY2FsbHkgY29waWVkIHRvIHRoZQogICAgICAgIGdlbmVyYXRlZCBzaXRlIG91dHB1dC4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIEFkZCBhIGZsYWcgZm9yIGVtYWlsIG9iZnVzY2F0aW9uLCBhbmQgdHVybiBpdCBvZmYgYnkgZGVmYXVsdC4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFVwZ3JhZGVkIEZPUCBmcm9tIDAuMjAuNCB0byAwLjIwLjUuCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBVcGdyYWRlZCBDb2Nvb24gdG8gTTIuCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBUaGUgJ2JhY2tjb3B5JyBjb21tYW5kIHdpbGwgbm93IGNvcHkgYWxsIHR5cGVzIG9mIGN1c3RvbSBjb250ZW50CiAgICAgICAgKCoueG1hcCwgc2tpbmNvbmYueG1sLCB4ZG9jcywgaW1hZ2VzLCBzdHlsZXNoZWV0cywgRFREcykuCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBBZGQgYSBAaW5kZXhmaWxlIGF0dHJpYnV0ZSB0byB0YWJzLnhtbCwgc28gdGhhdCB0aGUgdXNlciBjYW4gc3BlY2lmeSAKICAgICAgICB3aGljaCBmaWxlIHRoZSB0YWIgbGlua3MgdG8uCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBBZGQgJmx0O2VsYWJvcmF0ZSZndDsgdG8gdGhlIEZBUSAmbHQ7cXVlc3Rpb24mZ3Q7IGVsZW1lbnQsIHdoaWNoIGxldHMgb25lCiAgICAgICAgcHJvdmlkZSBzb21lIGJhY2tncm91bmQgKGVsYWJvcmF0aW9uKSBpbiB0aGUgRkFRIGJvZHkgd2l0aG91dCBjbHV0dGVyaW5nCiAgICAgICAgdGhlIEZBUSBsaXN0LgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgQWxsb3cgcGxhaW4gdGV4dCAoaW5zdGVhZCBvZiBqdXN0IGJsb2NrLWxldmVsIGVsZW1lbnRzKSBpbiB0aGUgRkFRJ3MKICAgICAgICAmbHQ7YW5zd2VyJmd0OyBlbGVtZW50LgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgQ3JlYXRlZCBuZXcgZG9jdW1lbnQtdjEyIERURCBtb2R1bGUsIGNvbnRhaW5pbmcgYWxsIERURCBpbXByb3ZlbWVudHMKICAgICAgICBtYWRlIHNpbmNlIDAuNCB3YXMgcmVsZWFzZWQsIGFuZCB1c2UgaXQgdG8gZGVmaW5lIG5ldyB2MTIgdmVyc2lvbnMgb2YKICAgICAgICBhbGwgRFREcyAoZG9jdW1lbnQsIGhvd3RvLCBmYXEsIGV0YykuICBUaGUgZG9jLXYxMiBEVEQgcmVtb3ZlcyBtYW55CiAgICAgICAgcmVzdHJpY3Rpb25zIGluIHRoZSBEVEQgdGhhdCB3ZXJlIGZvdW5kIHRvIGJlIHVubmVjZXNzYXJ5LCBhbmQgaXMgY2xvc2VyCiAgICAgICAgdG8gdGhlIEhUTUwgY29udGVudCBtb2RlbC4gIEEgbGlzdCBvZiBjaGFuZ2VzIGNhbiBiZSBmb3VuZCBpbiA8bGluayBocmVmPSJzaXRlOnYwLjcwLy9kb2N1bWVudC12MTIiPnRoZSBkb2MtdjEyIHNhbXBsZSBwYWdlPC9saW5rPi4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIE9uIHRoZSBmb3JyZXN0YmFyLCBhZGRlZCBhIGNvbW11bml0eSBtZW51LCBtYWRlICdBc2tTYW0nIGEgcmVzb3VyY2VzCiAgICAgICAgc3VibWVudSwgbW92ZWQgdGhlIHNlYXJjaCBwYXJ0IHRvIHRoZSByaWdodC4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgIE9uIGtyeXNhbGlzIHNraW46IGZpeGVkIGxlZnQgbmF2aWdhdGlvbiBiYXIgaWNvbnMgYW5kIHNpemluZyB1c2luZyBkaXZzCiAgICAgICBpbnN0ZWFkIG9mIGxpc3QgZWxlbWVudHMsIG1hZGUgYWxsIGxpbmtzIHVuZGVybGluZWQsCiAgICAgICBhZGRlZCBzcGFjZSB0byB0aGUgYm90dG9tIG9mIHRoZSBwYWdlIHRleHQsIGFuZCBjaGFuZ2VkIGZvbnQKICAgICAgIGluY3JlYXNlLWRlY3JlYXNlIGxpbmtzIHRvIGJ1dHRvbnMuCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgRW5hYmxlZCBtdWx0aXBsZSBvdXRwdXQgbGlua3Mgb24gZWFjaCBwYWdlIChwcmludCAtIHBkZiAtIHhtbCkKICAgICAgICBUaGV5IGNhbiBiZSBlbmFibGVkIGJ5IGFkZGluZyB0aGUgcmVsYXRpdmUgZGlzYWJsZS0qLWxpbmsgZWxlbWVudHMKICAgICAgICBhbmQgc2V0dGluZyB0aGVtIHRvIGZhbHNlLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFVwZ3JhZGVkIHRvIDIwMDMtMDMtMTEgdmVyc2lvbiBvZiBDb2Nvb24KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIEZvcnJlc3RiYXIgaXMgbm93IAogICAgICAgIDxsaW5rIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGhvZW5peC8iPlBob2VuaXg8L2xpbms+IGNvbXBhdGlibGUuCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgQWRkZWQgbGlua3MgZm9yIGJvdGggcG9zc2libGUgbG9jYWwgZm9ycmVzdHMgKHBvcnQgODA4MCBhbmQgODg4OCksCiAgICAgICAgYW5kIG1ha2UgdGhlbSBjb25maWd1cmFibGUgaW4gcHJvcGVydGllcy54bWwuCiAgICAgICAgVGhhbmtzIHRvIE1hcmsgVm92c2kgZm9yIHBvaW50aW5nIGl0IG91dC4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBSZWZhY3RvcmVkIHRoZSAidHJhbnNmb3JtLXRvLWRvY3VtZW50IiBzaXRlbWFwIHJlc291cmNlIHRvIGRvIHRoZQogICAgICAgIHRoZSB4aW5jbHVkZSwgIGxpbmtyZXdyaXRlciwgYW5kIGlkZ2VuIHN0ZXBzLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjwvdWw+PC9zZWN0aW9uPjxzZWN0aW9uPjx0aXRsZT5DaGFuZ2VzIHRvIERvY3VtZW50YXRpb248L3RpdGxlPjx1bD48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBuZXcgZG9jdW1lbnQgdG8gZmFjaWxpdGF0ZQogICAgICAgIHVwZ3JhZGluZyB0byB2MC41CiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48L3VsPjwvc2VjdGlvbj48c2VjdGlvbj48dGl0bGU+Q29udHJpYnV0b3JzIHRvIHRoaXMgcmVsZWFzZTwvdGl0bGU+PHA+V2UgdGhhbmsgdGhlIGZvbGxvd2luZyBwZW9wbGUgZm9yIHRoZWlyIGNvbnRyaWJ1dGlvbnMgdG8gdGhpcyByZWxlYXNlLjwvcD48cD5UaGlzIGlzIGEgbGlzdCBvZiBhbGwgcGVvcGxlIHdobyBwYXJ0aWNpcGF0ZWQgYXMgY29tbWl0dGVyczo8YnIvPkRhdmlkIENyb3NzbGV5IChEQyksIEp1YW4gSm9zZSBQYWJsb3MgKEpKUCksIEplZmYgVHVybmVyIChKVCksIE5pY29sYSBLZW4gQmFyb3p6aSAoTktCKSwgU3RldmVuIE5vZWxzIChTTikuPC9wPjxwPlRoaXMgaXMgYSBsaXN0IG9mIG90aGVyIGNvbnRyaWJ1dG9yczo8YnIvPkRhdmUgQnJvbmRzZW1hLCBFaXJpayBCavhyc274cywgRnJlZGVyaWMgUm9iZXN5biwgSi5QaWV0c2NobWFubiwgSm9lcmcgSGVpbmlja2UsIEp1YW4gSm9zZSBQYWJsb3MsIFJhbGYgSGF1c2VyLCBSYW3zbiBQcmFkZXMsIFJpbmdvIGRlIFNtZXQsIFJvc3MgR2FyZGxlciwgU3RlZmFuIEJvZGV3aWcuPC9wPjwvc2VjdGlvbj48L3NlY3Rpb24+CiAgICA8c2VjdGlvbiBpZD0idmVyc2lvbl8wLjQiPjx0aXRsZT5WZXJzaW9uIDAuNCAoMjAwMy0wMi0xMik8L3RpdGxlPjxzZWN0aW9uPjx0aXRsZT5DaGFuZ2VzIHRvIHRoZSBDb2RlIEJhc2U8L3RpdGxlPjx1bD48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBhIG1pbmltYWwgdGVtcGxhdGUgc2tpbi4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIFVzZSBtZWFuaW5nZnVsIGZyYWdtZW50IGlkZW50aWZpZXJzIGluIGtyeXNhbGlzLXNraW4uCiAgICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgQ29ycmVjdGx5IGlnbm9yZSBAcm9sZT0ncGRmJyBjcmVkaXRzIGluIEhUTUwKICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIGtyeXNhbGlzLXNpdGUgc2tpbiBub3cgd29ya3MgYmV0dGVyIHdpdGggbXVsdGktbGV2ZWwgbWVudXMuCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgTm9ybWFsaXplIHNwYWNlIGluIGFjcm9ueW0gdGl0bGVzLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgTWFrZSB0aGUgZm9ycmVzdGJvdCBzaGVsbCBzY3JpcHQgd29yayB1bmRlciBDeWd3aW4uCiAgICAgICBDb21taXR0ZWQgYnkgTVAuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBHb3Qgc2tpbnMgd29ya2luZyBpbiB0aGUgZm9ycmVzdGJvdC4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIFRoZSBwcm9ibGVtIHdpdGggc3RhcnRpbmcgYSBuZXcgZm9ya2VkIEpWTSBpcyB0aGF0IGFsbCAKICAgICAgICBwcm9wZXJ0aWVzIGdldCBsb3N0LiAgVGhpcyBtYWtlcyBpdCBhYmxlIHRvIHVzZSBvbmUgZm9ycmVzdC5wcm9wZXJ0aWVzCiAgICAgICAgZm9yIGFsbCBtdWx0aXBsZSBwcm9qZWN0cywgYW5kIGp1c3QgY3JlYXRlIHRoZSBkb2NzIGZyb20gdGhlcmUuIAogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi4gVGhhbmtzIHRvIDxsaW5rIGhyZWY9Im1haWx0bzpibG9yaXRzY2hAYXBhY2hlLm9yZyI+QmVyaW4gTG9yaXRzY2g8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgVGhlIG1lbnUgaXMgbm93IGxpbWl0ZWQgdG8gb25seSBwYWdlcyBpbiB0aGUgY3VycmVudCBzdWJkaXJlY3RvcnkgYW5kCiAgICAgICAgYmVsb3cuIAogICAgICAgQ29tbWl0dGVkIGJ5IEpULiBUaGFua3MgdG8gPGxpbmsgaHJlZj0ibWFpbHRvOkJlcm5oYXJkLkJyYW5kbWFpckBpbnRlZ3JhbC5jb20iPkJlcm5oYXJkIEJyYW5kbWFpcjwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBBZGRlZCB0aGUgY3dpa2kgc3R5bGVzaGVldHMgdGhhdCB3ZXJlIG1pc3NpbmcgYW5kIGFuIGV4YW1wbGUgaW4gdGhlCiAgICAgICAgZnJlc2ggc2l0ZSBzZWVkLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi4gVGhhbmtzIHRvIDxsaW5rIGhyZWY9Im1haWx0bzpjenVyYUBvcHRvbmxpbmUubmV0Ij5DYXRoeSBadXJhPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIENvcnJlY3RseSBzZXJ2ZSBzd2YgZmlsZXMuCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBGaXggPGNvZGU+c2l0ZTo8L2NvZGU+IGFuZCA8Y29kZT5leHQ6PC9jb2RlPiByZXdyaXRpbmcgaW4gYm9vay54bWwsCiAgICAgICAgaWh0bWwsIGVodG1sIGFuZCBjd2lraSBmaWxlcyBpbiBzdWJkaXJlY3Rvcmllcy4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIEFkZGVkIHRoZSBDU1MgdmFsaWRhdGlvbiBsb2dvLCBmaXhlZCBhbGwgc2tpbnMnIENTUyB0byB2YWxpZGF0ZSwKICAgICAgICBtaW5vciBmaXhlcyBkdWUgdG8gdGhlIHN3aXRjaCB0byBmdWxsIEhUTUwtbG9vc2UgRFRELgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIE1ha2UgdGhlIGZvcnJlc3Qtc2l0ZSBhbmQga3J5c2FsaXMtc2l0ZSBza2lucyBtb3JlIHByaW50ZXIgZnJpZW5kbHkgYnkKICAgICAgICB1c2luZyBDU1MgbWVkaWEgdHlwZSB0byBoaWRlIG5hdmlnYXRpb25zLiB0aGUgYXZhbG9uLXRpZ3JpcyBza2luIGFscmVhZHkKICAgICAgICB3b3JrcyB3ZWxsLCB0aGUgZm9ycmVzdC1zaXRlIG9uZSBzdGlsbCBuZWVkcyB0d2Vha2luZy4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBVc2UgZnVsbCBsb29zZSBEVEQgc3BlY2lmaWNhdGlvbiBmb3IgaHRtbCBwYWdlcy4KICAgICAgICBUaGlzIGFsc28gbWFrZXMgdGhlIGF2YWxvbi10aWdyaXMgc2tpbiBzaG93IHRoZSBzYW1lIGluIE1vemlsbGEgYW5kIElFLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFN3aXRjaGVkIGFsbCBsb2dsZXZlbHMgdG8gRVJST1IuCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PC91bD48L3NlY3Rpb24+PHNlY3Rpb24+PHRpdGxlPkNoYW5nZXMgdG8gRG9jdW1lbnRhdGlvbjwvdGl0bGU+PHVsPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIEFkZGVkIHBhZ2UgZm9yIEZvcnJlc3RCYXIgb24gdGhlIHNpdGUgd2l0aCBhIHNpbXBsZSBsaW5rIGFuZCBhbiBhdXRvaW5zdGFsbCBsaW5rCiAgICAgICAgdG8gdGhlIGZvcnJlc3RiYXIueHBpIGdlbmVyYXRlZCBieSBHdW1wIGV2ZXJ5IGRheS4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48L3VsPjwvc2VjdGlvbj48c2VjdGlvbj48dGl0bGU+Q29udHJpYnV0b3JzIHRvIHRoaXMgcmVsZWFzZTwvdGl0bGU+PHA+V2UgdGhhbmsgdGhlIGZvbGxvd2luZyBwZW9wbGUgZm9yIHRoZWlyIGNvbnRyaWJ1dGlvbnMgdG8gdGhpcyByZWxlYXNlLjwvcD48cD5UaGlzIGlzIGEgbGlzdCBvZiBhbGwgcGVvcGxlIHdobyBwYXJ0aWNpcGF0ZWQgYXMgY29tbWl0dGVyczo8YnIvPkplZmYgVHVybmVyIChKVCksIE1hcmMgUG9ydGllciAoTVApLCBOaWNvbGEgS2VuIEJhcm96emkgKE5LQikuPC9wPjxwPlRoaXMgaXMgYSBsaXN0IG9mIG90aGVyIGNvbnRyaWJ1dG9yczo8YnIvPkJlcmluIExvcml0c2NoLCBCZXJuaGFyZCBCcmFuZG1haXIsIENhdGh5IFp1cmEuPC9wPjwvc2VjdGlvbj48L3NlY3Rpb24+CgogICAgPHNlY3Rpb24gaWQ9InZlcnNpb25fMC4zIj48dGl0bGU+VmVyc2lvbiAwLjMgKDIwMDMtMDEtMzApPC90aXRsZT48c2VjdGlvbj48dGl0bGU+Q2hhbmdlcyB0byBCdWlsZDwvdGl0bGU+PHVsPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFsbG93IGNvbmZpZ3VyYXRpb24gb2YgYSBwcm9qZWN0IGxvY2FsLWNhdGFsb2cgYW5kIHRoZSBlbnRpdHkgcmVzb2x2ZXIKICAgICAgICB2ZXJib3NpdHkgbGV2ZWwsIHZpYSBmb3JyZXN0LnByb3BlcnRpZXMgY29uZmlndXJhdGlvbi4gVGhpcyByZXBsYWNlcwogICAgICAgIHRva2VucyBpbiB0aGUgZGVmYXVsdCBjb2Nvb24ueGNvbmYKICAgICAgIENvbW1pdHRlZCBieSBEQy48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIE1ha2UgdGhlIHNlZWQgcHJvamVjdCB1c2UgdGhlIGNvcnJlY3QgJ2J1aWx0IHdpdGggQXBhY2hlIEZvcnJlc3QnIGxvZ28KICAgICAgICBpbnN0ZWFkIG9mIENvY29vbiArIENlbnRpcGVkZSBsb2dvcy4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjwvdWw+PC9zZWN0aW9uPjxzZWN0aW9uPjx0aXRsZT5DaGFuZ2VzIHRvIHRoZSBDb2RlIEJhc2U8L3RpdGxlPjx1bD48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCAmbHQ7YWNyb255bSZndDsgdGFnLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkZWQgYSBtZWFucyB0byBvdmVycmlkZSB0aGUgY2hlY2sgZm9yIGV4aXN0aW5nIGNvbnRlbnQ6IAogICAgICAgIDxjb2RlPmZvcnJlc3Qgc2VlZCAtRHNraXAuY29udGVudGNoZWNrPXllczwvY29kZT4KICAgICAgICBUaGFua3MgdG8gVG9tIEtsYWFzZW4uCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIHN2ZyBmaWxlcyBpbnN0ZWFkIHBuZyBpbWFnZXMuCiAgICAgICAgVGhhdCBpcywgaWYgYW4gaW1hZ2UgaXMgZm91bmQgaW4gdGhlIGltYWdlcyBkaXIgdGhhdCBpcyBzdmcgYW5kCiAgICAgICAgdGhlIGJyb3dzZXJzIHJlcXVlc3RzIGEgcG5nIHdpdGggdGhlIHNhbWUgbmFtZSwgdGhlIHBuZyBpcyBjcmVhdGVkCiAgICAgICAgZnJvbSB0aGUgc3ZnIGF1dG9tYXRpY2FsbHkgd2l0aCBiYXRpay4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIHdpa2kgZmlsZXMgaW4geGRvY3MgaW5zdGVhZCBvZiB4bWwgZmlsZXMuCiAgICAgICAgVGhleSBtdXN0IGhhdmUgYSAuY3dpa2kgZXh0ZW5zaW9uLCBhbmQgZm9sbG93IHRoZSBjaGFwZXJvbiB3aWtpIGZvcm1hdCBBVE0uCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkZWQgIkVkaXQgUGFnZSIgYnV0dG9uIHRvIGVkaXQgdGhlIGN1cnJlbnQgcGFnZSBpbiBDb21wb3Nlci4KICAgICAgICBTdGlsbCBuZWVkcyBhbiBpY29uLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgaHRtbCBmaWxlcyBpbiB4ZG9jcyBpbnN0ZWFkIG9mIHhtbCBmaWxlcy4KICAgICAgICBUaGV5IG11c3QgaGF2ZSBhbiAuaWh0bWwgZXh0ZW5zaW9uLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gUERGIGZvb3RlciAoMTBwdCwgbGlnaHQtZ3JleSB0ZXh0KS4gIGlmIGEKICAgICAgICBza2luY29uZi54bWwgJ2NyZWRpdCcgZWxlbWVudCBoYXMgYSByb2xlPSdwZGYnIGF0dHJpYnV0ZSwgdGhpcyB0ZXh0IHdpbGwKICAgICAgICBiZSB1c2VkIGluc3RlYWQuIFRoYW5rcyB0byBLZWlyb24gTGlkZGxlLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgTmV3IDxjb2RlPnNpdGUueG1sPC9jb2RlPiBmaWxlIGluIGNvbnRlbnQveGRvY3MuICBUaGlzIGlzIHVzZWQgdG8KICAgICAgICBpbXBsZW1lbnQgJmx0O2xpbmsgaHJlZj0ic2l0ZTppbnRlcm5hbFVSSSImZ3Q7ICdzZW1hbnRpYycgbGlua3MsCiAgICAgICAgJmx0O2xpbmsgaHJlZj0iZXh0OmV4dGVybmFsVVJJIiZndDsgYWxpYXNlcyB0byBleHRlcm5hbCBsaW5rcywgYW5kCiAgICAgICAgcmVuZGVycyA8Y29kZT5ib29rLnhtbDwvY29kZT4gZmlsZXMgb2Jzb2xldGUuICBTZWUgPGxpbmsgaHJlZj0ic2l0ZTp2MC43MC8vbGlua2luZyI+TWVudXMgYW5kIExpbmtpbmc8L2xpbms+IGZvciBtb3JlIGluZm8uCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBJZiA8Y29kZT5idWlsZC93ZWJhcHAvY29udGVudC94ZG9jcy8qPC9jb2RlPiBpcyBtb3JlIHJlY2VudCB0aGFuCiAgICAgICAgPGNvZGU+c3JjLyo8L2NvZGU+IGVxdWl2YWxlbnQsIDxjb2RlPmZvcnJlc3Qgd2ViYXBwPC9jb2RlPiB3b24ndCBjbG9iYmVyCiAgICAgICAgaXQuICBBIG5ldyA8Y29kZT5mb3JyZXN0IGJhY2tjb3B5PC9jb2RlPiBjb21tYW5kIHdpbGwgY29weQogICAgICAgIDxjb2RlPmJ1aWxkL3dlYmFwcC9jb250ZW50L3hkb2NzPC9jb2RlPiBjb250ZW50IGJhY2sgdG8KICAgICAgICA8Y29kZT5zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L3hkb2NzPC9jb2RlPi4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIDxjb2RlPmZvcnJlc3Qtc2l0ZTwvY29kZT4gc2tpbiBpcyBub3cgSFRNTCA0LjAuMSBjb21wbGlhbnQuICBUaGUKICAgICAgICBjb21wbGlhbmNlIHZhbGlkYXRvciBsb2dvIGNhbiBiZSBzd2l0Y2hlZCBvZmYgd2l0aCBhCiAgICAgICAgPGNvZGU+c2tpbmNvbmYueG1sPC9jb2RlPiBlbGVtZW50LgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgSW5kaXJlY3RseSByZWZlcmVuY2VkIGZpbGVzIGluIHNraW5zIChlLmcuIGltYWdlcyBpbgogICAgICAgIENTUzxjb2RlPnVybCgpPC9jb2RlPidzKSBhcmUgbm93IGNvcGllZCBhY3Jvc3MgdG8gdGhlIHJlbmRlcmVkIHNpdGUuCiAgICAgICAgUHJldmlvdXNseSwgd2UgcmVsaWVkIG9uIHNwaWRlcmluZyB0byBjb3ZlciB0aGUgVVJJIHNwYWNlLCB3aGljaCBoYXMKICAgICAgICBwcm92ZWQgaW5zdWZmaWNpZW50LgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgSFRNTCBmcmFnbWVudCBpZGVudGlmaWVycyBmb3Igc2VjdGlvbnMgYXJlIG5vdyBtZWFuaW5nZnVsbHkgbmFtZWQsIGJhc2VkCiAgICAgICAgb24gdGhlIHNlY3Rpb24gdGl0bGUsIHJhdGhlciB0aGFuIDxjb2RlPmRvY3VtZW50LWlkKCk8L2NvZGU+LWdlbmVyYXRlZAogICAgICAgIGNoYXJhY3RlcnMuCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBGaXhlZCBzaXRlIHJlZ2VuZXJhdGlvbiBidWdzIHdoZXJlIGNoYW5naW5nIHRoZSBza2luIGluCiAgICAgICAgPGNvZGU+Zm9ycmVzdC5wcm9wZXJ0aWVzPC9jb2RlPiBoYWQgbm8gZWZmZWN0IGFmdGVyIHRoZSBmaXJzdCBidWlsZC4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIE5vdyBhbGwgZmlsZXMgaW4gPGNvZGU+c3JjL2RvY3VtZW50YXRpb24vY29udGVudDwvY29kZT4gKGV4Y2VwdCB4ZG9jcykKICAgICAgICBhbmQgPGNvZGU+c3JjL2RvY3VtZW50YXRpb24vcmVzb3VyY2VzL2ltYWdlczwvY29kZT4gYXJlIGNvcGllZCBhY3Jvc3MKICAgICAgICB3aGVuIEZvcnJlc3QgZ2VuZXJhdGVzIGEgc3RhdGljIHNpdGUuICBUaGlzIGZpeGVzIHRoZSBwcm9ibGVtIHdoZW4gYW4KICAgICAgICB1bnBhcnNlYWJsZSBmaWxlIGxpbmtzIHRvIGFub3RoZXIsIGFuZCBDb2Nvb24gY2FuJ3QgY3Jhd2wgKGFuZCBoZW5jZQogICAgICAgIGNvcHkpIHRoZSBsaW5rZWQtdG8gZmlsZS4gIEFuIGV4YW1wbGUgb2YgdGhpcyBhcmUgQ1NTCiAgICAgICAgPGNvZGU+dXJsKCdmb28ucG5nJyk8L2NvZGU+IGltYWdlIHJlZnMgKHNvIGtyeXNhbGlzLXNpdGUgd2lsbCBub3cgd29yawogICAgICAgIHByb3Blcmx5KS4gIEFsc28sIGxhcmdlIGJhdGNoZXMgb2YgcHJlZ2VuZXJhdGVkIGZpbGVzIGxpa2UgSmF2YWRvY3Mgd2lsbAogICAgICAgIG5vdyBiZSBjb3BpZWQgYWNyb3NzIGluc3RlYWQgb2YgaW5kaXZpZHVhbGx5IHRyYXZlcnNlZC4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIE5vdyBmaWxlcyBwcmVzZW50IGluIHRoZSBjb250ZW50IGRpciBhcmUgY29ycmVjdGx5IGxpbmtlZCBhbmQKICAgICAgICBjb3BpZWQgdmVyYmF0aW0gYnkgdGhlIENMSS4gVGhlIHdlbGxrbm93biBmaWxlcyBhcmUgZ2l2ZW4gd2l0aCB0aGUKICAgICAgICBjb3JyZWN0IG1pbWUtdHlwZSwgYW5kIGxpbmtzIGluIGh0bWwgYW5kIHhtbCBhcmUgZm9sbG93ZWQuIAogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEZpeGVkIGEgYnVnIGluIHRoZSBzZWFyY2ggZm9ybSB3aGVyZSB0aGVyZSB3YXMgbm8gc3BhY2UgYmV0d2VlbiBzZWFyY2gKICAgICAgICB0ZXJtIGFuZCAnc2l0ZTonIHRlcm0uICBTZWFyY2ggZm9ybSBhbHNvIG5vIGxvbmdlciByZXF1aXJlcyBKYXZhc2NyaXB0LgogICAgICAgQ29tbWl0dGVkIGJ5IEpULiBUaGFua3MgdG8gPGxpbmsgaHJlZj0ibWFpbHRvOm5pY2tAY2hhbGtvLmNvbSI+TmljayBDaGFsa288L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgRml4ZWQgYSBidWcgd2hlcmUgdGhlIG5vIG1lbnUgZW50cnkgaXMgJ3NlbGVjdGVkJyB3aGVuIGluIHN1YmRpcmVjdG9yaWVzLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgTm93IGVycm9yIHJlcG9ydGluZyBpbiBDTEkgcnVucyBzaG91bGQgd29yayBhbmQgc2hvdyB0aGUgY2F1c2Ugb2YgdGhlIGVycm9yOwogICAgICAgIGJlZm9yZSBpdCB3YXMganVzdCByZXBvcnRpbmcgW2Jyb2tlbiBsaW5rXS4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBGaXhlZCBhIGJ1ZyB3aGVyZSBtdWx0aXBsZSBtZW51IGVudHJpZXMgYXJlIGhpZ2hsaWdodGVkIGlmIHRoZSBmaWxlbmFtZXMKICAgICAgICBzaGFyZSBhIGNvbW1vbiBwcmVmaXguCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBGaXhlZCBhIGJ1ZyBpbiBmb3JyZXN0LmJhdCwgd2hpY2ggd291bGQgZmFpbCBpZiBydW4gZnJvbSBhIGRpZmZlcmVudAogICAgICAgIGRyaXZlIHRvIHRoYXQgRm9ycmVzdCB3YXMgaW5zdGFsbGVkIGluLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULiBUaGFua3MgdG8gPGxpbmsgaHJlZj0ibWFpbHRvOmJlbGhhakBvbmxpbmUubm8iPk9tYXIgQmVsaGFqPC9saW5rPi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEZpeCBidWcgd2hlcmUgdGhlIHdlYmFwcCB3b3VsZCBicmVhayBkdWUgdG8gbWlzc2luZyBYTUwgamFycyB1bmRlciBKREsKICAgICAgICAxLjIvMS4zLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgTW92ZWQgY3JlZGl0IGFuZCBob3N0IGxvZ29zIHRvIGJvdHRvbSBsZWZ0IGNvcm5lciBvbiBmb3JyZXN0LXNpdGUgc2tpbi4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9InJlbW92ZSIgc3JjPSJpbWFnZXMvcmVtb3ZlLmpwZyIvPgogICAgICAgIFJlbW92ZWQgdGhlICdiYXNpYycgc2tpbiwgdG8gYmUgc2hvcnRseSByZXBsYWNlZCB3aXRoIHNvbWV0aGluZyBtdWNoIG1vcmUKICAgICAgICBtYWludGFpbmFibGUuCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJyZW1vdmUiIHNyYz0iaW1hZ2VzL3JlbW92ZS5qcGciLz4KICAgICAgICBSZW1vdmVkIHNvbWUgaW1hZ2VzIChidWlsdC13aXRoLWNvY29vbi5naWYsIGNlbnRpcGVkZS1sb2dvLXNtYWxsLmdpZikKICAgICAgICBmcm9tIHRoZSBza2lucywgYW5kIG1vdmVkIHRoZW0gdG8KICAgICAgICA8Y29kZT5zcmMvZG9jdW1lbnRhdGlvbi9yZXNvdXJjZXMvaW1hZ2VzPC9jb2RlPiwgYXMgdGhleSBhcmUKICAgICAgICBGb3JyZXN0LXNwZWNpZmljLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgTG90cyBvZiBGQVEgaW1wcm92ZW1lbnRzOgogICAgICAgIC1JbXByb3ZlZCBVUkkgc3BhY2UgYnkgdXNpbmcgPGNvZGU+QGlkPC9jb2RlPiBhdHRyaWJ1dGVzIGFzIHRoZQogICAgICAgICAgICAjZnJhZ21lbnQtaWRlbnRpZmllciBmb3IgJmx0O2ZhcSZndDsgYW5kICZsdDtwYXJ0Jmd0OyBlbGVtZW50cy4KICAgICAgICAtTnVtYmVyIEZBUSBlbnRyaWVzIGFuZCBjYXRlZ29yaWVzCiAgICAgICAgLUFkZGVkIGJhY2stbGlua3MgZnJvbSBGQVEgZW50cmllcyB0byB0aGUgbWVudQogICAgICAgIC1Qcm9jZXNzIHRhZ3MgaW4gJmx0O3F1ZXN0aW9uJmd0OyBpbiBtZW51IGVudHJpZXMKICAgICAgICAtSW5kZW50IEZBUSB0ZXh0CiAgICAgICAgLUZBUSBzYW1wbGUgYWRkZWQgdG8gc2VlZCBwcm9qZWN0CiAgICAgICAgVGhhbmtzIHRvIEpvZXJnIFBpZXRzY2htYW5uIGFuZCBSYWxmIEhhdXNlciBmb3IgdGhlIHN1Z2dlc3Rpb25zLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgT24gYXZhbG9uLXRpZ3JpcyBza2luIGl0J3Mgbm93IHBvc3NpYmxlIHRvIGFkZCBhIG15c2l0ZS5jc3MgZmlsZQogICAgICAgIHRvIGN1c3RvbWl6ZSB0aGUgc3R5bGUuIEFuIGV4YW1wbGUgdGhhdCBjYW4gYmUgdXNlZCBpcyBmcm9tCiAgICAgICAgY2hhcGVyb24uc2YubmV0LgogICAgICAgIEFsc28gYWRkZWQgYSByb3VuZGVkIGNvcm5lciB0byBwYXJhZ3JhcGhzLCBhbmQgbWFueSBtaW5vciBmaXhlcy4gCiAgICAgICBDb21taXR0ZWQgYnkgTktCLiBUaGFua3MgdG8gPGxpbmsgaHJlZj0ibWFpbHRvOnN0ZXBoYW5AYXBhY2hlLm9yZyI+U3RlZmFuIE1pY2hlbHM8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgRml4ZWQgdGhlIGFubm95aW5nIGxpbmsgaGlnaGxpZ2h0aW5nIG9uIHRoZSBrcnlzYWxpcyBza2luIAogICAgICAgIGR1ZSB0byB0aGUgYm9yZGVyLiBSZW1vdmVkIHRoZSBib3JkZXIsIG5vdyBpdCBoaWdobGlnaHRzIGZpbmUuCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgVXBkYXRlZCBwYXJ0IG9mIHRoZSBlZGl0b3Igc28gdGhhdCBpdCBub3cgY2FuIHNhdmUgZmlsZXMgaW4gd2lraSBmb3JtYXQuCiAgICAgICAgU3RpbGwgbmVlZHMgbW9yZSB3b3JrLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFVwZGF0ZWQgQmF0aWsgQmxvY2sgc28gdGhhdCBub3cgUE5HcyBjYW4gYmUgY3JlYXRlZCBjb3JyZWN0bHkgZnJvbSBTVkcuCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICBVcGRhdGVkIHNvbWUgZG9jdW1lbnRhdGlvbiwgZXNwZWNpYWxseSBGb3JyZXN0Ym90IEludHJvZHVjdGlvbgogICAgICAgQ29tbWl0dGVkIGJ5IERDLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgVXBkYXRlIHRvIDIwMDItMTItMjYgQ29jb29uLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgVHdlYWtlZCBmb3JyZXN0YmFyLCBhZGRlZCBhIHN1Yi1wcm9qZWN0IG1lbnUgZm9yIEpha2FydGEsIGZpeGVkIAogICAgICAgIGRvd25sb2FkIGxpbmsgYW5kIGFkZGVkIHN1Ym1lbnUgZm9yIHRvb2xzIGFuZCBndW1wLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIEFkZGVkIHJzcyBjYXBhYmlsaXR5IHRvIGNoYW5nZXMgZ2VuZXJhdGlvbi4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBBZGRlZCBsYXRlc3Qga3J5c2FsaXMtc2l0ZSBza2luLCB1c2luZyBjb21tb24gdGVtcGxhdGVzIHdoZXJlIHBvc3NpYmxlLgogICAgICAgIFRoZXJlIGlzIGEgY2hhbmdlczJyc3Mgc3R5bGVzaGVldCB0aGF0IHN0aWxsIG5lZWRzIHNpdGVtYXAgY2hhbmdlcyB0byBydW4uCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgTm93IGV2ZW4gdGhlIHNlbGVjdGVkIHRhYiByZXRhaW5zIGEgbGluaywgdG8gYmUgYWJsZSB0byBlYXNpbHkgc2VsZWN0CiAgICAgICAgdGhlIG1haW4gcGFnZSBvZiB0aGF0IHRhYiBldmVuIGlmIGl0IGlzICJjdXJyZW50Ii4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBBbGxvdyBzcGVjaWFsIGhhbmRsaW5nIG9mIHRhYiBocmVmcyB3aXRoICNhbmNob3IgcmVmZXJlbmNlcyBpbiB0aGVtLiAgQnkKICAgICAgICBkZWZhdWx0LCBzdWNoIG1lbnUgbGlua3MgYXJlIGFsd2F5cyBjbGlja2FibGUuCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBVcGRhdGVkIGF2YWxvbi10aWdyaXMgc2tpbiBieSBtZXJnaW5nIHdoYXQgd2FzIGluIENWUyBoZXJlIGFuZAogICAgICAgIHdoYXQgd2FzIHVzZWQgaW4gQXZhbG9uIHdpdGggaXRzIENvY29vbi1nZW5lcmF0ZWQgc2l0ZS4gIAogICAgICAgIFRoZSB2aXN1YWwgZWZmZWN0IGlzIHRoZSBzYW1lIHRvIHRoZSBjdXJyZW50IGZyYW1ld29yayBhbmQgRXhhbGlidXIKICAgICAgICBBdmFsb24gc2l0ZXMuCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgVXBkYXRlZCBsYXRlc3QgQ29jb29uIGphcnM6IGNoYWluIG1ldGFtb2R1bGUgbmFtZSBzZXQgdG8gImZvcnJlc3QiLAogICAgICAgIGFuZCBpdCBpcyB1c2VkIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgb25lLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIFJld3JpdGUgc2tpbnMgdG8gc2hhcmUgYSBjb21tb24gYmxvY2sgb2YgWFNMVCwgd2hpY2ggaXMgdXNlZCB2aWEKICAgICAgICAmbHQ7eHNsOmltcG9ydCZndDsuIFRoaXMgc2hvdWxkIG1ha2Ugc2tpbiBtYWludGVuYW5jZSBtdWNoIGVhc2llci4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIEFkZGVkIGJ1dHRvbnMgZm9yIG5pZ2h0bHkgR3VtcCBydW5zIGFuZCBsb2NhbCBmb3JyZXN0LiBDb3JyZWN0ZWQgYW5kIGNvbXBsZXRlZAogICAgICAgIGV4aXN0aW5nIGludGVyZmFjZSwgYW5kIG1hZGUgYnV0dG9ucyBmbGF0ICh0aGUgYmFyIGlzIHNsaW1tZXIgdG9vKS4KICAgICAgICBXZSBuZWVkIGljb25zIGZvciB0aGUgbmV3IGJ1dHRvbnMuCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PC91bD48L3NlY3Rpb24+PHNlY3Rpb24+PHRpdGxlPkNoYW5nZXMgdG8gRG9jdW1lbnRhdGlvbjwvdGl0bGU+PHVsPjxsaT48aWNvbiBhbHQ9InVwZGF0ZSIgc3JjPSJpbWFnZXMvdXBkYXRlLmpwZyIvPgogICAgICAgIEFkZGVkIGVuaGFuY2VtZW50cyB0byBzdGF0dXMueG1sIHRvIGNvbXBseSB3aXRoIHRoZSBuZWVkcyBmb3IgYSBjb21wbGV0ZSBzdGF0dXMgZmlsZSwKICAgICAgICBsaWtlIG90aGVyICJTVEFUVVMiIHRleHQgZmlsZXMgYXQgQXBhY2hlLgogICAgICAgIFN0eWxlc2hlZXRzIG5vdCB5ZXQgZG9uZS4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48L3VsPjwvc2VjdGlvbj48c2VjdGlvbj48dGl0bGU+Q29udHJpYnV0b3JzIHRvIHRoaXMgcmVsZWFzZTwvdGl0bGU+PHA+V2UgdGhhbmsgdGhlIGZvbGxvd2luZyBwZW9wbGUgZm9yIHRoZWlyIGNvbnRyaWJ1dGlvbnMgdG8gdGhpcyByZWxlYXNlLjwvcD48cD5UaGlzIGlzIGEgbGlzdCBvZiBhbGwgcGVvcGxlIHdobyBwYXJ0aWNpcGF0ZWQgYXMgY29tbWl0dGVyczo8YnIvPkRhdmlkIENyb3NzbGV5IChEQyksIEplZmYgVHVybmVyIChKVCksIE5pY29sYSBLZW4gQmFyb3p6aSAoTktCKS48L3A+PHA+VGhpcyBpcyBhIGxpc3Qgb2Ygb3RoZXIgY29udHJpYnV0b3JzOjxici8+TmljayBDaGFsa28sIE9tYXIgQmVsaGFqLCBTdGVmYW4gTWljaGVscy48L3A+PC9zZWN0aW9uPjwvc2VjdGlvbj4KICAgIDxzZWN0aW9uIGlkPSJ2ZXJzaW9uXzAuMiI+PHRpdGxlPlZlcnNpb24gMC4yICgyMDAyLTExLTE2KTwvdGl0bGU+PHNlY3Rpb24+PHRpdGxlPkNoYW5nZXMgdG8gdGhlIENvZGUgQmFzZTwvdGl0bGU+PHVsPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEZpeGVkIGJ1ZyB3aGVyZSB2YWxpZGF0aW9uIG9mIHhkb2NzIHdhcyBub3QgZGVzY2VuZGluZyBpbnRvCiAgICAgICAgc3ViLWRpcmVjdG9yaWVzLgogICAgICAgQ29tbWl0dGVkIGJ5IERDLjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgRml4ZWQgYnVnIHdoZXJlIGNoYW5nZXMgdG8gdGhlIGJyZWFkY3J1bWIgbGlua3MgaW4gc2tpbmNvbmYueG1sIHdlcmUKICAgICAgICBpZ25vcmVkIHVudGlsIHRoZSBGb3JyZXN0IGJpbmFyeSB3YXMgcmVidWlsdCwgb3IgdGhlIHByb2plY3QKICAgICAgICA8Y29kZT5idWlsZC90bXAvPC9jb2RlPiBkZWxldGVkLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgV2ViYXBwIG5vdyB3b3JrcyB1bmRlciBKREsgMS4zIChwYXJzZXJzIHdlcmVuJ3QgYmVpbmcgY29waWVkKQogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PC91bD48L3NlY3Rpb24+PHNlY3Rpb24+PHRpdGxlPkNvbnRyaWJ1dG9ycyB0byB0aGlzIHJlbGVhc2U8L3RpdGxlPjxwPldlIHRoYW5rIHRoZSBmb2xsb3dpbmcgcGVvcGxlIGZvciB0aGVpciBjb250cmlidXRpb25zIHRvIHRoaXMgcmVsZWFzZS48L3A+PHA+VGhpcyBpcyBhIGxpc3Qgb2YgYWxsIHBlb3BsZSB3aG8gcGFydGljaXBhdGVkIGFzIGNvbW1pdHRlcnM6PGJyLz5EYXZpZCBDcm9zc2xleSAoREMpLCBKZWZmIFR1cm5lciAoSlQpLjwvcD48L3NlY3Rpb24+PC9zZWN0aW9uPgogICAgPHNlY3Rpb24gaWQ9InZlcnNpb25fMC4ycmMxIj48dGl0bGU+VmVyc2lvbiAwLjJyYzEgKDIwMDItMTEtMTMpPC90aXRsZT48c2VjdGlvbj48dGl0bGU+Q2hhbmdlcyB0byBQcm9qZWN0IEFkbWluaXN0cmF0aW9uPC90aXRsZT48dWw+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgSW5pdGlhbCBJbXBvcnQKICAgICAgIENvbW1pdHRlZCBieSBTTS48L2xpPjwvdWw+PC9zZWN0aW9uPjxzZWN0aW9uPjx0aXRsZT5DaGFuZ2VzIHRvIEJ1aWxkPC90aXRsZT48dWw+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgVmFsaWRhdGUgcHJvamVjdCBzaXRlbWFwcyBhbmQgY2hvaWNlIG9mIHNraW4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEluY2x1ZGVkIEpldHR5IGluIHRoZSBkaXN0cm8uCiAgICAgICAgdHlwZSAiZm9ycmVzdCBydW4iIHRvIGhhdmUgdGhlIC4vYnVpbGQvd2ViYXBwIGRpciBjb250ZW50cyBiZSBydW4KICAgICAgICBpbiBhIGxvY2FsIHdlYiBzZXJ2ZXIsIHN0YXJ0aW5nIGZyb20gaHR0cDovL2xvY2FsaG9zdDo4ODg4L2luZGV4Lmh0bWwKICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBKaW5nICJSRUxBWCBORyB2YWxpZGF0b3IgaW4gSmF2YSIgYW5kIGluaXRpYWwgZ3JhbW1hciBmb3IKICAgICAgICBza2luY29uZi54bWwgZmlsZXMuIFRoZXNlIGNvbmZpZyBmaWxlcyBub3cgZ2V0IHZhbGlkYXRlZCBkdXJpbmcgdGhlIGJ1aWxkLgogICAgICAgQ29tbWl0dGVkIGJ5IERDLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgVXNlciBwcm9qZWN0cyBjYW4gbm93IGFkZCBjdXN0b20gY2xhc3NlcyBhbmQgamFycyB0byBGb3JyZXN0IGRvYyBidWlsZHMuCiAgICAgICAgVXNlZnVsIGZvciBjdXN0b20gc2l0ZW1hcCBjb21wb25lbnRzLCBvciBvdmVycmlkaW5nIEZvcnJlc3QtcHJvdmlkZWQgamFycy4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIHRoZSBmb3JyZXN0Ym90IC0gaW5mcmFzdHJ1Y3R1cmUgYW5kIGNvbmZpZ3VyYXRpb24gZm9yIHJlbW90ZSBwcm9qZWN0IGJ1aWxkaW5nLgogICAgICAgQ29tbWl0dGVkIGJ5IFNOLiBUaGFua3MgdG8gPGxpbmsgaHJlZj0ibWFpbHRvOm1wb0BvdXRlcnRob3VnaHQub3JnIj5NYXJjIFBvcnRpZXI8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkZWQgYSBkcmFmdCBEVEQgZm9yIHRoZSBHdW1wIERlc2NyaXB0b3IgZm9ycmVzdC54Z3VtcAogICAgICAgQ29tbWl0dGVkIGJ5IFNOLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgRm9ycmVzdCB3ZWJzaXRlIGlzIGJlaW5nIGF1dG9tYXRpY2FsbHkgYnVpbHQgYW5kIHB1Ymxpc2hlZCB0byBrcnlzYWxpcy5vcmcKICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBzaW1wbGUgeHNsIHN0eWxlc2hlZXQgZm9yIGZvcnJlc3QueGd1bXAuCiAgICAgICAgSW4gSUU2IGFuZCBNb3ppbGxhIDYgaXQgcmVuZGVycyB1c2luZyB0aGlzLCBpbiBvbGRlciBvbmVzIGl0IHVzZXMgdGhlCiAgICAgICAgbW9yZSBzaW1wbGlmaWVzIENTUyB2ZXJzaW9uLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIEZvcnJlc3QgdG8gR3VtcCBydW5zLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIEFkZGVkIHNpbXBsZSBjc3Mgc3R5bGVzaGVldCBmb3IgZm9ycmVzdC54Z3VtcC4KICAgICAgICBJbiBJRSBhbmQgTW96aWxsYSA2IGl0IHJlbmRlcnMuCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgTWVyZ2VkIGZvcnJlc3QgbmVlZGVkIGluZm8gaW4gZm9ycmVzdC54Z3VtcC4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBJbXBvcnRlZCBDZW50aXBlZGUgYXMgYSBidWlsZCBzeXN0ZW0uCiAgICAgICBDb21taXR0ZWQgYnkgU04uPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBCdWlsZGluZyBGb3JyZXN0IG5vIGxvbmdlciByZXF1aXJlcyBhIG5ldHdvcmsgY29ubmVjdGlvbiAoZm9yIGRvd25sb2FkaW5nCiAgICAgICAgQ2VudGlwZWRlKS4gIEl0IGlzIGJ1aWxkYWJsZSBieSB0eXBpbmcgJ2FudCcgb3Igd2l0aCB0aGUgcHJvdmlkZWQgYnVpbGQKICAgICAgICBzY3JpcHRzLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgIkNoYW5nZSBIaXN0b3J5IiBpbWFnZXMgKHVwZGF0ZS5qcGcsIGFkZC5qcGcgZXRjKSBhcmUgbm93IHByb3ZpZGVkIGJ5CiAgICAgICAgZGVmYXVsdCBieSBGb3JyZXN0IChpbiBpbWFnZXMvKSwgYW5kIG5lZWQgbm90IGJlIHN1cHBsaWVkIGJ5IHVzZXIgcHJvamVjdHMuCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBUaGUgbG9jYXRpb25zIHdoZXJlIEZvcnJlc3QgZXhwZWN0cyBkb2MgZmlsZXMgdG8gYmUgaXMgbm93IGNvbmZpZ3VyYWJsZSB2aWEKICAgICAgICBwcm9wZXJ0aWVzLCB0aGF0IGNhbiBiZSBzZXQgaW4gZm9ycmVzdC5wcm9wZXJ0aWVzLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgVXNlciBwcm9qZWN0cyBtYXkgbm93IHNwZWNpZnkgdGhlaXIgb3duIHNpdGVtYXAsIG92ZXJyaWRpbmcgdGhlCiAgICAgICAgRm9ycmVzdC1wcm92aWRlZCBvbmUuCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBVcGRhdGVkIENvY29vbiB0byAyLjEtZGV2IHRvIHVzZSB4c2x0YyBhbmQgbmV3IENMSSBzdGF0dXMgbWVzc2FnZXMuCiAgICAgICAgTG9ncyBhcmUgaW4gdGhlIDxjb2RlPmJ1aWxkL3dvcmsvV0VCLUlORi9sb2dzPC9jb2RlPiBkaXJlY3RvcnkgYW5kIHRoZSAKICAgICAgICBsaXN0IG9mIGJyb2tlbiBsaW5rcyBpcyBpbiB0aGUgPGNvZGU+YnVpbGQ8L2NvZGU+IGRpcmVjdG9yeS4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBVcGRhdGVkIENlbnRpcGVkZSBzdHVmZiB0byBsYXRlc3QgY2hhbmdlczoKICAgICAgICAtIGFkZGVkIGxpYi9lbmRvcnNlZCBkaXIgZm9yIGVuZG9yc2VkIGphcnMgdGhhdCBhcmUgcHV0IGluIGdsb2JhbCBjYWxzc3BhdGgKICAgICAgICAtIGNoYW5nZWQgdGhlIGJ1aWxkIHNjcmlwdHMgdG8gbm90IG1ha2UgZGlyZWN0IHJlZmVyZW5jZSB0byBqYXIgZmlsZXMKICAgICAgICAtIGFkZGVkICJleGFtcGxlcyIgZGlyIGluIHNyYyBhbmQgY3JlYXRpb24gb2YgZXhhbXBsZXMgamFyIGluIGJ1aWxzCiAgICAgICAgLSBhZGRlZCAidGVzdG1vZHVsZSIgdGFyZ2V0IHRvIGJlIHJ1biBiZWZvcmUgY29tbWl0dGluZyBzdHVmZgogICAgICAgIC0gYWRkZWQgImd1bXAiIGJ1aWxkIHRvIGJlIHJ1biBieSBHdW1wCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgVXBkYXRlZCBwcm9qZWN0IGRlc2NyaXB0b3I6IG5vdyBpdCBzaG91bGQgYmUgdXNhYmxlIGJ5IEd1bXAuCiAgICAgICAgQWRkZWQgYmFzaWMgRm9ycmVzdCBkZXNjcmlwdG9yLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjwvdWw+PC9zZWN0aW9uPjxzZWN0aW9uPjx0aXRsZT5DaGFuZ2VzIHRvIHRoZSBDb2RlIEJhc2U8L3RpdGxlPjx1bD48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICA8bGluayBocmVmPSJzaXRlOnYwLjcwLy9jYXAiPlNvdXJjZUFjdGlvbjwvbGluaz4gb3IgdGhlIHNvLWNhbGxlZCAKICAgICAgICAnY29udGVudCBhd2FyZSBwaXBlbGluZXMnIGVuYWJsZXMgY29uZGl0aW9uYWwgcHJvY2Vzc2luZyBvZiBYTUwKICAgICAgICBkb2N1bWVudHMgYmFzZWQgb24gdGhlaXIgZ3JhbW1hciwgYmVpbmcgaW5kaWNhdGVkIGJ5IHRoZWlyIERURCwKICAgICAgICBYTUwgU2NoZW1hIFBJLCByb290IGVsZW1lbnQsIG9yIGEgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiAoUEkpCiAgICAgICAgaW4gdGhlIHByb2xvZyBvZiB0aGUgZG9jdW1lbnQuCiAgICAgICBDb21taXR0ZWQgYnkgU04uIFRoYW5rcyB0byBCcnVubyBEdW1vbi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIFZhbGlkYXRpb24gb2YgaW1wb3J0YW50IGNvcmUgY29uZmlndXJhdGlvbiBmaWxlcyBhdCBidWlsZC10aW1lIHVzaW5nCiAgICAgICAgUkVMQVggTkcuCiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBOb3cgYW4gaWQgYXR0cmlidXRlIG9uIGFueSBYTUwgZWxlbWVudCBiZWxvdyAmbHQ7Ym9keSZndDsgd2lsbCBiZSByZW5kZXJlZAogICAgICAgIGFzIGFuIGFuY2hvciB3aGljaCBjYW4gYmUgbGlua2VkIHRvLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkZWQgYWxwaGEgc3lzdGVtIGZvciBlZGl0aW5nIGNvbnRlbnQgaW4gdGhlIHdlYmFwcC4KICAgICAgICBUbyB0cnkgaXQgZG8gImZvcnJlc3QgcnVuIiBhbmQgcG9pbnQgdGhlIGJyb3dzZXIgdG8gaHR0cDovL2xvY2FsaG9zdDo4ODg4L2VkaXQvICAuCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkZWQgYXZhbG9uLXRpZ3JpcyBza2luLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULiBUaGFua3MgdG8gPGxpbmsgaHJlZj0ibWFpbHRvOnBldGVyQGFwYWNoZS5vcmciPlBldGVyIERvbmFsZDwvbGluaz4uPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBhIGRvY2Jvb2syZG9jdW1lbnQueHNsIHN0eWxlc2hlZXQgdG8gbGlicmFyeS94c2x0LgogICAgICAgQ29tbWl0dGVkIGJ5IEpULiBUaGFua3MgdG8gPGxpbmsgaHJlZj0ibWFpbHRvOktldmluLlJvc3NAaVZlcnRpY2FsTGVhcC5jb20iPktldmluIFJvc3M8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgWE1MIHZhbGlkYXRpb24gaXMgbm93IGZ1bGx5IGNvbmZpZ3VyYWJsZSB0aHJvdWdoIGEgaGllcmFyY2hpY2FsIHNldCBvZgogICAgICAgIDxjb2RlPmZvcnJlc3QudmFsaWRhdGlvbi4qe2luY2x1ZGVzLGV4Y2x1ZGVzLGZhaWxvbmVycm9yfTwvY29kZT4KICAgICAgICBwcm9wZXJ0aWVzLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgVmFsaWRhdGUgWFNMVHMgaW4gdXNlciBza2lucyBhbmQgPGNvZGU+cmVzb3VyY2VzL3N0eWxlc2hlZXRzPC9jb2RlPgogICAgICAgIGRpcmVjdG9yaWVzLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgRW5oYW5jZWQgZm9ycmVzdC1zaXRlIHNraW4ncyB0YWJzLiAgQW55IFVSTCAobm90IGp1c3QgZGlyZWN0b3JpZXMpIGNhbiBub3cKICAgICAgICBiZSB0YWJiZWQgd2l0aCBhIG5ldyAnaHJlZicgYXR0cmlidXRlLiBUaGVyZSBpcyBhbiBpbXByb3ZlZCAnbG9uZ2VzdCBtYXRjaCcKICAgICAgICBhbGdvcml0aG0gZm9yIGRlY2lkaW5nIHdoaWNoIHRhYiBpcyBvbiB3aGljaCBpcyBtb3JlIHJvYnVzdCB0aGFuIHRoZSBvbGQKICAgICAgICBvbmUuCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBhIHN1YmRpcmVjdG9yeSB0byB0aGUgdGVtcGxhdGUgc2l0ZSBhbmQgZml4ZWQgYWxsIGJyb2tlbiBsaW5rcy4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIFhNTCBkb2MgZmlsZXMgYXJlIG5vdyB2YWxpZGF0ZWQgYmVmb3JlIHJlbmRlcmluZyB3aXRoIHRoZSAndmFsaWRhdGUnCiAgICAgICAgdGFyZ2V0LiAgVXNlcyBPQVNJUyBjYXRhbG9ncyBwcm92aWRlZCBieSBGb3JyZXN0LCBvcHRpb25hbGx5IGF1Z21lbnRlZCBieQogICAgICAgIHVzZXIgcHJvamVjdCBjYXRhbG9ncy4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIFVzZXIgcHJvamVjdHMgY2FuIG5vdyBvdmVycmlkZSB0aGUgZGVmYXVsdCBjb2Nvb24ueGNvbmYgYW5kIGxvZ2tpdC54Y29uZiBmaWxlcywKICAgICAgICBieSBwbGFjaW5nIHRoZXNlIGZpbGVzIGluIHNyYy9kb2N1bWVudGF0aW9uL2NvbmYKICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIGFkZGVkIE5la29EVEQtYmFzZWQgRFREIGRvY3VtZW50YXRpb24gdXNpbmcgYSBjdXN0b20gQ29jb29uIEdlbmVyYXRvcgogICAgICAgQ29tbWl0dGVkIGJ5IFNOLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgPGxpbmsgaHJlZj0iaHR0cDovL21hcmMudGhlYWltc2dyb3VwLmNvbS8/bD1mb3JyZXN0LWRldiZhbXA7bT0xMDI0NzE4MjA1MjMzODgiPmRyYWZ0IGZvcnJlc3QgdG9vbGJhciBmb3IgTW96aWxsYTwvbGluaz4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBJbml0aWFsIGltcG9ydCBvZiA8bGluayBocmVmPSJzaXRlOnYwLjcwLy9saWJyZS1pbnRybyI+TGlicmU8L2xpbms+CiAgICAgICAgZmFjaWxpdHkgLSByZXBsYWNlbWVudCBmb3IgKi9ib29rLnhtbAogICAgICAgQ29tbWl0dGVkIGJ5IFNOLiBUaGFua3MgdG8gPGxpbmsgaHJlZj0ibWFpbHRvOm1wb0BvdXRlcnRob3VnaHQub3JnIj5NYXJjIFBvcnRpZXI8L2xpbms+LjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgUmVmYWN0b3JlZCBzaXRlIGdlbmVyYXRpb24gc3R1ZmYgdG8gdXNlIHNraW5zOyBzdGlsbCBuZWVkIHRvIGludGVncmF0ZSB3aXRoIHhmb3JyZXN0IGRlc2NyaXB0b3IuCiAgICAgICAgQWRkZWQgamFrYXJ0YS1zaXRlLCB4bWwtYXBhY2hlLXNpdGUsIGNvY29vbi1wcmludGVyIHNraW5zLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEZpeGVkIHNlbGVjdGVkIG1lbnUgbGluayAobWVhbnQgdG8gYmUgaW5hY3RpdmUgYW5kIHllbGxvdykKICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEZpeGVkIHdlYmFwcCByZWRpcmVjdCBwcm9ibGVtcyB1bmRlciBUb21jYXQgYW5kIChzb21ldGltZXMpIHVuZGVyIEpldHR5LgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgTm93IHNpdGUgYnVpbGRzIGRvIG5vdCBkZWxldGUgZmlsZXMgaW4gYnVpbGQvc2l0ZSB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGUgCiAgICAgICAgQW50IGxpc3Qgb2YgZGVmYXVsdCBleGNsdWRlcywgbGlrZSBDVlMgaW5mby4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBGaXhlZCBhIGJ1ZyB3aGVyZSBoYXZpbmcgYSB0YWJzLnhtbCBsaW5rIHRvIGEgZmlsZSBub3Qgb3RoZXJ3aXNlIG1lbnRpb25lZAogICAgICAgIGluIGJvb2sueG1sIGNhdXNlZCBhIGJyb2tlbiBsaW5rLiAgU2VlCiAgICAgICAgPGxpbmsgaHJlZj0iaHR0cDovL21hcmMudGhlYWltc2dyb3VwLmNvbS8/dD0xMDM2MDcwOTIxMDAwMDQiPmZvcnJlc3QtZGV2CiAgICAgICAgICBkaXNjdXNzaW9uPC9saW5rPgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgVGhlIGRpc3RyaWJ1dGlvbiBubyBsb25nZXIgcmVxdWlyZXMgQW50IHRvIGJlIHByZWluc3RhbGxlZC4gIE5vdywgbm90aGluZwogICAgICAgIGJ1dCBhIEphdmEgaW5zdGFsbGF0aW9uIGlzIG5lZWRlZC4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEZpeGVkIENsYXNzTm90Rm91bmRFeGNlcHRpb24gd2hlbiBydW5uaW5nIG9uIEpESzEuNC54CiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBBbGxvdyA8Y29kZT54bWw6c3BhY2U9J3ByZXNlcnZlJzwvY29kZT4gYXR0cmlidXRlIG9uICZsdDtwJmd0OyBlbGVtZW50LCB3aGljaCBwcmVzZXJ2ZXMKICAgICAgICBzcGFjZSB3aXRob3V0IHRoZSBjaGFuZ2VkIGZvbnQgYW5kIGJsb2NrIGRpc3BsYXkgdGhhdCAmbHQ7Y29kZSZndDsgdXNlcy4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEZpeGVkIGEgYnVnIHdoZXJlIHRoZSBsb2cgZmlsZXMgd2VyZW4ndCBiZWluZyBjcmVhdGVkLiBUaGFua3MgdG8gVmxhZGltaXIKICAgICAgICBCb3NzaWNhcmQgZm9yIHJlcG9ydGluZy4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9InJlbW92ZSIgc3JjPSJpbWFnZXMvcmVtb3ZlLmpwZyIvPgogICAgICAgIFJlbW92ZWQgdW5tYWludGFpbmVkIHNraW5zOiBhdmFsb24tc2l0ZSwgamFrYXJ0YS1zaXRlLCB4bWwtYXBhY2hlLXNpdGUsCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBBZGRlZCBhIGNvbnZlcnQgZGlyIGluIHRoZSByZXNvdXJjZXMgd2l0aCBzdHlsZXNoZWV0cyBhbmQgYnVpbGRmaWxlCiAgICAgICAgdG8gaGVscCBjb252ZXJ0IEFuYWtpYSBhbmQgTWF2ZW4tYmFzZWQgc2l0ZXMuCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgUmVtb3ZlZCB0aGUgZGVwZW5kZW5jeSB0aGF0IHRoZSBkZWZhdWx0ICJzaXRlIiB0YXJnZXQgaGFkIG9uIGNsZWFuLXNpdGUuCiAgICAgICAgSXQgbWVhbnMgdGhhdCBydW5uaW5nICAiZm9ycmVzdCIgd2lsbCBub3QgZGVsZXRlIHRoZSBjdXJyZW50IGZpbGVzIGluIC4vYnVpbGQvc2l0ZS8qKiAuCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgTm93IENvY29vbiBzZXJ2ZXMgYSBmaWxlIGRpcmVjdGx5IGlmIHRoZSBmaWxlbmFtZSBtYXRjaGVzCiAgICAgICAgdGhlIG9uZSBpbiAuL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnRzLyoqIC4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuPC9saT48bGk+PGljb24gYWx0PSJ1cGRhdGUiIHNyYz0iaW1hZ2VzL3VwZGF0ZS5qcGciLz4KICAgICAgICBQdXQgdGhlIGludGVybmFsIG1hdGNoZXMgaW4gYSBzZXBhcmF0ZSBwaXBlbGluZSB3aXRoIGludGVybmFsLW9ubHk9InRydWUiLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjwvdWw+PC9zZWN0aW9uPjxzZWN0aW9uPjx0aXRsZT5DaGFuZ2VzIHRvIERlc2lnbjwvdGl0bGU+PHVsPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIERlc2lnbmVkIGEgbmV3IHNraW4gZm9yIHRoZSBGb3JyZXN0IGRvY3VtZW50cy4gUGFydGljdWxhciBhdHRlbnRpb24gdG8KICAgICAgICBjcm9zcy1icm93c2VyIGlzc3Vlcy4KICAgICAgIENvbW1pdHRlZCBieSBCSy48L2xpPjwvdWw+PC9zZWN0aW9uPjxzZWN0aW9uPjx0aXRsZT5DaGFuZ2VzIHRvIERvY3VtZW50YXRpb248L3RpdGxlPjx1bD48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCBuZXcgZG9jdW1lbnQgPGxpbmsgaHJlZj0ic2l0ZTp2MC43MC8vY29tcGxpYW5jZSI+U3RhbmRhcmRzIENvbXBsaWFuY2U8L2xpbms+CiAgICAgICAgVGhhbmtzIHRvIFJvYmVydCBLb2JlcmcuCiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBbGxvdyB1c2VyIHRvIHNwZWNpZnkgd2hhdCBYTUwgZmlsZXMgdG8gdmFsaWRhdGUgdmlhCiAgICAgICAgPGNvZGU+Zm9ycmVzdC52YWxpZGF0ZS57aW5jbHVkZXMsZXhjbHVkZXN9PC9jb2RlPiBwcm9wZXJ0aWVzLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkZWQgbmV3IGRvY3VtZW50IDxsaW5rIGhyZWY9InNpdGU6djAuNzAvL3lvdXItcHJvamVjdCI+WW91ciBQcm9qZWN0CiAgICAgICAgICAtIGdldHRpbmcgc3RhcnRlZCB3aXRoIHVzaW5nIEZvcnJlc3Q8L2xpbms+CiAgICAgICBDb21taXR0ZWQgYnkgREMuPC9saT48bGk+PGljb24gYWx0PSJhZGQiIHNyYz0iaW1hZ2VzL2FkZC5qcGciLz4KICAgICAgICBBZGRlZCB0byB0aGUgImZvcnJlc3Qtc2l0ZSIgc2tpbiB0aGUgYWJpbGl0eSB0byBzcGxpdCBzb3VyY2UgY29kZQogICAgICAgIGxhcmdlciB0aGFuIDgwIGNoYXJzIGluIHR3byBvciBtb3JlIGxpbmVzLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9ImFkZCIgc3JjPSJpbWFnZXMvYWRkLmpwZyIvPgogICAgICAgIFJlcGxhY2UgdGhlICJmb3JyZXN0LXNpdGUiIHNraW4gd2l0aCB0aGUgbmV3ICJiZXJ0IgogICAgICAgIHNraW4uCiAgICAgICBDb21taXR0ZWQgYnkgREMuIFRoYW5rcyB0byBCZXJ0IFZhbiBLZXRzLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkZWQgYnJlYWRjcnVtYiB0cmFpbCBzY3JpcHQgZnJvbSB0aGUgQXZhbG9uIHNpdGUgc2tpbi4KICAgICAgIENvbW1pdHRlZCBieSBOS0IuIFRoYW5rcyB0byBMZW8gU2ltb25zLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkZWQgaW5pdGlhbCAiRHJlYW0gTGlzdCIgYnkgaGFydmVzdGluZyBzdGF0ZW1lbnRzIGZyb20gdGhlCiAgICAgICAgZm9ycmVzdC1kZXYgbWFpbCBsaXN0LgogICAgICAgQ29tbWl0dGVkIGJ5IERDLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgQWRkZWQgcHJlbGltaW5hcnkgdmVyc2lvbiBvZiBhIHNjYXJhYi1saWtlIHNraW4uCiAgICAgICBDb21taXR0ZWQgYnkgTktCLjwvbGk+PGxpPjxpY29uIGFsdD0iYWRkIiBzcmM9ImltYWdlcy9hZGQuanBnIi8+CiAgICAgICAgRml4ZWQgbGlua3MgaW4gRm9ycmVzdCBob21lIHBhZ2UgYW5kIGFkZGVkOiBjb250cmlidXRpbmcsIG1haWxpbmcgbGlzdCwKICAgICAgICBsaXN0IGFyY2hpdmVzLCB3aG8gd2UgYXJlLgogICAgICAgQ29tbWl0dGVkIGJ5IE5LQi48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEZpeGVkIGFsbCBicm9rZW4gbGlua3MgaW4gdGhlIEZvcnJlc3Qgc2l0ZS4KICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIFNpbXBsaWZpZWQgdGhlIHNpdGVtYXAtc3R5bGVzaGVldCBjb250cmFjdC4gIEluc3RlYWQgb2YgJ2RpcicgYW5kCiAgICAgICAgJ3Jlc291cmNlJyBwYXJhbWV0ZXJzIHdpdGggdmFyeWluZyBtZWFuaW5nLCB0aGVyZSBpcyBqdXN0IG9uZSAncGF0aCcKICAgICAgICBwYXJhbWV0ZXIuCiAgICAgICBDb21taXR0ZWQgYnkgSlQuPC9saT48bGk+PGljb24gYWx0PSJmaXgiIHNyYz0iaW1hZ2VzL2ZpeC5qcGciLz4KICAgICAgICBGaXhlZCBicm9rZW4gUERGcyBpbiBtb3N0IHN1YmRpcmVjdG9yaWVzLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgUERGcyBmb3IgZmFxLCBjaGFuZ2VzIGFuZCB0b2RvIG5vdyB3b3JrLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgTWFkZSBmb3JyZXN0LXNpdGUgc2tpbiBmdWxseSBnZW5lcmljLCB1c2FibGUgd2l0aCBhbnkgcHJvamVjdC4gU2tpbnMgYXJlCiAgICAgICAgY29uZmlndXJlZCB0aHJvdWdoIGFuIGV4dGVybmFsICdza2luY29uZi54bWwnIGZpbGUsIHNwZWNpZmllZCBieSB0aGUKICAgICAgICBwcm9qZWN0LiAKICAgICAgIENvbW1pdHRlZCBieSBKVC48L2xpPjxsaT48aWNvbiBhbHQ9ImZpeCIgc3JjPSJpbWFnZXMvZml4LmpwZyIvPgogICAgICAgIEZpeGVkIGJ1ZyB3aGVyZSBtdWx0aXBsZSBjb3BpZXMgb2YgdGhlIHNhbWUgaW1hZ2Ugd2hlcmUgZ2VuZXJhdGVkLCBvbmUgZm9yCiAgICAgICAgZWFjaCBkaXJlY3RvcnkuIE5vdyBhbGwgaW1hZ2UgbGlua3MgYXJlIHBhZ2UtcmVsYXRpdmUsIGxlYWRpbmcgdG8gYSBzaW5nbGUKICAgICAgICBjb3B5LgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0iZml4IiBzcmM9ImltYWdlcy9maXguanBnIi8+CiAgICAgICAgRml4ZWQgdGFiIGxpbmtzLCB3aGljaCB3ZXJlIHByZXZpb3VzbHkgaGFyZGNvZGVkIGFuZCBmb3JyZXN0LXNwZWNpZmljLiBUaGV5CiAgICAgICAgYXJlIG5vdyBwYWdlLXJlbGF0aXZlLiB0YWJzLnhtbCBmaWxlIGVudHJpZXMgbm8gbG9uZ2VyIGhhdmUgdG8gZW5kIGluCiAgICAgICAgJy8nLgogICAgICAgQ29tbWl0dGVkIGJ5IEpULjwvbGk+PGxpPjxpY29uIGFsdD0idXBkYXRlIiBzcmM9ImltYWdlcy91cGRhdGUuanBnIi8+CiAgICAgICAgRW5zdXJlIHRoYXQgaW5pdGlhbCBEVERzIGFyZSB2YWxpZCBhbmQgdGhhdCB0aGUgaW5pdGlhbCBYTUwgaW5zdGFuY2VzIGNhbiBiZQogICAgICAgIHZhbGlkYXRlZCB1c2luZyB0aGVzZSBEVERzIGFuZCBPQVNJUyBDYXRhbG9ncy4KICAgICAgIENvbW1pdHRlZCBieSBEQy4gVGhhbmtzIHRvIDxsaW5rIGhyZWY9Im1haWx0bzpzdGV2ZW5uQG91dGVydGhvdWdodC5vcmciPlN0ZXZlbiBOb2VsczwvbGluaz4uPC9saT48L3VsPjwvc2VjdGlvbj48c2VjdGlvbj48dGl0bGU+Q29udHJpYnV0b3JzIHRvIHRoaXMgcmVsZWFzZTwvdGl0bGU+PHA+V2UgdGhhbmsgdGhlIGZvbGxvd2luZyBwZW9wbGUgZm9yIHRoZWlyIGNvbnRyaWJ1dGlvbnMgdG8gdGhpcyByZWxlYXNlLjwvcD48cD5UaGlzIGlzIGEgbGlzdCBvZiBhbGwgcGVvcGxlIHdobyBwYXJ0aWNpcGF0ZWQgYXMgY29tbWl0dGVyczo8YnIvPkJlcnQgVmFuIEtldHMgKEJLKSwgRGF2aWQgQ3Jvc3NsZXkgKERDKSwgSmVmZiBUdXJuZXIgKEpUKSwgTmljb2xhIEtlbiBCYXJvenppIChOS0IpLCBTdGVmYW5vIE1henpvY2NoaSAoU00pLCBTdGV2ZW4gTm9lbHMgKFNOKS48L3A+PHA+VGhpcyBpcyBhIGxpc3Qgb2Ygb3RoZXIgY29udHJpYnV0b3JzOjxici8+QmVydCBWYW4gS2V0cywgQnJ1bm8gRHVtb24sIEtldmluIFJvc3MsIExlbyBTaW1vbnMsIE1hcmMgUG9ydGllciwgUGV0ZXIgRG9uYWxkLCBTdGV2ZW4gTm9lbHMuPC9wPjwvc2VjdGlvbj48L3NlY3Rpb24+CiAgPHNlY3Rpb24gaWQ9ImFsbC1jb21taXR0ZXJzIj48dGl0bGU+QWxsIENvbW1pdHRlcnM8L3RpdGxlPjxwPlRoaXMgaXMgYSBsaXN0IG9mIGFsbCBwZW9wbGUgd2hvIGhhdmUgZXZlciBwYXJ0aWNpcGF0ZWQKICAgICAgICAgICBhcyBjb21taXR0ZXJzIG9uIHRoaXMgcHJvamVjdC48L3A+PHVsPjxsaT5TdGVmYW5vIE1henpvY2NoaSAoU00pPC9saT48bGk+U2FtIFJ1YnkgKFNSKTwvbGk+PGxpPkpvaG4gTW9ycmlzb24gKEpNKTwvbGk+PGxpPkRhdmlkIENyb3NzbGV5IChEQyk8L2xpPjxsaT5TdGV2ZW4gTm9lbHMgKFNOKTwvbGk+PGxpPk5pY29sYSBLZW4gQmFyb3p6aSAoTktCKTwvbGk+PGxpPktvbnN0YW50aW4gUGlyb3VtaWFuIChLUCk8L2xpPjxsaT5CZXJ0IFZhbiBLZXRzIChCSyk8L2xpPjxsaT5NYXJjIFBvcnRpZXIgKE1QKTwvbGk+PGxpPkplZmYgVHVybmVyIChKVCk8L2xpPjxsaT5KdWFuIEpvc2UgUGFibG9zIChKSlApPC9saT48bGk+RGF2ZSBCcm9uZHNlbWEgKERCKTwvbGk+PGxpPkFudG9uaW8gR2FsbGFyZG8gKEFHKTwvbGk+PGxpPlJlaW5oYXJkIFD2dHogKFJQKTwvbGk+PGxpPlJvc3MgR2FyZGxlciAoUkRHKTwvbGk+PGxpPlRob3JzdGVuIFNjaGVybGVyIChUUyk8L2xpPjxsaT5SaWNrIFRlc3NuZXIgKFJGVCk8L2xpPjxsaT5GZXJkaW5hbmQgU29ldGhlIChGU08pPC9saT48bGk+Sm9oYW5uZXMgU2NoYWVmZXIgKEpTKTwvbGk+PGxpPkN5cmlhcXVlIER1cG9pcmlldXggKENEKTwvbGk+PGxpPkJlcnRyYW5kIERlbGFjcmV0YXogKEJEKTwvbGk+PGxpPlRpbSBXaWxsaWFtcyAoVFdXKTwvbGk+PGxpPkRpd2FrZXIgR3VwdGEgKERHKTwvbGk+PGxpPlZvbHVudGVlciBuZWVkZWQgKG9wZW4pPC9saT48L3VsPjwvc2VjdGlvbj48L2JvZHk+PC9kb2N1bWVudD4=