PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+PHRpdGxlPkV4YW1wbGVzIGFuZCBVc2FnZTwvdGl0bGU+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0icml2ZXQuY3NzIj48bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc2LjEiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkFwYWNoZSBSaXZldCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkFwYWNoZSBSaXZldCI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ3cmFwbGluZS5odG1sIiB0aXRsZT0id3JhcGxpbmUiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0idGNsX3BhY2thZ2VzLmh0bWwiIHRpdGxlPSJSaXZldCBUY2wgUGFja2FnZXMiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ibmF2aGVhZGVyIj48dGFibGUgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIj48dHI+PHRoIGNvbHNwYW49IjMiIGFsaWduPSJjZW50ZXIiPkV4YW1wbGVzIGFuZCBVc2FnZTwvdGg+PC90cj48dHI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJsZWZ0Ij48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IndyYXBsaW5lLmh0bWwiPjxpbWcgc3JjPSJpbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPqA8L3RkPjx0aCB3aWR0aD0iNjAlIiBhbGlnbj0iY2VudGVyIj6gPC90aD48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij6gPGEgYWNjZXNza2V5PSJuIiBocmVmPSJ0Y2xfcGFja2FnZXMuaHRtbCI+PGltZyBzcmM9ImltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiIgdGl0bGU9IkV4YW1wbGVzIGFuZCBVc2FnZSI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGhyPjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iZXhhbXBsZXMiPjwvYT5FeGFtcGxlcyBhbmQgVXNhZ2U8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgogICAgICBTb21lIGV4YW1wbGVzIG9mIFJpdmV0IHVzYWdlIGZvbGxvdy4gIFNvbWUgcHJpb3IgVGNsIGtub3dsZWRnZQogICAgICBpcyBhc3N1bWVkLiAgSWYgeW91IGRvbid0IGtub3cgbXVjaCBUY2wsIGRvbid0IHdvcnJ5LCBpdCdzIGVhc3ksCiAgICAgIGFuZCB0aGVyZSBhcmUgc29tZSBnb29kIHJlc291cmNlcyBhdmFpbGFibGUgb24gdGhlIHdlYiB0aGF0IHdpbGwKICAgICAgZ2V0IHlvdSB1cCB0byBzcGVlZCBxdWlja2x5LiAgR28gdG8gdGhlIAogICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iaGVscC5odG1sI3dlYnNpdGVzIiB0aXRsZT0iV2ViIFNpdGVzIj53ZWIgc2l0ZXM8L2E+IHNlY3Rpb24gYW5kIGhhdmUgYSBsb29rLgogICAgPC9wPjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxhIG5hbWU9ImhlbGxvJTIwd29ybGQiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGWgMS6gSGVsbG8gV29ybGQ8L2I+PC9wPjxkaXYgY2xhc3M9ImV4YW1wbGUtY29udGVudHMiPjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoJQXMgd2l0aCBhbnkgdG9vbCwgaXQncyBhbHdheXMgbmljZSB0byBzZWUgc29tZXRoaW5nIHdvcmssIHNvCglsZXQncyBjcmVhdGUgYSBzbWFsbCAiSGVsbG8gV29ybGQiIHBhZ2UuPC9wPjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoJQXNzdW1pbmcgeW91IGhhdmUgQXBhY2hlIGNvbmZpZ3VyZWQgY29ycmVjdGx5LCBjcmVhdGUgYSBmaWxlCgljYWxsZWQgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5oZWxsby5ydnQ8L2NvZGU+IHdoZXJlIEFwYWNoZSBjYW4gZmluZAoJaXQsIHdpdGggdGhlIGZvbGxvd2luZyBjb250ZW50OgogICAgICA8L3A+PHByZSBzdHlsZT0iYmFja2dyb3VuZDojY2NjOyBtYXJnaW46IDJleDsgbWFyZ2luLXJpZ2h0OiAxMCU7ICAgICAgIHBhZGRpbmc6IDFleDsgYm9yZGVyOiBkYXNoZWQgYmxhY2sgMXB4IDsgd2hpdGUtc3BhY2U6IHByZTsgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOyBmb250LXNpemU6IDkwJTsiIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Jmx0Oz8KcHV0cyAiSGVsbG8gV29ybGQiCj8mZ3Q7CjwvcHJlPjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoJSWYgeW91IHRoZW4gYWNjZXNzIGl0IHdpdGggeW91ciBicm93c2VyLCB5b3Ugc2hvdWxkIHNlZSBhCglibGFuayBwYWdlIHdpdGggdGhlIHRleHQgIkhlbGxvIFdvcmxkIiAod2l0aG91dCB0aGUgcXVvdGVzKSBvbiBpdC4KICAgICAgPC9wPjwvZGl2PjwvZGl2PjxiciBjbGFzcz0iZXhhbXBsZS1icmVhayI+PGRpdiBjbGFzcz0iZXhhbXBsZSI+PGEgbmFtZT0iaWRwNjcwMzQ3MiI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZaAyLqBHZW5lcmF0ZSBhIFRhYmxlPC9iPjwvcD48ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj48cCBzdHlsZT0id2lkdGg6OTAlIj4KCSAgICBJbiBhbm90aGVyIHNpbXBsZSBleGFtcGxlLCB3ZSBkeW5hbWljYWxseSBnZW5lcmF0ZSBhIHRhYmxlOgoJICA8L3A+PHByZSBzdHlsZT0iYmFja2dyb3VuZDojY2NjOyBtYXJnaW46IDJleDsgbWFyZ2luLXJpZ2h0OiAxMCU7ICAgICAgIHBhZGRpbmc6IDFleDsgYm9yZGVyOiBkYXNoZWQgYmxhY2sgMXB4IDsgd2hpdGUtc3BhY2U6IHByZTsgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOyBmb250LXNpemU6IDkwJTsiIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Jmx0Oz8gcHV0cyAiJmx0O3RhYmxlJmd0O1xuIgpmb3Ige3NldCBpIDF9IHsgJGkgJmx0Oz0gOCB9IHtpbmNyIGl9IHsKICAgIHB1dHMgIiZsdDt0ciZndDtcbiIKICAgIGZvciB7c2V0IGogMX0geyRqICZsdDs9IDh9IHtpbmNyIGp9IHsKICAgICAgICBzZXQgbnVtIFsgZXhwciAkaSAqICRqICogNCAtIDFdCiAgICAgICAgcHV0cyBbIGZvcm1hdCAiJmx0O3RkIGJnY29sb3I9XCIlMDJ4JTAyeCUwMnhcIiAmZ3Q7ICRudW0gJG51bSAkbnVtICZsdDsvdGQmZ3Q7XG4iIFwKCQkgICAkbnVtICRudW0gJG51bSBdCiAgICB9CiAgICBwdXRzICImbHQ7L3RyJmd0O1xuIgp9CnB1dHMgIiZsdDsvdGFibGUmZ3Q7XG4iID8mZ3Q7CjwvcHJlPjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoJICAgIElmIHlvdSByZWFkIHRoZSBjb2RlLCB5b3UgY2FuIHNlZSB0aGF0IHRoaXMgaXMgcHVyZSBUY2wuICBXZQoJICAgIGNvdWxkIHRha2UgdGhlIHNhbWUgY29kZSwgcnVuIGl0IG91dHNpZGUgb2YgUml2ZXQsIGFuZCBpdAoJICAgIHdvdWxkIGdlbmVyYXRlIHRoZSBzYW1lIEhUTUwhCgkgIDwvcD48cCBzdHlsZT0id2lkdGg6OTAlIj4KCSAgICBUaGUgcmVzdWx0IHNob3VsZCBsb29rIHNvbWV0aGluZyBsaWtlIHRoaXM6CgkgIDwvcD48ZGl2PjxpbWcgc3JjPSJpbWFnZXMvdGFibGUucG5nIj48L2Rpdj48L2Rpdj48L2Rpdj48YnIgY2xhc3M9ImV4YW1wbGUtYnJlYWsiPjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxhIG5hbWU9InZhcmlhYmxlX2FjY2VzcyI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZaAzLqBWYXJpYWJsZSBBY2Nlc3M8L2I+PC9wPjxkaXYgY2xhc3M9ImV4YW1wbGUtY29udGVudHMiPjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoJSGVyZSwgd2UgZGVtb25zdHJhdGUgaG93IHRvIGFjY2VzcyB2YXJpYWJsZXMgc2V0IGJ5IEdFVCBvcgoJUE9TVCBvcGVyYXRpb25zLgogICAgICA8L3A+PHAgc3R5bGU9IndpZHRoOjkwJSI+CglHaXZlbiBhbiBIVE1MIGZvcm0gbGlrZSB0aGUgZm9sbG93aW5nOgogICAgICA8L3A+PHByZSBzdHlsZT0iYmFja2dyb3VuZDojY2NjOyBtYXJnaW46IDJleDsgbWFyZ2luLXJpZ2h0OiAxMCU7ICAgICAgIHBhZGRpbmc6IDFleDsgYm9yZGVyOiBkYXNoZWQgYmxhY2sgMXB4IDsgd2hpdGUtc3BhY2U6IHByZTsgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOyBmb250LXNpemU6IDkwJTsiIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAgICAmbHQ7Zm9ybSBhY3Rpb249InZhcnMucnZ0IiZndDsKICAgICAgJmx0O3RhYmxlJmd0OwoJJmx0O3Rib2R5Jmd0OwoJICAmbHQ7dHImZ3Q7CgkgICAgJmx0O3RkJmd0OyZsdDtiJmd0O1RpdGxlOiZsdDsvYiZndDsmbHQ7L3RkJmd0OwoJICAgICZsdDt0ZCZndDsmbHQ7aW5wdXQgbmFtZT0idGl0bGUiJmd0OyZsdDsvdGQmZ3Q7CgkgICZsdDsvdHImZ3Q7CgkgICZsdDt0ciZndDsKCSAgICAmbHQ7dGQmZ3Q7Jmx0O2ImZ3Q7U2FsYXJ5OiZsdDsvYiZndDsmbHQ7L3RkJmd0OwoJICAgICZsdDt0ZCZndDsmbHQ7aW5wdXQgbmFtZT0ic2FsYXJ5IiZndDsmbHQ7L3RkJmd0OwoJICAmbHQ7L3RyJmd0OwoJICAmbHQ7dHImZ3Q7CgkgICAgJmx0O3RkJmd0OyZsdDtiJmd0O0Jvc3M6Jmx0Oy9iJmd0OyZsdDsvdGQmZ3Q7CgkgICAgJmx0O3RkJmd0OyZsdDtpbnB1dCBuYW1lPSJib3NzIiZndDsmbHQ7L3RkJmd0OyZsdDsvdHImZ3Q7CgkgICZsdDt0ciZndDsKCSAgICAmbHQ7dGQmZ3Q7Jmx0O2ImZ3Q7U2tpbGxzOiZsdDsvYiZndDsmbHQ7L3RkJmd0OwoJICAgICZsdDt0ZCZndDsKCSAgICAgICZsdDtzZWxlY3QgbmFtZT0ic2tpbGxzIiBtdWx0aXBsZT0ibXVsdGlwbGUiJmd0OwoJCSZsdDtvcHRpb24mZ3Q7YyZsdDsvb3B0aW9uJmd0OwoJCSZsdDtvcHRpb24mZ3Q7amF2YSZsdDsvb3B0aW9uJmd0OwoJCSZsdDtvcHRpb24mZ3Q7VGNsJmx0Oy9vcHRpb24mZ3Q7CgkJJmx0O29wdGlvbiZndDtQZXJsJmx0Oy9vcHRpb24mZ3Q7CgkgICAgICAmbHQ7L3NlbGVjdCZndDsKCSAgICAmbHQ7L3RkJmd0OwoJICAmbHQ7L3RyJmd0OwoJICAmbHQ7dHImZ3Q7CgkgICAgJmx0O3RkJmd0OyZsdDtpbnB1dCB0eXBlPSJzdWJtaXQiJmd0OyZsdDsvdGQmZ3Q7CgkgICZsdDsvdHImZ3Q7CgkmbHQ7L3Rib2R5Jmd0OwogICAgICAmbHQ7L3RhYmxlJmd0OwogICAgJmx0Oy9mb3JtJmd0Owo8L3ByZT48cCBzdHlsZT0id2lkdGg6OTAlIj4KCVdlIGNhbiB1c2UgdGhpcyBSaXZldCBzY3JpcHQgdG8gZ2V0IHRoZSB2YXJpYWJsZSB2YWx1ZXM6CiAgICAgIDwvcD48cHJlIHN0eWxlPSJiYWNrZ3JvdW5kOiNjY2M7IG1hcmdpbjogMmV4OyBtYXJnaW4tcmlnaHQ6IDEwJTsgICAgICAgcGFkZGluZzogMWV4OyBib3JkZXI6IGRhc2hlZCBibGFjayAxcHggOyB3aGl0ZS1zcGFjZTogcHJlOyAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IGZvbnQtc2l6ZTogOTAlOyIgY2xhc3M9InByb2dyYW1saXN0aW5nIj4mbHQ7PwpzZXQgZXJybGlzdCB7fQppZiB7IFt2YXIgZXhpc3RzIHRpdGxlXSB9IHsKICAgIHNldCB0aXRsZSBbdmFyIGdldCB0aXRsZV0KfSBlbHNlIHsKICAgIHNldCBlcnJsaXN0ICJZb3UgbmVlZCB0byBlbnRlciBhIHRpdGxlIgp9CgppZiB7IFt2YXIgZXhpc3RzIHNhbGFyeV0gfSB7CiAgICBzZXQgc2FsYXJ5IFt2YXIgZ2V0IHNhbGFyeV0KICAgIGlmIHsgISBbc3RyaW5nIGlzIGRpZ2l0ICRzYWxhcnldIH0gewoJbGFwcGVuZCBlcnJsaXN0ICJTYWxhcnkgbXVzdCBiZSBhIG51bWJlciIKICAgIH0KfSBlbHNlIHsKICAgIGxhcHBlbmQgZXJybGlzdCAiWW91IG5lZWQgdG8gZW50ZXIgYSBzYWxhcnkiCn0KCmlmIHsgW3ZhciBleGlzdHMgYm9zc10gfSB7CiAgICBzZXQgYm9zcyBbdmFyIGdldCBib3NzXQp9IGVsc2UgewogICAgc2V0IGJvc3MgIk1yLiBCdXJucyIKfQoKaWYgeyBbdmFyIGV4aXN0cyBza2lsbHNdIH0gewogICAgc2V0IHNraWxscyBbdmFyIGxpc3Qgc2tpbGxzXQp9IGVsc2UgewogICAgbGFwcGVuZCBlcnJsaXN0ICJZb3UgbmVlZCB0byBlbnRlciBzb21lIHNraWxscyIKfQoKaWYgeyBbbGxlbmd0aCAkZXJybGlzdF0gIT0gMCB9IHsKICAgIGZvcmVhY2ggZXJyICRlcnJsaXN0IHsKCXB1dHMgIiZsdDtiJmd0OyAkZXJyICZsdDsvYiZndDsiCiAgICB9Cn0gZWxzZSB7CiAgICBwdXRzICJUaGFua3MgZm9yIHRoZSBpbmZvcm1hdGlvbiEiCiAgICA/Jmd0OwogICAgJmx0O3RhYmxlJmd0OwogICAgICAmbHQ7dGJvZHkmZ3Q7CgkmbHQ7dHImZ3Q7CgkgICZsdDt0ZCZndDsmbHQ7YiZndDtUaXRsZTombHQ7L2ImZ3Q7Jmx0Oy90ZCZndDsKCSAgJmx0O3RkJmd0OyZsdDs/IHB1dHMgJHRpdGxlID8mZ3Q7Jmx0Oy90ZCZndDsKCSZsdDsvdHImZ3Q7CgkmbHQ7dHImZ3Q7CgkgICZsdDt0ZCZndDsmbHQ7YiZndDtCb3NzOiZsdDsvYiZndDsmbHQ7L3RkJmd0OwoJICAmbHQ7dGQmZ3Q7Jmx0Oz8gcHV0cyAkYm9zcyA/Jmd0OyZsdDsvdGQmZ3Q7CgkmbHQ7L3RyJmd0OwoJJmx0O3RyJmd0OwoJICAmbHQ7dGQmZ3Q7Jmx0O2ImZ3Q7U2FsYXJ5OiZsdDsvYiZndDsmbHQ7L3RkJmd0OwoJICAmbHQ7dGQmZ3Q7Jmx0Oz8gcHV0cyAkc2FsYXJ5ID8mZ3Q7Jmx0Oy90ZCZndDsKCSZsdDsvdHImZ3Q7CgkmbHQ7dHImZ3Q7CgkgICZsdDt0ZCZndDsmbHQ7YiZndDtTa2lsbHM6Jmx0Oy9iJmd0OyZsdDsvdGQmZ3Q7CgkgICZsdDt0ZCZndDsmbHQ7PyBwdXRzICRza2lsbHMgPyZndDsmbHQ7L3RkJmd0OwoJJmx0Oy90ciZndDsKICAgICAgJmx0Oy90Ym9keSZndDsKICAgICZsdDsvdGFibGUmZ3Q7CiAgICAmbHQ7Pwp9Cj8mZ3Q7CjwvcHJlPjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoJVGhlIGZpcnN0IHN0YXRlbWVudCBjaGVja3MgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCgk8Y29kZSBjbGFzcz0idmFybmFtZSI+Ym9zczwvY29kZT4gdmFyaWFibGUgaGFzIGJlZW4gcGFzc2VkIHRvIHRoZQoJc2NyaXB0LCBhbmQgdGhlbiBkb2VzIHNvbWV0aGluZyB3aXRoIHRoYXQgaW5mb3JtYXRpb24uICBJZgoJaXQncyBub3QgcHJlc2VudCwgYW4gZXJyb3IgaXMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgZXJyb3JzLgogICAgICA8L3A+PHAgc3R5bGU9IndpZHRoOjkwJSI+CglJbiB0aGUgc2Vjb25kIGJsb2NrIG9mIGNvZGUsIHRoZSB2YXJpYWJsZQoJPGNvZGUgY2xhc3M9InZhcm5hbWUiPnNhbGFyeTwvY29kZT4gaXMgZmV0Y2hlZCwgd2l0aCBvbmUgbW9yZSBlcnJvcgoJY2hlY2sgLSBiZWNhdXNlIGl0J3MgYSBudW1iZXIsIGl0IG5lZWRzIHRvIGJlIGNvbXBvc2VkIG9mCglkaWdpdHMuCiAgICAgIDwvcD48cCBzdHlsZT0id2lkdGg6OTAlIj4KCVRoZSA8Y29kZSBjbGFzcz0idmFybmFtZSI+Ym9zczwvY29kZT4gdmFyaWFibGUgaXNuJ3QgcmVxdWlyZWQgdG8gaGF2ZQoJYmVlbiBzZW50IC0gd2Ugc2V0IGl0IHRvICJNci4gQnVybnMiIGlmIGl0IGlzbid0IGFtb25nIHRoZQoJaW5mb3JtYXRpb24gd2UgcmVjZWl2ZWQuCiAgICAgIDwvcD48cCBzdHlsZT0id2lkdGg6OTAlIj4KCVRoZSBsYXN0IGJpdCBvZiB2YXJpYWJsZSBoYW5kaW5nIGNvZGUgaXMgYSBiaXQgdHJpY2tpZXIuCglCZWNhdXNlIDxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5za2lsbHM8L2NvZGU+IGlzIGEgbGlzdGJveCwgYW5kIGNhbgoJcG90ZW50aWFsbHkgaGF2ZSBtdWx0aXBsZSB2YWx1ZXMsIHdlIG9wdCB0byByZWNlaXZlIHRoZW0gYXMgYQoJbGlzdCwgc28gdGhhdCBhdCBzb21lIHBvaW50LCB3ZSBjb3VsZCBpdGVyYXRlIG92ZXIgdGhlbS4KICAgICAgPC9wPjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoJVGhlIHNjcmlwdCB0aGVuIGNoZWNrcyB0byBtYWtlIHN1cmUgdGhhdAoJPGNvZGUgY2xhc3M9InZhcm5hbWUiPmVycmxpc3Q8L2NvZGU+IGlzIGVtcHR5IGFuZCBvdXRwdXR0aW5nIGEgdGhhbmt5b3UKCW1lc3NhZ2UuICBJZiA8Y29kZSBjbGFzcz0idmFybmFtZSI+ZXJybGlzdDwvY29kZT4gaXMgbm90IGVtcHR5LCB0aGUgbGlzdAoJb2YgZXJyb3JzIGl0IGNvbnRhaW5zIGlzIHByaW50ZWQuCiAgICAgIDwvcD48L2Rpdj48L2Rpdj48YnIgY2xhc3M9ImV4YW1wbGUtYnJlYWsiPjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxhIG5hbWU9ImZpbGVfdXBsb2FkIj48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxloDQuoEZpbGUgVXBsb2FkPC9iPjwvcD48ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj48cCBzdHlsZT0id2lkdGg6OTAlIj4KCVRoZSA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlIj48c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz51cGxvYWQ8L3N0cm9uZz48L3NwYW4+PC9zcGFuPiBjb21tYW5kIGVuZG93cyBSaXZldCB3aXRoIGFuCglpbnRlcmZhY2UgdG8gYWNjZXNzIGZpbGVzIHRyYW5zZmVycmVkIG92ZXIgaHR0cCBhcyBwYXJ0cyBvZiBhCgltdWx0aXBhcnQgZm9ybS4gIFRoZSBmb2xsb3dpbmcgSFRNTCBpbiBvbmUgZmlsZSwgc2F5LAoJPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj51cGxvYWQuaHRtbDwvY29kZT4gY3JlYXRlcyBhIGZvcm0gd2l0aCBhIHRleHQKCWlucHV0IGVudHJ5LiBCeSBjbGlja2luZyB0aGUgZmlsZSBjaG9vc2VyIGJ1dHRvbiB0aGUgZmlsZQoJYnJvd3NlciBzaG93cyB1cCBhbmQgdGhlIHVzZXIgc2VsZWN0cyB0aGUgZmlsZSB0byBiZSB1cGxvYWRlZAoJKHRoZSBmaWxlIHBhdGggd2lsbCBhcHBlYXIgaW4gdGhlIHRleHQgaW5wdXQpLiAgSW4gb3JkZXIgdG8gbWFrZQoJc3VyZSB5b3UncmUgdXBsb2FkaW5nIHRoZSB3aG9sZSBmaWxlIHlvdSBtdXN0IGNvbWJpbmUgdGhlCglhY3Rpb24gb2YgdGhlIGVuY3R5cGUgYW5kIG1ldGhvZCBhdHRyaWJ1dGVzIG9mIHRoZQoJJmx0O2Zvcm0uLi4mZ3Q7IHRhZyBpbiB0aGUgd2F5IHNob3duIGluIHRoZSBleGFtcGxlLiAgRmFpbHVyZQoJdG8gZG8gc28gd291bGQgcmVzdWx0IGluIHRoZSBjbGllbnQgc2VuZGluZyBvbmx5IHRoZSBmaWxlJ3MKCXBhdGgsIHJhdGhlciB0aGFuIHRoZSBhY3R1YWwgY29udGVudHMuCiAgICAgIDwvcD48cHJlIHN0eWxlPSJiYWNrZ3JvdW5kOiNjY2M7IG1hcmdpbjogMmV4OyBtYXJnaW4tcmlnaHQ6IDEwJTsgICAgICAgcGFkZGluZzogMWV4OyBib3JkZXI6IGRhc2hlZCBibGFjayAxcHggOyB3aGl0ZS1zcGFjZTogcHJlOyAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IGZvbnQtc2l6ZTogOTAlOyIgY2xhc3M9InByb2dyYW1saXN0aW5nIj4mbHQ7Zm9ybSBhY3Rpb249ImZvby5ydnQiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCImZ3Q7CiZsdDtpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJNeVVwbG9hZCImZ3Q7Jmx0Oy9pbnB1dCZndDsKJmx0O2lucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlbmQgRmlsZSImZ3Q7Jmx0Oy9pbnB1dCZndDsKJmx0Oy9mb3JtJmd0Owo8L3ByZT48cCBzdHlsZT0id2lkdGg6OTAlIj4KCUluIHRoZSBzY3JpcHQgaW52b2tlZCBieSB0aGUgZm9ybQoJKDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+dXBsb2FkLnJ2dDwvY29kZT4pIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2UiPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnVwbG9hZDwvc3Ryb25nPjwvc3Bhbj48L3NwYW4+CgkgPzxzcGFuIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7IGZvbnQtd2VpZ2h0OiBib2xkOyI+YXJndW1lbnQgLi4uPC9zcGFuPj8gY29tbWFuZHMgY2FuIGJlIHVzZWQgdG8gbWFuaXB1bGF0ZSB0aGUKCXZhcmlvdXMgZmlsZXMgdXBsb2FkZWQuCiAgICAgIDwvcD48cHJlIHN0eWxlPSJiYWNrZ3JvdW5kOiNjY2M7IG1hcmdpbjogMmV4OyBtYXJnaW4tcmlnaHQ6IDEwJTsgICAgICAgcGFkZGluZzogMWV4OyBib3JkZXI6IGRhc2hlZCBibGFjayAxcHggOyB3aGl0ZS1zcGFjZTogcHJlOyAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IGZvbnQtc2l6ZTogOTAlOyIgY2xhc3M9InByb2dyYW1saXN0aW5nIj4mbHQ7Pwp1cGxvYWQgc2F2ZSBNeVVwbG9hZCAvdG1wL3VwbG9hZGZpbGVzL2ZpbGUxCnB1dHMgIlNhdmVkIGZpbGUgW3VwbG9hZCBmaWxlbmFtZSBNeVVwbG9hZF0gXAoJKFt1cGxvYWQgc2l6ZSBNeVVwbG9hZF0gYnl0ZXMpIHRvIHNlcnZlciIKPyZndDs8L3ByZT48cCBzdHlsZT0id2lkdGg6OTAlIj4KCURvbid0IGZvcmdldCB0aGF0IHRoZSBhcGFjaGUgc2VydmVyIG11c3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8KCXRoZSBkaXJlY3Rvcnkgd2hlcmUgZmlsZXMgYXJlIGJlaW5nIGNyZWF0ZWQuICBUaGUgUml2ZXQgQXBhY2hlCglkaXJlY3RpdmVzIGhhdmUgYSBzdWJzdGFudGlhbCBpbXBhY3Qgb24gdGhlIHVwbG9hZCBwcm9jZXNzLAoJeW91IGhhdmUgdG8gY2FyZWZ1bGx5IHJlYWQgdGhlIGRvY3MgaW4gb3JkZXIgdG8gc2V0IHRoZQoJYXBwcm9wcmlhdGUgZGlyZWN0aXZlcyB2YWx1ZXMgdGhhdCB3b3VsZCBtYXRjaCB5b3VyCglyZXF1aXJlbWVudHMuCiAgICAgIDwvcD48cCBzdHlsZT0id2lkdGg6OTAlIj4KCUl0IGlzIGFsc28gaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhhdCBzb21lIAoJPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9zcGFjZSI+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+dXBsb2FkPC9zdHJvbmc+PC9zcGFuPjwvc3Bhbj4gY29tbWFuZHMgYXJlIGVmZmVjdGl2ZSBvbmx5IHdoZW4KCXVzZWQgaW4gYSBtdXR1YWxseSBleGNsdXNpdmUgd2F5LiAgQXBhY2hlIHN0b3JlcyB0aGUgZGF0YSBpbgoJdGVtcG9yYXJ5IGZpbGVzIHdoaWNoIGFyZSByZWFkIGJ5IHRoZSA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlIj48c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz51cGxvYWQgc2F2ZQoJID88c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlOyBmb250LXdlaWdodDogYm9sZDsiPnVwbG9hZCBuYW1lPC9zcGFuPj8gPzxzcGFuIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7IGZvbnQtd2VpZ2h0OiBib2xkOyI+ZmlsZW5hbWU8L3NwYW4+Pzwvc3Ryb25nPjwvc3Bhbj48L3NwYW4+IG9yIGJ5IHRoZQoJPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9zcGFjZSI+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+dXBsb2FkIGRhdGEgID88c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlOyBmb250LXdlaWdodDogYm9sZDsiPnVwbG9hZCBuYW1lPC9zcGFuPj88L3N0cm9uZz48L3NwYW4+PC9zcGFuPgoJY29tbWFuZC4gU3Vic2VxdWVudCBjYWxscyB0byB0aGVzZSAyIGNvbW1hbmRzIHVzaW5nIHRoZSBzYW1lCgkgPzxzcGFuIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7IGZvbnQtd2VpZ2h0OiBib2xkOyI+dXBsb2FkIG5hbWU8L3NwYW4+PyBhcmd1bWVudCB3aWxsIHJldHVybiBubyBkYXRhIG9uIHRoZQoJc2Vjb25kIGNhbGwuICBMaWtld2lzZSA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlIj48c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz51cGxvYWQgY2hhbm5lbCAgPzxzcGFuIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7IGZvbnQtd2VpZ2h0OiBib2xkOyI+dXBsb2FkCgluYW1lPC9zcGFuPj88L3N0cm9uZz48L3NwYW4+PC9zcGFuPiB3aWxsIHJldHVybiBhIFRjbCBmaWxlIGNoYW5uZWwgdGhhdCB5b3UKCWNhbiB1c2UgaW4gcmVndWxhciBUY2wgc2NyaXB0cyBvbmx5IGlmIHlvdSBoYXZlbid0IGFscmVhZHkKCXJlYWQgdGhlIGRhdGEsIGZvciBleGFtcGxlIHdpdGggYSBjYWxsIHRvIHRoZSA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlIj48c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz51cGxvYWQKCWRhdGEgID88c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlOyBmb250LXdlaWdodDogYm9sZDsiPnVwbG9hZCBuYW1lPC9zcGFuPj88L3N0cm9uZz48L3NwYW4+PC9zcGFuPiBjb21tYW5kLgogICAgICA8L3A+PC9kaXY+PC9kaXY+PGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj48ZGl2IGNsYXNzPSJleGFtcGxlIj48YSBuYW1lPSJmaWxlX2Rvd25sb2FkIj48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxloDUuoEZpbGUgRG93bmxvYWQ8L2I+PC9wPjxkaXYgY2xhc3M9ImV4YW1wbGUtY29udGVudHMiPjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoJSW4gZ2VuZXJhbCBzZXR0aW5nIHVwIGEgZGF0YSBmaWxlIGZvciBiZWluZyBzZW50IG92ZXIgaHR0cCBpcyAKCWFzIGVhc3kgYXMgZGV0ZXJtaW5pbmcgdGhlIGZpbGUncyBVUkkgYW5kIGxldHRpbmcgQXBhY2hlJ3MKCWRvIGFsbCB0aGF0IGlzIG5lZWRlZC4gSWYgdGhpcyBhcHByb2FjaCBmaXRzIHlvdXIgZGVzaWduIGFsbCAKCXlvdSBoYXZlIHRvIGRvIGlzIHRvIGtlZXAgdGhlIGRvd25sb2FkYWJsZSBmaWxlcyBzb21ld2hlcmUgCgl3aXRoaW4gQXBhY2hlJ3MgRG9jdW1lbnRSb290IChvciBpbiBhbnkgb2YgdGhlIGRpcmVjdG9yaWVzIAoJQXBhY2hlIGhhcyByaWdodCB0byBhY2Nlc3MpLgogICAgICA8L3A+PHAgc3R5bGU9IndpZHRoOjkwJSI+CglXaGVuIGEgY2xpZW50IHNlbmRzIGEgcmVxdWVzdCBmb3IgYSBmaWxlLCBBcGFjaGUgdGFrZXMKCWNhcmUgb2YgZGV0ZXJtaW5pbmcgdGhlIGZpbGV0eXBlLCBzZW5kcyBhcHByb3ByaWF0ZSBoZWFkZXJzIHRvCgl0aGUgY2xpZW50IGFuZCB0aGVuIHRoZSBmaWxlIGNvbnRlbnQuIFRoZSBjbGllbnQgaXMgcmVzcG9uc2libGUKCWZvciBkZWNpZGluZyBob3cgdG8gaGFuZGxlIHRoZSBkYXRhIGFjY29yZGluZ2x5IHRvIHRoZSAKCSJjb250ZW50LXR5cGUiIGhlYWRlcnMgYW5kIGl0cyBpbnRlcm5hbCBkZXNpZ24uIEZvciBleGFtcGxlCgl3aGVuIGJyb3dzZXJzIGdpdmUgdXAgdHJ5aW5nIHRvIGRpc3BsYXkgYSBjZXJ0YWluICJjb250ZW50LXR5cGUiCgl0aGV5IGRpc3BsYXkgYSBkb3dubG9hZCBkaWFsb2cgYm94IGFza2luZyBmb3IgZGlyZWN0aW9ucyBmcm9tCgl0aGUgdXNlci4gCiAgICAgIDwvcD48cCBzdHlsZT0id2lkdGg6OTAlIj4KCVJpdmV0IGNhbiBoZWxwIGlmIHlvdSBoYXZlIG1vcmUgc29maXN0aWNhdGVkIG5lZWRzLiAgRm9yCglpbnN0YW5jZSB5b3UgbWF5IGJlIGRldmVsb3BpbmcgYW4gYXBwbGljYXRpb24gdGhhdCB1c2VzCgl3ZWJwYWdlcyB0byBjb2xsZWN0IGlucHV0IGRhdGEuIFRoaXMgaW5mb3JtYXRpb24gbWlnaHQgYmUKCXBhc3NlZCBvbiB0byBzY3JpcHRzIG9yIHByb2dyYW1zIGZvciBwcm9jZXNzaW5nLiAKCUluIHRoaXMgY2FzZSBhIHJlYWwgZmlsZSByZXByZXNlbnRpbmcgdGhlCglkYXRhIGRvZXNuJ3QgZXhpc3QgYW5kIHRoZSBjb250ZW50IGlzIGdlbmVyYXRlZCBvbiBkZW1hbmQgCglieSB0aGUgc2VydmVyLiAKCUluIG90aGVyIGNpcmN1bXN0YW5jZXMgeW91IG1heSBuZWVkIHRvIGR5bmFtaWNhbGx5IGluaGliaXQgCgl0aGUgZG93bmxvYWQgb2Ygc3BlY2lmaWMgZmlsZXMgYW5kIGhpZGUgdGhlbSBhd2F5LCAKCVlvdXIgc2NyaXB0cyBtYXkgZXhwdW5nZSBmcm9tIHRoZSBwYWdlcwoJZXZlcnkgbGluayB0byB0aGVzZSBmaWxlcyAoeW91ciBwYWdlcyBhcmUgZHluYW1pYywgYXJlbid0Cgl0aGV5PykgYW5kIG1vdmUgdGhlbSBvdXQgb2Ygd2F5LCBidXQgaXQgbG9va3MgbGlrZSBhCgljdW1iZXJzb21lIHNvbHV0aW9uLgogICAgICA8L3A+PHAgc3R5bGU9IndpZHRoOjkwJSI+CglQdXR0aW5nIFRjbCBhbmQgUml2ZXQgaW4gY2hhcmdlIG9mIHRoZSB3aG9sZSBkb3dubG9hZAoJbWVjaGFuaXNtIGhlbHBzIGluIGJ1aWxkaW5nIGNsZWFuZXIgYW5kIHNhZmVyIGFwcHJvYWNoZXMgdG8KCXRoZSBkb3dubG9hZCBwcm9ibGVtLgogICAgICA8L3A+PHAgc3R5bGU9IndpZHRoOjkwJSI+CglJbiB0aGlzIGV4YW1wbGUgYSBwcm9jZWR1cmUgY2hlY2tzIGZvciB0aGUgZXhpc3RlbmNlIG9mIGEKCXBhcmFtZXRlciBwYXNzZWQgaW4gYnkgdGhlIGJyb3dzZXIuIFRoZSBwYXJhbWV0ZXIgaXMgdGhlIG5hbWUKCSh3aXRob3V0IGV4dGVuc2lvbikgb2YgYSBwZGYgZmlsZS4gIAoJUGRmIGZpbGVzIGFyZSBzdG9yZWQgaW4gYSBkaXJlY3Rvcnkgd2hvc2UgcGF0aCBpcwoJaW4gdGhlIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2UiPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnBkZl9yZXBvc2l0b3J5PC9zdHJvbmc+PC9zcGFuPjwvc3Bhbj4gdmFyaWFibGUuCiAgICAgIDwvcD48cCBzdHlsZT0id2lkdGg6OTAlIj4KCVRoaXMgY29kZSBpcyByZXBvcnRlZCBhcyBhbiBleGFtcGxlIG9mIGhvdyB0byBjb250cm9sIAoJdGhlIHByb3RvY29sIHVzaW5nIHRoZSA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlIj48c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5oZWFkZXJzPC9zdHJvbmc+PC9zcGFuPjwvc3Bhbj4gY29tbWFuZC4KICAgICAgPC9wPjxwcmUgc3R5bGU9ImJhY2tncm91bmQ6I2NjYzsgbWFyZ2luOiAyZXg7IG1hcmdpbi1yaWdodDogMTAlOyAgICAgICBwYWRkaW5nOiAxZXg7IGJvcmRlcjogZGFzaGVkIGJsYWNrIDFweCA7IHdoaXRlLXNwYWNlOiBwcmU7ICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgZm9udC1zaXplOiA5MCU7IiBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiMgQ29kZSBleGFtcGxlIGZvciB0aGUgdHJhbnNtaXNzaW9uIG9mIGEgcGRmIGZpbGUuIAoKaWYge1t2YXIgZXhpc3RzIHBkZm5hbWVdfSB7CiAgICBzZXQgcGRmbmFtZSBbdmFyIGdldCBwZGZuYW1lXQoKIyBsZXQncyBidWlsZCB0aGUgZnVsbCBwYXRoIHRvIHRoZSBwZGYgZmlsZS4gVGhlICdwZGZfcmVwb3NpdG9yeScKIyBkaXJlY3RvcnkgbXVzdCBiZSByZWFkYWJsZSBieSB0aGUgYXBhY2hlIGNoaWxkcmVuCgogICAgc2V0IHBkZl9mdWxsX3BhdGggW2ZpbGUgam9pbiAkcGRmX3JlcG9zaXRvcnkgJHtwZGZuYW1lfS5wZGZdCiAgICBpZiB7W2ZpbGUgZXhpc3RzICRwZGZfZnVsbF9wYXRoXX0gewoKIyBCZWZvcmUgdGhlIGZpbGUgaXMgc2VudCB3ZSBpbmZvcm0gdGhlIGNsaWVudCBhYm91dCB0aGUgZmlsZSB0eXBlIGFuZAojIGZpbGUgbmFtZS4gVGhlIGNsaWVudCBjYW4gYmUgcHJvcG9zZWQgYSBmaWxlbmFtZSBkaWZmZXJlbnQgZnJvbSB0aGUKIyBvcmlnaW5hbCBvbmUuIEluIHRoaXMgY2FzZSwgdGhpcyBpcyB0aGUgcG9pbnQgd2hlcmUgYSBuZXcgZmlsZSBuYW1lCiMgbXVzdCBiZSBnZW5lcmF0ZWQuCgoJaGVhZGVycyB0eXBlCQkJImFwcGxpY2F0aW9uL3BkZiIKCWhlYWRlcnMgYWRkIENvbnRlbnQtRGlzcG9zaXRpb24gImF0dGFjaG1lbnQ7IGZpbGVuYW1lPSR7cGRmbmFtZX0ucGRmIgoJaGVhZGVycyBhZGQgQ29udGVudC1EZXNjcmlwdGlvbiAiUERGIERvY3VtZW50IgoKIyBUaGUgcGRmIGlzIHJlYWQgYW5kIHN0b3JlZCBpbiBhIFRjbCB2YXJpYWJsZS4gVGhlIGZpbGUgaGFuZGxlIGlzCiMgY29uZmlndXJlZCBmb3IgYSBiaW5hcnkgcmVhZDogd2UgYXJlIGp1c3Qgc2hpcHBpbmcgcmF3IGRhdGEgdG8gYQojIGNsaWVudC4gVGhlIGZvbGxvd2luZyA0IGxpbmVzIG9mIGNvZGUgY2FuIGJlIHJlcGxhY2VkIGJ5IGFueSBjb2RlCiMgdGhhdCBpcyBhYmxlIHRvIHJldHJpZXZlIHRoZSBkYXRhIHRvIGJlIHNlbnQgZnJvbSBhbnkgZGF0YSBzb3VyY2UKIyAoZS5nLiBkYXRhYmFzZSwgZXh0ZXJuYWwgcHJvZ3JhbSwgb3RoZXIgVGNsIGNvZGUpCgoJc2V0IHBhcGVyCSAgICBbb3BlbiAkcGRmX2Z1bGxfcGF0aCByXQoJZmNvbmZpZ3VyZQkgICAgJHBhcGVyIC10cmFuc2xhdGlvbiBiaW5hcnkKCXNldCBwZGYJCSAgICBbcmVhZCAkcGFwZXJdCgljbG9zZSAkcGFwZXIKCiMgTm93IHdlIGdvdCB0aGUgZGF0YTogbGV0J3MgdGVsbCB0aGUgY2xpZW50IGhvdyBtYW55IGJ5dGVzIHdlIGFyZQojIGFib3V0IHRvIHNlbmQgKHVzZWZ1bCBmb3IgdGhlIGRvd25sb2FkIHByb2dyZXNzIGJhciBvZiBhIGRpYWxvZyBib3gpCgoJaGVhZGVycyBhZGQgQ29udGVudC1MZW5ndGggIFtzdHJpbmcgbGVuZ3RoICRwZGZdCgojIExldCdzIHNlbmQgdGhlIGFjdHVhbCBmaWxlIGNvbnRlbnQKCglwdXRzICRwZGYKICAgIH0gZWxzZSB7Cglzb3VyY2UgcGRmX25vdF9mb3VuZF9lcnJvci5ydnQKICAgIH0KfSBlbHNlIHsKICAgIHNvdXJjZSBwYXJhbWV0ZXJfbm90X2RlZmluZWRfZXJyb3IucnZ0Cn0KPC9wcmU+PHAgc3R5bGU9IndpZHRoOjkwJSI+CglCZWZvcmUgdGhlIHBkZiBpcyBzZW50IHRoZSBwcm9jZWR1cmUgc2V0cyB0aGUKCTxjb2RlIGNsYXNzPSJjb25zdGFudCI+Q29udGVudC1UeXBlPC9jb2RlPiwgCgk8Y29kZSBjbGFzcz0iY29uc3RhbnQiPkNvbnRlbnQtRGlzcG9zaXRpb248L2NvZGU+LAoJPGNvZGUgY2xhc3M9ImNvbnN0YW50Ij5Db250ZW50LURlc2NyaXB0aW9uPC9jb2RlPiBhbmQKCTxjb2RlIGNsYXNzPSJjb25zdGFudCI+Q29udGVudC1MZW5ndGg8L2NvZGU+IGhlYWRlcnMgdG8gaW5mb3JtCgl0aGUgY2xpZW50IGFib3V0IHRoZSBmaWxlIHR5cGUsIG5hbWUgYW5kIHNpemUuIE5vdGljZSB0aGF0IGluCglvcmRlciB0byBzZXQgdGhlIDxjb2RlIGNsYXNzPSJjb25zdGFudCI+Q29udGVudC1UeXBlPC9jb2RlPiBoZWFkZXIgUml2ZXQgCgl1c2VzIGEgc3BlY2lhbGllemVkIGZvcm0gb2YgdGhlIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2UiPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPmhlYWRlcnM8L3N0cm9uZz48L3NwYW4+PC9zcGFuPiAKCWNvbW1hbmQuIEhlYWRlcnMgbXVzdCBiZSBzZW50IGJlZm9yZSBkYXRhIGdldHMgc2VudCBkb3duIHRoZSAKCW91dHB1dCBjaGFubmVsLiBNZXNzaW5nIHdpdGggdGhpcyBwcmVzY3JpcHRpb24gY2F1c2VzIGFuIGVycm9yIAoJdG8gYmUgcmFpc2VkIChpbiBmYWN0IHRoZSBwcm90b2NvbCBpdHNlbGYgaXMgYmVlbiB2aW9sYXRlZCkKICAgICAgPC9wPjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoJTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWVhbmluZyBvZiB0aGUgbWltZSBoZWFkZXJzIGluIHRoZQoJaHR0cCBjb250ZXh0IGNhbiBiZSBmb3VuZCBhdCAKCTxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi5odG1sIiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYuaHRtbDwvYT4KICAgICAgPC9wPjwvZGl2PjwvZGl2PjxiciBjbGFzcz0iZXhhbXBsZS1icmVhayI+PGRpdiBjbGFzcz0iZXhhbXBsZSI+PGEgbmFtZT0iYWpheF94bWxfbWVzc2FnaW5nIj48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxloDYuoFhNTCBNZXNzYWdlcyBhbmQgQWpheDwvYj48L3A+PGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+PHAgc3R5bGU9IndpZHRoOjkwJSI+CglUaGUgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9zcGFjZSI+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+aGVhZGVyczwvc3Ryb25nPjwvc3Bhbj48L3NwYW4+IGNvbW1hbmQgaXMgY3J1Y2lhbCBmb3IgZ2VuZXJhdGluZyAKCVhNTCBtZXNzYWdlcyB0aGF0IGhhdmUgdG8gYmUgdW5kZXJzdG9vZCBieSBKYXZhU2NyaXB0IGNvZGUgdXNlZCAKCWluIEFqYXggYXBwbGljYXRpb25zLiAKICAgICAgPC9wPjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoJICAgIEFqYXggaXMgYSB3ZWIgcHJvZ3JhbW1pbmcgdGVjaG5pcXVlIHRoYXQgaGVhdmlseSByZWxpZXMgb24gdGhlIGFiaWx0eSBvZiBhIHdlYiBicm93c2VyIHRvIHJ1biBpbiBiYWNrcm91bmQKCSAgICBKYXZhU2NyaXB0IGZ1bmN0aW9ucy4gSmF2YVNjcmlwdCBmdW5jdGlvbnMgY2FuIGJlIHJ1biBhcyBjYWxsYmFja3Mgb2YgZXZlbnRzIGdlbmVyYXRlZCBieSBhIHVzZXIgaW50ZXJhY3Rpb24gCgkgICAgYnV0IHRoZXkgY2FuIGFsc28gcmVhY3QgdG8gb3RoZXIgSS9PIGV2ZW50cywgZm9yIGV4YW1wbGUgbmV0d29yayBldmVudHMuIAoJICAgIE1vZGVybiBicm93c2VycyBlbmRvdyBKYXZhU2NyaXB0IHdpdGggdGhlIGFiaWxpdHkgdG8gYnVpbGQgaHR0cCBHRVQvUE9TVCByZXF1ZXN0cyB0byBiZSBzZW50IHRvIGEgcmVtb3RlCgkgICAgd2Vic2VydmVyLiBHZW5lcmFsbHkgdGhlc2UgcmVxdWVzdHMgcmVmZXIgdG8gc2NyaXB0cyAoZS5nLiBUY2wgc2NyaXB0cyBydW4gYnkgUml2ZXQpIHdoaWNoIGluaGVyaXQgYXMgCgkgICAgdmFyaWFibGVzIHRoZSBhcmd1bWVudHMgZW5jb2RlZCBpbiB0aGUgcmVxdWVzdC4gCgkgICAgVGhlIG91dHB1dCBwcm9kdWNlZCBieSB0aGVzZSBzY3JpcHRzIGlzIHNlbnQgYmFjayB0byB0aGUgYnJvd3NlciB3aGVyZSBjYWxsYmFja3MgZnVuY3Rpb25zIGV4dHJhY3QgCgkgICAgaW5mb3JtYXRpb24gYW5kIGhhbmQgaXQgZG93biB0byBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBtYW5pcHVsYXRlIGEgcGFnZSdzIERPTS4KCSAgICBUaGVyZWZvcmUgdGhyb3VnaCBBamF4IGJlY29tZXMgcG9zc2libGUgdG8gYnVpbGQgd2ViIGFwcGxpY2F0aW9ucyB0aGF0IGFyZSBtb3JlIHJlc3BvbnNpdmUgYW5kIGZsZXhpYmxlOiAKCSAgICBpbnN0ZWFkIG9mIGdvaW5nIHRocm91Z2ggdGhlIGN5Y2xlIG9mIHJlcXVlc3QtZ2VuZXJhdGlvbi10cmFuc2Zlci1kaXNwbGF5IAoJICAgIG9mIGEgd2hvbGUgcGFnZSwgQWpheCBzY3JpcHRzIHJlcXVlc3QgZnJvbSBhIHdlYnNlcnZlciBvbmx5IHRoZSBlc3NlbnRpYWwgZGF0YSB0byBiZSBkaXNwbGF5ZWQuCgkgICAgQWpheCBlbXBoYXNpemVzIHRoZSByZXF1aXJlbWVudCBvZiBzZXBhcmF0aW9uIGJldHdlZW4gZGF0YSBhbmQgdXNlciBpbnRlcmZhY2UsIHNhdmVzIAoJICAgIHRoZSBzZXJ2ZXIgZnJvbSBzZW5kaW5nIG92ZXIgdGhlIHNhbWUgaHRtbCBjb2RlIGFuZCBncmFwaGljcyBpZiBvbmx5IGEgZnJhY3Rpb24gb2YgYSBwYWdlIGhhcyB0byBiZSAKCSAgICB1cGRhdGVkLCBhbGxvd3MgdGhlIHByb2dyYW1tZXIgdG8gZGVzaWduIGZsZXhpYmxlIHNvbHV0aW9ucyBmb3IgY29tcGxleCBmb3JtcyBhbmQgbWFrZXMgcG9zc2libGUKCSAgICB0byBmaW5kIG5ldyBpbm5vdmF0aXZlIGFwcHJvYWNoZXMgdG8gc2ltcGxlIHByb2JsZW1zIChlLmcuIEdvb2dsZSB0aXBzIHRoYXQgc2hvdyB1cCBhcyB5b3UgdHlwZSBpbgoJICAgIGEgcXVlcnkpLiBBIGRvd25zaWRlIG9mIHRoaXMgYXBwcm9hY2ggaXMgdGhlIGxhcmdlIG51bWJlciBvZiBjb21wbGV4aXRpZXMsIHN1YnRsZXRpZXMgYW5kIGluY29tcGF0aWJpbGl0aWVzIAoJICAgIHRoYXQgc3RpbGwgZXhpc3QgaW4gdGhlIHdheSBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgcG9wdWxhciBicm93c2VycyBoYW5kbGUgdGhlIERPTSBlbGVtZW50cyBvZiBhIHBhZ2UuCiAgICAgIDwvcD48cCBzdHlsZT0id2lkdGg6OTAlIj4KCSAgICBKYXZhU2NyaXB0IGNhbiBoYW5kbGUgdGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiBjbGllbnQgYW5kIHNlcnZlciB0aHJvdWdoIGFuIGluc3RhbmNlIG9mIGEgCgkgICAgc3BlY2lhbGl6ZWQgb2JqZWN0LiBGb3IgcXVpdGUgYSBsb25nIHRpbWUgMiBhcHByb2FjaGVzIGV4aXN0ZWQsIHRoZSBub24tSUUgd29ybGQgKEZpcmVmb3gsU2FmYXJpLE9wZXJhLi4uKSAKCSAgICB1c2VkIHRoZSBYTUxIdHRwUmVxdWVzdCBjbGFzcyB0byBjcmVhdGUgdGhpcyBvYmplY3QsIHdoZXJlYXMgSUUgKGJlZm9yZSBJRTcpIHVzZWQgdGhlIEFjdGl2ZVhPYmplY3QgY2xhc3MuCgkgICAgV2l0aCB0aGUgcmVsZWFzZSBvZiBJRTcgTWljcm9zb2Z0IGludHJvZHVjZWQgbmF0aXZlIHN1cHBvcnQgZm9yIFhNTEh0dHBSZXF1ZXN0IGNsYXNzIG9iamVjdHMgdGh1cyBlbmFibGluZwoJICAgIHByb2dyYW1tZXJzIHdpdGggYSB1bmlxdWUgbWV0aG9kIGZvciB0aGUgZGV2ZWxvcG1lbnQgb2YgZHluYW1pYyBwYWdlcy4gCgk8L3A+PHAgc3R5bGU9IndpZHRoOjkwJSI+CgkgICAgQnkgY3JlYXRpbmcgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBhIFBPU1Qgb3IgR0VUIHJlcXVlc3QgY2FuIGJlIHNlbnQgdG8gdGhlIHNlcnZlciBhbmQgdGhlIHJlc3BvbnNlIGlzIAoJICAgIHN0b3JlZCBpbiBhIHByb3BlcnR5ICgncmV0dXJuZWRUZXh0Jykgb2YgdGhlIGNvbW11bmljYXRpb24gb2JqZWN0LiBJdCdzIGJlY29tZSB3aWRlbHkgY3VzdG9tYXJ5IHRvIGVuY29kZSAKCSAgICB0aGVzZSByZXNwb25zZXMgaW4gWE1MIG1lc3NhZ2VzLiBZb3UgY2FuIGludmVudCB5b3VyIG93biBtZXNzYWdlIHN0cnVjdHVyZSAoZWl0aGVyIGJhc2VkIG9uIFhNTCBvciBhbnl0aGluZyAKCSAgICBlbHNlKSwgYnV0IG9uZSBoYXMgdG8gYmUgYXdhcmUgdGhhdCBpZiB0aGUgaHR0cCBoZWFkZXJzIGFyZSBwcm9wZXJseSBzZXQgYW5kIHRoZSBtZXNzYWdlIHJldHVybmVkIHRvIHRoZSAKCSAgICBjbGllbnQgaXMgYSB3ZWxsIGZvcm1lZCBYTUwgZnJhZ21lbnQsIGFsc28gdGhlIHByb3BlcnR5IFhNTFJlc3BvbnNlIGlzIGFzc2lnbmVkIHdpdGggYSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IAoJICAgIHRoYXQgcmVwcmVzZW50cyB0aGUgRE9NIG9mIHRoZSBYTUwgcmVzcG9uc2UuIEJ5IG1lYW5zIG9mIHRoZSBYTUwgVzNDIERPTSBpbnRlcmZhY2UgdGhlIHByb2dyYW1tZXIgY2FuIGVhc2lseQoJICAgIG1hbmlwdWxhdGUgdGhlIGRhdGEgZW1iZWRkZWQgaW4gdGhlIFhNTCBtZXNzYWdlLgoJPC9wPjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoJICAgIEluIHRoaXMgZXhhbXBsZSBhIFJpdmV0IHNjcmlwdCBpbml0aWFsaXplcyBhbiBhcnJheSB3aXRoIHRoZSBlc3NlbnRpYWwgZGF0YSByZWdhcmRpbmcgYSBmZXcgb2YgdGhlIG1ham9yIAoJICAgIGNvbXBvc2VycyBvZiB0aGUgZXVyb3BlYW4gbXVzaWMuIFRoaXMgYXJyYXkgcGxheXMgdGhlIHJvbGUgb2YgYSBkYXRhYmFzZS4gVGhlIHNjcmlwdCBzZW5kcyBiYWNrIHRvIHRoZSAKCSAgICBjbGllbnQgdHdvIHR5cGVzIG9mIHJlc3BvbnNlczogYSBjYXRhbG9nIG9mIHRoZSBjb21wb3NlcnMgb3IgYSBzaW5nbGUgcmVjb3JkIG9mIGEgY29tcG9zZXIuCgk8L3A+PHByZSBzdHlsZT0iYmFja2dyb3VuZDojY2NjOyBtYXJnaW46IDJleDsgbWFyZ2luLXJpZ2h0OiAxMCU7ICAgICAgIHBhZGRpbmc6IDFleDsgYm9yZGVyOiBkYXNoZWQgYmxhY2sgMXB4IDsgd2hpdGUtc3BhY2U6IHByZTsgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOyBmb250LXNpemU6IDkwJTsiIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+IwojIEFqYXggcXVlcnkgc2VydmVsZXQ6IGEgcHNldWRvIGRhdGFiYXNlIGlzIGJ1aWx0IGludG8gdGhlIGRpY3Rpb25hcnkgJ2NvbXBvc2Vycycgd2l0aCB0aGUKIyBwdXJwb3NlIG9mIGVtdWxhdGluZyB0aGUgcm9sZSBvZiBhIHJlYWwgZGF0YSBzb3VyY2UuIAojIFRoZSBzY3JpcHQgYW5zd2VycyB3aXRoICAyIHR5cGVzIG9mIHJlc3BvbnNlczogYSBjYXRhbG9nIG9mIHRoZSByZWNvcmQgaWRzIGFuZCBhIGRhdGFiYXNlIAojIGVudHJ5IG1hdGNoaW5nIGEgZ2l2ZW4gcmVjX2lkLiBUaGUgc2NyaXB0IG9idmlvdXNseSBtaXNzZXMgdGhlIGVycm9yIGhhbmRsaW5nIGFuZCB0aGUKIyBsaWtlcy4gSnVzdCBhbiBleGFtcGxlIHRvIHNlZSByaXZldCBzZW5kaW5nIHhtbCBkYXRhIHRvIGEgYnJvd3Nlci4gVGhlIGZ1bGwgVGNsLCBKYXZhU2NyaXB0CiMgYW5kIEhUTUwgY29kZSBhcmUgYXZhaWxhYmxlIGZyb20gaHR0cDovL3Blb3BsZS5hcGFjaGUub3JnL35teG1hbmdoaS9yaXZldC1hamF4LnRhci5negoKIyBUaGlzIGV4YW1wbGUgcmVxdWlyZXMgVGNsOC41IG9yIFRjbDguNCB3aXRoIHBhY2thZ2UgJ2RpY3QnIAojIChodHRwOi8vcGFzY2FsLnNjaGVmZmVycy5uZXQvc29mdHdhcmUvdGNsRGljdC04LjUuMi50YXIuZ3opCiMgCgojIEEgcHNldWRvIGRhdGFiYXNlLiByZWNfaWQgbWF0Y2hlcyBhIHJlY29yZCBpbiB0aGUgZGIKCnNldCBjb21wb3NlcnMgW2RpY3QgY3JlYXRlICAxIHtmaXJzdF9uYW1lIENsYXVkaW8gbWlkZGxlX25hbWUgIiIgbGFzdF9uYW1lIE1vbnRldmVyZGkJXAoJCQkgICAgICAgbGlmZXNwYW4gMTU2Ny0xNjQzIGVyYSBSZW5haXNzYW5jZS9CYXJvcXVlfQkJXAoJCQkgICAgMiB7Zmlyc3RfbmFtZSBKb2hhbm4gbWlkZGxlX25hbWUgU2ViYXN0aWFuIGxhc3RfbmFtZSBCYWNoCVwKCQkJICAgICAgIGxpZmVzcGFuIDE2ODUtMTc1MCBlcmEgQmFyb3F1ZSB9CQkJCVwKCQkJICAgIDMge2ZpcnN0X25hbWUgTHVkd2lnIG1pZGRsZV9uYW1lICIiIGxhc3RfbmFtZSAidmFuIEJlZXRob3ZlbiIgXAoJCQkgICAgICAgbGlmZXNwYW4gMTc3MC0xODI3IGVyYSBDbGFzc2ljYWwvUm9tYW50aWN9CQlcCgkJCSAgICA0IHtmaXJzdF9uYW1lIFdvbGZnYW5nIG1pZGRsZV9uYW1lIEFtYWRldXMgbGFzdF9uYW1lIE1vemFydAlcCgkJCQlsaWZlc3BhbiAxNzU2LTE3OTEgZXJhIENsYXNzaWNhbCB9CQkJXAoJCQkgICAgNSB7Zmlyc3RfbmFtZSBSb2JlcnQgbWlkZGxlX25hbWUgIiIgbGFzdF9uYW1lIFNjaHVtYW5uCVwKCQkJCWxpZmVzcGFuIDE4MTAtMTg1NiBlcmEgUm9tYW50aWN9IF0KCiMgd2UgdXNlIHRoZSAnbG9hZCcgYXJndW1lbnQgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIHF1ZXJ5CiMKIyBsb2FkPWNhdGFsb2c6CQkgICAgd2UgaGF2ZSB0byByZXR1cm4gYSBsaXN0IG9mIHRoZSBuYW1lcyBpbiB0aGUgZGF0YWJhc2UKIyBsb2FkPWNvbXBvc2VyJmFtcDtyZXNfaWQ9Jmx0O2lkJmd0OzogdGhlIHNjcmlwdCBpcyBzdXBwb3NlZCB0byByZXR1cm4gdGhlIHJlY29yZAojCQkJICAgIGhhdmluZyAmbHQ7aWQmZ3Q7IGFzIHJlY29yZCBpZAoKaWYge1t2YXIgZXhpc3RzIGxvYWRdfSB7CgojIHRoZSB4bWwgZGVjbGFyYXRpb24gaXMgY29tbW9uIHRvIGV2ZXJ5IG1lc3NhZ2UgKGVycm9yIG1lc3NhZ2VzIGluY2x1ZGVkKQoKICAgIHNldCB4bWwgIiZsdDs/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIklTTy04ODU5LTFcIj8mZ3Q7XG4iCiAgICBzd2l0Y2ggW3ZhciBnZXQgbG9hZF0gewoJY2F0YWxvZyB7CgkgICAgYXBwZW5kIHhtbCAiJmx0O2NhdGFsb2cmZ3Q7XG4iCgkgICAgZm9yZWFjaCBubSBbZGljdCBrZXlzICRjb21wb3NlcnNdIHsKCQlzZXQgZmlyc3RfbmFtZSBbZGljdCBnZXQgJGNvbXBvc2VycyAkbm0gZmlyc3RfbmFtZV0KCQlzZXQgbWlkZGxlX25hbWUgW2RpY3QgZ2V0ICRjb21wb3NlcnMgJG5tIG1pZGRsZV9uYW1lXQoJCXNldCBsYXN0X25hbWUgIFtkaWN0IGdldCAkY29tcG9zZXJzICRubSBsYXN0X25hbWVdCgkgICAgICAgIGFwcGVuZCB4bWwgIiAgICAmbHQ7Y29tcG9zZXIga2V5PVwiJG5tXCImZ3Q7JGZpcnN0X25hbWUgIgoJCWlmIHtbc3RyaW5nIGxlbmd0aCBbc3RyaW5nIHRyaW0gJG1pZGRsZV9uYW1lXV0gJmd0OyAwfSB7CgkJICAgIGFwcGVuZCB4bWwgIiRtaWRkbGVfbmFtZSAiCgkJfQoJCWFwcGVuZCB4bWwgIiRsYXN0X25hbWUmbHQ7L2NvbXBvc2VyJmd0O1xuIgoJICAgIH0KCSAgICBhcHBlbmQgeG1sICImbHQ7L2NhdGFsb2cmZ3Q7XG4iCgl9Cgljb21wb3NlciB7CgkgICAgYXBwZW5kIHhtbCAiJmx0O2NvbXBvc2VyJmd0O1xuIgoJICAgIGlmIHtbdmFyIGV4aXN0cyByZWNfaWRdfSB7CgkJc2V0IHJlY19pZCBbdmFyIGdldCByZWNfaWRdCgkJaWYge1tkaWN0IGV4aXN0cyAkY29tcG9zZXJzICRyZWNfaWRdfSB7CgoJCSAgICBmb3JlYWNoIHtrIHZ9IFtkaWN0IGdldCAkY29tcG9zZXJzICRyZWNfaWRdIHsKCQkJYXBwZW5kIHhtbCAiJmx0OyRrJmd0OyR2Jmx0Oy8kayZndDtcbiIKCQkgICAgfQoKCQl9CgkgICAgfQoJICAgIGFwcGVuZCB4bWwgIiZsdDsvY29tcG9zZXImZ3Q7XG4iCgl9CiAgICB9CgojIHdlIGhhdmUgdG8gdGVsbCB0aGUgY2xpZW50IHRoaXMgaXMgYW4gWE1MIG1lc3NhZ2UuIEZhaWxpbmcgdG8gZG8gc28KIyB3b3VsZCByZXN1bHQgaW4gYW4gWE1MUmVzcG9uc2UgcHJvcGVydHkgc2V0IHRvIG51bGwKCiAgICBoZWFkZXJzIHR5cGUgInRleHQveG1sIgogICAgaGVhZGVycyBhZGQgQ29udGVudC1MZW5ndGggW3N0cmluZyBsZW5ndGggJHhtbF0KICAgIHB1dHMgJHhtbAp9Cgo8L3ByZT48cCBzdHlsZT0id2lkdGg6OTAlIj4KCSAgICBGb3Igc2FrZSBvZiBicmV2aXR5IHRoZSBKYXZhU2NyaXB0IGFuZCBIVE1MIHdpbGwgbm90IGxpc3RlZCBoZXJlLiBUaGV5IGNhbiBiZSBkb3dubG9hZGVkIChhbG9uZyB3aXRoIHRoZSBUY2wgCgkgICAgc2NyaXB0KSBzdG9yZWQgaW4gdGhlIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3Blb3BsZS5hcGFjaGUub3JnL35teG1hbmdoaS9yaXZldC1hamF4LnRhci5neiIgdGFyZ2V0PSJfdG9wIj5yaXZldC1hamF4LnRhci5nejwvYT4gYXJjaGl2ZS4gCgkgICAgQnkgc2ltcGx5IG9wZW5pbmcgdGhpcyB0YXIgYXJjaGl2ZSBpbiBhIGRpcmVjdG9yeSBhY2Nlc3NpYmxlIAoJICAgIGJ5IHlvdXIgYXBhY2hlIHNlcnZlciBhbmQgcG9pbnRpbmcgeW91ciBicm93c2VyIHRvIHRoZSByaXZldFNlcnZpY2UuaHRtbCBwYWdlIHlvdSBzaG91bGQgc2VlIGEgcGFnZSB3aXRoIGEgCgkgICAgZHJvcC1kb3duIGxpc3QuIEV2ZXJ5IHRpbWUgYSBkaWZmZXJlbnQgbmFtZSBpcyBwaWNrZWQgZnJvbSB0aGUgbGlzdCBhIG5ldyBxdWVyeSBpcyBzZW50IGFuZCBsb2dnZWQgaW4gdGhlIAoJICAgIGFwYWNoZSBhY2Nlc3MubG9nIGZpbGUsIGV2ZW4gdGhvdWdoIHRoZSBodG1sIGlzIG5ldmVyIHJlbG9hZGVkLgoJPC9wPjwvZGl2PjwvZGl2PjxiciBjbGFzcz0iZXhhbXBsZS1icmVhayI+PGRpdiBjbGFzcz0iZXhhbXBsZSI+PGEgbmFtZT0iY2FsZW5kYXIiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGWgNy6gQSBDYWxlbmRhciBVdGlsaXR5PC9iPjwvcD48ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj48cCBzdHlsZT0id2lkdGg6OTAlIj4KCSAgICBSaXZldCBjb21lcyB3aXRoIGEgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+Q2FsZW5kYXI8L2VtPjwvc3Bhbj4gcGFja2FnZSB0aGF0IHByb3ZpZGVzIGNsYXNzZXMgZm9yIHByaW50aW5nIAoJICAgIGNhbGVuZGFyIHRhYmxlcyBpbiB2YXJpb3VzIGZvcm1zLgkKCTwvcD48cCBzdHlsZT0id2lkdGg6OTAlIj4KCQlUaGUgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+SHRtbENhbGVuZGFyPC9lbT48L3NwYW4+IGNsYXNzIHByaW50cyBhIGNhbGVuZGFyIHRhYmxlIGluIGEgc2ltaWxhciBmb3JtIHRoZSBVbml4IAoJCXByb2dyYW0gJ2NhbCcgZG9lcy4gRXhhbXBsZTogdGhlIGZvbGxvd2luZyBjb2RlCgkJPC9wPjxwcmUgc3R5bGU9ImJhY2tncm91bmQ6I2NjYzsgbWFyZ2luOiAyZXg7IG1hcmdpbi1yaWdodDogMTAlOyAgICAgICBwYWRkaW5nOiAxZXg7IGJvcmRlcjogZGFzaGVkIGJsYWNrIDFweCA7IHdoaXRlLXNwYWNlOiBwcmU7ICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgZm9udC1zaXplOiA5MCU7IiBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnBhY2thZ2UgcmVxdWlyZSBDYWxlbmRhcgoKcHJvYyA6OmNhbF9jZWxsX2F0dHJpYnV0ZXMgeyBkYXkgbW9udGggeWVhciB3ZWVrZGF5IH0gewogICAgaWYgeyR3ZWVrZGF5ID09IDN9IHsKICAgICAgICByZXR1cm4gW2xpc3QgY2xhc3MgY3Vycl93a2RheV0KICAgIH0KfQoKc2V0IGh0bWxjIFtIdG1sQ2FsZW5kYXIgI2F1dG9dCnNldCBodG1sX3R4dCBbJGh0bWxjIGVtaXQgLWNvbnRhaW5lciB7dGFibGUgY2xhc3MgY2FsZW5kYXJ9IC1jdXJyZW50X3dlZWtkYXkgMyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgLWNlbGxfZnVuY3Rpb24gY2FsX2NlbGxfYXR0cmlidXRlcyBdCnB1dHMgJGh0bWxfdHh0CjwvcHJlPjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoKCSAgICB3aXRoIHNvbWUgQ1NTIHN0eWxpbmcgd291bGQgcHJpbnQKCSA8L3A+PHAgc3R5bGU9IndpZHRoOjkwJSI+CgkJPC9wPjxkaXY+PGltZyBzcmM9ImltYWdlcy9jYWxlbmRhci5wbmciPjwvZGl2PjxwIHN0eWxlPSJ3aWR0aDo5MCUiPgoJIDwvcD48L2Rpdj48L2Rpdj48YnIgY2xhc3M9ImV4YW1wbGUtYnJlYWsiPjwvZGl2PjxkaXYgY2xhc3M9Im5hdmZvb3RlciI+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBmb290ZXIiPjx0cj48dGQgd2lkdGg9IjQwJSIgYWxpZ249ImxlZnQiPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0id3JhcGxpbmUuaHRtbCI+PGltZyBzcmM9ImltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+oDwvdGQ+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJjZW50ZXIiPqA8L3RkPjx0ZCB3aWR0aD0iNDAlIiBhbGlnbj0icmlnaHQiPqA8YSBhY2Nlc3NrZXk9Im4iIGhyZWY9InRjbF9wYWNrYWdlcy5odG1sIj48aW1nIHNyYz0iaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT48L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0iNDAlIiBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPndyYXBsaW5loDwvdGQ+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJjZW50ZXIiPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImltYWdlcy9ob21lLnBuZyIgYWx0PSJIb21lIj48L2E+PC90ZD48dGQgd2lkdGg9IjQwJSIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+oFJpdmV0IFRjbCBQYWNrYWdlczwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PjwvYm9keT48L2h0bWw+Cg==