PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5DdXN0b20gRXJyb3IgUmVzcG9uc2VzIC0gQXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi40PC90aXRsZT4KPGxpbmsgaHJlZj0iLi9zdHlsZS9jc3MvbWFudWFsLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik1haW4gc3R5bGVzaGVldCIgLz4KPGxpbmsgaHJlZj0iLi9zdHlsZS9jc3MvbWFudWFsLWxvb3NlLTEwMHBjLmNzcyIgcmVsPSJhbHRlcm5hdGUgc3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJObyBTaWRlYmFyIC0gRGVmYXVsdCBmb250IHNpemUiIC8+CjxsaW5rIGhyZWY9Ii4vc3R5bGUvY3NzL21hbnVhbC1wcmludC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InByaW50IiB0eXBlPSJ0ZXh0L2NzcyIgLz48bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuL3N0eWxlL2Nzcy9wcmV0dGlmeS5jc3MiIC8+CjxzY3JpcHQgc3JjPSIuL3N0eWxlL3NjcmlwdHMvcHJldHRpZnkubWluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgo8L3NjcmlwdD4KCjxsaW5rIGhyZWY9Ii4vaW1hZ2VzL2Zhdmljb24uaWNvIiByZWw9InNob3J0Y3V0IGljb24iIC8+PC9oZWFkPgo8Ym9keSBpZD0ibWFudWFsLXBhZ2UiPjxkaXYgaWQ9InBhZ2UtaGVhZGVyIj4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuL21vZC9kaXJlY3RpdmVzLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3dpa2kuYXBhY2hlLm9yZy9odHRwZC9GQVEiPkZBUTwvYT4gfCA8YSBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD4KPHAgY2xhc3M9ImFwYWNoZSI+QXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi40PC9wPgo8aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2ZlYXRoZXIucG5nIiAvPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ1cCI+PGEgaHJlZj0iLi8iPjxpbWcgdGl0bGU9IiZsdDstIiBhbHQ9IiZsdDstIiBzcmM9Ii4vaW1hZ2VzL2xlZnQuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBpZD0icGF0aCI+CjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iPkFwYWNoZTwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy8iPkhUVFAgU2VydmVyPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvIj5Eb2N1bWVudGF0aW9uPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4vIj5WZXJzaW9uIDIuNDwvYT48L2Rpdj48ZGl2IGlkPSJwYWdlLWNvbnRlbnQiPjxkaXYgaWQ9InByZWFtYmxlIj48aDE+Q3VzdG9tIEVycm9yIFJlc3BvbnNlczwvaDE+CjxkaXYgY2xhc3M9InRvcGxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi9lbi9jdXN0b20tZXJyb3IuaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vZXMvY3VzdG9tLWVycm9yLmh0bWwiIGhyZWZsYW5nPSJlcyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJFc3Bh8W9sIj4mbmJzcDtlcyZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2ZyL2N1c3RvbS1lcnJvci5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vamEvY3VzdG9tLWVycm9yLmh0bWwiIGhyZWZsYW5nPSJqYSIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJKYXBhbmVzZSI+Jm5ic3A7amEmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9rby9jdXN0b20tZXJyb3IuaHRtbCIgaHJlZmxhbmc9ImtvIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IktvcmVhbiI+Jm5ic3A7a28mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi90ci9jdXN0b20tZXJyb3IuaHRtbCIgaHJlZmxhbmc9InRyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlT8cmvnZSI+Jm5ic3A7dHImbmJzcDs8L2E+PC9wPgo8L2Rpdj4KCgogICAgPHA+QWx0aG91Z2ggdGhlIEFwYWNoZSBIVFRQIFNlcnZlciBwcm92aWRlcyBnZW5lcmljIGVycm9yIHJlc3BvbnNlcwogICAgaW4gdGhlIGV2ZW50IG9mIDR4eCBvciA1eHggSFRUUCBzdGF0dXMgY29kZXMsIHRoZXNlIHJlc3BvbnNlcyBhcmUKICAgIHJhdGhlciBzdGFyaywgdW5pbmZvcm1hdGl2ZSwgYW5kIGNhbiBiZSBpbnRpbWlkYXRpbmcgdG8gc2l0ZSB1c2Vycy4KICAgIFlvdSBtYXkgd2lzaCB0byBwcm92aWRlIGN1c3RvbSBlcnJvciByZXNwb25zZXMgd2hpY2ggYXJlIGVpdGhlcgogICAgZnJpZW5kbGllciwgb3IgaW4gc29tZSBsYW5ndWFnZSBvdGhlciB0aGFuIEVuZ2xpc2gsIG9yIHBlcmhhcHMgd2hpY2gKICAgIGFyZSBzdHlsZWQgbW9yZSBpbiBsaW5lIHdpdGggeW91ciBzaXRlIGxheW91dC48L3A+CgogICAgPHA+Q3VzdG9taXplZCBlcnJvciByZXNwb25zZXMgY2FuIGJlIGRlZmluZWQgZm9yIGFueSBIVFRQIHN0YXR1cwogICAgY29kZSBkZXNpZ25hdGVkIGFzIGFuIGVycm9yIGNvbmRpdGlvbiAtIHRoYXQgaXMsIGFueSA0eHggb3IgNXh4CiAgICBzdGF0dXMuPC9wPgoKICAgIDxwPkFkZGl0aW9uYWxseSwgYSBzZXQgb2YgdmFsdWVzIGFyZSBwcm92aWRlZCwgc28KICAgIHRoYXQgdGhlIGVycm9yIGRvY3VtZW50IGNhbiBiZSBjdXN0b21pemVkIGZ1cnRoZXIgYmFzZWQgb24gdGhlCiAgICB2YWx1ZXMgb2YgdGhlc2UgdmFyaWFibGVzLCB1c2luZyA8YSBocmVmPSJob3d0by9zc2kuaHRtbCI+U2VydmVyCiAgICBTaWRlIEluY2x1ZGVzPC9hPi4gT3IsIHlvdSBjYW4gaGF2ZSBlcnJvciBjb25kaXRpb25zIGhhbmRsZWQgYnkgYQogICAgY2dpIHByb2dyYW0sIG9yIG90aGVyIGR5bmFtaWMgaGFuZGxlciAoUEhQLCBtb2RfcGVybCwgZXRjKSB3aGljaAogICAgbWFrZXMgdXNlIG9mIHRoZXNlIHZhcmlhYmxlcy48L3A+CgogIDwvZGl2Pgo8ZGl2IGlkPSJxdWlja3ZpZXciPjx1bCBpZD0idG9jIj48bGk+PGltZyBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2NvbmZpZ3VyYXRpb24iPkNvbmZpZ3VyYXRpb248L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiN2YXJpYWJsZXMiPkF2YWlsYWJsZSBWYXJpYWJsZXM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNjdXN0b20iPkN1c3RvbWl6aW5nIEVycm9yIFJlc3BvbnNlczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI211bHRpLWxhbmciPk11bHRpIExhbmd1YWdlIEN1c3RvbSBFcnJvciBEb2N1bWVudHM8L2E+PC9saT4KPC91bD48aDM+U2VlIGFsc288L2gzPjx1bCBjbGFzcz0ic2VlYWxzbyI+PGxpPjxhIGhyZWY9IiNjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2xpPjwvdWw+PC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iY29uZmlndXJhdGlvbiIgaWQ9ImNvbmZpZ3VyYXRpb24iPkNvbmZpZ3VyYXRpb248L2E+PC9oMj4KCiAgICA8cD5DdXN0b20gZXJyb3IgZG9jdW1lbnRzIGFyZSBjb25maWd1cmVkIHVzaW5nIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9jb3JlLmh0bWwjZXJyb3Jkb2N1bWVudCI+RXJyb3JEb2N1bWVudDwvYT48L2NvZGU+IGRpcmVjdGl2ZSwKICAgIHdoaWNoIG1heSBiZSB1c2VkIGluIGdsb2JhbCwKICAgIHZpcnR1YWxob3N0LCBvciBkaXJlY3RvcnkgY29udGV4dC4gSXQgbWF5IGJlIHVzZWQgaW4gLmh0YWNjZXNzIGZpbGVzCiAgICBpZiA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9jb3JlLmh0bWwjYWxsb3dvdmVycmlkZSI+QWxsb3dPdmVycmlkZTwvYT48L2NvZGU+IGlzIHNldCB0bwogICAgRmlsZUluZm8uPC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5FcnJvckRvY3VtZW50IDUwMCAiU29ycnksIG91ciBzY3JpcHQgY3Jhc2hlZC4gT2ggZGVhciIKRXJyb3JEb2N1bWVudCA1MDAgL2NnaS1iaW4vY3Jhc2gtcmVjb3ZlcgpFcnJvckRvY3VtZW50IDUwMCBodHRwOi8vZXJyb3IuZXhhbXBsZS5jb20vc2VydmVyX2Vycm9yLmh0bWwKRXJyb3JEb2N1bWVudCA0MDQgL2Vycm9ycy9ub3RfZm91bmQuaHRtbApFcnJvckRvY3VtZW50IDQwMSAvc3Vic2NyaXB0aW9uL2hvd190b19zdWJzY3JpYmUuaHRtbDwvcHJlPgoKCiAgICA8cD5UaGUgc3ludGF4IG9mIHRoZSA8Y29kZT5FcnJvckRvY3VtZW50PC9jb2RlPiBkaXJlY3RpdmUgaXM6PC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5FcnJvckRvY3VtZW50ICZsdDszLWRpZ2l0LWNvZGUmZ3Q7ICZsdDthY3Rpb24mZ3Q7PC9wcmU+CgoKICAgIDxwPndoZXJlIHRoZSBhY3Rpb24gd2lsbCBiZSB0cmVhdGVkIGFzOjwvcD4KCiAgICA8b2w+CiAgICAgIDxsaT5BIGxvY2FsIFVSTCB0byByZWRpcmVjdCB0byAoaWYgdGhlIGFjdGlvbiBiZWdpbnMgd2l0aCBhICIvIikuPC9saT4KICAgICAgPGxpPkFuIGV4dGVybmFsIFVSTCB0byByZWRpcmVjdCB0byAoaWYgdGhlIGFjdGlvbiBpcyBhIHZhbGlkIFVSTCkuPC9saT4KICAgICAgPGxpPlRleHQgdG8gYmUgZGlzcGxheWVkIChpZiBub25lIG9mIHRoZSBhYm92ZSkuIFRoZSB0ZXh0IG11c3QgYmUKICAgICAgICAgIHdyYXBwZWQgaW4gcXVvdGVzICgiKSBpZiBpdCBjb25zaXN0cyBvZiBtb3JlIHRoYW4gb25lIHdvcmQuPC9saT4KICAgIDwvb2w+CgogICAgPHA+V2hlbiByZWRpcmVjdGluZyB0byBhIGxvY2FsIFVSTCwgYWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKICAgIGFyZSBzZXQgc28gdGhhdCB0aGUgcmVzcG9uc2UgY2FuIGJlIGZ1cnRoZXIgY3VzdG9taXplZC4gVGhleSBhcmUgbm90IHNlbnQgdG8KICAgIGV4dGVybmFsIFVSTHMuPC9wPgoKICA8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9InZhcmlhYmxlcyIgaWQ9InZhcmlhYmxlcyI+QXZhaWxhYmxlIFZhcmlhYmxlczwvYT48L2gyPgoKICAgICAgPHA+UmVkaXJlY3RpbmcgdG8gYW5vdGhlciBVUkwgY2FuIGJlIHVzZWZ1bCwgYnV0IG9ubHkgaWYgc29tZQogICAgICBpbmZvcm1hdGlvbiBjYW4gYmUgcGFzc2VkIHdoaWNoIGNhbiB0aGVuIGJlIHVzZWQgdG8gZXhwbGFpbiBvciBsb2cKICAgICAgdGhlIGVycm9yIGNvbmRpdGlvbiBtb3JlIGNsZWFybHkuPC9wPgoKICAgICAgPHA+VG8gYWNoaWV2ZSB0aGlzLCB3aGVuIHRoZSBlcnJvciByZWRpcmVjdCBpcyBzZW50LCBhZGRpdGlvbmFsCiAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aWxsIGJlIHNldCwgd2hpY2ggd2lsbCBiZSBnZW5lcmF0ZWQgZnJvbQogICAgICB0aGUgaGVhZGVycyBwcm92aWRlZCB0byB0aGUgb3JpZ2luYWwgcmVxdWVzdCBieSBwcmVwZW5kaW5nCiAgICAgICdSRURJUkVDVF8nIG9udG8gdGhlIG9yaWdpbmFsIGhlYWRlciBuYW1lLiBUaGlzIHByb3ZpZGVzIHRoZSBlcnJvcgogICAgICBkb2N1bWVudCB0aGUgY29udGV4dCBvZiB0aGUgb3JpZ2luYWwgcmVxdWVzdC48L3A+CgogICAgICA8cD5Gb3IgZXhhbXBsZSwgeW91IG1pZ2h0IHJlY2VpdmUsIGluIGFkZGl0aW9uIHRvIG1vcmUgdXN1YWwKICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGVzLCB0aGUgZm9sbG93aW5nLjwvcD4KCiAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgICAgIFJFRElSRUNUX0hUVFBfQUNDRVBUPSovKiwgaW1hZ2UvZ2lmLCBpbWFnZS9qcGVnLCBpbWFnZS9wbmc8YnIgLz4KICAgICAgICBSRURJUkVDVF9IVFRQX1VTRVJfQUdFTlQ9TW96aWxsYS81LjAgRmVkb3JhLzMuNS44LTEuZmMxMiBGaXJlZm94LzMuNS44PGJyIC8+CiAgICAgICAgUkVESVJFQ1RfUEFUSD0uOi9iaW46L3Vzci9sb2NhbC9iaW46L3NiaW48YnIgLz4KICAgICAgICBSRURJUkVDVF9RVUVSWV9TVFJJTkc9PGJyIC8+CiAgICAgICAgUkVESVJFQ1RfUkVNT1RFX0FERFI9MTIxLjM0NS43OC4xMjM8YnIgLz4KICAgICAgICBSRURJUkVDVF9SRU1PVEVfSE9TVD1jbGllbnQuZXhhbXBsZS5jb208YnIgLz4KICAgICAgICBSRURJUkVDVF9TRVJWRVJfTkFNRT13d3cuZXhhbXBsZS5lZHU8YnIgLz4KICAgICAgICBSRURJUkVDVF9TRVJWRVJfUE9SVD04MDxiciAvPgogICAgICAgIFJFRElSRUNUX1NFUlZFUl9TT0ZUV0FSRT1BcGFjaGUvMi4yLjE1PGJyIC8+CiAgICAgICAgUkVESVJFQ1RfVVJMPS9jZ2ktYmluL2J1Z2d5LnBsCiAgICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgICA8cD48Y29kZT5SRURJUkVDVF88L2NvZGU+IGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgY3JlYXRlZCBmcm9tCiAgICAgIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hpY2ggZXhpc3RlZCBwcmlvciB0byB0aGUKICAgICAgcmVkaXJlY3QuIFRoZXkgYXJlIHJlbmFtZWQgd2l0aCBhIDxjb2RlPlJFRElSRUNUXzwvY29kZT4KICAgICAgcHJlZml4LCA8ZW0+aS5lLjwvZW0+LCA8Y29kZT5IVFRQX1VTRVJfQUdFTlQ8L2NvZGU+IGJlY29tZXMKICAgICAgPGNvZGU+UkVESVJFQ1RfSFRUUF9VU0VSX0FHRU5UPC9jb2RlPi48L3A+CgogICAgICA8cD48Y29kZT5SRURJUkVDVF9VUkw8L2NvZGU+LCA8Y29kZT5SRURJUkVDVF9TVEFUVVM8L2NvZGU+LCBhbmQKICAgICAgPGNvZGU+UkVESVJFQ1RfUVVFUllfU1RSSU5HPC9jb2RlPiBhcmUgZ3VhcmFudGVlZCB0byBiZSBzZXQsIGFuZAogICAgICB0aGUgb3RoZXIgaGVhZGVycyB3aWxsIGJlIHNldCBvbmx5IGlmIHRoZXkgZXhpc3RlZCBwcmlvciB0byB0aGUKICAgICAgZXJyb3IgY29uZGl0aW9uLjwvcD4KCiAgICAgIDxwPjxzdHJvbmc+Tm9uZTwvc3Ryb25nPiBvZiB0aGVzZSB3aWxsIGJlCiAgICAgIHNldCBpZiB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvY29yZS5odG1sI2Vycm9yZG9jdW1lbnQiPkVycm9yRG9jdW1lbnQ8L2E+PC9jb2RlPiB0YXJnZXQgaXMgYW4KICAgICAgPGVtPmV4dGVybmFsPC9lbT4gcmVkaXJlY3QgKGFueXRoaW5nIHN0YXJ0aW5nIHdpdGggYQogICAgICBzY2hlbWUgbmFtZSBsaWtlIDxjb2RlPmh0dHA6PC9jb2RlPiwgZXZlbiBpZiBpdCByZWZlcnMgdG8gdGhlIHNhbWUgaG9zdAogICAgICBhcyB0aGUgc2VydmVyKS48L3A+CiAgPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJjdXN0b20iIGlkPSJjdXN0b20iPkN1c3RvbWl6aW5nIEVycm9yIFJlc3BvbnNlczwvYT48L2gyPgoKICAgICAgPHA+SWYgeW91IHBvaW50IHlvdXIgPGNvZGU+RXJyb3JEb2N1bWVudDwvY29kZT4gdG8gc29tZSB2YXJpZXR5IG9mCiAgICAgIGR5bmFtaWMgaGFuZGxlciBzdWNoIGFzIGEgc2VydmVyLXNpZGUgaW5jbHVkZSBkb2N1bWVudCwgQ0dJCiAgICAgIHNjcmlwdCwgb3Igc29tZSB2YXJpZXR5IG9mIG90aGVyIGhhbmRsZXIsIHlvdSBtYXkgd2lzaCB0byB1c2UgdGhlCiAgICAgIGF2YWlsYWJsZSBjdXN0b20gZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGN1c3RvbWl6ZSB0aGlzCiAgICAgIHJlc3BvbnNlLjwvcD4KCiAgICAgIDxwPklmIHRoZSBFcnJvckRvY3VtZW50IHNwZWNpZmllcyBhIGxvY2FsIHJlZGlyZWN0IHRvIGEgQ0dJCiAgICAgIHNjcmlwdCwgdGhlIHNjcmlwdCBzaG91bGQgaW5jbHVkZSBhICI8Y29kZT5TdGF0dXM6PC9jb2RlPiIKICAgICAgaGVhZGVyIGZpZWxkIGluIGl0cyBvdXRwdXQgaW4gb3JkZXIgdG8gZW5zdXJlIHRoZSBwcm9wYWdhdGlvbgogICAgICBhbGwgdGhlIHdheSBiYWNrIHRvIHRoZSBjbGllbnQgb2YgdGhlIGVycm9yIGNvbmRpdGlvbiB0aGF0CiAgICAgIGNhdXNlZCBpdCB0byBiZSBpbnZva2VkLiBGb3IgaW5zdGFuY2UsIGEgUGVybCBFcnJvckRvY3VtZW50CiAgICAgIHNjcmlwdCBtaWdodCBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6PC9wPgoKICAgICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctcGVybCI+Li4uCnByaW50ICAiQ29udGVudC10eXBlOiB0ZXh0L2h0bWxcbiI7CnByaW50ZiAiU3RhdHVzOiAlcyBDb25kaXRpb24gSW50ZXJjZXB0ZWRcbiIsICRFTlZ7IlJFRElSRUNUX1NUQVRVUyJ9OwouLi48L3ByZT4KCgogICAgICA8cD5JZiB0aGUgc2NyaXB0IGlzIGRlZGljYXRlZCB0byBoYW5kbGluZyBhIHBhcnRpY3VsYXIgZXJyb3IKICAgICAgY29uZGl0aW9uLCBzdWNoIGFzIDxjb2RlPjQwNCZuYnNwO05vdCZuYnNwO0ZvdW5kPC9jb2RlPiwgaXQgY2FuCiAgICAgIHVzZSB0aGUgc3BlY2lmaWMgY29kZSBhbmQgZXJyb3IgdGV4dCBpbnN0ZWFkLjwvcD4KCiAgICAgIDxwPk5vdGUgdGhhdCBpZiB0aGUgcmVzcG9uc2UgY29udGFpbnMgPGNvZGU+TG9jYXRpb246PC9jb2RlPgogICAgICBoZWFkZXIgKGluIG9yZGVyIHRvIGlzc3VlIGEgY2xpZW50LXNpZGUgcmVkaXJlY3QpLCB0aGUgc2NyaXB0CiAgICAgIDxlbT5tdXN0PC9lbT4gZW1pdCBhbiBhcHByb3ByaWF0ZSA8Y29kZT5TdGF0dXM6PC9jb2RlPiBoZWFkZXIKICAgICAgKHN1Y2ggYXMgPGNvZGU+MzAyJm5ic3A7Rm91bmQ8L2NvZGU+KS4gT3RoZXJ3aXNlIHRoZQogICAgICA8Y29kZT5Mb2NhdGlvbjo8L2NvZGU+IGhlYWRlciBtYXkgaGF2ZSBubyBlZmZlY3QuPC9wPgoKICA8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9Im11bHRpLWxhbmciIGlkPSJtdWx0aS1sYW5nIj5NdWx0aSBMYW5ndWFnZSBDdXN0b20gRXJyb3IgRG9jdW1lbnRzPC9hPjwvaDI+CgogICAgPHA+UHJvdmlkZWQgd2l0aCB5b3VyIGluc3RhbGxhdGlvbiBvZiB0aGUgQXBhY2hlIEhUVFAgU2VydmVyIGlzIGEKICAgIGRpcmVjdG9yeSBvZiBjdXN0b20gZXJyb3IgZG9jdW1lbnRzIHRyYW5zbGF0ZWQgaW50byAxNiBkaWZmZXJlbnQKICAgIGxhbmd1YWdlcy4gVGhlcmUncyBhbHNvIGEgY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZQogICAgPGNvZGU+Y29uZi9leHRyYTwvY29kZT4gY29uZmlndXJhdGlvbiBkaXJlY3RvcnkgdGhhdCBjYW4gYmUgaW5jbHVkZWQKICAgIHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUuPC9wPgoKICAgIDxwPkluIHlvdXIgc2VydmVyIGNvbmZpZ3VyYXRpb24gZmlsZSwgeW91J2xsIHNlZSBhIGxpbmUgc3VjaCBhczo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiMgTXVsdGktbGFuZ3VhZ2UgZXJyb3IgbWVzc2FnZXMKI0luY2x1ZGUgY29uZi9leHRyYS9odHRwZC1tdWx0aWxhbmctZXJyb3Jkb2MuY29uZjwvcHJlPgoKCiAgICA8cD5VbmNvbW1lbnRpbmcgdGhpcyA8Y29kZT5JbmNsdWRlPC9jb2RlPiBsaW5lIHdpbGwgZW5hYmxlIHRoaXMKICAgIGZlYXR1cmUsIGFuZCBwcm92aWRlIGxhbmd1YWdlLW5lZ290aWF0ZWQgZXJyb3IgbWVzc2FnZXMsIGJhc2VkIG9uCiAgICB0aGUgbGFuZ3VhZ2UgcHJlZmVyZW5jZSBzZXQgaW4gdGhlIGNsaWVudCBicm93c2VyLjwvcD4KCiAgICA8cD5BZGRpdGlvbmFsbHksIHRoZXNlIGRvY3VtZW50cyBjb250YWluIHZhcmlvdXMgb2YgdGhlCiAgICA8Y29kZT5SRURJUkVDVF88L2NvZGU+IHZhcmlhYmxlcywgc28gdGhhdCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGNhbgogICAgYmUgcHJvdmlkZWQgdG8gdGhlIGVuZC11c2VyIGFib3V0IHdoYXQgaGFwcGVuZWQsIGFuZCB3aGF0IHRoZXkgY2FuCiAgICBkbyBub3cuPC9wPgoKICAgIDxwPlRoZXNlIGRvY3VtZW50cyBjYW4gYmUgY3VzdG9taXplZCB0byB3aGF0ZXZlciBkZWdyZWUgeW91IHdpc2ggdG8KICAgIHByb3ZpZGUgbW9yZSB1c2VmdWwgaW5mb3JtYXRpb24gdG8gdXNlcnMgYWJvdXQgeW91ciBzaXRlLCBhbmQgd2hhdAogICAgdGhleSBjYW4gZXhwZWN0IHRvIGZpbmQgdGhlcmUuPC9wPgoKICAgIDxwPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9pbmNsdWRlLmh0bWwiPm1vZF9pbmNsdWRlPC9hPjwvY29kZT4gYW5kIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9uZWdvdGlhdGlvbi5odG1sIj5tb2RfbmVnb3RpYXRpb248L2E+PC9jb2RlPgogICAgbXVzdCBiZSBlbmFibGVkIHRvIHVzZSB0aGlzIGZlYXR1cmUuPC9wPgoKIDwvZGl2PjwvZGl2Pgo8ZGl2IGNsYXNzPSJib3R0b21sYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4vZW4vY3VzdG9tLWVycm9yLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2VzL2N1c3RvbS1lcnJvci5odG1sIiBocmVmbGFuZz0iZXMiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRXNwYfFvbCI+Jm5ic3A7ZXMmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9mci9jdXN0b20tZXJyb3IuaHRtbCIgaHJlZmxhbmc9ImZyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2phL2N1c3RvbS1lcnJvci5odG1sIiBocmVmbGFuZz0iamEiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iSmFwYW5lc2UiPiZuYnNwO2phJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4va28vY3VzdG9tLWVycm9yLmh0bWwiIGhyZWZsYW5nPSJrbyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJLb3JlYW4iPiZuYnNwO2tvJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vdHIvY3VzdG9tLWVycm9yLmh0bWwiIGhyZWZsYW5nPSJ0ciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJU/HJr52UiPiZuYnNwO3RyJm5ic3A7PC9hPjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgc3JjPSIuL2ltYWdlcy91cC5naWYiIGFsdD0idG9wIiAvPjwvYT48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDI+PGEgaWQ9ImNvbW1lbnRzX3NlY3Rpb24iIG5hbWU9ImNvbW1lbnRzX3NlY3Rpb24iPkNvbW1lbnRzPC9hPjwvaDI+PGRpdiBjbGFzcz0id2FybmluZyI+PHN0cm9uZz5Ob3RpY2U6PC9zdHJvbmc+PGJyIC8+VGhpcyBpcyBub3QgYSBRJmFtcDtBIHNlY3Rpb24uIENvbW1lbnRzIHBsYWNlZCBoZXJlIHNob3VsZCBiZSBwb2ludGVkIHRvd2FyZHMgc3VnZ2VzdGlvbnMgb24gaW1wcm92aW5nIHRoZSBkb2N1bWVudGF0aW9uIG9yIHNlcnZlciwgYW5kIG1heSBiZSByZW1vdmVkIGFnYWluIGJ5IG91ciBtb2RlcmF0b3JzIGlmIHRoZXkgYXJlIGVpdGhlciBpbXBsZW1lbnRlZCBvciBjb25zaWRlcmVkIGludmFsaWQvb2ZmLXRvcGljLiBRdWVzdGlvbnMgb24gaG93IHRvIG1hbmFnZSB0aGUgQXBhY2hlIEhUVFAgU2VydmVyIHNob3VsZCBiZSBkaXJlY3RlZCBhdCBlaXRoZXIgb3VyIElSQyBjaGFubmVsLCAjaHR0cGQsIG9uIEZyZWVub2RlLCBvciBzZW50IHRvIG91ciA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9saXN0cy5odG1sIj5tYWlsaW5nIGxpc3RzPC9hPi48L2Rpdj4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KdmFyIGNvbW1lbnRzX3Nob3J0bmFtZSA9ICdodHRwZCc7CnZhciBjb21tZW50c19pZGVudGlmaWVyID0gJ2h0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvMi40L2N1c3RvbS1lcnJvci5odG1sJzsKKGZ1bmN0aW9uKHcsIGQpIHsKICAgIGlmICh3LmxvY2F0aW9uLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCkgPT0gImh0dHBkLmFwYWNoZS5vcmciKSB7CiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj48XC9kaXY+Jyk7CiAgICAgICAgdmFyIHMgPSBkLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgICAgIHMudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwogICAgICAgIHMuYXN5bmMgPSB0cnVlOwogICAgICAgIHMuc3JjID0gJ2h0dHBzOi8vY29tbWVudHMuYXBhY2hlLm9yZy9zaG93X2NvbW1lbnRzLmx1YT9zaXRlPScgKyBjb21tZW50c19zaG9ydG5hbWUgKyAnJnBhZ2U9JyArIGNvbW1lbnRzX2lkZW50aWZpZXI7CiAgICAgICAgKGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSB8fCBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0pLmFwcGVuZENoaWxkKHMpOwogICAgfQogICAgZWxzZSB7IAogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+Q29tbWVudHMgYXJlIGRpc2FibGVkIGZvciB0aGlzIHBhZ2UgYXQgdGhlIG1vbWVudC48XC9kaXY+Jyk7CiAgICB9Cn0pKHdpbmRvdywgZG9jdW1lbnQpOwovLy0tPjwhXV0+PC9zY3JpcHQ+PC9kaXY+PGRpdiBpZD0iZm9vdGVyIj4KPHAgY2xhc3M9ImFwYWNoZSI+Q29weXJpZ2h0IDIwMTYgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLjxiciAvPkxpY2Vuc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPkFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMDwvYT4uPC9wPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPjwvZGl2PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tLy8tLT48IVtDREFUQVsvLz48IS0tCmlmICh0eXBlb2YocHJldHR5UHJpbnQpICE9PSAndW5kZWZpbmVkJykgewogICAgcHJldHR5UHJpbnQoKTsKfQovLy0tPjwhXV0+PC9zY3JpcHQ+CjwvYm9keT48L2h0bWw+