PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPjxodG1sPjxoZWFkPjx0aXRsZT5BeGlzMi9DIC0gQXhpczIvQyBVc2VyJ3MgR3VpZGU8L3RpdGxlPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9ImFsbCI+CiAgICAgICAgICBAaW1wb3J0IHVybCgiLi4vc3R5bGUvbWF2ZW4tYmFzZS5jc3MiKTsKICAgICAgICAgIAoJCQkgICAgQGltcG9ydCB1cmwoIi4uL3N0eWxlL21hdmVuLWNsYXNzaWMuY3NzIik7PC9zdHlsZT48bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL3N0eWxlL3ByaW50LmNzcyIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJwcmludCI+PC9saW5rPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPjwvbWV0YT48L2hlYWQ+PGJvZHkgY2xhc3M9ImNvbXBvc2l0ZSI+PGRpdiBpZD0iYmFubmVyIj48YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvIiBpZD0ib3JnYW5pemF0aW9uTG9nbyI+PGltZyBhbHQ9IkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBzcmM9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9pbWFnZXMvYXNmLWxvZ28uZ2lmIj48L2ltZz48L2E+PGEgaHJlZj0iaHR0cDovL3dzLmFwYWNoZS5vcmcvYXhpczIvYyIgaWQ9InByb2plY3RMb2dvIj48aW1nIGFsdD0iQXBhY2hlIEF4aXMyIEMiIHNyYz0iaHR0cDovL3dzLmFwYWNoZS5vcmcvYXhpczIvaW1hZ2VzL2F4aXMuanBnIj48L2ltZz48L2E+PGRpdiBjbGFzcz0iY2xlYXIiPjxocj48L2hyPjwvZGl2PjwvZGl2PjxkaXYgaWQ9ImJyZWFkY3J1bWJzIj48ZGl2IGNsYXNzPSJ4bGVmdCI+CiAgICAgICAgICAgICAgICAJTGFzdCBwdWJsaXNoZWQ6IDIyIERlY2VtYmVyIDIwMDYKICAgICAgICAgICAgICAgICAgfCBEb2MgZm9yIDAuOTY8L2Rpdj48ZGl2IGNsYXNzPSJ4cmlnaHQiPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj48aHI+PC9ocj48L2Rpdj48L2Rpdj48ZGl2IGlkPSJsZWZ0Q29sdW1uIj48ZGl2IGlkPSJuYXZjb2x1bW4iPjxkaXYgaWQ9Im1lbnVBeGlzMl9DIj48aDU+QXhpczIvQzwvaDU+PHVsPjxsaSBjbGFzcz0ibm9uZSI+PGEgaHJlZj0iLi4vaW5kZXguaHRtbCI+SG9tZTwvYT48L2xpPjxsaSBjbGFzcz0iZXhwYW5kZWQiPjxhIGhyZWY9Ii4uL2Rvd25sb2FkLmNnaSI+RG93bmxvYWQgQXhpczIvQzwvYT48dWw+PGxpIGNsYXNzPSJub25lIj48YSBocmVmPSIuLi9kb3dubG9hZC5jZ2kiPlJlbGVhc2VzPC9hPjwvbGk+PGxpIGNsYXNzPSJub25lIj48YSBocmVmPSJodHRwOi8vc3ZuLmFwYWNoZS5vcmcvdmlld3ZjL2F4aXMvYXhpczIvYy9jb3JlL3RydW5rLyIgY2xhc3M9ImV4dGVybmFsTGluayIgdGl0bGU9IkV4dGVybmFsIExpbmsiPlZpZXcgU291cmNlIENvZGUgT25saW5lPC9hPjwvbGk+PGxpIGNsYXNzPSJub25lIj48YSBocmVmPSIuLi9zdm4uaHRtbCI+Q2hlY2tvdXQgU291cmNlIENvZGU8L2E+PC9saT48L3VsPjwvbGk+PGxpIGNsYXNzPSJleHBhbmRlZCI+PGEgaHJlZj0iLi4vZG9jcy9pbmRleC5odG1sIj5Eb2N1bWVudGF0aW9uPC9hPjx1bD48bGkgY2xhc3M9Im5vbmUiPjxhIGhyZWY9Ii4uL2RvY3MvaW5zdGFsbGF0aW9uZ3VpZGUuaHRtbCI+SW5zdGFsbGF0aW9uIEd1aWRlPC9hPjwvbGk+PGxpIGNsYXNzPSJub25lIj48YSBocmVmPSIuLi9kb2NzL2RldmVsb3Blcmd1aWRlLmh0bWwiPkRldmVsb3BlciBHdWlkZTwvYT48L2xpPjxsaSBjbGFzcz0ibm9uZSI+PGEgaHJlZj0iLi4vZG9jcy91c2VyZ3VpZGUuaHRtbCI+VXNlciBHdWlkZTwvYT48L2xpPjxsaSBjbGFzcz0ibm9uZSI+PGEgaHJlZj0iLi4vZG9jcy9heGlzMmNfbWFudWFsLmh0bWwiPkF4aXMyL0MgbWFudWFsPC9hPjwvbGk+PC91bD48L2xpPjxsaSBjbGFzcz0iZXhwYW5kZWQiPjxhIGhyZWY9Ii4uL21haWwtbGlzdHMuaHRtbCI+R2V0IEludm9sdmVkPC9hPjx1bD48bGkgY2xhc3M9Im5vbmUiPjxhIGhyZWY9Ii4uL21haWwtbGlzdHMuaHRtbCI+TWFpbGluZyBMaXN0czwvYT48L2xpPjwvdWw+PC9saT48bGkgY2xhc3M9ImV4cGFuZGVkIj48YSBocmVmPSIuLi90ZWFtLWxpc3QuaHRtbCI+UHJvamVjdCBJbmZvcm1hdGlvbjwvYT48dWw+PGxpIGNsYXNzPSJub25lIj48YSBocmVmPSIuLi90ZWFtLWxpc3QuaHRtbCI+UHJvamVjdCBUZWFtPC9hPjwvbGk+PGxpIGNsYXNzPSJub25lIj48YSBocmVmPSIuLi9pc3N1ZS10cmFja2luZy5odG1sIj5Jc3N1ZSBUcmFja2luZzwvYT48L2xpPjwvdWw+PC9saT48L3VsPjwvZGl2PjxhIGhyZWY9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnLyIgdGl0bGU9IkJ1aWx0IGJ5IE1hdmVuIiBpZD0icG93ZXJlZEJ5Ij48aW1nIGFsdD0iQnVpbHQgYnkgTWF2ZW4iIHNyYz0iLi4vaW1hZ2VzL2xvZ29zL21hdmVuLWJ1dHRvbi0xLnBuZyI+PC9pbWc+PC9hPjwvZGl2PjwvZGl2PjxkaXYgaWQ9ImJvZHlDb2x1bW4iPjxkaXYgY2xhc3M9ImNvbnRlbnRCb3giPjxkaXYgY2xhc3M9InNlY3Rpb24iPjxhIG5hbWU9IkFwYWNoZV9BeGlzMl9DX1VzZXJfc19HdWlkZSI+PC9hPjxoMj5BcGFjaGUgQXhpczIvQyBVc2VyJ3MgR3VpZGU8L2gyPjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9IkNvbnRlbnQiPjwvYT48aDM+Q29udGVudDwvaDM+PHVsPgogIDxsaT48cD48YSBocmVmPSIjSW50cm9kdWN0aW9uIj5JbnRyb2R1Y3Rpb248L2E+PC9wPgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0iI1doYXRfaXNfQXhpczJfIj5XaGF0IGlzIEF4aXMyL0M/PC9hPjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPjxhIGhyZWY9IiNXZWJfU2VydmljZXNfVXNpbmdfQXhpczIiPldlYiBTZXJ2aWNlcyBVc2luZyBBeGlzMi9DPC9hPgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0iI1dyaXRpbmdfV2ViX1NlcnZpY2VzX1VzaW5nX0F4aXMyX0MiPldyaXRpbmcgV2ViIFNlcnZpY2VzCiAgICAgICAgVXNpbmcgQXhpczIvQzwvYT4KICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+PGEgaHJlZj0iI0NyZWF0aW5nX1dlYl9TZXJ2aWNlX19NeVNlcnZpY2VfIj5DcmVhdGluZyBXZWIKICAgICAgICAgICAgU2VydmljZSAoRWNobyBzZXJ2aWNlKTwvYT48L2xpPgogICAgICAgICAgPGxpPjxhIGhyZWY9IiNIb3dfdG9fd3JpdGVfdGhlX1dlYl9TZXJ2aWNlXyI+SG93IHRvIHdyaXRlIHRoZSBXZWIKICAgICAgICAgICAgU2VydmljZT88L2E+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI1N0ZXAxIj5TdGVwMSA6V3JpdGUgdGhlIGVjaG9fc2tlbGV0b24uYyBmaWxlCiAgICAgICAgICAgICAgICBpbXBsZW1lbnRpbmcgdGhlIGF4aXMyX3N2Y19za2VsZXRvbi5oPC9hPjwvbGk+CiAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNTdGVwMiI+U3RlcDIgOk5vdyB3ZSBjYW4gd3JpdGUgdGhlIGVjaG8gc2VydmljZQogICAgICAgICAgICAgICAgaW4gYSBmaWxlIGVjaG8uYzwvYT48L2xpPgogICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjU3RlcDMiPlN0ZXAzIDpXcml0ZSB0aGUgc2VydmljZXMueG1sIGZpbGU8L2E+PC9saT4KICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI1N0ZXA0Ij5TdGVwNCA6Q3JlYXRlIHRoZSBXZWIgU2VydmljZQogICAgICAgICAgICAgIEZvbGRlcjwvYT48L2xpPgogICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjU3RlcDUiPlN0ZXA1IDpBcmNoaXZlIGJhc2VkIGRlcGxveW1lbnQKICAgICAgICAgICAgICBtb2RlbDwvYT48L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI1dyaXRpbmdfV2ViX1NlcnZpY2VzX1VzaW5nX0NvZGVfR2VuZXJhdG9yIj5Xcml0aW5nIFdlYgogICAgICAgIFNlcnZpY2VzIFNrZWxldG9uIFVzaW5nIENvZGUgR2VuZXJhdG9yPC9hPgogICAgICAgIDx1bD4KICAgICAgICAgIDxsaT48YSBocmVmPSIjV1NETDJDX3Rvb2wiPldTREwyQyB0b29sPC9hPjwvbGk+CiAgICAgICAgICA8bGk+PGEgaHJlZj0iI0ltcGxlbWVudF90aGVfQnVzaW5lc3NfTG9naWMiPkltcGxlbWVudCB0aGUgQnVzaW5lc3MKICAgICAgICAgICAgTG9naWM8L2E+PC9saT4KICAgICAgICAgIDxsaT48YSBocmVmPSIjZWNob1N0cmluZyI+ZWNob1N0cmluZzwvYT48L2xpPgogICAgICAgICAgPGxpPjxhIGhyZWY9IiNlY2hvU3RyaW5nQXJyYXkiPmVjaG9TdHJpbmdBcnJheTwvYT48L2xpPgogICAgICAgICAgPGxpPjxhIGhyZWY9IiNlY2hvU3RydWN0Ij5lY2hvU3RydWN0PC9hPjwvbGk+CiAgICAgICAgICA8bGk+PGEgaHJlZj0iI3NlcnZpY2VzX3htbCI+c2VydmljZXMueG1sPC9hPjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNkZXBsb3kiPkRlcGxveSB0aGUgV2ViIFNlcnZpY2U8L2E+PC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+PHA+PGEgaHJlZj0iI1dlYl9TZXJ2aWNlX0NsaWVudHNfVXNpbmdfQXhpczIiPldlYiBTZXJ2aWNlIENsaWVudHMgVXNpbmcKICAgIEF4aXMyL0M8L2E+PC9wPgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0iI1dyaXRpbmdfV2ViX1NlcnZpY2VfQ2xpZW50c191c2luZ19BeGlzMiUyN3NfUHJpbWFyeV9BUElzIj5Xcml0aW5nCiAgICAgICAgV2ViIFNlcnZpY2UgQ2xpZW50cyBVc2luZyBBeGlzMidzIFByaW1hcnkgQVBJczwvYT4KICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+PGEgaHJlZj0iI0VjaG9CbG9ja2luZ0NsaWVudCI+ZWNob19ibG9ja2luZyBDbGllbnQ8L2E+PC9saT4KICAgICAgICAgIDxsaT48YSBocmVmPSIjRWNob05vbkJsb2NraW5nQ2xpZW50Ij5lY2hvX25vbl9ibG9ja2luZwogICAgICAgICAgQ2xpZW50PC9hPjwvbGk+CiAgICAgICAgICA8bGk+PGEgaHJlZj0iI0VjaG9Ob25CbG9ja2luZ0R1YWxDbGllbnQiPmVjaG9fbm9uX2Jsb2NraW5nX2R1YWwKICAgICAgICAgICAgQ2xpZW50PC9hPjwvbGk+CiAgICAgICAgICA8bGk+PGEgaHJlZj0iI0VjaG9CbG9ja2luZ0R1YWxDbGllbnQiPmVjaG9fYmxvY2tpbmdfZHVhbAogICAgICAgICAgQ2xpZW50PC9hPjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNXcml0aW5nX1dlYl9DbGllbnRzX1VzaW5nX0NvZGVfR2VuZXJhdG9yIj5Xcml0aW5nIFdlYgogICAgICAgIFNlcnZpY2UgQ2xpZW50cyB1c2luZyBDb2RlIEdlbmVyYXRpb24gd2l0aCBEYXRhIEJpbmRpbmcgU3VwcG9ydDwvYT4KICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+PGEgaHJlZj0iI0NvZGVnZW5lcmF0b3JfQ2xpZW50X2VjaG9TdHJpbmciPkNsaWVudCBmb3IKICAgICAgICAgICAgZWNob1N0cmluZyBvcGVyYXRpb248L2E+PC9saT4KICAgICAgICAgIDxsaT48YSBocmVmPSIjQ29kZWdlbmVyYXRvcl9DbGllbnRfZWNob1N0cmluZ0FycmF5Ij5DbGllbnQgZm9yCiAgICAgICAgICAgIGVjaG9TdHJpbmdBcnJheSBvcGVyYXRpb248L2E+PC9saT4KICAgICAgICAgIDxsaT48YSBocmVmPSIjQ29kZWdlbmVyYXRvcl9DbGllbnRfZWNob1N0cnVjdCI+Q2xpZW50IGZvcgogICAgICAgICAgICBlY2hvU3RydWN0IG9wZXJhdGlvbjwvYT48L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPjxwPjxhIGhyZWY9IiNQcm92aWRpbmdfc2VjdXJpdHlfdXNpbmdfUmFtcGFydCI+UHJvdmlkaW5nIHNlY3VyaXR5IHVzaW5nCiAgICBSYW1wYXJ0L0M8L2E+PC9wPgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0iI0VuZ2FnaW5nX3JhbXBhcnRfbW9kdWxlIj5FbmdhZ2luZyByYW1wYXJ0IG1vZHVsZTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI1NlbWFudGljc19vZl9wYXJhbWV0ZXJzX3NwZWNpZmllZF9pbl9heGlzMl94bWwiPlNlbWFudGljcwogICAgICAgIG9mIHBhcmFtZXRlcnMgc3BlY2lmaWVkIGluIGF4aXMyLnhtbDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI1dyaXRpbmdfb3duX3Bhc3N3b3JkX2NhbGxiYWNrX21vZHVsZSI+V3JpdGluZyBvd24KICAgICAgICBwYXNzd29yZCBjYWxsYmFjayBtb2R1bGU8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNBZGRpbmdfc2VjdXJpdHlfcGFyYW1ldGVyc19keW5hbWljYWxseSI+QWRkaW5nIHNlY3VyaXR5CiAgICAgICAgcGFyYW1ldGVycyBkeW5hbWljYWxseTwvYT48L2xpPgogICAgPC91bD4KICA8L2xpPgo8L3VsPjxwPjxhIGlkPSJJbnRyb2R1Y3Rpb24iPjwvYT48L3A+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iSW50cm9kdWN0aW9uIj48L2E+PGgzPkludHJvZHVjdGlvbjwvaDM+PHA+V2VsY29tZSB0byBBeGlzMi9DLCB0aGUgQXBhY2hlIEF4aXMyIGltcGxlbWVudGF0aW9uIGluIEMuIFRoaXMgVXNlcidzIEd1aWRlCndpbGwgaGVscCB5b3UgdW5kZXJzdGFuZCB3aGF0IEF4aXMyL0MgaGFzIHRvIG9mZmVyIGFuZCBob3cgdG8gZ2V0IHN0YXJ0ZWQKd2l0aCBpdC48L3A+PHA+PGEgaWQ9IldoYXRfaXNfQXhpczJfIj48L2E+PC9wPjwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9IldoYXRfaXNfQXhpczJfQ18iPjwvYT48aDM+V2hhdCBpcyBBeGlzMi9DPzwvaDM+PHA+QXhpczIvQyBpcyBhbiBlZmZvcnQgdG8gaW1wbGVtZW50IHRoZSA8YSBocmVmPSJodHRwOi8vd3MuYXBhY2hlLm9yZy9heGlzMi8xXzAvQXhpczJBcmNoaXRlY3R1cmVHdWlkZS5odG1sIiBjbGFzcz0iZXh0ZXJuYWxMaW5rIiB0aXRsZT0iRXh0ZXJuYWwgTGluayI+QXhpczIKYXJjaGl0ZWN0dXJlPC9hPiBpbiBDIHByb2dyYW1taW5nIGxhbmd1YWdlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUKYXJjaGl0ZWN0dXJlIDxhIGhyZWY9ImFyY2hpdGVjdHVyZV9ub3Rlcy5odG1sIj5DIFNwZWNpZmljIEFyY2hpdGVjdHVyYWwKTm90ZXM8L2E+IGFyZSBhbHNvIGF2YWlsYWJsZS48L3A+PHA+QWZ0ZXIgbW9udGhzIG9mIGNvbnRpbnVlZCBkaXNjdXNzaW9uIGFuZCBjb2RpbmcgaW4gdGhpcyBkaXJlY3Rpb24sIEF4aXMyL0MKbm93IGRlbGl2ZXJzIHRoZSBmb2xsb3dpbmcga2V5IGZlYXR1cmVzOjwvcD48dWw+CiAgPGxpPjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48c3Ryb25nPlNwZWVkPC9zdHJvbmc+IC0gQXhpczIvQyB1c2VzCiAgICBpdHMgb3duIFhNTCBvYmplY3QgbW9kZWwgYW5kIFN0QVggKFN0cmVhbWluZyBBUEkgZm9yIFhNTCkgcGFyc2luZyB0bwogICAgYWNoaWV2ZSBzaWduaWZpY2FudCBzcGVlZC4gSW4gYWRkaXRpb24gdG8gdGhhdCwgQXhpczIvQyBpcyBpbmhlcmVudGx5CiAgICBiZW5lZml0ZWQgYnkgdGhlIHNwZWVkIG9mIGl0cyBpbXBsZW1lbnRhdGlvbiBsYW5ndWFnZSwgbmFtZWx5IEMsIGNvbXBhcmVkCiAgICB0byBKYXZhIGltcGxlbWVudGF0aW9uLjwvcD4KICA8L2xpPgogIDxsaT48cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PHN0cm9uZz5Mb3cgbWVtb3J5IGZvb3QgcHJpbnQ8L3N0cm9uZz4tCiAgICBBeGlzMiBhcmNoaXRlY3R1cmUgd2FzIGRlc2lnbmVkIGdyb3VuZC11cCBrZWVwaW5nIGluIG1pbmQgdGhlIGxvdyBtZW1vcnkgZm9vdAogICAgcHJpbnQuIEF4aXMyL0Mgc3RyaXZlcyB0byBhY2hpZXZlIHRoZSBzYW1lIHdpdGggYSB3ZWxsIGRlc2lnbmVkCiAgICBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneS48L3A+CiAgPC9saT4KICA8bGk+PHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPjxzdHJvbmc+QVhJT00vQzwvc3Ryb25nPi0gQXhpczIvQyBjb21lcwogICAgd2l0aCBpdHMgb3duIGxpZ2h0LXdlaWdodCBvYmplY3QgbW9kZWwgZm9yIFhNTCwgQVhJT00vQyB3aGljaCBpcyB0aGUgQwogICAgaW1wbGVtZW50YXRpb24gb2YgPGEgaHJlZj0iaHR0cDovL3dzLmFwYWNoZS5vcmcvY29tbW9ucy9heGlvbS9PTVR1dG9yaWFsLmh0bWwiIGNsYXNzPSJleHRlcm5hbExpbmsiIHRpdGxlPSJFeHRlcm5hbCBMaW5rIj5BWElPTTwvYT4uPC9wPgogIDwvbGk+CiAgPGxpPjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48c3Ryb25nPk1FUCBTdXBwb3J0PC9zdHJvbmc+IC0gU3VwcG9ydHMKICAgIE1lc3NhZ2UgRXhjaGFuZ2UgUGF0dGVybnMgKE1FUHMpPC9wPgogIDwvbGk+CiAgPGxpPjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48c3Ryb25nPkZsZXhpYmlsaXR5PC9zdHJvbmc+IC0gQXhpczIvQwogICAgYXJjaGl0ZWN0dXJlIGdpdmVzIHRoZSBkZXZlbG9wZXIgY29tcGxldGUgZnJlZWRvbSB0byBpbnNlcnQKICAgIGV4dGVuc2lvbnMgaW50byB0aGUgZW5naW5lICh1c2luZyBtb2R1bGVzIGFuZCBoYW5kbGVycykgZm9yIGN1c3RvbSBTT0FQCiAgICBoZWFkZXIgcHJvY2Vzc2luZy48L3A+CiAgPC9saT4KICA8bGk+PHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPjxzdHJvbmc+VHJhbnNwb3J0IEZyYW1ld29yazwvc3Ryb25nPiAtCiAgICBXZSBoYXZlIGEgY2xlYW4gYW5kIHNpbXBsZSBhYnN0cmFjdGlvbiBmb3IgaW50ZWdyYXRpbmcgYW5kIHVzaW5nCiAgICB0cmFuc3BvcnRzLCBhbmQgdGhlIGNvcmUgb2YgdGhlIGVuZ2luZSBpcyBjb21wbGV0ZWx5CiAgICB0cmFuc3BvcnQtaW5kZXBlbmRlbnQuPC9wPgogIDwvbGk+CiAgPGxpPjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48c3Ryb25nPkNvbXBvc2l0aW9uIGFuZAogICAgRXh0ZW5zaWJpbGl0eTwvc3Ryb25nPiAtIE1vZHVsZXMgYW5kIHBoYXNlcyBpbXByb3ZlIHN1cHBvcnQgZm9yCiAgICBjb21wb3NhYmlsaXR5IGFuZCBleHRlbnNpYmlsaXR5LiBNb2R1bGVzIHN1cHBvcnQgY29tcG9zYWJpbGl0eSBhbmQgYXJlCiAgICBhYmxlIHRvIGFkZCBzdXBwb3J0IGZvciBuZXcgV1MtKiBzcGVjaWZpY2F0aW9ucyBpbiBhIHNpbXBsZSBhbmQgY2xlYW4KICAgIG1hbm5lci4gVGhleSBhcmUgaG93ZXZlciwgbm90IGhvdCBkZXBsb3lhYmxlIGFzIHRoZXkgY2hhbmdlIHRoZSBvdmVyYWxsCiAgICBiZWhhdmlvciBvZiB0aGUgc3lzdGVtLjwvcD4KICA8L2xpPgo8L3VsPjxwPkF4aXMyL0MgdGVhbSBpcyB3b3JraW5nIGhhcmQgdG8gY29udGludW91c2x5IGltcHJvdmUgdGhlIGltcGxlbWVudGF0aW9uLgpQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgaXMgYW4gb3Blbi1zb3VyY2UgZWZmb3J0LiBJZiB5b3UgZmVlbCB5b3UgaGF2ZSBzb21lCnRpbWUgdG8gc3BhcmUsIHBsZWFzZSBnZXQgaW52b2x2ZWQgYW5kIGxlbmQgdXMgYSBoYW5kISBUaGUgQXhpczIvQyBkZXZlbG9wZXIKY29tbXVuaXR5IHdlbGNvbWVzIHlvdXIgcGFydGljaXBhdGlvbiBhbmQgY29udHJpYnV0aW9ucy48L3A+PHA+TGV0IHVzIGtub3cgd2hhdCB5b3UgdGhpbmshIFBsZWFzZSBzZW5kIHlvdXIgZmVlZGJhY2sgb24gQXhpczIvQyB0byAiPGEgaHJlZj0ibWFpbHRvOmF4aXMtdXNlckB3cy5hcGFjaGUub3JnIj5heGlzLWMtdXNlckB3cy5hcGFjaGUub3JnPC9hPiIgYW5kCnBsZWFzZSByZW1lbWJlciB0byBwcmVmaXggdGhlIHN1YmplY3Qgb2YgdGhlIG1haWwgd2l0aCBbQXhpczJdLjwvcD48cD5UaGUgZm9sbG93aW5nIHNlY3Rpb25zIHdpbGwgZ3VpZGUgb24gaG93IHRvIHdyaXRlIFdlYiBzZXJ2aWNlCmNsaWVudHMgYW5kIHNlcnZpY2VzLjwvcD48cD48YSBuYW1lPSJXZWJfU2VydmljZXNfVXNpbmdfQXhpczIiPjwvYT48L3A+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iV2ViX1NlcnZpY2VzX1VzaW5nX0F4aXMyX0MiPjwvYT48aDM+V2ViIFNlcnZpY2VzIFVzaW5nIEF4aXMyL0M8L2gzPjxwPkJlZm9yZSBzdGFydGluZywgcGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIGluc3RhbGxlZCBBeGlzMi9DCmNvcnJlY3RseSBhbmQgd2hldGhlciB5b3UgY2FuIHJ1biB0aGUgYXhpczJfaHR0cF9zZXJ2ZXIgbG9jYXRlZCBpbgpBWElTMkNfSE9NRS9iaW4gKFNlZSA8YSBocmVmPSJpbnN0YWxsYXRpb25ndWlkZS5odG1sIj5JbnN0YWxsYXRpb24gR3VpZGU8L2E+CmZvciBkZXRhaWxzKS48L3A+PHA+PGEgbmFtZT0iV3JpdGluZ19XZWJfU2VydmljZXNfVXNpbmdfQXhpczJfQyI+PC9hPjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJXcml0aW5nX1dlYl9TZXJ2aWNlc19Vc2luZ19BeGlzMl9DIj48L2E+PGgzPldyaXRpbmcgV2ViIFNlcnZpY2VzIFVzaW5nIEF4aXMyL0M8L2gzPjxwPjxhIGlkPSJDcmVhdGluZ19XZWJfU2VydmljZV9fTXlTZXJ2aWNlXyI+PC9hPjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJDcmVhdGluZ19XZWJfU2VydmljZV9fRWNob19zZXJ2aWNlXyI+PC9hPjxoMz5DcmVhdGluZyBXZWIgU2VydmljZSAoRWNobyBzZXJ2aWNlKTwvaDM+PHA+Rmlyc3QgbGV0J3Mgc2VlIGhvdyB3ZSBjYW4gd3JpdGUgYSBzaW1wbGUgV2ViIFNlcnZpY2UgKGVjaG8gc2VydmljZSkgdXNpbmcKQXhpczIvQydzIHByaW1hcnkgaW50ZXJmYWNlcyBhbmQgaG93IHRvIGRlcGxveSBpdC4gRm9yIHRoaXMgcHVycG9zZSB3ZSB3aWxsCmNyZWF0ZSBhIFdlYiBTZXJ2aWNlIHdpdGggb25lIG9wZXJhdGlvbiBhcyBmb2xsb3dzLjwvcD4KICAgIDxkaXYgY2xhc3M9InNvdXJjZSI+PHByZT4KYXhpb21fbm9kZV90KiBheGlzMl9lY2hvX2VjaG8oYXhpb21fbm9kZV90ICplY2hvX25vZGUpe30KCjwvcHJlPjwvZGl2PgogIDxwPllvdSBjYW4gaGF2ZSBhIHBlZWsgYXQgdGhlIGNvbXBsZXRlIHNvdXJjZSBjb2RlIGZvciB0aGlzIGV4YW1wbGUgZWNobwpzZXJ2aWNlIGxvY2F0ZWQgaW4gdGhlICJBWElTMkNfSE9NRS9zYW1wbGVzL3NlcnZlci9lY2hvIiBkaXJlY3RvcnkuPC9wPjxwPjxhIGlkPSJIb3dfdG9fd3JpdGVfdGhlX1dlYl9TZXJ2aWNlXyI+PC9hPjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJIb3dfdG9fd3JpdGVfdGhlX1dlYl9TZXJ2aWNlXyI+PC9hPjxoMz5Ib3cgdG8gd3JpdGUgdGhlIFdlYiBTZXJ2aWNlPzwvaDM+PHA+V3JpdGluZyBhIG5ldyBXZWIgU2VydmljZSB3aXRoIEF4aXMyL0MgaW52b2x2ZXMgZm91ciBzdGVwcy4gTGV0J3MgdGFrZSBlY2hvCnNlcnZpY2UgYXMgb3VyIGV4YW1wbGUuPC9wPjxvbD4KICA8bGk+PHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPldyaXRlIGEgZWNob19za2VsZXRvbi5jIGZpbGUgd2hpY2gKICAgIGltcGxlbWVudHMgdGhlIEFQSSBnaXZlbiBpbiBheGlzMl9zdmNfc2tlbGV0b24uaCBoZWFkZXIgZmlsZS48L3A+CiAgPC9saT4KICA8bGk+V3JpdGUgdGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gc291cmNlIGZpbGUgKGluIHRoaXMgY2FzZSBlY2hvLmMKICAgIHNlcnZpY2UpIHdoaWNoIGltcGxlbWVudHMgdGhlIGFjdHVhbCBidXNpbmVzcyBsb2dpYy48L2xpPgogIDxsaT5Xcml0ZSBhIHNlcnZpY2VzLnhtbCBmaWxlIHRvIGV4cGxhaW4gdGhlIFdlYiBzZXJ2aWNlLjwvbGk+CiAgPGxpPkNyZWF0ZSBhIGZvbGRlciB3aXRoIHRoZSBzZXJ2aWNlIG5hbWUgdW5kZXIgQVhJUzJDX0hPTUUvc2VydmljZXMgYW5kCiAgICBwdXQgdGhlIGNvbXBpbGVkIHNlcnZpY2UgKCAuZGxsIG9yIC5zbyBmaWxlKSBmb3IgdGhlIFdlYiBzZXJ2aWNlIGFuZAogICAgc2VydmljZXMueG1sIGZpbGUgaW50byB0aGF0IGZvbGRlci48L2xpPgo8L29sPjxwPjxhIG5hbWU9IlN0ZXAxIj48L2E+PC9wPjwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9IlN0ZXAxXzpXcml0ZV90aGVfZWNob19za2VsZXRvbl9jX2ZpbGVfaW1wbGVtZW50aW5nX3RoZV9heGlzMl9zdmNfc2tlbGV0b25faCI+PC9hPjxoMz5TdGVwMSA6V3JpdGUgdGhlIGVjaG9fc2tlbGV0b24uYyBmaWxlIGltcGxlbWVudGluZyB0aGUgYXhpczJfc3ZjX3NrZWxldG9uLmg8L2gzPjxwPmF4aXMyX3N2Y19za2VsZXRvbi5oIGhlYWRlciBmaWxlIGhhcyB0aGUgYXhpczJfc3ZjX3NrZWxldG9uX29wc190Cm9wZXJhdGlvbnMgc3RydWN0IHdoaWNoIGRlZmluZXMgZm91ciBmdW5jdGlvbiBwb2ludGVycyB0byBiZSBpbXBsZW1lbnRlZCBhbmQKYXNzaWduZWQgYnkgYSBzZXJ2aWNlIHNrZWxldG9uLjwvcD48cD5UaGV5IGFyZTo8L3A+CiAgICA8ZGl2IGNsYXNzPSJzb3VyY2UiPjxwcmU+CmludCAoQVhJUzJfQ0FMTCAqIGluaXQpIChheGlzMl9zdmNfc2tlbGV0b25fdCAqc3ZjX3NrZWxldG9uLAogY29uc3QgYXhpczJfZW52X3QgKmVudik7CgpheGlvbV9ub2RlX3QgKiAoQVhJUzJfQ0FMTCogaW52b2tlKShheGlzMl9zdmNfc2tlbGV0b25fdCAqc3ZjX3NrZWxpLCAKIGNvbnN0IGF4aXMyX2Vudl90ICplbnYsIGF4aW9tX25vZGVfdCAqbm9kZSk7CgpheGlvbV9ub2RlX3QgKihBWElTMl9DQUxMKiBvbl9mYXVsdCkoYXhpczJfc3ZjX3NrZWxldG9uX3QgKnN2Y19za2VsaSwKIGNvbnN0IGF4aXMyX2Vudl90ICplbnYsIGF4aW9tX25vZGVfdCAqbm9kZSk7CgppbnQgKEFYSVMyX0NBTEwgKmZyZWUpKGF4aXMyX3N2Y19za2VsZXRvbl90ICpzdmNfc2tlbGksIAogY29uc3QgYXhpczJfZW52X3QgKmVudik7Cgo8L3ByZT48L2Rpdj4KICA8cD5MZXQncyBpbXBsZW1lbnQgdGhlIGFib3ZlIGZ1bmN0aW9ucyBmb3IgZWNobyBzZXJ2aWNlLjwvcD48cD48aT48Y29kZT4vKqBJbml0aWFsaXploHRoZaBzZXJ2aWNloCovPC9jb2RlPjwvaT48YnI+PC9icj4KPGNvZGU+aW50oEFYSVMyX0NBTEw8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPmVjaG9faW5pdChheGlzMl9zdmNfc2tlbGV0b25fdKAqc3ZjX3NrZWxldG9uLDwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgY29uc3QgYXhpczJfZW52X3SgKmVudik8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPns8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKBzdmNfc2tlbGV0b24tJmd0O2Z1bmNfYXJyYXmgPaBheGlzMl9hcnJheV9saXN0X2NyZWF0ZShlbnYsoDApOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoDwvY29kZT48aT48Y29kZT4vKqBBZGSgdGhloGltcGxlbWVudGVkoG9wZXJhdGlvbqBuYW1lc6BvZqB0aGWgc2VydmljZaB0b6CgPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoCqgdGhloGFycmF5oGxpc3Sgb2agZnVuY3Rpb25zoDwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKAqLzwvY29kZT48L2k+PGJyPjwvYnI+Cjxjb2RlPqCgoKBBWElTMl9BUlJBWV9MSVNUX0FERChzdmNfc2tlbGV0b24tJmd0O2Z1bmNfYXJyYXksoGVudiygImVjaG9TdHJpbmciKTs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGk+PGNvZGU+LyqgQW55oGluaXRpYWxpemF0aW9uoHN0dWZmoG9moGVjaG+gc2VydmljZaBzaG91bGSgZ2+gaGVyZaAqLzwvY29kZT48L2k+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGI+PGNvZGU+cmV0dXJuPC9jb2RlPjwvYj48Y29kZT6gQVhJUzJfU1VDQ0VTUzs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPn08L2NvZGU+PGJyPjwvYnI+Cjxicj48L2JyPgo8aT48Y29kZT4vKjwvY29kZT48YnI+PC9icj4KPGNvZGU+oCqgVGhpc6BtZXRob2SgaW52b2tlc6B0aGWgcmlnaHSgc2VydmljZaBtZXRob2SgPC9jb2RlPjxicj48L2JyPgo8Y29kZT6gKi88L2NvZGU+PC9pPjxicj48L2JyPgo8Y29kZT5heGlvbV9ub2RlX3QqoEFYSVMyX0NBTEw8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPmVjaG9faW52b2tlKGF4aXMyX3N2Y19za2VsZXRvbl90oCpzdmNfc2tlbGV0b24sPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoKCgoKBjb25zdCBheGlzMl9lbnZfdKAqZW52LDwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKCgoKCgYXhpb21fbm9kZV90oCpub2RlKTwvY29kZT48YnI+PC9icj4KPGNvZGU+ezwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoDwvY29kZT48aT48Y29kZT4vKqBJbnZva2WgdGhloGJ1c2luZXNzoGxvZ2ljLjwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKAqoERlcGVuZGluZ6BvbqB0aGWgZnVuY3Rpb26gbmFtZaBpbnZva2WgdGhloGNvcnJlY3SgaW1wbKBtZXRob2QuPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoCqgV2WgaGF2ZaBvbmx5oGVjaG+gaW6gdGhpc6BzYW1wbGUsoGhlbmNloGludm9rZaBlY2hvoG1ldGhvZC48L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgKqBUb6BzZWWgaG93oHRvoGRlYWygd2l0aKBtdWx0aXBsZaBpbXBsoG1ldGhvZHMsoGhhdmWgYaBsb29roGF0oHRoZTwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKAqoG1hdGigc2FtcGxlLjwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKAqLzwvY29kZT48L2k+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGI+PGNvZGU+cmV0dXJuPC9jb2RlPjwvYj48Y29kZT6gYXhpczJfZWNob19lY2hvKGVudiygbm9kZSk7PC9jb2RlPjxicj48L2JyPgo8Y29kZT59PC9jb2RlPjxicj48L2JyPgo8YnI+PC9icj4KPGk+PGNvZGU+LyqgT26gZmF1bHQsoGhhbmRsZaB0aGWgZmF1bHSgKi88L2NvZGU+PC9pPjxicj48L2JyPgo8Y29kZT5heGlvbV9ub2RlX3QqoEFYSVMyX0NBTEw8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPmVjaG9fb25fZmF1bHQoYXhpczJfc3ZjX3NrZWxldG9uX3SgKnN2Y19za2VsaSygPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoKCgoKCgoGNvbnN0IGF4aXMyX2Vudl90oCplbnYsoGF4aW9tX25vZGVfdKAqbm9kZSk8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPns8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoDwvY29kZT48aT48Y29kZT4vKqBIZXJloHdloGFyZaBqdXN0oHNldHRpbmegYaBzaW1wbGWgZXJyb3KgbWVzc2FnZaBpbnNpZGWgYW6gZWxlbWVudKA8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKAqoGNhbGxlZKAnRWNob1NlcnZpY2VFcnJvciegPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgKi88L2NvZGU+PC9pPjxicj48L2JyPgo8Y29kZT6goKCgYXhpb21fbm9kZV90oCplcnJvcl9ub2RloD2gTlVMTDs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKBheGlvbV9ub2RlX3QqoHRleHRfbm9kZaA9oE5VTEw7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgYXhpb21fZWxlbWVudF90oCplcnJvcl9lbGWgPaBOVUxMOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoGVycm9yX2VsZaA9oGF4aW9tX2VsZW1lbnRfY3JlYXRlKGVudiygbm9kZSygIkVjaG9TZXJ2aWNlRXJyb3IiLKBOVUxMLKA8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgJmFtcDtlcnJvcl9ub2RlKTs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKBBWElPTV9FTEVNRU5UX1NFVF9URVhUKGVycm9yX2VsZSygZW52LKAiRWNob6BzZXJ2aWNloGZhaWxlZKAiLKA8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgdGV4dF9ub2RlKTs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGI+PGNvZGU+cmV0dXJuPC9jb2RlPjwvYj48Y29kZT6gZXJyb3Jfbm9kZTs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPn08L2NvZGU+PGJyPjwvYnI+Cjxicj48L2JyPgo8aT48Y29kZT4vKqBGcmVloHRoZaByZXNvdXJjZXOgdXNlZKAqLzwvY29kZT48L2k+PGJyPjwvYnI+Cjxjb2RlPmludKBBWElTMl9DQUxMPC9jb2RlPjxicj48L2JyPgo8Y29kZT5lY2hvX2ZyZWUoYXhpczJfc3ZjX3NrZWxldG9uX3SgKnN2Y19za2VsZXRvbiw8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgoKCgoGNvbnN0IGF4aXMyX2Vudl90oCplbnYpPC9jb2RlPjxicj48L2JyPgo8Y29kZT57PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxpPjxjb2RlPi8qoEZyZWWgdGhloGZ1bmN0aW9uoGFycmF5oCovPC9jb2RlPjwvaT48YnI+PC9icj4KPGNvZGU+oKCgoDwvY29kZT48Yj48Y29kZT5pZjwvY29kZT48L2I+PGNvZGU+KHN2Y19za2VsZXRvbi0mZ3Q7ZnVuY19hcnJheSk8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKB7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoEFYSVMyX0FSUkFZX0xJU1RfRlJFRShzdmNfc2tlbGV0b24tJmd0O2Z1bmNfYXJyYXksoGVudik7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoHN2Y19za2VsZXRvbi0mZ3Q7ZnVuY19hcnJheaA9oE5VTEw7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgfTwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoDwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoDwvY29kZT48aT48Y29kZT4vKqBGcmVloHRoZaBmdW5jdGlvbqBhcnJheaAqLzwvY29kZT48L2k+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGI+PGNvZGU+aWY8L2NvZGU+PC9iPjxjb2RlPihzdmNfc2tlbGV0b24tJmd0O29wcyk8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKB7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoEFYSVMyX0ZSRUUoZW52LSZndDthbGxvY2F0b3IsoHN2Y19za2VsZXRvbi0mZ3Q7b3BzKTs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgc3ZjX3NrZWxldG9uLSZndDtvcHOgPaBOVUxMOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoH08L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGk+PGNvZGU+LyqgRnJlZaB0aGWgc2VydmljZaBza2VsZXRvbqAqLzwvY29kZT48L2k+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGI+PGNvZGU+aWY8L2NvZGU+PC9iPjxjb2RlPihzdmNfc2tlbGV0b24pPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgezwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKBBWElTMl9GUkVFKGVudi0mZ3Q7YWxsb2NhdG9yLKBzdmNfc2tlbGV0b24pOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKBzdmNfc2tlbGV0b26gPaBOVUxMOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoH08L2NvZGU+PGJyPjwvYnI+Cjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxiPjxjb2RlPnJldHVybjwvY29kZT48L2I+PGNvZGU+oEFYSVMyX1NVQ0NFU1M7oDwvY29kZT48YnI+PC9icj4KPGNvZGU+fTwvY29kZT48YnI+PC9icj4KPC9wPjxwPjwvcD48cD5Ob3cgd2UgY2FuIHdyaXRlIHRoZSA8Y29kZT5jcmVhdGU8L2NvZGU+IGZ1bmN0aW9uIG9mIHRoZQplY2hvX3NlcnZpY2Vfc2tlbGV0b24gYXMgZm9sbG93czo8L3A+PHA+PGk+PGNvZGU+LypDcmVhdGWgZnVuY3Rpb26gKi88L2NvZGU+PGJyPjwvYnI+CjwvaT48Y29kZT5heGlzMl9zdmNfc2tlbGV0b25fdKAqPC9jb2RlPjxicj48L2JyPgo8Y29kZT5heGlzMl9lY2hvX2NyZWF0ZShjb25zdCBheGlzMl9lbnZfdKAqZW52KTwvY29kZT48YnI+PC9icj4KPGNvZGU+ezwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoGF4aXMyX3N2Y19za2VsZXRvbl90oCpzdmNfc2tlbGV0b26gPaBOVUxMOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoDwvY29kZT48aT48Y29kZT4vKqBBbGxvY2F0ZaBtZW1vcnmgZm9yoHRoZaBzdHJ1Y3RzoCovPC9jb2RlPjwvaT48YnI+PC9icj4KPGNvZGU+oKCgoHN2Y19za2VsZXRvbqA9oEFYSVMyX01BTExPQyhlbnYtJmd0O2FsbG9jYXRvciygPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoDwvY29kZT48Yj48Y29kZT5zaXplb2Y8L2NvZGU+PC9iPjxjb2RlPihheGlzMl9zdmNfc2tlbGV0b25fdCkpOzwvY29kZT48YnI+PC9icj4KPGJyPjwvYnI+Cjxjb2RlPqCgoKBzdmNfc2tlbGV0b24tJmd0O29wc6A9oEFYSVMyX01BTExPQyg8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgZW52LSZndDthbGxvY2F0b3IsoDwvY29kZT48Yj48Y29kZT5zaXplb2Y8L2NvZGU+PC9iPjxjb2RlPihheGlzMl9zdmNfc2tlbGV0b25fb3BzX3QpKTs8L2NvZGU+PGJyPjwvYnI+Cjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxpPjxjb2RlPi8qoEFzc2lnbqBmdW5jdGlvbqBwb2ludGVyc6AqLzwvY29kZT48L2k+PGJyPjwvYnI+Cjxjb2RlPqCgoKBzdmNfc2tlbGV0b24tJmd0O29wcy0mZ3Q7ZnJlZaA9oGVjaG9fZnJlZTs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKBzdmNfc2tlbGV0b24tJmd0O29wcy0mZ3Q7aW5pdKA9oGVjaG9faW5pdDs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKBzdmNfc2tlbGV0b24tJmd0O29wcy0mZ3Q7aW52b2tloD2gZWNob19pbnZva2U7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgc3ZjX3NrZWxldG9uLSZndDtvcHMtJmd0O29uX2ZhdWx0oD2gZWNob19vbl9mYXVsdDs8L2NvZGU+PGJyPjwvYnI+Cjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxiPjxjb2RlPnJldHVybjwvY29kZT48L2I+PGNvZGU+oHN2Y19za2VsZXRvbjs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPn08L2NvZGU+PC9wPjxwPkluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBmdW5jdGlvbnMsIGV2ZXJ5IHNlcnZpY2UgbXVzdCBoYXZlIHRoZSBmb2xsb3dpbmcKdHdvIGZ1bmN0aW9ucyB3aXRoIGV4YWN0bHkgdGhlIHNhbWUgZnVuY3Rpb24gc2lnbmF0dXJlIGFzIGluIHh4eF9za2VsZXRvbi5jCmZpbGUuPC9wPjxwPjxjb2RlPkFYSVMyX0VYUE9SVKBpbnSgPC9jb2RlPjxicj48L2JyPgo8Y29kZT5heGlzMl9nZXRfaW5zdGFuY2UoYXhpczJfc3ZjX3NrZWxldG9uX3SgKippbnN0LDwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKCgoKCgoKCgoKCgoGNvbnN0IGF4aXMyX2Vudl90oCplbnYpPC9jb2RlPjxicj48L2JyPgo8Y29kZT57PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgKmluc3SgPaBheGlzMl9lY2hvX2NyZWF0ZShlbnYpOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoDwvY29kZT48Yj48Y29kZT5pZjwvY29kZT48L2I+PGNvZGU+KCEoKmluc3QpKTwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoHs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgPC9jb2RlPjxiPjxjb2RlPnJldHVybjwvY29kZT48L2I+PGNvZGU+oEFYSVMyX0ZBSUxVUkU7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgfTwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoDwvY29kZT48Yj48Y29kZT5yZXR1cm48L2NvZGU+PC9iPjxjb2RlPqBBWElTMl9TVUNDRVNTOzwvY29kZT48YnI+PC9icj4KPGNvZGU+fTwvY29kZT48YnI+PC9icj4KPGJyPjwvYnI+Cjxjb2RlPkFYSVMyX0VYUE9SVKBpbnSgPC9jb2RlPjxicj48L2JyPgo8Y29kZT5heGlzMl9yZW1vdmVfaW5zdGFuY2UoYXhpczJfc3ZjX3NrZWxldG9uX3SgKmluc3QsPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoKCgoKCgoKCgoKCgoKCgY29uc3QgYXhpczJfZW52X3SgKmVudik8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPns8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKBheGlzMl9zdGF0dXNfdKBzdGF0dXOgPaBBWElTMl9GQUlMVVJFOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoDwvY29kZT48Yj48Y29kZT5pZjwvY29kZT48L2I+PGNvZGU+oChpbnN0KTwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoHs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgc3RhdHVzoD2gQVhJUzJfU1ZDX1NLRUxFVE9OX0ZSRUUoaW5zdCygZW52KTs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKB9PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxiPjxjb2RlPnJldHVybjwvY29kZT48L2I+PGNvZGU+oHN0YXR1czs8L2NvZGU+PGJyPjwvYnI+Cn08YnI+PC9icj4KPC9wPjxwPjwvcD48cD5BeGlzMi9DIGVuZ2luZSBjYW4gbG9hZCB0aGUgc2VydmljZSBkbGwuIEhvd2V2ZXIsIGl0IG5lZWRzIHRvIGtub3cgd2hpY2gKbWV0aG9kIHRvIGNhbGwuIFNpbmNlIEMgZG9lcyBub3QgaGF2ZSByZWZsZWN0aW9uLCB3ZSBuZWVkIHRvIGhhdmUgc29tZSBkbGwKZXhwb3NpbmcgZnVuY3Rpb25zIGtub3duIHRvIEF4aXMyL0MgZW5naW5lLgo8Yj48Y29kZT5heGlzMl9nZXRfaW5zdGFuY2U8L2NvZGU+PC9iPiBhbmQKPGI+PGNvZGU+YXhpczJfcmVtb3ZlX2luc3RhbmNlPC9jb2RlPjwvYj4gYXJlIHRoZSB0d28gZnVuY3Rpb25zIHRoYXQgbmVlZCB0bwpiZSBleHBvc2VkIGZyb20gYSBzZXJ2aWNlIGRsbCAob3IgYW55IG90aGVyIGRsbCBvZiBBeGlzMi9DIGVuZ2luZSkuIEF4aXMyL0MKZW5naW5lIGNhbGxzIDxjb2RlPmF4aXMyX2dldF9pbnN0YW5jZTwvY29kZT4gbWV0aG9kLCB3aGljaCBjcmVhdGVzIGEgbmV3CnNlcnZpY2UgaW5zdGFuY2UsIGFuZCBjYXN0cyB0aGUgcmV0dXJuIHBvaW50ZXIgdG8KPGNvZGU+YXhpczJfc3ZjX3NrZWxldG9uPC9jb2RlPiBpbnRlcmZhY2UuIFRoZW4sIHRoZSBpbnRlcmZhY2UgbWV0aG9kcyBjYW4gYmUKY2FsbGVkIGJ5IEF4aXMyL0MgZW5naW5lLjwvcD48cD48YSBuYW1lPSJTdGVwMiI+PC9hPjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJTdGVwMl86X05vd193ZV9jYW5fd3JpdGVfdGhlX2VjaG9fc2VydmljZV9pbl9hX2ZpbGVfZWNob19jIj48L2E+PGgzPlN0ZXAyIDogTm93IHdlIGNhbiB3cml0ZSB0aGUgZWNobyBzZXJ2aWNlIGluIGEgZmlsZSBlY2hvLmM8L2gzPjxwPjxjb2RlPmF4aW9tX25vZGVfdKAqPC9jb2RlPjxicj48L2JyPgo8Y29kZT5heGlzMl9lY2hvX2VjaG+gKGNvbnN0IGF4aXMyX2Vudl90oCplbnYsoGF4aW9tX25vZGVfdKAqbm9kZSk8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPns8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKBheGlvbV9ub2RlX3SgKnRleHRfcGFyZW50X25vZGWgPaBOVUxMOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoGF4aW9tX25vZGVfdKAqdGV4dF9ub2RloD2gTlVMTDs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKBheGlvbV9ub2RlX3SgKnJldF9ub2RloD2gTlVMTDs8L2NvZGU+PGJyPjwvYnI+Cjxicj48L2JyPgo8Y29kZT6goKCgQVhJUzJfRU5WX0NIRUNLKGVudiygTlVMTCk7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKA8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGk+PGNvZGU+LyqgRXhwZWN0ZWSgcmVxdWVzdKBmb3JtYXSgaXOgOi08L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgKqAmbHQ7bnMxOmVjaG9TdHJpbmegeG1sbnM6bnMxPSJodHRwOi8vbG9jYWxob3N0OjkwOTAvYXhpczIvc2VydmljZXMvZWNobyImZ3Q7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoCqgoKCgoKAmbHQ7dGV4dCZndDtlY2hvNSZsdDsvdGV4dCZndDs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgKqAmbHQ7L25zMTplY2hvU3RyaW5nJmd0OzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKAqLzwvY29kZT48L2k+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGI+PGNvZGU+aWY8L2NvZGU+PC9iPjxjb2RlPqAoIW5vZGUpoDwvY29kZT48aT48Y29kZT4vKqAnZWNob1N0cmluZyegbm9kZaAqLzwvY29kZT48L2k+PGJyPjwvYnI+Cjxjb2RlPqCgoKB7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoEFYSVMyX0VSUk9SX1NFVChlbnYtJmd0O2Vycm9yLKBBWElTMl9FUlJPUl9TVkNfU0tFTF9JTlBVVF9PTV9OT0RFX05VTEwsoEFYSVMyX0ZBSUxVUkUpOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKBwcmludGYoIkVjaG+gY2xpZW50oEVSUk9SOqBpbnB1dKBwYXJhbWV0ZXKgTlVMTFxuIik7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoDwvY29kZT48Yj48Y29kZT5yZXR1cm48L2NvZGU+PC9iPjxjb2RlPqBOVUxMOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoH08L2NvZGU+PGJyPjwvYnI+Cjxicj48L2JyPgo8Y29kZT6goKCgdGV4dF9wYXJlbnRfbm9kZaA9oEFYSU9NX05PREVfR0VUX0ZJUlNUX0NISUxEKG5vZGUsoGVudik7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxiPjxjb2RlPmlmPC9jb2RlPjwvYj48Y29kZT6gKCF0ZXh0X3BhcmVudF9ub2RlKaA8L2NvZGU+PGk+PGNvZGU+LyqgJ3RleHQnoG5vZGWgKi88L2NvZGU+PC9pPjxicj48L2JyPgo8Y29kZT6goKCgezwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKBBWElTMl9FUlJPUl9TRVQoZW52LSZndDtlcnJvciygQVhJUzJfRVJST1JfU1ZDX1NLRUxfSU5WQUxJRF9YTUxfRk9STUFUX0lOX1JFUVVFU1QsoEFYSVMyX0ZBSUxVUkUpOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKBwcmludGYoIkVjaG+gY2xpZW50oEVSUk9SOqBpbnZhbGlkoFhNTKBpbqByZXF1ZXN0XG4iKTs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgPC9jb2RlPjxiPjxjb2RlPnJldHVybjwvY29kZT48L2I+PGNvZGU+oE5VTEw7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgfTwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoDwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoHRleHRfbm9kZaA9oEFYSU9NX05PREVfR0VUX0ZJUlNUX0NISUxEKHRleHRfcGFyZW50X25vZGUsoGVudik7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxiPjxjb2RlPmlmPC9jb2RlPjwvYj48Y29kZT6gKCF0ZXh0X25vZGUpoDwvY29kZT48aT48Y29kZT4vKqBhY3R1YWygdGV4dKB0b6BlY2hvoCovPC9jb2RlPjwvaT48YnI+PC9icj4KPGNvZGU+oKCgoHs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgQVhJUzJfRVJST1JfU0VUKGVudi0mZ3Q7ZXJyb3IsoEFYSVMyX0VSUk9SX1NWQ19TS0VMX0lOVkFMSURfWE1MX0ZPUk1BVF9JTl9SRVFVRVNULKBBWElTMl9GQUlMVVJFKTs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgcHJpbnRmKCJFY2hvoGNsaWVudKBFUlJPUjqgaW52YWxpZKBYTUygaW6gcmVxdWVzdFxuIik7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoDwvY29kZT48Yj48Y29kZT5yZXR1cm48L2NvZGU+PC9iPjxjb2RlPqBOVUxMOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoH08L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGI+PGNvZGU+aWY8L2NvZGU+PC9iPjxjb2RlPqAoQVhJT01fTk9ERV9HRVRfTk9ERV9UWVBFKHRleHRfbm9kZSygZW52KaA9PaBBWElPTV9URVhUKTwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoHs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgYXhpb21fdGV4dF90oCp0ZXh0oD2gKGF4aW9tX3RleHRfdKAqKUFYSU9NX05PREVfR0VUX0RBVEFfRUxFTUVOVCh0ZXh0X25vZGUsoGVudik7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoDwvY29kZT48Yj48Y29kZT5pZjwvY29kZT48L2I+PGNvZGU+KKB0ZXh0oCZhbXA7JmFtcDugQVhJT01fVEVYVF9HRVRfVkFMVUUodGV4dKAsoGVudikpPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoHs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgoKCgoGF4aXMyX2NoYXJfdKAqdGV4dF9zdHKgPaBBWElPTV9URVhUX0dFVF9WQUxVRSh0ZXh0LKBlbnYpOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKCgoKCgcHJpbnRmKCJFY2hvaW5noHRleHSgdmFsdWWgoCVzoFxuIiygdGV4dF9zdHIpOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKCgoKCgcmV0X25vZGWgPaBidWlsZF9vbV9wcm9ncmFtYXRpY2FsbHkoZW52LKB0ZXh0X3N0cik7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgoKCgoH08L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKB9PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxiPjxjb2RlPmVsc2U8L2NvZGU+PC9iPjxicj48L2JyPgo8Y29kZT6goKCgezwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKBBWElTMl9FUlJPUl9TRVQoZW52LSZndDtlcnJvciygQVhJUzJfRVJST1JfU1ZDX1NLRUxfSU5WQUxJRF9YTUxfRk9STUFUX0lOX1JFUVVFU1QsoEFYSVMyX0ZBSUxVUkUpOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKBwcmludGYoIkVjaG+gY2xpZW50oEVSUk9SOqBpbnZhbGlkoFhNTKBpbqByZXF1ZXN0XG4iKTs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKCgoKCgPC9jb2RlPjxiPjxjb2RlPnJldHVybjwvY29kZT48L2I+PGNvZGU+oE5VTEw7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgfTwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoKCgoKA8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKA8L2NvZGU+PGI+PGNvZGU+cmV0dXJuPC9jb2RlPjwvYj48Y29kZT6gcmV0X25vZGU7PC9jb2RlPjxicj48L2JyPgo8Y29kZT59PC9jb2RlPjxicj48L2JyPgo8YnI+PC9icj4KPGk+PGNvZGU+LyqgQnVpbGRzoHRoZaByZXNwb25zZaBjb250ZW50oCovPC9jb2RlPjwvaT48YnI+PC9icj4KPGNvZGU+YXhpb21fbm9kZV90oCo8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPmJ1aWxkX29tX3Byb2dyYW1hdGljYWxseShjb25zdApheGlzMl9lbnZfdKAqZW52LKBheGlzMl9jaGFyX3SgKnRleHQpPC9jb2RlPjxicj48L2JyPgo8Y29kZT57PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgYXhpb21fbm9kZV90oCplY2hvX29tX25vZGWgPaBOVUxMOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoGF4aW9tX2VsZW1lbnRfdCqgZWNob19vbV9lbGWgPaBOVUxMOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoGF4aW9tX25vZGVfdCqgdGV4dF9vbV9ub2RloD2gTlVMTDs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPqCgoKBheGlvbV9lbGVtZW50X3SgKqB0ZXh0X29tX2VsZaA9oE5VTEw7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgYXhpb21fbmFtZXNwYWNlX3SgKm5zMaA9oE5VTEw7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgbnMxoD2gYXhpb21fbmFtZXNwYWNlX2NyZWF0ZaAoZW52LKAiaHR0cDovL2xvY2FsaG9zdDo5MDkwL2F4aXMyL3NlcnZpY2VzL2VjaG8iLKAibnMxIik7PC9jb2RlPjxicj48L2JyPgo8YnI+PC9icj4KPGNvZGU+oKCgoGVjaG9fb21fZWxloD2gYXhpb21fZWxlbWVudF9jcmVhdGUoZW52LKBOVUxMLKAiZWNob1N0cmluZyIsoG5zMSygJmFtcDtlY2hvX29tX25vZGUpOzwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoDwvY29kZT48YnI+PC9icj4KPGNvZGU+oKCgoHRleHRfb21fZWxloD2gYXhpb21fZWxlbWVudF9jcmVhdGUoZW52LKBlY2hvX29tX25vZGUsoCJ0ZXh0IiygTlVMTCygJmFtcDt0ZXh0X29tX25vZGUpOzwvY29kZT48YnI+PC9icj4KPGJyPjwvYnI+Cjxjb2RlPqCgoKBBWElPTV9FTEVNRU5UX1NFVF9URVhUKHRleHRfb21fZWxlLKBlbnYsoHRleHQsoHRleHRfb21fbm9kZSk7PC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxicj48L2JyPgo8Y29kZT6goKCgPC9jb2RlPjxiPjxjb2RlPnJldHVybjwvY29kZT48L2I+PGNvZGU+oGVjaG9fb21fbm9kZTs8L2NvZGU+PGJyPjwvYnI+Cjxjb2RlPn08L2NvZGU+PGJyPjwvYnI+CjwvcD48cD48YSBuYW1lPSJTdGVwMyI+PC9hPjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJTdGVwM186V3JpdGVfdGhlX3NlcnZpY2VzX3htbF9maWxlIj48L2E+PGgzPlN0ZXAzIDpXcml0ZSB0aGUgc2VydmljZXMueG1sIGZpbGU8L2gzPjxwPkF4aXMyL0MgdXNlcyAic2VydmljZXMueG1sIiBmaWxlIHRvIGtlZXAgY29uZmlndXJhdGlvbnMgb2YgYSBXZWIgc2VydmljZS4KRWFjaCBXZWIgc2VydmljZSBkZXBsb3llZCBpbiBBeGlzMi9DIG5lZWRzIGEgInNlcnZpY2VzLnhtbCIgZmlsZSBjb250YWluaW5nCnRoZSBjb25maWd1cmF0aW9ucy4gTm90ZSB0aGF0IHNlcnZpY2VzLnhtbCBoYXMgdGhlIHNhbWUgc2VtYW50aWNzIGFzIEF4aXMyCkphdmEncyBzZXJ2aWNlcy54bWwgZmlsZS4gT25seSBkaWZmZXJlbmNlIGlzIHRoYXQgaW5zdGVhZCBvZiBnaXZpbmcgcGFja2FnZQpxdWFsaWZpZWQgY2xhc3MgbmFtZSwgd2UgdXNlIHRoZSBkbGwgbmFtZSBmb3IgY2xhc3MgYXR0cmlidXRlcy48L3A+PHA+InNlcnZpY2VzLnhtbCIgZm9yIGVjaG8gd2lsbCBiZSBhcyBmb2xsb3dzOjwvcD48Y29kZSBjbGFzcz0iY29kZSI+Jmx0O3NlcnZpY2UgbmFtZT0iZWNobyImZ3Q7PGJyPjwvYnI+ICZsdDtwYXJhbWV0ZXIgbmFtZT0iU2VydmljZUNsYXNzIiBsb2NrZWQ9InhzZDpmYWxzZSImZ3Q7ZWNobyZsdDsvcGFyYW1ldGVyJmd0Ozxicj48L2JyPiAmbHQ7ZGVzY3JpcHRpb24mZ3Q7PGJyPjwvYnI+IFRoaXMgaXMgYSBlY2hvIHNlcnZpY2U8YnI+PC9icj4gJmx0Oy9kZXNjcmlwdGlvbiZndDs8YnI+PC9icj48YnI+PC9icj4gJmx0O29wZXJhdGlvbiBuYW1lPSJlY2hvU3RyaW5nIiZndDs8YnI+PC9icj4gJmx0O3BhcmFtZXRlciBuYW1lPSJ3c2FtYXBwaW5nIiZndDs8YnI+PC9icj4gaHR0cDovL2xvY2FsaG9zdDo5MDkwL2F4aXMyL3NlcnZpY2VzL2VjaG8vZWNob1N0cmluZzxicj48L2JyPiAmbHQ7L3BhcmFtZXRlciZndDs8YnI+PC9icj4gJmx0Oy9vcGVyYXRpb24mZ3Q7PGJyPjwvYnI+Jmx0Oy9zZXJ2aWNlJmd0OzwvY29kZT48cD5OYW1lIG9mIHRoZSBzZXJ2aWNlIHdpbGwgYmUgdGhlIG5hbWUgb2YgdGhlIGZvbGRlciB3aXRoIHRoZSBzaGFyZWQgbGlicmFyeQphbmQgc2VydmljZXMueG1sLiBJbiB0aGlzIGV4YW1wbGUgd2Ugd2lsbCBoYXZlIGEgZm9sZGVyIG5hbWVkCiJlY2hvIiBpbiB3aGljaCB3ZSBoYXZlIHRoZSBlY2hvLmRsbCAob3IgbGliZWNoby5zbyBvbiBMaW51eCBwbGF0Zm9ybSkgYW5kCnNlcnZpY2VzLnhtbCBmaWxlLjwvcD48cD5Zb3UgY2FuIHdyaXRlIGEgc2VydmljZXMueG1sIGZpbGUgdG8gaW5jbHVkZSBhIGdyb3VwIG9mIHNlcnZpY2VzIGluc3RlYWQKb2YgYSBzaW5nbGUgc2VydmljZS4gVGhpcyBtYWtlcyBtYW5hZ2VtZW50IGFuZCBkZXBsb3ltZW50IG9mIGEgc2V0IG9mIHJlbGF0ZWQKc2VydmljZXMgdmVyeSBlYXN5LiBBdCBydW50aW1lIHlvdSBjYW4gc2hhcmUgaW5mb3JtYXRpb24gYmV0d2VlbiB0aGVzZQpzZXJ2aWNlcyB3aXRoaW4gYSBzaW5nbGUgaW50ZXJhY3Rpb24gdXNpbmcgdGhlIDxjb2RlPmF4aXMyX3N2Y19ncnBfY3R4PC9jb2RlPgooU2VydmljZSBHcm91cCBDb250ZXh0ICkuIElmIHlvdSBob3BlIHRvIHVzZSB0aGlzIGZ1bmN0aW9uYWxpdHksIHRoZQpzZXJ2aWNlcy54bWwgZmlsZSBzaG91bGQgaGF2ZSBmb2xsb3dpbmcgZm9ybWF0Ojxicj48L2JyPgo8L3A+PGNvZGUgY2xhc3M9ImNvZGUiPiZsdDtzZXJ2aWNlR3JvdXAmZ3Q7PGJyPjwvYnI+ICZsdDtzZXJ2aWNlIG5hbWU9IlNlcnZpY2UxIiZndDs8YnI+PC9icj4gJmx0OyEtLSBkZXRhaWxzIGZvciBTZXJ2aWNlMSAtLSZndDs8YnI+PC9icj4gJmx0Oy9zZXJ2aWNlJmd0Ozxicj48L2JyPiAmbHQ7c2VydmljZSBuYW1lPSJTZXJ2aWNlMiImZ3Q7PGJyPjwvYnI+ICZsdDshLS0gZGV0YWlscyBmb3IgU2VydmljZTIgLS0mZ3Q7PGJyPjwvYnI+ICZsdDsvc2VydmljZSZndDs8YnI+PC9icj4gJmx0O21vZHVsZSByZWY9Ik1vZHVsZU5hbWUiIC8mZ3Q7PGJyPjwvYnI+ICZsdDtwYXJhbWV0ZXIgbmFtZT0ic2VydmljZUdyb3VwUGFyYW0xIiBsb2NrZWQ9ImZhbHNlIiZndDt2YWx1ZSAxJmx0Oy9wYXJhbWV0ZXImZ3Q7PGJyPjwvYnI+Jmx0Oy9zZXJ2aWNlR3JvdXAmZ3Q7PC9jb2RlPjxwPjxzdHJvbmc+Tm90ZSA6PC9zdHJvbmc+IE5hbWUgb2YgdGhlIHNlcnZpY2UgaXMgYSBjb21wdWxzb3J5IGF0dHJpYnV0ZTwvcD48cD48YSBuYW1lPSJTdGVwNCI+PC9hPjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJTdGVwNF86Q3JlYXRlX3RoZV9XZWJfc2VydmljZV9mb2xkZXJfaW5fc2VydmljZXNfZm9sZGVyX29mX3RoZV9yZXBvc2l0b3J5XyI+PC9hPjxoMz5TdGVwNCA6Q3JlYXRlIHRoZSBXZWIgc2VydmljZSBmb2xkZXIgaW4gc2VydmljZXMgZm9sZGVyIG9mIHRoZSByZXBvc2l0b3J5LjwvaDM+PHA+SW4gQXhpczIvQyAsIGl0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBhIGZvbGRlciB3aXRoIHRoZSBjb3JyZXNwb25kaW5nCnNlcnZpY2Uvc2VydmljZSBncm91cCBuYW1lIHdoaWNoIHdpbGwgY29udGFpbiB0aGUgc2hhcmVkIGxpYnJhcnkgKGNvbXBpbGVkCnNlcnZpY2UpIGFuZCB0aGUgc2VydmljZXMueG1sIGZpbGUgd2hpY2ggZGVzY3JpYmVzIHRoZSBXZWIgc2VydmljZS4gU28gZm9yCnRoaXMgZXhhbXBsZSwgd2Ugd2lsbCBoYXZlIHRvIGNyZWF0ZSBhIGZvbGRlciBuYW1lZCAiZWNobyIsIHdoaWNoIGNvbnRhaW5zCnRoZSBzZXJ2aWNlcy54bWwgZmlsZSBhbmQgZWNobyBkbGwuPC9wPjxwPjxhIG5hbWU9IlN0ZXA1Ij48L2E+PC9wPjwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9IlN0ZXA1XzpBcmNoaXZlX0Jhc2VkX0RlcGxveW1lbnRfTW9kZWwiPjwvYT48aDM+U3RlcDUgOkFyY2hpdmUgQmFzZWQgRGVwbG95bWVudCBNb2RlbDwvaDM+PHA+QXhpczIgdXNlcyAiLmFhciIgKEF4aXMgQXJjaGl2ZSkgZmlsZSBhcyB0aGUgZGVwbG95bWVudCBwYWNrYWdlIGZvciB0aGUKV2ViIHNlcnZpY2VzLiBUaGVyZWZvcmUsIGZvciBlY2hvIHNlcnZpY2Ugd2Ugd2lsbCB1c2UgImVjaG8uYWFyIi4gTm90ZSB0aGF0CnRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIHdpbGwgYmUgdGhlIG5hbWUgb2YgdGhlIGFyY2hpdmUgZmlsZS4gVG8gY3JlYXRlCiJlY2hvLmFhciIgdXNlciBjYW4gY3JlYXRlIGEgemlwIGZpbGUgY29udGFpbmluZyBlY2hvLnNvIGFuZCBzZXJ2aWNlcy54bWwgYW5kCnJlbmFtZSB0aGUgemlwIGV4dGVuc2lvbiB0byBhYXIuIFRoZW4gQXhpczIgdW5kZXJzdGFuZHMgaXQgYXMgYSBzZXJ2aWNlCmFyY2hpdmUuPC9wPjxwPjxhIG5hbWU9IldyaXRpbmdfV2ViX1NlcnZpY2VzX1VzaW5nX0NvZGVfR2VuZXJhdG9yIj48L2E+PC9wPjwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9IldyaXRpbmdfV2ViX1NlcnZpY2VzX1NrZWxldG9uX1VzaW5nX0NvZGVfR2VuZXJhdG9yIj48L2E+PGgzPldyaXRpbmcgV2ViIFNlcnZpY2VzIFNrZWxldG9uIFVzaW5nIENvZGUgR2VuZXJhdG9yPC9oMz48cD48YSBpZD0iV1NETDJDX3Rvb2wiPjwvYT48L3A+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iV1NETDJDX3Rvb2wiPjwvYT48aDM+V1NETDJDIHRvb2w8L2gzPjxwPkF4aXMyL0phdmEgV1NETDJDIHRvb2wgc3VwcG9ydHMgZ2VuZXJhdGlvbiBvZiBBeGlzMi9DIHN0dWIgYW5kCnNrZWxldG9uLiA8YSBocmVmPSJodHRwOi8vc3ZuLmFwYWNoZS5vcmcvdmlld3ZjL3dlYnNlcnZpY2VzL2F4aXMyL3RydW5rL2phdmEiIGNsYXNzPSJleHRlcm5hbExpbmsiIHRpdGxlPSJFeHRlcm5hbCBMaW5rIj5BeGlzMi9KYXZhClNWTjwvYT4gcmV2aXNpb24gNDE0MjUzIGFuZCBsYXRlciB2ZXJzaW9ucyBwcm92aWRlIHRoaXMgZmFjaWxpdHkuIEEgYmFzaWMKZ3VpZGUgZm9yIHRoZSB0b29sIGNhbiBiZSBmb3VuZCA8YSBocmVmPSJodHRwOi8vd3MuYXBhY2hlLm9yZy9heGlzMi8xXzAvdXNlcmd1aWRlMi5odG1sI1dyaXRpbmdfV2ViX1NlcnZpY2VzX2J5X0NvZGVfR2VuZXJhdGluZ19Ta2VsZXRvbiIgY2xhc3M9ImV4dGVybmFsTGluayIgdGl0bGU9IkV4dGVybmFsIExpbmsiPmhlcmUuPC9hPjwvcD48cD5XZSB3aWxsIHJ1biB0aGUgdG9vbCB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhbmQgZ2VuZXJhdGUgdGhlCnNrZWxldG9uIGFuZCBvdGhlciByZXF1aXJlZCBmaWxlcyB0byBzdXBwb3J0IEFEQiAoQXhpcyBEYXRhIEJpbmRpbmcpLiBJbgpvcmRlciB0byBydW4gdGhlIHRvb2wsIDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPnNldCBhbGwgdGhlIC5qYXIKbGlicmFyeSBmaWxlcyBpbiB0aGUgQXhpczIvSmF2YSB0byB0aGUgY2xhc3NwYXRoPC9zcGFuPi4gVG8gZ2VuZXJhdGUgY29kZQp3aXRoIG5vIGRhdGEgYmluZGluZyBzdXBwb3J0LCBqdXN0IHJlcGxhY2UgLWQgYWRiIC11IHdpdGggLWQgbm9uZTwvcD4KICAgIDxkaXYgY2xhc3M9InNvdXJjZSI+PHByZT4KamF2YSBvcmcuYXBhY2hlLmF4aXMyLndzZGwuV1NETDJDIC11cmkgaW50ZXJvcHRlc3Rkb2NsaXRwYXJhbWV0ZXJzLndzZGwgLXNzIC1zZCAtZCBhZGIgLXUgCgoKPC9wcmU+PC9kaXY+CiAgPHA+SWYgeW91IG5lZWQgYW4gWE1MIGluL291dCBwcm9ncmFtbWluZyBtb2RlbCwgeW91IGNhbiBqdXN0IGlnbm9yZSB0aGUgZGF0YQpiaW5kaW5nIHN1cHBvcnQgYnkgc2V0dGluZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMuCjxwcmU+amF2YSBvcmcuYXBhY2hlLmF4aXMyLndzZGwuV1NETDJDIC11cmkgaW50ZXJvcHRlc3Rkb2NsaXRwYXJhbWV0ZXJzLndzZGwgLXNzIC1zZCAtZCBub25lPC9wcmU+Cgo8L3A+PHA+VGhlIFdTREwgPGNvZGU+aW50ZXJvcHRlc3Rkb2NsaXRwYXJhbWV0ZXJzLndzZGw8L2NvZGU+IGNhbiBiZSBmb3VuZCBpbgombHQ7YXhpczJfc3JjX2RpciZndDsvdGVzdC9yZXNvdXJjZXMgZGlyZWN0b3J5LiBUaGlzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgc3R1YgphbmQgc2tlbGV0b24gY29kZSB0aHJvdWdob3V0IHRoaXMgVXNlcidzIEd1aWRlLjwvcD48cD48YSBpZD0iSW1wbGVtZW50X3RoZV9CdXNpbmVzc19Mb2dpYyI+PC9hPjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJJbXBsZW1lbnRfdGhlX0J1c2luZXNzX0xvZ2ljIj48L2E+PGgzPkltcGxlbWVudCB0aGUgQnVzaW5lc3MgTG9naWM8L2gzPjxwPgpMb2NhdGUgdGhlIHNrZWxldG9uIHNvdXJjZSBmaWxlIGZyb20gdGhlIGdlbmVyYXRlZCBmaWxlczoKIjxjb2RlPmF4aXMyX1dTRExJbnRlcm9wVGVzdERvY0xpdFNlcnZpY2UuYzwvY29kZT4iLiBZb3UgY2FuIGdvIHRocm91Z2ggdGhlCnJlc3Qgb2YgdGhlIGd1aWRlIHRvIGFkZCB0aGUgYnVzaW5lc3MgbG9naWMgdG8gdGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGluCnRoZSBXU0RMLgo8dWw+CiAgPGxpPmVjaG9TdHJpbmcgLSBPcGVyYXRpb24gdGhhdCBlY2hvZXMgYSBTdHJpbmcgdmFsdWUuPC9saT4KICA8bGk+ZWNob1N0cmluZ0FycmF5IC0gT3BlcmF0aW9uIHRoYXQgYWNjZXB0cyBhIHN0cmluZyBhcnJheSBhcyB0aGUgaW5wdXQgYW5kCiAgICBlY2hvZXMgdGhlbSBiYWNrLjwvbGk+CiAgPGxpPmVjaG9TdHJ1Y3QgLSBPcGVyYXRpb24gdGhhdCBhY2NlcHRzIGEgU3RydWN0IGFzIHRoZSBpbnB1dCBhbmQgZWNob2VzCiAgICB0aGVtIGJhY2suPC9saT4KPC91bD48L3A+PHA+Q29tcGxldGUgc2tlbGV0b24gc291cmNlIGZpbGUgZm9yIHRoZSBhYm92ZSBvcGVyYXRpb25zIGNhbiBiZSBmb3VuZCB1bmRlcgombHQ7YXhpczJfc3JjX2RpciZndDsvc2FtcGxlcy9jb2RlZ2VuL3NlcnZlci9pbnRlcm9wX2RvYzIgZGlyZWN0b3J5IHdpdGggdGhlCm5hbWUgIjxjb2RlPmF4aXMyX1dTRExJbnRlcm9wVGVzdERvY0xpdFNlcnZpY2UuYzwvY29kZT4iLjwvcD48cD48YSBpZD0iZWNob1N0cmluZyI+PC9hPjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJlY2hvU3RyaW5nIj48L2E+PGgzPmVjaG9TdHJpbmc8L2gzPjxwPklmIHlvdSBnZW5lcmF0ZSB0aGUgY29kZSB3aXRoIGRhdGEgYmluZGluZyBzdXBwb3J0LCB5b3Ugd2lsbCBmaW5kIHRoZQpmb2xsb3dpbmcgY29kZSBzZWdtZW50IGluIHRoZQoiPGNvZGU+YXhpczJfV1NETEludGVyb3BUZXN0RG9jTGl0U2VydmljZS5jPC9jb2RlPiIuIEZpbGwgdGhlIGJ1c2luZXNzIGxvZ2ljCmluc2lkZSB0aGlzIGZ1bmN0aW9uIGFzIHNob3duIGJlbG93OjwvcD4KICAgIDxkaXYgY2xhc3M9InNvdXJjZSI+PHByZT4KYXhpczJfZWNob1N0cmluZ1Jlc3BvbnNlX3QqCmF4aXMyX1dTRExJbnRlcm9wVGVzdERvY0xpdFNlcnZpY2VfZWNob1N0cmluZwogKGNvbnN0IGF4aXMyX2Vudl90KiBlbnYgLGF4aXMyX2VjaG9TdHJpbmdfdCogcGFyYW02ICkKewogLyogVG9kbyBmaWxsIHRoaXMgd2l0aCB0aGUgbmVjZXNzYXJ5IGJ1c2luZXNzIGxvZ2ljICp9CgoKPC9wcmU+PC9kaXY+CiAgPHA+T25jZSB0aGUgYnVzaW5lc3MgbG9naWMgaXMgZmlsbGVkLCBpdCB3aWxsIGJlIGFzIGZvbGxvd3MuIFRoZSBjb2RlIGlzCnNpbXBsZSBhbmQgdGhlIGlubGluZSBjb21tZW50cyBwcm92aWRlIGV4cGxhbmF0aW9uLjwvcD4KICAgIDxkaXYgY2xhc3M9InNvdXJjZSI+PHByZT4KYXhpczJfZWNob1N0cmluZ1Jlc3BvbnNlX3QqCmF4aXMyX1dTRExJbnRlcm9wVGVzdERvY0xpdFNlcnZpY2VfZWNob1N0cmluZwogKGNvbnN0IGF4aXMyX2Vudl90KiBlbnYgLGF4aXMyX2VjaG9TdHJpbmdfdCogcGFyYW02ICkKewogYXhpczJfZWNob1N0cmluZ190KiBlY2hvX2luID0gcGFyYW02OwogYXhpczJfZWNob1N0cmluZ1Jlc3BvbnNlX3QqIGVjaG9fb3V0ID0gTlVMTDsKCiBjaGFyKiBlY2hvX3N0cmluZyA9IE5VTEw7CiAKIC8qIHJldHJpZXZlIHRoZSBzdHJpbmcgaW5wdXQgKi8KIGVjaG9fc3RyaW5nID0gQVhJUzJfRUNIT1NUUklOR19HRVRfUEFSQU0wICggZWNob19pbiwgZW52ICk7CgogLyogY3JlYXRlIHRoZSByZXNwb25zZSBhbmQgc2V0IHRoZSBvdXRwdXQgc3RyaW5nICovCiBlY2hvX291dCA9IGF4aXMyX2VjaG9TdHJpbmdSZXNwb25zZV9jcmVhdGUgKCBlbnYgKTsKIEFYSVMyX0VDSE9TVFJVQ1RSRVNQT05TRV9TRVRfUkVUVVJOICggZWNob19vdXQsIGVudiwgZWNob19zdHJpbmcgKTsKCiByZXR1cm4gZWNob19vdXQ7Cn0KCjwvcHJlPjwvZGl2PgogIDwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9ImVjaG9TdHJpbmdBcnJheSI+PC9hPjxoMz5lY2hvU3RyaW5nQXJyYXk8L2gzPgogICAgPGRpdiBjbGFzcz0ic291cmNlIj48cHJlPgpheGlzMl9lY2hvU3RyaW5nQXJyYXlSZXNwb25zZV90KgpheGlzMl9XU0RMSW50ZXJvcFRlc3REb2NMaXRTZXJ2aWNlX2VjaG9TdHJpbmdBcnJheQogKGNvbnN0IGF4aXMyX2Vudl90KiBlbnYgLGF4aXMyX2VjaG9TdHJpbmdBcnJheV90KiBwYXJhbTIgKQoKewogYXhpczJfZWNob1N0cmluZ0FycmF5X3QqIGVjaG9faW4gPSBwYXJhbTI7CiBheGlzMl9lY2hvU3RyaW5nQXJyYXlSZXNwb25zZV90KiBlY2hvX291dCA9IE5VTEw7CiBheGlzMl9BcnJheU9mc3RyaW5nX2xpdGVyYWxfdCogYXJyYXlfaW4gPSBOVUxMOwogYXhpczJfQXJyYXlPZnN0cmluZ19saXRlcmFsX3QqIGFycmF5X291dCA9IE5VTEw7CiBjaGFyICoqIHN0cmluZ19hcnJheSA9IE5VTEw7CiBpbnQgc3RyaW5nX2FycmF5X2xlbmd0aCA9IDA7CiAKIC8qIHJldHJpZXZlIHRoZSBhcnJheSBmcm9tIGlucHV0Ki8KIGFycmF5X2luID0gQVhJUzJfRUNIT1NUUklOR0FSUkFZX0dFVF9QQVJBTTAoIGVjaG9faW4sIGVudik7CiAvKiByZXRyaWV2ZSB0aGUgc3RyaW5nX2FycmF5IGFuZCBhcnJheSBsZW5ndGggKi8KIHN0cmluZ19hcnJheSA9CiBBWElTMl9BUlJBWU9GU1RSSU5HX0xJVEVSQUxfR0VUX1NUUklORyAKIChhcnJheV9pbiwgZW52LCZhbXA7c3RyaW5nX2FycmF5X2xlbmd0aCApOwogCiAvKiBjcmVhdGUgdGhlIG91dHB1dCBhcnJheSBhbmQgc2V0IHRoZSBzdHJpbmcgYXJyYXkgYW5kIGxlbmd0aCAqLwogYXJyYXlfb3V0ID0gYXhpczJfQXJyYXlPZnN0cmluZ19saXRlcmFsX2NyZWF0ZSAoIGVudiApOwogQVhJUzJfQVJSQVlPRlNUUklOR19MSVRFUkFMX1NFVF9TVFJJTkcoCiBhcnJheV9vdXQsIGVudiwgc3RyaW5nX2FycmF5LCBzdHJpbmdfYXJyYXlfbGVuZ3RoICk7CiAKIC8qIGNyZWF0ZSB0aGUgcmVzcG9uc2UgYW5kIHNldCB0aGUgb3V0cHV0Ki8KIGVjaG9fb3V0ID0gYXhpczJfZWNob1N0cmluZ0FycmF5UmVzcG9uc2VfY3JlYXRlICggZW52ICk7CiBBWElTMl9FQ0hPU1RSSU5HQVJSQVlSRVNQT05TRV9TRVRfUkVUVVJOICggZWNob19vdXQsIGVudiAsIGFycmF5X291dAogKTsKIAogcmV0dXJuIGVjaG9fb3V0OwoKPC9wcmU+PC9kaXY+CiAgPC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iZWNob1N0cnVjdCI+PC9hPjxoMz5lY2hvU3RydWN0PC9oMz4KICAgIDxkaXYgY2xhc3M9InNvdXJjZSI+PHByZT4KYXhpczJfZWNob1N0cnVjdFJlc3BvbnNlX3QqCmF4aXMyX1dTRExJbnRlcm9wVGVzdERvY0xpdFNlcnZpY2VfZWNob1N0cnVjdAogKGNvbnN0IGF4aXMyX2Vudl90KiBlbnYgLGF4aXMyX2VjaG9TdHJ1Y3RfdCogcGFyYW00ICkKCnsKIGF4aXMyX2VjaG9TdHJ1Y3RfdCogZWNob19pbiA9IHBhcmFtNDsKIGF4aXMyX2VjaG9TdHJ1Y3RSZXNwb25zZV90KiBlY2hvX291dCA9IE5VTEw7CiBheGlzMl9TT0FQU3RydWN0X3QqIHN0cnVjdF9pbiA9IE5VTEw7CiBheGlzMl9TT0FQU3RydWN0X3QqIHN0cnVjdF9vdXQgPSBOVUxMOwogCiBmbG9hdCBmbG9hdF92YWwgPSAwOwogaW50IGludF92YWwgPSAwOwogY2hhciogc3RyaW5nX3ZhbCA9IE5VTEw7CiAKIC8qIHJldHJpZXZlIHRoZSBzdHJ1Y3R1cmUgZnJvbSBpbnB1dCAqLwogc3RydWN0X2luID0gQVhJUzJfRUNIT1NUUlVDVF9HRVRfUEFSQU0wKCBlY2hvX2luLCBlbnYpOwoKIC8qIHJldHJpZXZlIGVhY2ggdmFsdWUgZnJvbSB0aGUgc3RydWN0dXJlICovIAogZmxvYXRfdmFsID0gQVhJUzJfU09BUFNUUlVDVF9HRVRfVkFSRkxPQVQgKCBzdHJ1Y3RfaW4sIGVudik7CiBpbnRfdmFsID0gQVhJUzJfU09BUFNUUlVDVF9HRVRfVkFSSU5UICggc3RydWN0X2luLCBlbnYpOwogc3RyaW5nX3ZhbCA9IEFYSVMyX1NPQVBTVFJVQ1RfR0VUX1ZBUlNUUklORyAoIHN0cnVjdF9pbiwgZW52KTsKIAogLyogY3JlYXRlIHRoZSBvdXRwdXQgc3RydWN0dXJlIGFuZCBzZXQgdmFsdWVzICovCiBzdHJ1Y3Rfb3V0ID0gYXhpczJfU09BUFN0cnVjdF9jcmVhdGUoIGVudiApOwogQVhJUzJfU09BUFNUUlVDVF9TRVRfVkFSRkxPQVQgKCBzdHJ1Y3Rfb3V0LCBlbnYsIGZsb2F0X3ZhbCApOwogQVhJUzJfU09BUFNUUlVDVF9TRVRfVkFSSU5UICggc3RydWN0X291dCwgZW52LCBpbnRfdmFsICk7CiBBWElTMl9TT0FQU1RSVUNUX1NFVF9WQVJTVFJJTkcgKCBzdHJ1Y3Rfb3V0LCBlbnYsIHN0cmluZ192YWwgKTsKIAogLyogY3JlYXRlIHRoZSByZXNwb25zZSBhbmQgc2V0IHRoZSBvdXRwdXQgc3RydWN0dXJlKi8KIGVjaG9fb3V0ID0gYXhpczJfZWNob1N0cnVjdFJlc3BvbnNlX2NyZWF0ZSAoIGVudiApOwogQVhJUzJfRUNIT1NUUlVDVFJFU1BPTlNFX1NFVF9SRVRVUk4gKCBlY2hvX291dCwgZW52LCBzdHJ1Y3Rfb3V0ICk7CiAKIHJldHVybiBlY2hvX291dDsKCjwvcHJlPjwvZGl2PgogIDwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9InNlcnZpY2VzX3htbCI+PC9hPjxoMz5zZXJ2aWNlcy54bWw8L2gzPjxwPgpBeGlzMiB1c2VzICJzZXJ2aWNlcy54bWwiIHRvIGhvbGQgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciBhIHBhcnRpY3VsYXIgV2ViCnNlcnZpY2UgZGVwbG95ZWQgaW4gdGhlIEF4aXMyIGVuZ2luZS4gV2hlbiB3ZSBnZW5lcmF0ZSB0aGUgc2tlbGV0b24gdXNpbmcgdGhlCldTREwySmF2YSB0b29sLCBpdCB3aWxsIGdlbmVyYXRlIHRoZSByZXF1aXJlZCBzZXJ2aWNlcy54bWwgZm9yIHRoaXMgV2ViCnNlcnZpY2UgYXMgd2VsbC4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gPGEgaHJlZj0iI2RlcGxveSI+ZGVwbG95IHRoZQpzZXJ2aWNlPC9hPi4gUGxlYXNlIHJlZmVyIHRvIHRoZSAnPGEgaHJlZj0iI1N0ZXAzIj5Xcml0ZSB0aGUKc2VydmljZXMueG1sPC9hPicgc2VjdGlvbiBpbiB0aGlzIGd1aWRlIHRvIGxlYXJuIG1vcmUgYWJvdXQgc2VydmljZXMueG1sLgo8YSBuYW1lPSJkZXBsb3kiPjwvYT48L3A+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iRGVwbG95X3RoZV9XZWJfU2VydmljZSI+PC9hPjxoMz5EZXBsb3kgdGhlIFdlYiBTZXJ2aWNlPC9oMz48cD5XZSBzaW1wbHkgcHV0IG91ciBzZXJ2aWNlIGZvbGRlciBvciB0aGUgIi5hYXIiIGZpbGUgdG8gdGhlIHNlcnZpY2VzCmRpcmVjdG9yeS4gWW91IG5lZWQgcmVzdGFydCB0aGUgc2VydmVyIGZvciB0aGUgZW5naW5lIHRvIHBpY2sgdGhpcwpzZXJ2aWNlLjwvcD48cD48YSBuYW1lPSJXZWJfU2VydmljZV9DbGllbnRzX1VzaW5nX0F4aXMyIj48L2E+PC9wPjwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9IldlYl9TZXJ2aWNlX0NsaWVudHNfVXNpbmdfQXhpczJfQyI+PC9hPjxoMz5XZWIgU2VydmljZSBDbGllbnRzIFVzaW5nIEF4aXMyL0M8L2gzPjxwPk5vdyBsZXQncyBzZWUgaG93IHdlIGNhbiB3cml0ZSBhIFdlYiBzZXJ2aWNlIGNsaWVudCB0byBjb25zdW1lIGEgV2ViCnNlcnZpY2UuPC9wPjxwPldlYiBzZXJ2aWNlcyBjYW4gYmUgdXNlZCB0byBwcm92aWRlIHdpZGUgcmFuZ2Ugb2YgZnVuY3Rpb25hbGl0eSB0byB0aGUKdXNlcnMgcmFuZ2luZyBmcm9tIHNpbXBsZSwgbGVzcyB0aW1lIGNvbnN1bWluZ6Agb3BlcmF0aW9ucyBzdWNoIGFzCiJnZXRTdG9ja1F1b3RlIqAgdG8gdGltZSBjb25zdW1pbmcgYnVzaW5lc3Mgc2VydmljZXMuIFdoZW4gd2UgdXRpbGl6ZSAoaW52b2tlCnVzaW5nIGNsaWVudCBhcHBsaWNhdGlvbnMpIHRoZXNlIFdlYiBzZXJ2aWNlcywgd2UgY2Fubm90IHVzZSBzb21lIHNpbXBsZQpnZW5lcmljIGludm9jYXRpb24gcGFyYWRpZ20gdGhhdCBzdWl0cyBhbGwgdGhlIHRpbWluZyBjb21wbGV4aXRpZXMgaW52b2x2ZWQKaW4gdGhlIHNlcnZpY2Ugb3BlcmF0aW9ucy4gRm9yIGV4YW1wbGUsIGlmIHdlIHVzZSBhIHNpbmdsZSB0cmFuc3BvcnQgY2hhbm5lbAooc3VjaCBhcyBIVFRQKSB0byBpbnZva2UgYSBXZWIgc2VydmljZSB3aXRoIGFuIElOLU9VVCBvcGVyYXRpb24gd2hpY2ggdGFrZXMKYSBsb25nIHRpbWUgdG8gY29tcGxldGUsIHRoZW4gbW9zdCBvZiB0aGUgdGltZSB3ZSBtYXkgZW5kIHVwIHdpdGggImNvbm5lY3Rpb24KdGltZSBvdXRzIi4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZXJlIGFyZSBzaW11bHRhbmVvdXMgc2VydmljZSBpbnZvY2F0aW9ucwp0aGF0oHdlIG5lZWQgdG8gcGVyZm9ybSBmcm9tIGEgc2luZ2xlIGNsaWVudCBhcHBsaWNhdGlvbiwgdGhlbiB0aGUgdXNlIG9mIGEKImJsb2NraW5nIiBjbGllbnQgQVBJIHdpbGwgZGVncmFkZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGNsaWVudCBhcHBsaWNhdGlvbi4KU2ltaWxhcmx5LCB0aGVyZSBhcmUgdmFyaW91cyBvdGhlciBjb25zZXF1ZW5jZXMgc3VjaCBhcyBPbmUtV2F5IHRyYW5zcG9ydHMKdGhhdCBjb21lIGludG8gcGxheSB3aGVuIHdlIG5lZWQgdGhlbS4gTGV0J3MgdHJ5IHRvIGFuYWx5emUgc29tZSBjb21tb24Kc2VydmljZSBpbnZvY2F0aW9uIHBhcmFkaWdtcy48L3A+PHA+TWFueSBXZWIgc2VydmljZSBlbmdpbmVzIHByb3ZpZGUgdGhlIHVzZXJzIHdpdGggYSBCbG9ja2luZyBhbmQKTm9uLUJsb2NraW5nIGNsaWVudCBBUElzLjwvcD48dWw+CiAgPGxpPjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48Yj5CbG9ja2luZyBBUEk8L2I+IC1PbmNlIHRoZSBzZXJ2aWNlCiAgICBpbnZvY2F0aW9uIGlzIGNhbGxlZCwgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiBoYW5ncyBhbmQgb25seSBnZXRzIGNvbnRyb2wKICAgIGJhY2sgd2hlbiB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlcywgYWZ0ZXIgd2hpY2ggY2xpZW50IHJlY2VpdmVzIGEgcmVzcG9uc2UKICAgIG9yIGEgZmF1bHQuIFRoaXMgaXMgdGhlIHNpbXBsZXN0IHdheSBvZiBpbnZva2luZyBXZWIgc2VydmljZXMgYW5kIGl0IGFsc28KICAgIHN1aXRzIG1hbnkgYnVzaW5lc3Mgc2l0dWF0aW9ucy48L3A+CiAgPC9saT4KICA8bGk+PGI+Tm9uLUJsb2NraW5nIEFQSTwvYj4tIFRoaXMgaXMgYSBjYWxsYmFjayBvciBwb2xsaW5nIGJhc2VkIEFQSS4KICAgIEhlbmNlLCBvbmNlIGEgc2VydmljZSBpbnZvY2F0aW9uIGlzIGNhbGxlZCwgdGhlIGNsaWVudCBhcHBsaWNhdGlvbgogICAgaW1tZWRpYXRlbHkgZ2V0cyB0aGUgY29udHJvbCBiYWNrIGFuZCB0aGUgcmVzcG9uc2UgaXMgcmV0cmlldmVkIHVzaW5nIHRoZQogICAgY2FsbGJhY2sgb2JqZWN0IHByb3ZpZGVkLiBUaGlzIGFwcHJvYWNoIHByb3ZpZGVzIHRoZSBjbGllbnQgYXBwbGljYXRpb24KICAgIHdpdGggdGhlIGZsZXhpYmlsaXR5IHRvIGludm9rZSBzZXZlcmFsIFdlYiBzZXJ2aWNlcyBzaW11bHRhbmVvdXNseSB3aXRob3V0CiAgICBibG9ja2luZyB0aGUgb3BlcmF0aW9uIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBpbnZva2VkLjwvbGk+CjwvdWw+PHA+Qm90aCB0aGVzZSBtZWNoYW5pc21zIHdvcmsgaW4gdGhlIEFQSSBsZXZlbC4gTGV0J3MgbmFtZSB0aGWgYXN5bmNocm9ub3VzCmJlaGF2aW9yIHRoYXQgd2UgY2FuIGdldCB1c2luZyB0aGUgPHN0cm9uZz5Ob24tQmxvY2tpbmcgQVBJPC9zdHJvbmc+IGFzCjxiPkFQSSBMZXZlbCBBc3luY2hyb255LjwvYj48L3A+PHA+Qm90aCB0aGVzZSBtZWNoYW5pc21zIHVzZSBzaW5nbGUgdHJhbnNwb3J0IGNvbm5lY3Rpb24gdG8gc2VuZCB0aGUgcmVxdWVzdAphbmQgdG8gcmVjZWl2ZSB0aGUgcmVzcG9uc2UuIFRoZXkgc2V2ZXJlbHkgbGFjayB0aGUgY2FwYWJpbGl0eSBvZiB1c2luZyB0d28KdHJhbnNwb3J0IGNvbm5lY3Rpb25zIGZvciB0aGUgcmVxdWVzdCBhbmQgdGhlIHJlc3BvbnNlIChlaXRoZXIgT25lLVdheSBvZgpUd28tV2F5KS4gU28gYm90aCB0aGVzZSBtZWNoYW5pc21zIGZhaWwgdG8gYWRkcmVzcyB0aGUgcHJvYmxlbSBvZiBsb25nCnJ1bm5pbmcgdHJhbnNhY3Rpb25zICh0aGUgdHJhbnNwb3J0IGNvbm5lY3Rpb24gbWF5IHRpbWUtb3V0IGJlZm9yZSB0aGUKb3BlcmF0aW9uIGNvbXBsZXRlcykuIEEgcG9zc2libGUgc29sdXRpb24gd291bGQgYmUgdG8gdXNlIDxzdHJvbmc+dHdvCnNlcGFyYXRlIHRyYW5zcG9ydCBjb25uZWN0aW9ucyBmb3IgcmVxdWVzdCBhbmQgcmVzcG9uc2U8L3N0cm9uZz4uIFRoZQphc3luY2hyb25vdXMgYmVoYXZpb3IgdGhhdCB3ZSBnYWluIHVzaW5nIHRoaXMgc29sdXRpb24gY2FuIGJlIGNhbGxlZAo8Yj5UcmFuc3BvcnQgTGV2ZWwgQXN5bmNocm9ueTwvYj4uPC9wPjxwPkJ5IGNvbWJpbmluZyBBUEkgTGV2ZWwgQXN5bmNocm9ueSAmYW1wOyBUcmFuc3BvcnQgTGV2ZWwgQXN5bmNocm9ueSB3ZSBjYW4Kb2J0YWluIGZvdXIgZGlmZmVyZW50IGludm9jYXRpb24gcGF0dGVybnMgZm9yIFdlYiBzZXJ2aWNlcyBhcyBzaG93biBpbiB0aGUKZm9sbG93aW5nIHRhYmxlLjwvcD48cD48L3A+PHRhYmxlIGNsYXNzPSJib2R5VGFibGUiPjx0Ym9keT4KICAgIDx0ciBjbGFzcz0iYSI+PHRkPjxzdHJvbmc+QVBJIChCbG9ja2luZy9Ob24tQmxvY2tpbmcpPC9zdHJvbmc+PC90ZD48dGQ+PHN0cm9uZz6gRHVhbCBUcmFuc3BvcnRzIChZZXMvTm8pPC9zdHJvbmc+PC90ZD48dGQ+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjwvdGQ+PC90cj4KICAgIDx0ciBjbGFzcz0iYiI+PHRkPkJsb2NraW5nPC90ZD48dGQ+Tm88L3RkPjx0ZD5TaW1wbGVzdCBhbmQgdGhlIGZhbWlsaWFyIGludm9jYXRpb24gcGF0dGVybjwvdGQ+PC90cj4KICAgIDx0ciBjbGFzcz0iYSI+PHRkPk5vbi1CbG9ja2luZzwvdGQ+PHRkPk5vPC90ZD48dGQ+VXNpbmcgY2FsbGJhY2tzIG9yIHBvbGxpbmc8L3RkPjwvdHI+CiAgICA8dHIgY2xhc3M9ImIiPjx0ZD5CbG9ja2luZzwvdGQ+PHRkPlllczwvdGQ+PHRkPlRoaXMgaXMgdXNlZnVsIHdoZW4gdGhlIHNlcnZpY2Ugb3BlcmF0aW9uIGlzIElOLU9VVCBpbiBuYXR1cmUgYnV0CiAgICAgICAgdGhlIHRyYW5zcG9ydCB1c2VkIGlzIE9uZS1XYXkgKGUuZy4gU01UUCk8L3RkPjwvdHI+CiAgICA8dHIgY2xhc3M9ImEiPjx0ZD5Ob24tQmxvY2tpbmc8L3RkPjx0ZD5ZZXM8L3RkPjx0ZD5UaGlzIGNhbiBiZSB1c2VkIHRvIGdhaW4gdGhlIG1heGltdW0gYXN5bmNocm9ub3VzIGJlaGF2aW9yLiBObwogICAgICAgIGJsb2NraW5nIGluIHRoZSBBUEkgbGV2ZWwgYW5kIGFsc28gaW4gdGhlIHRyYW5zcG9ydCBsZXZlbDwvdGQ+PC90cj4KICA8L3Rib2R5PjwvdGFibGU+PHA+QXhpczIvQyBwcm92aWRlcyB0aGUgdXNlciB3aXRoIGFsbCB0aGVzZSBwb3NzaWJpbGl0aWVzIHRvIGludm9rZSBXZWIKc2VydmljZXMuPC9wPjxwPkJlbG93IHdlIGRlc2NyaWJlIGhvdyB0byB3cml0ZSBXZWIgU2VydmljZXMgQ2xpZW50cyB1c2luZyBBeGlzMi9DLjwvcD48cD48YSBuYW1lPSJXcml0aW5nX1dlYl9TZXJ2aWNlX0NsaWVudHNfdXNpbmdfQXhpczIlMjdzX1ByaW1hcnlfQVBJcyI+PC9hPjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJXcml0aW5nX1dlYl9TZXJ2aWNlX0NsaWVudHNfVXNpbmdfQXhpczJfc19QcmltYXJ5X0FQSXMiPjwvYT48aDM+V3JpdGluZyBXZWIgU2VydmljZSBDbGllbnRzIFVzaW5nIEF4aXMyJ3MgUHJpbWFyeSBBUElzPC9oMz48cD48YSBpZD0iRWNob0Jsb2NraW5nQ2xpZW50Ij48L2E+PC9wPjwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9ImVjaG9fYmxvY2tpbmdfQ2xpZW50Ij48L2E+PGgzPmVjaG9fYmxvY2tpbmcgQ2xpZW50PC9oMz48cD5BeGlzMi9DIHByb3ZpZGVzIHRoZSB1c2VyIHdpdGggc2V2ZXJhbCBpbnZvY2F0aW9uIHBhdHRlcm5zIGZvciBXZWIKU2VydmljZXMsIHJhbmdpbmcgZnJvbSBwdXJlIGJsb2NraW5nIHNpbmdsZSBjaGFubmVsIGludm9jYXRpb25zIHRvIGEKbm9uLWJsb2NraW5nIGR1YWwgY2hhbm5lbCBpbnZvY2F0aW9uLiBMZXQncyBmaXJzdCBzZWUgaG93IHdlIGNhbiB3cml0ZSBhCmNsaWVudCB0byBpbnZva2UgImVjaG8iIG9wZXJhdGlvbiBvZiAiZWNobyIgc2VydmljZSB1c2luZyB0aGUgc2ltcGxlc3QKYmxvY2tpbmcgaW52b2NhdGlvbi4gVGhlIGNsaWVudCBjb2RlIHlvdSBuZWVkIHRvIHdyaXRlIGlzIGFzIGZvbGxvd3MuPC9wPgogICAgPGRpdiBjbGFzcz0ic291cmNlIj48cHJlPgogLyogQ3JlYXRlIEVQUiB3aXRoIGdpdmVuIGFkZHJlc3MgKi8KZW5kcG9pbnRfcmVmID0gYXhpczJfZW5kcG9pbnRfcmVmX2NyZWF0ZShlbnYsIGFkZHJlc3MpOwovKiBTZXR1cCBvcHRpb25zICovCm9wdGlvbnMgPSBheGlzMl9vcHRpb25zX2NyZWF0ZShlbnYpOwpBWElTMl9PUFRJT05TX1NFVF9UTyhvcHRpb25zLCBlbnYsIGVuZHBvaW50X3JlZik7Ci8qIFNldCB0aGUgZGVwbG95IGZvbGRlciAqLwpjbGllbnRfaG9tZSA9IEFYSVMyX0dFVEVOVigiQVhJUzJDX0hPTUUiKTsKaWYgKCFjbGllbnRfaG9tZSkKY2xpZW50X2hvbWUgPSAiLi4vLi4vZGVwbG95IjsKLyogQ3JlYXRlIHNlcnZpY2UgY2xpZW50ICovCnN2Y19jbGllbnQgPSBheGlzMl9zdmNfY2xpZW50X2NyZWF0ZShlbnYsIGNsaWVudF9ob21lKTsKICAgIGlmICghc3ZjX2NsaWVudCkKICAgIHsKICAgICAgIHByaW50ZigiRXJyb3IgY3JlYXRpbmcgc2VydmljZSBjbGllbnRcbiIpOwogICAgICAgQVhJUzJfTE9HX0VSUk9SKGVudi0mZ3Q7bG9nLCBBWElTMl9MT0dfU0ksICJTdHViIGludm9rZSBGQUlMRUQ6CiAgICAgICAgRXJyb3IgY29kZTogCiUJZCA6OiAlcyIsIGVudi0mZ3Q7ZXJyb3ItJmd0O2Vycm9yX251bWJlciwKICAgICAgICBBWElTMl9FUlJPUl9HRVRfTUVTU0FHRShlbnYtJmd0O2Vycm9yKSk7CiAgICB9Ci8qIFNldCBzZXJ2aWNlIGNsaWVudCBvcHRpb25zICovCkFYSVMyX1NWQ19DTElFTlRfU0VUX09QVElPTlMoc3ZjX2NsaWVudCwgZW52LCBvcHRpb25zKTsgLyogQnVpbGQgdGhlClNPQVAgcmVxdWVzdCBtZXNzYWdlIHBheWxvYWQgdXNpbmcgT00gQVBJLiovCnBheWxvYWQgPSBidWlsZF9vbV9wYXlsb2FkX2Zvcl9lY2hvX3N2YyhlbnYpOwovKiBTZW5kIHJlcXVlc3QgKi8KcmV0X25vZGUgPSBBWElTMl9TVkNfQ0xJRU5UX1NFTkRfUkVDRUlWRShzdmNfY2xpZW50LCBlbnYsIHBheWxvYWQpOwovKiBQcmludCByZXN1bHQgKi8KICAgIGlmKHJldF9ub2RlKQogICAgewogICAgICAgYXhpczJfY2hhcl90ICpvbV9zdHIgPSBOVUxMOwogICAgICAgb21fc3RyID0gQVhJT01fTk9ERV9UT19TVFJJTkcocmV0X25vZGUsIGVudik7CiAgICAgICBpZiAob21fc3RyKQogICAgICAgICAgcHJpbnRmKCJcblJlY2VpdmVkIE9NIDogJXNcbiIsIG9tX3N0cik7CiAgICAgICBwcmludGYoIlxuZWNobyBjbGllbnQgaW52b2tlIFNVQ0NFU1NGVUwhXG4iKTsKICAgIH0gICAgICAKICAgIGVsc2UKICAgIHsKICAgICAgIEFYSVMyX0xPR19FUlJPUihlbnYtJmd0O2xvZywgQVhJUzJfTE9HX1NJLCAiU3R1YiBpbnZva2UgRkFJTEVEOiBFcnJvciBjb2RlOiIKIiAlZCA6OiAlcyIsIGVudi0mZ3Q7ZXJyb3ItJmd0O2Vycm9yX251bWJlciwKICAgICAgIEFYSVMyX0VSUk9SX0dFVF9NRVNTQUdFKGVudi0mZ3Q7ZXJyb3IpKTsKICAgICAgIHByaW50ZigiZWNobyBjbGllbnQgaW52b2tlIEZBSUxFRCFcbiIpOwp9Cgo8L3ByZT48L2Rpdj4KICA8cD5UaGUgY29tbWVudHMgaW4gdGhlIGFib3ZlIGNvZGUgZXhwbGFpbnMgdGhlIGNvZGUuIEluIHNpbXBsZSB0ZXJtcywgdGhlc2UKYXJlIHRoZSBzdGVwczo8L3A+PG9sPgogIDxsaT5TZXQgdXAgdGhlIG9wdGlvbnMgdG8gYmUgdXNlZCBpbiB0aGUgaW52b2NhdGlvbi48L2xpPgogIDxsaT5DcmVhdGUgdGhlIHNlcnZpY2UgY2xpZW50LjwvbGk+CiAgPGxpPlNldCB0aGUgb3B0aW9ucyB0byBzZXJ2aWNlIGNsaWVudC48L2xpPgogIDxsaT5CdWlsZCB0aGUgWE1MIHBheWxvYWQgdG8gYmUgc2VudCBvdXQgdXNpbmcgQVhJT00uPC9saT4KICA8bGk+U2VuZCBwYXlsb2FkIGFuZCByZWNlaXZlIHJlc3VsdCBYTUwgYXMgT00uPC9saT4KICA8bGk+Q29uc3VtZSByZXN1bHQuPC9saT4KPC9vbD48cD5PcHRpb25zIGNhbiBiZSB1c2VkIHRvIGRlZmluZSB0aGUgaW52b2NhdGlvbiBwYXJhbWV0ZXJzIHN1Y2ggYXMgdGFyZ2V0CmVuZHBvaW50LCBzb2FwIHZlcnNpb24sIGFkZHJlc3NpbmcgcGFyYW1ldGVycywgZXRjLiBXaGVuIGNyZWF0aW5nIHNlcnZpY2UKY2xpZW50LCB0aGUgZGVwbG95bWVudCBmb2xkZXIgaGFzIHRvIGJlIHBhc3NlZCBhcyBhIHBhcmFtZXRlci4gSXQgaXMgZnJvbSB0aGUKZGVwbG95IGZvbGRlciwgdGhlIGNvbmZpZ3VyYXRpb24gaXMgcGlja2VkIHVwLCB1c2luZyB0aGUgYXhpczIueG1sIGZpbGUuIFRoZQpzZW5kX3JlY2VpdmUgZnVuY3Rpb24gb2YgdGhlIHNlcnZpY2UgY2xpZW50IHNlbmRzIHRoZSBYTUwgZ2l2ZW4gYXMgYSBwYXlsb2FkCnRvIHRoZSBzZXJ2ZXIgc2lkZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IHJlY2VpdmVkLiBCYXNpY2FsbHkgdGhpcyBpcyB0aGUgWE1MCmluL291dCBtb2RlbC4gT25jZSB0aGUgcmVzdWx0IGlzIHJlY2VpdmVkLCB0aGUgdXNlciBjYW4gY29uc3VtZSB0aGUgcmVzdWx0IGluCndoaWNoZXZlciB0aGUgd2F5KHMpIGhlIHdpc2hlcy48L3A+PHA+PGEgaWQ9IkVjaG9Ob25CbG9ja2luZ0NsaWVudCI+PC9hPjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJlY2hvX25vbl9ibG9ja2luZ19DbGllbnQiPjwvYT48aDM+ZWNob19ub25fYmxvY2tpbmcgQ2xpZW50PC9oMz48cD5JbiB0aGUgZWNob19ibG9ja2luZyBjbGllbnQgb25jZSB0aGUgInNlbmRfcmVjZWl2ZSIgZnVuY3Rpb24gaXMgY2FsbGVkLAp0aGUgY2xpZW50IGlzIGJsb2NrZWQgdGlsbCB0aGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlZC4gVGhpcyBiZWhhdmlvciBpcyBub3QKZGVzaXJhYmxlIHdoZW4gdGhlcmUgYXJlIG1hbnkgV2ViIHNlcnZpY2UgaW52b2NhdGlvbnMgdG8gYmUgZG9uZSBpbiBhIHNpbmdsZQpjbGllbnQgYXBwbGljYXRpb24gb3Igd2l0aGluIGEgR1VJLiBBIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHVzZSBhIG5vbi1ibG9ja2luZwpBUEkgdG8gaW52b2tlIFdlYiBzZXJ2aWNlcy4gQXhpczIvQyBwcm92aWRlcyBhIGNhbGxiYWNrIGJhc2VkIG5vbi1ibG9ja2luZwpBUEkgZm9yIHVzZXJzLjwvcD48cD5BIHNhbXBsZSBjbGllbnQgZm9yIHRoaXMgY2FuIGJlIGZvdW5kIHVuZGVyCiImbHQ7YXhpczJjX2hvbWUmZ3Q7L3NhbXBsZXMvdXNlcl9ndWlkZS9jbGllbnRzIiB3aXRoIHRoZSBuYW1lCmVjaG9fbm9uX2Jsb2NraW5nLmMuIFRoZSBjaGFuZ2VzIHRoYXQgdXNlciBtYXkgaGF2ZSB0byBkbyB3aXRoIHJlc3BlY3QgdG8gdGhlCiJlY2hvX2Jsb2NraW5nIiBjbGllbnQgaW4gb3JkZXIgdG8gbWFrZSBpdCBub24tYmxvY2tpbmcsIHdvdWxkIGJlIGFzCmZvbGxvd3M6PC9wPgogICAgPGRpdiBjbGFzcz0ic291cmNlIj48cHJlPkFYSVMyX1NWQ19DTElFTlRfU0VORF9SRUNFSVZFX05PTl9CTE9DS0lORyhzdmNfY2xpZW50LCBlbnYsIHBheWxvYWQsIGNhbGxiYWNrKTsKCjwvcHJlPjwvZGl2PgogIDxwPlVubGlrZSAic2VuZF9yZWNlaXZlIiwgInNlbmRfcmVjZWl2ZV9ub25fYmxvY2tpbmciIGFjY2VwdHMgYSBjYWxsYmFjawpzdHJ1Y3QgaW4gYWRkaXRpb24gdG8gcGF5bG9hZC4gQXhpczIvQyBjbGllbnQgQVBJIHByb3ZpZGVzIGEgY2FsbGJhY2sgc3RydWN0CndpdGggdGhlIGZvbGxvd2luZyBhc3NvY2lhdGVkIGZ1bmN0aW9uczo8L3A+CiAgICA8ZGl2IGNsYXNzPSJzb3VyY2UiPjxwcmU+CmF4aXMyX3N0YXR1c190IChBWElTMl9DQUxMICoKb25fY29tcGxldGUpKAogc3RydWN0IGF4aXMyX2NhbGxiYWNrICpjYWxsYmFjaywKIGNvbnN0IGF4aXMyX2Vudl90ICplbnYpOwoKYXhpczJfc3RhdHVzX3QgKEFYSVMyX0NBTEwgKgpvbl9lcnJvcikoCiBzdHJ1Y3QgYXhpczJfY2FsbGJhY2sgKmNhbGxiYWNrLAogY29uc3QgYXhpczJfZW52X3QgKmVudiwKIGludCBleGNlcHRpb24pOwoKYXhpczJfYm9vbF90IChBWElTMl9DQUxMICoKZ2V0X2NvbXBsZXRlKSgKIHN0cnVjdCBheGlzMl9jYWxsYmFjayAqY2FsbGJhY2ssCiBjb25zdCBheGlzMl9lbnZfdCAqZW52KTsKCjwvcHJlPjwvZGl2PgogIDxwPlRoZSB1c2VyIGlzIGV4cGVjdGVkIHRvIGltcGxlbWVudCB0aGUgIm9uX2NvbXBsZXRlICIgYW5kICJvbl9lcnJvciAiCmZ1bmN0aW9ucyBhbmQgc2V0IHRoZW0gb24gdGhlIGNhbGxiYWNrIHVzaW5nIHRoZSAic2V0X29uX2NvbXBsZXRlIiBhbmQKInNldF9vbl9lcnJvciIgQVBJIGNhbGxzLiBJbiB0aGUgc2FtcGxlLCAnJ29uIGNvbXBsZXRlJycgaXMgaW1wbGVtZW50ZWQgYnkKImVjaG9fY2FsbGJhY2tfb25fY29tcGxldGUiIGZ1bmN0aW9uIGFuZCBpcyBzZXQgb24gdGhlIGNhbGxiYWNrIHN0cnVjdApjcmVhdGVkIGFzIHNob3duIGJlbG93OjwvcD4KICAgIDxkaXYgY2xhc3M9InNvdXJjZSI+PHByZT5BWElTMl9DQUxMQkFDS19TRVRfT05fQ09NUExFVEUoY2FsbGJhY2ssIGVjaG9fY2FsbGJhY2tfb25fY29tcGxldGUpOwoKPC9wcmU+PC9kaXY+CiAgPHA+QXhpczIvQyBlbmdpbmUgY2FsbHMgdGhlICJvbl9jb21wbGV0ZSIgbWV0aG9kIG9uY2UgdGhlIFdlYiBzZXJ2aWNlCnJlc3BvbnNlIGlzIHJlY2VpdmVkIGJ5IHRoZSBBeGlzMi9DIGNsaWVudCBBUEkgKHRoYXQgaXMgc2VydmljZV9jbGllbnQpLiBUaGlzCndpbGwgZWxpbWluYXRlIHRoZSBibG9ja2luZyBuYXR1cmUgb2YgdGhlIFdlYiBzZXJ2aWNlIGludm9jYXRpb25zIGFuZApwcm92aWRlIHRoZSB1c2VyIHdpdGggdGhlIGZsZXhpYmlsaXR5IHRvIHVzZSBub24tYmxvY2tpbmcgQVBJIGZvciBXZWIKc2VydmljZSBjbGllbnRzLjwvcD48cD5QbGVhc2UgaGF2ZSBhIGxvb2sgYXQgdGhlIGVjaG9fbm9uX2Jsb2NraW5nLmMgZmlsZSBsb2NhdGVkIGF0CiImbHQ7YXhpczJjX2hvbWUmZ3Q7L3NhbXBsZXMvdXNlcl9ndWlkZS9jbGllbnQiIGZvciBtb3JlIGRldGFpbHMuPC9wPjxwPjxhIGlkPSJFY2hvTm9uQmxvY2tpbmdEdWFsQ2xpZW50Ij48L2E+PC9wPjwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9ImVjaG9fbm9uX2Jsb2NraW5nX2R1YWxfQ2xpZW50Ij48L2E+PGgzPmVjaG9fbm9uX2Jsb2NraW5nX2R1YWwgQ2xpZW50PC9oMz48cD5UaGUgc29sdXRpb24gcHJvdmlkZWQgYnkgdGhlIG5vbi1ibG9ja2luZyBBUEkgaGFzIG9uZSBsaW1pdGF0aW9uIHdoZW4gaXQKY29tZXMgdG+gIFdlYiBzZXJ2aWNlIGludm9jYXRpb25zLGl0IHRha2VzIGEgbG9uZyB0aW1lIHRvIGNvbXBsZXRlLiBUaGUKbGltaXRhdGlvbiBpcyBkdWUgdG8gdGhlIHVzZSBvZiBhIHNpbmdsZSB0cmFuc3BvcnQgY29ubmVjdGlvbiB0byBpbnZva2UgdGhlCldlYiBzZXJ2aWNlIGFuZCB0byByZXRyaWV2ZSB0aGUgcmVzcG9uc2UuIEluIG90aGVyIHdvcmRzLCBjbGllbnQgQVBJIHByb3ZpZGVzCmEgbm9uIGJsb2NraW5nIGludm9jYXRpb24gbWVjaGFuaXNtIGZvciB0aGUgdXNlcnMsIGJ1dCB0aGUgcmVxdWVzdCBhbmQgdGhlCnJlc3BvbnNlIGNvbWVzIGluIGEgc2luZ2xlIHRyYW5zcG9ydCAoVHdvLVdheSB0cmFuc3BvcnQpIGNvbm5lY3Rpb24gKGxpa2UKSFRUUCkuIExvbmcgcnVubmluZyBXZWIgc2VydmljZSBpbnZvY2F0aW9ucyBvciBXZWIgc2VydmljZSBpbnZvY2F0aW9ucyB1c2luZwpPbmUtV2F5IHRyYW5zcG9ydHMgKGxpa2UgU01UUCkgY2Fubm90IGJlIHV0aWxpemVkIGJ5IHNpbXBseSB1c2luZyBhIG5vbgpibG9ja2luZyBpbnZvY2F0aW9uLjwvcD48cD5UaGUgdHJpdmlhbCBzb2x1dGlvbiBpcyB0byB1c2Ugc2VwYXJhdGUgdHJhbnNwb3J0IGNvbm5lY3Rpb25zIChlaXRoZXIKT25lLVdheSBvciBUd28tV2F5KSBmb3IgdGhlIHJlcXVlc3QgYW5kIHJlc3BvbnNlLiBUaGUgbmV4dCBwcm9ibGVtIHRoYXQgbmVlZHMKdG8gYmUgc29sdmVkIGlzIHRoZSBjb3JyZWxhdGlvbiAoY29ycmVsYXRpbmcgdGhlIHJlcXVlc3QgYW5kIHRoZSByZXNwb25zZSkuCjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLzIwMDIvd3MvYWRkci8iIGNsYXNzPSJleHRlcm5hbExpbmsiIHRpdGxlPSJFeHRlcm5hbCBMaW5rIj5XUy1BZGRyZXNzaW5nPC9hPiBwcm92aWRlcyBhIG5lYXQKc29sdXRpb24gdG8gdGhpcyB1c2luZyAmbHQ7d3NhOk1lc3NhZ2VJRCZndDsgYW5kICZsdDt3c2E6UmVsYXRlc1RvJmd0OwpoZWFkZXJzLiBBeGlzMi9DIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGFkZHJlc3NpbmcgYmFzZWQgY29ycmVsYXRpb24gbWVjaGFuaXNtCmFuZCBhIGNvbXBsaWFudCBjbGllbnQgQVBJIHRvIGludm9rZSBXZWIgc2VydmljZXMgd2l0aCB0d28gdHJhbnNwb3J0CmNvbm5lY3Rpb25zLjwvcD48cD5Vc2VycyBjYW4gc2VsZWN0IGJldHdlZW4gYmxvY2tpbmcgb3Igbm9uLWJsb2NraW5nIEFQSXMgZm9yIHRoZSBXZWIgc2VydmljZQpjbGllbnRzIHdpdGggdHdvIHRyYW5zcG9ydCBjb25uZWN0aW9ucy4gQnkgc2ltcGx5IHVzaW5nIGEgYm9vbGVhbiBmbGFnLCB0aGUKc2FtZSBBUEkgY2FuIGJlIHVzZWQgdG8gaW52b2tlIFdlYiBzZXJ2aWNlcyAoSU4tT1VUIG9wZXJhdGlvbnMpIHVzaW5nIHR3bwpzZXBhcmF0ZSB0cmFuc3BvcnQgY29ubmVjdGlvbnMuIEFsbCB5b3UgaGF2ZSB0byBkbyBpcyB0byBzZXQKInVzZV9zZXBhcmF0ZV9saXN0ZW5lciIgdG8gdHJ1ZSBpbiBvcHRpb25zOjwvcD4KICAgIDxkaXYgY2xhc3M9InNvdXJjZSI+PHByZT5BWElTMl9PUFRJT05TX1NFVF9VU0VfU0VQRVJBVEVfTElTVEVORVIob3B0aW9ucywgZW52LCBBWElTMl9UUlVFKTsKCjwvcHJlPjwvZGl2PgogIDxwPkluIGFkZGl0aW9uIHRvIHNldHRpbmcgdGhlIHVzZV9zZXBhcmF0ZV9saXN0ZW5lciB0byB0cnVlLCB0byB1c2UgZHVhbAp0cmFuc3BvcnRzIG9uZSBoYXMgdG8iZW5nYWdlIiB0aGUgYWRkcmVzc2luZyBtb2R1bGUuPC9wPjwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9IkVuZ2FnaW5nX0FkZHJlc3Npbmdfb25fU2VydmVyX1NpZGUiPjwvYT48aDM+RW5nYWdpbmcgQWRkcmVzc2luZyBvbiBTZXJ2ZXIgU2lkZTwvaDM+PHA+VG8gZW5nYWdlIHRoZSBhZGRyZXNzaW5nIG1vZHVsZSBzaW1wbHkgYWRkIGEgbW9kdWxlIHJlZmVyZW5jZSBmb3IKYWRkcmVzc2luZyBpbiB0aGUgImF4aXMyLnhtbCIgY29uZmlndXJhdGlvbiBmaWxlLiBUaGlzIGNhbiBiZSBkb25lIGJ5IGFkZGluZwp0aGUgZm9sbG93aW5nIGxpbmUgdG8gImF4aXMyLnhtbCIgZmlsZSBpbiB0aGUgZGVwbG95bWVudCBmb2xkZXIuPC9wPgogICAgPGRpdiBjbGFzcz0ic291cmNlIj48cHJlPiAmbHQ7bW9kdWxlIHJlZj0iYWRkcmVzc2luZyIvJmd0OwoKPC9wcmU+PC9kaXY+CiAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBPbmNlIHlvdSBtb2RpZnkgdGhlICJheGlzMi54bWwiIGZpbGUgeW91IGhhdmUgdG8gcmVzdGFydCB0aGUgc2VydmVyLgpZb3UgYWxzbyBoYXZlIHRvIGhhdmUgdGhlIGFkZHJlc3NpbmcgbW9kdWxlIGluc3RhbGxlZCBpbiB0aGUgbW9kdWxlcyBmb2xkZXIKb2YgdGhlIGRlcGxveW1lbnQgZm9sZGVyLiBUaGlzIGlzIGRvbmUgYnkgZGVmYXVsdCB3aGVuIHlvdSBtYWtlIHRoZQppbnN0YWxsYXRpb24uPC9wPjwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9IkVuZ2FnaW5nX0FkZHJlc3Npbmdfb25fQ2xpZW50X1NpZGUiPjwvYT48aDM+RW5nYWdpbmcgQWRkcmVzc2luZyBvbiBDbGllbnQgU2lkZTwvaDM+PHA+VGhlcmUgYXJlIHR3byB3YXlzIG9mIGRvaW5nIHRoaXM6PC9wPjxvbD4KICA8bGk+RW5nYWdlIGFkZHJlc3NpbmcgZ2xvYmFsbHkuIFRoaXMgY2FuIGJlIGRvbmUgYnkgZm9sbG93aW5nIHRoZSBzYW1lCiAgICBzdGVwcyBhcyBkb25lIGluIHRoZSBjYXNlIG9mIHRoZSBzZXJ2ZXIgc2lkZTsgYWRkIG1vZHVsZSByZWZlcmVuY2UgdG8KICAgIGF4aXMyLnhtbCBhbmQgaGF2ZSB0aGUgbW9kdWxlIGluc3RhbGxlZCBpbiB0aGUgbW9kdWxlcyBmb2xkZXIgb2YgdGhlCiAgICBkZXBsb3kgZm9sZGVyLjwvbGk+CiAgPGxpPkVuZ2FnZSB0aGUgbW9kdWxlIG9uIHNlcnZpY2UgY2xpZW50IHVzaW5nIHRoZSBzZXJ2aWNlX2NsaWVudCBBUEkuCiAgICA8cHJlPkFYSVMyX1NWQ19DTElFTlRfRU5HQUdFX01PRFVMRShzdmNfY2xpZW50LCBlbnYsIEFYSVMyX01PRFVMRV9BRERSRVNTSU5HKTs8L3ByZT4KICA8L2xpPgo8L29sPjxwPk9uY2UgYWRkcmVzc2luZyBpcyBlbmdhZ2VkLCBlY2hvX25vbl9ibG9ja2luZ19kdWFsIGNsaWVudCB3b3VsZCB3b3JrCnBlcmZlY3RseS4gTm90ZSB0aGF0IGJ5IGRlZmF1bHQsIEF4aXMyL0MgY29tZXMgd2l0aCBhZGRyZXNzaW5nIGVuYWJsZWQKZ2xvYmFsbHkuPC9wPjxwPjxhIGlkPSJFY2hvQmxvY2tpbmdEdWFsQ2xpZW50Ij48L2E+PC9wPjwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9ImVjaG9fYmxvY2tpbmdfZHVhbF9DbGllbnQiPjwvYT48aDM+ZWNob19ibG9ja2luZ19kdWFsIENsaWVudDwvaDM+PHA+VGhpcyBpcyBhZ2FpbiBhIFR3by1XYXkgdHJhbnNwb3J0IHJlcXVlc3QvcmVzcG9uc2UgY2xpZW50LCBidXQgdGhpcyB0aW1lLAp3ZSB1c2UgYSBCbG9ja2luZyBBUEkgaW4gdGhlIGNsaWVudCBjb2RlLiBTYW1wbGUgY29kZSBmb3IgdGhpcyBjYW4gYmUgZm91bmQKaW4gdGhlICImbHQ7YXhpczJjX2hvbWUmZ3Q7L3NhbXBsZXMvdXNlcl9ndWlkZS9jbGllbnRzLyIgZGlyZWN0b3J5IGFuZCB0aGUKZXhwbGFuYXRpb24gaXMgc2ltaWxhciB0byB0aGUgPGEgaHJlZj0iI0VjaG9Ob25CbG9ja2luZ0R1YWxDbGllbnQiPmVjaG9fbm9uX2Jsb2NraW5nX2R1YWwgY2xpZW50PC9hPiwgZXhjZXB0CnRoYXQgaGVyZSB3ZSBkbyBub3QgdXNlIGEgY2FsbGJhY2sgb2JqZWN0IHRvIGhhbmRsZSByZXNwb25zZS4gVGhpcyBpcyBhbiBleHRyZW1lbHkKdXNlZnVsIG1lY2hhbmlzbSB3aGVuIHRoZSBzZXJ2aWNlIGludm9jYXRpb24gaXMgSU4tT1VUIGluIG5hdHVyZSBhbmQgdGhlCnRyYW5zcG9ydHMgYXJlIE9uZS1XYXkgKGUuZy4gU01UUCkuIEZvciB0aGUgc2FtcGxlIGNsaWVudCB3ZSB1c2UgdHdvIEhUVFAKY29ubmVjdGlvbnMgZm9yIHJlcXVlc3QgYW5kIHJlc3BvbnNlLjwvcD48cD48YSBpZD0iV3JpdGluZ19XZWJfQ2xpZW50c19Vc2luZ19Db2RlX0dlbmVyYXRvciI+PC9hPjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJXcml0aW5nX1dlYl9TZXJ2aWNlX0NsaWVudHNfdXNpbmdfQ29kZV9HZW5lcmF0aW9uX3dpdGhfRGF0YV9CaW5kaW5nX1N1cHBvcnQiPjwvYT48aDM+V3JpdGluZyBXZWIgU2VydmljZSBDbGllbnRzIHVzaW5nIENvZGUgR2VuZXJhdGlvbiB3aXRoIERhdGEgQmluZGluZyBTdXBwb3J0PC9oMz48cD5BeGlzMiBjb2RlIGdlbmVyYXRvciBwcm92aWRlcyB0aGUgZGF0YSBiaW5kaW5nIHN1cHBvcnQgZm9yIFdlYiBzZXJ2aWNlCmNsaWVudCBnZW5lcmF0aW9uIGFzIHdlbGwuIFlvdSBjYW4gZ2VuZXJhdGUgdGhlIHJlcXVpcmVkIHN0dWJzIGZyb20gYSBnaXZlbgpXU0RMIHdpdGggdGhlIG90aGVyIHN1cHBvcnRpbmcgZmlsZXMuIFVzZSB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgdG8KZ2VuZXJhdGUgdGhlIEF4aXMyL0Mgc3R1YiBjb2RlIHdpdGggZGF0YSBiaW5kaW5nIHN1cHBvcnQuIFlvdSBzaG91bGQgaGF2ZQo8YSBocmVmPSJodHRwOi8vc3ZuLmFwYWNoZS5vcmcvdmlld3ZjL3dlYnNlcnZpY2VzL2F4aXMyL3RydW5rL2phdmEiIGNsYXNzPSJleHRlcm5hbExpbmsiIHRpdGxlPSJFeHRlcm5hbCBMaW5rIj5BeGlzMi9KYXZhCnNvdXJjZSBTVk48L2E+IHJldmlzaW9uIDQxNDI1MyBvciBsYXRlciB0byBnZW5lcmF0ZSBBeGlzMi9DIGNvZGUuPC9wPgogICAgPGRpdiBjbGFzcz0ic291cmNlIj48cHJlPmphdmEgV1NETDJDIC11cmkgaW50ZXJvcHRlc3Rkb2NsaXRwYXJhbWV0ZXJzLndzZGwgLWQgYWRiIC11Cgo8L3ByZT48L2Rpdj4KICA8cD5JbiBvcmRlciB0byBpZ25vcmUgdGhlIGRhdGEgYmluZGluZyBzdXBwb3J0ICh0byB1c2UgWE1MIGluL291dCBtb2RlbCksCmp1c3QgdXNlIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycy48L3A+CiAgICA8ZGl2IGNsYXNzPSJzb3VyY2UiPjxwcmU+amF2YSBXU0RMMkMgLXVyaSBpbnRlcm9wdGVzdGRvY2xpdHBhcmFtZXRlcnMud3NkbCAtZCBub25lCgo8L3ByZT48L2Rpdj4KICA8cD5UaGUgZm9sbG93aW5nIHNlY3Rpb24gZGVtb25zdHJhdGVzIGhvdyB0byB1c2UgdGhlIGdlbmVyYXRlZCBjb2RlIHVzaW5nIHRoZQp3c2RsIGZpbGUgImludGVyb3B0ZXN0ZG9jbGl0cGFyYW1ldGVycy53c2RsIiB0byBpbXBsZW1lbnQgdGhlIGNsaWVudCBidXNpbmVzcwpsb2dpYy48L3A+PHA+PGEgaWQ9IkNvZGVnZW5lcmF0b3JfQ2xpZW50X2VjaG9TdHJpbmciPjwvYT48L3A+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iQ2xpZW50X2Zvcl9lY2hvU3RyaW5nX29wZXJhdGlvbiI+PC9hPjxoMz5DbGllbnQgZm9yIGVjaG9TdHJpbmcgb3BlcmF0aW9uPC9oMz4KICAgIDxkaXYgY2xhc3M9InNvdXJjZSI+PHByZT4jaW5jbHVkZSAiYXhpczJfV1NETEludGVyb3BUZXN0RG9jTGl0U2VydmljZV9zdHViLmgiCi8qCiAqIGRlbW9uc3RyYXRlcyBob3cgdG8gZXhlY3V0ZSB0aGUgc2VydmljZSB1c2luZyBkYXRhYmluZGluZyAqLwp2b2lkIGludm9rZV9zZXJ2aWNlX3VzaW5nX2RhdGFiaW5kaW5nICggYXhpczJfc3R1Yl90KiBzdHViLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXhpczJfZW52X3QqIGVudiApOwppbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCnsKLyogdmFyaWFibGVzIHRvIGtlZXAgdGhlIGVudmlyb25tZW50ICovCiBheGlzMl9lbnZfdCogZW52ID0gTlVMTDsKIGF4aXMyX2NoYXJfdCogY2xpZW50X2hvbWUgPSBOVUxMOwogYXhpczJfY2hhcl90KiBlbmRwb2ludF91cmkgPU5VTEw7CiBheGlzMl9zdHViX3QqIHN0dWI9IE5VTEw7CiAvKiBlbmRwb2ludCB1cmk6IGlmIGl0IGlzIE5VTEwgZW5kcG9pbnQgd2lsbCBiZSBwaWNrZWQgZnJvbSB0aGUgV1NETCAqLyAKIGVuZHBvaW50X3VyaSA9CiAiaHR0cDovL2xvY2FsaG9zdDo5MDkwL2F4aXMyL3NlcnZpY2VzL1dTRExJbnRlcm9wVGVzdERvY0xpdFNlcnZpY2UiOwogZW52ID0gYXhpczJfZW52X2NyZWF0ZV9hbGwoICJjb2RlZ2VuX3V0ZXN0X2Jsb2NraW5nLmxvZyIsIAogQVhJUzJfTE9HX0xFVkVMX1RSQUNFKTsKIC8qIFNldCB1cCBkZXBsb3kgZm9sZGVyLiovCiBjbGllbnRfaG9tZSA9IEFYSVMyX0dFVEVOVigiQVhJUzJDX0hPTUUiKTsKIGlmICghY2xpZW50X2hvbWUpCiBjbGllbnRfaG9tZSA9ICIuLi8uLi8uLi9kZXBsb3kiOwogLyogY3JlYXRlIHRoZSBzdHViIHVzaW5nIGdlbmVyYXRlZCBjb2RlICovCiBzdHViID0gYXhpczJfV1NETEludGVyb3BUZXN0RG9jTGl0U2VydmljZV9zdHViX2NyZWF0ZSggZW52LAogY2xpZW50X2hvbWUgLCBlbmRwb2ludF91cmkpOyAKIC8qIGNhbGxzIHRoZSBzZXJ2aWNlKi8KIGludm9rZV9zZXJ2aWNlX3VzaW5nX2RhdGFiaW5kaW5nICggc3R1YiwgZW52ICk7CiByZXR1cm4gMDsKfSAKCnZvaWQgaW52b2tlX3NlcnZpY2VfdXNpbmdfZGF0YWJpbmRpbmcgKCBheGlzMl9zdHViX3QqIHN0dWIsCiBjb25zdCBheGlzMl9lbnZfdCogZW52ICkKIHsKIC8qIHZhcmlhYmxlcyB1c2VkIGJ5IGRhdGFiaW5kaW5nICovCiBheGlzMl9lY2hvU3RyaW5nX3QqIGVjaG9faW4gPSBOVUxMOwogYXhpczJfZWNob1N0cmluZ1Jlc3BvbnNlX3QqIGVjaG9fb3V0ID0gTlVMTDsKIC8qIHZhcmlhYmxlcyB0byBzdG9yZSBkYXRhICovCiBjaGFyKiBlY2hvX3N0ciA9ICJoZWxsbyI7CiBjaGFyKiByZXR1cm5fZWNob19zdHIgPSBOVUxMOwogLyogY3JlYXRlIHRoZSBpbnB1dCBwYXJhbXMgdXNpbmcgZGF0YWJpbmRpbmcgKi8KIGVjaG9faW4gPSBheGlzMl9lY2hvU3RyaW5nX2NyZWF0ZSggZW52ICk7CiBBWElTMl9FQ0hPU1RSSU5HX1NFVF9QQVJBTTAoIGVjaG9faW4sIGVudiwgZWNob19zdHIgKTsKIC8qIGludm9rZSB0aGUgd2ViIHNlcnZpY2UgbWV0aG9kKi8KIGVjaG9fb3V0ID0gYXhpczJfZWNob1N0cmluZyggc3R1YiwgZW52LCBlY2hvX2luICk7CiAvKiByZXR1cm4gdGhlIG91dHB1dCBwYXJhbXMgdXNpbmcgZGF0YWJpbmRpbmcgKi8KIHJldHVybl9lY2hvX3N0ciA9IEFYSVMyX0VDSE9TVFJVQ1RSRVNQT05TRV9HRVRfUkVUVVJOKCBlY2hvX291dCwgZW52CiApOwogLyogcHJpbnQgdGhlIHJlc3VsdCAqLwogcHJpbnRmICggInJldHVybmVkIHN0cmluZyAlc1xuIiwgcmV0dXJuX2VjaG9fc3RyICk7Cn0gCjwvcHJlPjwvZGl2PgogIDxwPjxhIGlkPSJDb2RlZ2VuZXJhdG9yX0NsaWVudF9lY2hvU3RyaW5nQXJyYXkiPjwvYT48L3A+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iQ2xpZW50X2Zvcl9lY2hvU3RyaW5nQXJyYXlfb3BlcmF0aW9uIj48L2E+PGgzPkNsaWVudCBmb3IgZWNob1N0cmluZ0FycmF5IG9wZXJhdGlvbjwvaDM+PHA+CllvdSBjYW4gY2hhbmdlIHRoZSA8Y29kZT5pbnZva2Vfc2VydmljZV91c2luZ19kYXRhYmluZGluZzwvY29kZT4gZnVuY3Rpb24gdG8KaW52b2tlIHRoZSBlY2hvU3RyaW5nQXJyYXkgb3BlcmF0aW9uIGFzIGZvbGxvd3MuCgogICAgPGRpdiBjbGFzcz0ic291cmNlIj48cHJlPnZvaWQgaW52b2tlX3NlcnZpY2VfdXNpbmdfZGF0YWJpbmRpbmcgKCBheGlzMl9zdHViX3QqIHN0dWIsIGNvbnN0CmF4aXMyX2Vudl90KiBlbnYgKQogewogLyogdmFyaWFibGVzIHVzZWQgYnkgZGF0YWJpbmRpbmcgKi8KIGF4aXMyX2VjaG9TdHJpbmdBcnJheV90KiBlY2hvX2luID0gTlVMTDsKIGF4aXMyX2VjaG9TdHJpbmdBcnJheVJlc3BvbnNlX3QqIGVjaG9fb3V0ID0gTlVMTDsKIGF4aXMyX0FycmF5T2ZzdHJpbmdfbGl0ZXJhbF90KiBhcnJheV9pbiA9IE5VTEw7CiBheGlzMl9BcnJheU9mc3RyaW5nX2xpdGVyYWxfdCogYXJyYXlfb3V0ID0gTlVMTDsKICAvKiB2YXJpYWJsZXMgdG8gc3RvcmUgZGF0YSAqLwogY2hhciAqc3RyaW5nX2FycmF5W109IHsgInRlc3QiLCJ0aGlzIiwiYXJyYXkiIH07CiBpbnQgYXJyYXlfbGVuZ3RoID0gMzsKICBjaGFyICoqc3RyaW5nX3JldHVybl9zdHJpbmdfYXJyYXkgPSBOVUxMOwogaW50IHJldHVybl9hcnJheV9sZW5ndGggPSAwOwogaW50IGkgPSAwOwogCiAgLypjcmVhdGUgdGhlIGlucHV0IGFycmF5IGFuZCBzZXQgdGhlIHN0cmluZyBhcnJheSBhbmQgbGVuZ3RoKi8KIGFycmF5X2luID0gYXhpczJfQXJyYXlPZnN0cmluZ19saXRlcmFsX2NyZWF0ZSAoZW52ICk7CiBBWElTMl9BUlJBWU9GU1RSSU5HX0xJVEVSQUxfU0VUX1NUUklORyggYXJyYXlfaW4sIGVudiwKIHN0cmluZ19hcnJheSwgYXJyYXlfbGVuZ3RoICk7CgogLyogY3JlYXRlIHRoZSByZXF1ZXN0IGFuZCBzZXQgdGhlIGlucHV0cyAqLwogZWNob19pbiA9IGF4aXMyX2VjaG9TdHJpbmdBcnJheV9jcmVhdGUgKCBlbnYgKTsKIEFYSVMyX0VDSE9TVFJJTkdBUlJBWV9TRVRfUEFSQU0wKCBlY2hvX2luLCBlbnYsIGFycmF5X2luICk7CgogLyogaW52b2tlIHRoZSB3ZWIgc2VydmljZSBtZXRob2QqLwogZWNob19vdXQgPSBheGlzMl9lY2hvU3RyaW5nQXJyYXkoIHN0dWIsIGVudiwgZWNob19pbiApOwoKIC8qIHJldHVybiB0aGUgb3V0cHV0IHBhcmFtcyB1c2luZyBkYXRhYmluZGluZyAqLwogYXJyYXlfb3V0ID0gQVhJUzJfRUNIT1NUUklOR0FSUkFZUkVTUE9OU0VfR0VUX1JFVFVSTiggZWNob19vdXQsIGVudgogKTsgCiAKIC8qIHJldHJpZXZlIHRoZSBzdHJpbmcgYXJyYXkgdmFsdWVzIGFuZCBsZW5ndGggKi8KIHN0cmluZ19yZXR1cm5fc3RyaW5nX2FycmF5ID0gQVhJUzJfQVJSQVlPRlNUUklOR19MSVRFUkFMX0dFVF9TVFJJTkcKICggYXJyYXlfb3V0LCBlbnYsICZhbXA7cmV0dXJuX2FycmF5X2xlbmd0aCApOwoKIC8qIHByaW50IHRoZSBvdXRwdXQgKi8KIGZvciAoIGkgPSAwOyBpICZsdDsgcmV0dXJuX2FycmF5X2xlbmd0aCA7IGkgKysgKQogIHsKICAgIHByaW50ZigidmFsdWUlZDogJXMgXG4iLCBpLCBzdHJpbmdfcmV0dXJuX3N0cmluZ19hcnJheVtpXSApOwogIH0KIDwvcHJlPjwvZGl2PgogIAoKPGEgaWQ9IkNvZGVnZW5lcmF0b3JfQ2xpZW50X2VjaG9TdHJ1Y3QiPjwvYT48L3A+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iQ2xpZW50X2Zvcl9lY2hvU3RydWN0X29wZXJhdGlvbiI+PC9hPjxoMz5DbGllbnQgZm9yIGVjaG9TdHJ1Y3Qgb3BlcmF0aW9uPC9oMz4KICAgIDxkaXYgY2xhc3M9InNvdXJjZSI+PHByZT52b2lkIGludm9rZV9zZXJ2aWNlX3VzaW5nX2RhdGFiaW5kaW5nICggYXhpczJfc3R1Yl90KiBzdHViLAogY29uc3QgYXhpczJfZW52X3QqIGVudiApCiB7CiAvKiB2YXJpYWJsZXMgdXNlZCBieSBkYXRhYmluZGluZyAqLwogYXhpczJfZWNob1N0cnVjdF90KiBlY2hvX2luID0gTlVMTDsKIGF4aXMyX2VjaG9TdHJ1Y3RSZXNwb25zZV90KiBlY2hvX291dCA9IE5VTEw7CiBheGlzMl9TT0FQU3RydWN0X3QqIHN0cnVjdF9pbiA9IE5VTEw7CiBheGlzMl9TT0FQU3RydWN0X3QqIHN0cnVjdF9vdXQgPSBOVUxMOwoKCiAvKiB2YXJpYWJsZXMgdG8gc3RvcmUgZGF0YSAqLwogZmxvYXQgZmxvYXRfdmFsID0gMTE7CiBpbnQgaW50X3ZhbCA9IDEwOwogY2hhciogc3RyaW5nX3ZhbCA9ICJoZWxsbyBzdHJ1Y3QiOwogaW50IHJldF9pbnRfdmFsID0gMDsKIGZsb2F0IHJldF9mbG9hdF92YWwgPSAwOwogY2hhciogcmV0X3N0cmluZ192YWwgPSAiIjsKIAogLyogY3JlYXRlIHRoZSBzdHJ1Y3QgYW5kIHNldCBpbnB1dCB2YWx1ZXMqLwogc3RydWN0X2luID0gYXhpczJfU09BUFN0cnVjdF9jcmVhdGUoIGVudiApOwogQVhJUzJfU09BUFNUUlVDVF9TRVRfVkFSRkxPQVQgKCBzdHJ1Y3RfaW4sIGVudiwgZmxvYXRfdmFsICk7CiBBWElTMl9TT0FQU1RSVUNUX1NFVF9WQVJJTlQgKCBzdHJ1Y3RfaW4sIGVudiwgaW50X3ZhbCApOwogQVhJUzJfU09BUFNUUlVDVF9TRVRfVkFSU1RSSU5HICggc3RydWN0X2luLCBlbnYsIHN0cmluZ192YWwgKTsKCiAvKiBjcmVhdGUgdGhlIHJlcXVlc3QgYW5kIHNldCB0aGUgc3RydWN0ICovCiBlY2hvX2luID0gYXhpczJfZWNob1N0cnVjdF9jcmVhdGUoIGVudiApOwogQVhJUzJfRUNIT1NUUlVDVF9TRVRfUEFSQU0wKCBlY2hvX2luLCBlbnYsIHN0cnVjdF9pbiApOwogLyogaW52b2tlIHRoZSB3ZWIgc2VydmljZSBtZXRob2QgKi8KIGVjaG9fb3V0ID0gYXhpczJfZWNob1N0cnVjdCggc3R1YiwgZW52LCBlY2hvX2luICk7CgogLyogcmV0cmlldmUgdGhlIHN0cnVjdHVyZSBmcm9tIHJlc3BvbnNlICovCiBzdHJ1Y3Rfb3V0ID0gQVhJUzJfRUNIT1NUUlVDVFJFU1BPTlNFX0dFVF9SRVRVUk4oIGVjaG9fb3V0LCBlbnYgKTsKCiAvKiByZXRyaWV2ZSBlYWNoIHZhbHVlIGZyb20gdGhlIHN0cnVjdHVyZSAqLwogcmV0X2Zsb2F0X3ZhbCA9IEFYSVMyX1NPQVBTVFJVQ1RfR0VUX1ZBUkZMT0FUICggc3RydWN0X291dCwgZW52ICk7CiByZXRfaW50X3ZhbCA9IEFYSVMyX1NPQVBTVFJVQ1RfR0VUX1ZBUklOVCAoIHN0cnVjdF9vdXQsIGVudiApOwogcmV0X3N0cmluZ192YWwgPSBBWElTMl9TT0FQU1RSVUNUX0dFVF9WQVJTVFJJTkcgKCBzdHJ1Y3Rfb3V0LCBlbnYgKTsKCiAvKiBwcmludCB0aGUgdmFsdWVzICovCiBwcmludGYgKCAicmV0dXJuZWQgdmFsdWVzIFxuIik7CiBwcmludGYgKCIgZmxvYXQgJWZcbiIsIHJldF9mbG9hdF92YWwgKTsKIHByaW50ZiAoIiBpbnQgJWQgXG4iLCByZXRfaW50X3ZhbCApOwogcHJpbnRmICgiIHN0cmluZyAlcyBcbiIsIHJldF9zdHJpbmdfdmFsKTsKIH0KIAo8L3ByZT48L2Rpdj4KICA8cD48YSBpZD0iUHJvdmlkaW5nX3NlY3VyaXR5X3VzaW5nX1JhbXBhcnQiPjwvYT48L3A+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iUHJvdmlkaW5nX1NlY3VyaXR5X3VzaW5nX1JhbXBhcnRfQyI+PC9hPjxoMz5Qcm92aWRpbmcgU2VjdXJpdHkgdXNpbmcgUmFtcGFydC9DPC9oMz48cD5SYW1wYXJ0L0MgaXMgdGhlIHNlY3VyaXR5IG1vZHVsZSBmb3IgQXhpczIvQywgd2hpY2ggc3VwcG9ydHMgVXNlcm5hbWVUb2tlbgpiYXNlZCBhdXRoZW50aWNhdGlvbiBhbmQgVGltZXN0YW1wcyBhcyBwZXIgV1MtU2VjdXJpdHkgc3BlY2lmaWNhdGlvbi4gSW4gdGhpcwpVc2VyJ3MgR3VpZGUgd2Ugd2lsbCBleHBsYWluIGhvdyB0byB1c2UgUmFtcGFydCBpbnNpZGUgQXhpczIvQy48L3A+PHA+PGEgaWQ9IkVuZ2FnaW5nX3JhbXBhcnRfbW9kdWxlIj48L2E+PC9wPjwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9IkVuZ2FnaW5nX3JhbXBhcnRfbW9kdWxlIj48L2E+PGgzPkVuZ2FnaW5nIHJhbXBhcnQgbW9kdWxlPC9oMz48dWw+CiAgPGxpPjxiPlN0ZXAgMTo8L2I+IENvcHkgcmFtcGFydCBkaXJlY3RvcnkgY3JlYXRlZCBpbgogICAgQVhJUzJDX0hPTUUvZGVwbG95L3JhbXBhcnQgdG8gQVhJUzJDX0hPTUUvZGVwbG95L21vZHVsZXMKICAgIDxwcmU+Y3AgJEFYSVMyQ19IT01FL2RlcGxveS9yYW1wYXJ0L3JhbXBhcnQgJEFYSVMyQ19IT01FL2RlcGxveS9tb2R1bGVzPC9wcmU+CiAgPC9saT4KICA8bGk+PGI+U3RlcCAyOjwvYj5BZGQgZm9sbG93aW5nIGxpbmUgdG8gdGhlIGF4aXMyLnhtbCB1bmRlciBheGlzY29uZmlnLgogICAgVGhpcyB3aWxsIGVuZ2FnZSB0aGUgcmFtcGFydCBtb2R1bGUuCiAgICA8cHJlPiZsdDttb2R1bGUgcmVmPSJyYW1wYXJ0Ii8mZ3Q7PC9wcmU+CiAgPC9saT4KICA8bGk+PGI+U3RlcCAzOjwvYj5UaGVuIGFkZCB0aGUgZm9sbG93aW5nIHRvIGF4aXMyLnhtbCBmaWxlIHRvIHNwZWNpZnkKICAgIEluL091dCBmbG93IHBhcmFtZXRlcnMuIFlvdSBtYXkgZmluZCBhIHNhbXBsZSBheGlzMi54bWwgZmlsZSBpbgogICAgcmFtcGFydC9zYW1wbGVzL2NsaWVudC9lY2hvL2RhdGEvCiAgICA8cD4gJmx0O3BhcmFtZXRlciBuYW1lPSJPdXRmbG93U2VjdXJpdHkiJmd0OyZsdDthY3Rpb24mZ3Q7PGJyPjwvYnI+ICZsdDtpdGVtcyZndDtVc2VybmFtZVRva2VuIFRpbWVzdGFtcCZsdDsvaXRlbXMmZ3Q7PGJyPjwvYnI+ICZsdDt1c2VyJmd0O0dhamFiYSZsdDsvdXNlciZndDs8YnI+PC9icj4gJmx0O3Bhc3N3b3JkVHlwZSZndDtwYXNzd29yZERpZ2VzdCZsdDsvcGFzc3dvcmRUeXBlJmd0Ozxicj48L2JyPiAmbHQ7cGFzc3dvcmRDYWxsYmFja0NsYXNzJmd0Oy9ob21lL2dhamFiYS9heGlzMi9jL2RlcGxveS9yYW1wYXJ0L3NhbXBsZXMvY2FsbGJhY2svbGlicHdjYi5zbyZsdDsvcGFzc3dvcmRDYWxsYmFja0NsYXNzJmd0Ozxicj48L2JyPiAmbHQ7dGltZVRvTGl2ZSZndDszNjAmbHQ7L3RpbWVUb0xpdmUmZ3Q7PGJyPjwvYnI+ICZsdDsvYWN0aW9uJmd0Ozxicj48L2JyPiAmbHQ7L3BhcmFtZXRlciZndDs8YnI+PC9icj4gPC9wPgogICAgPHAgY2xhc3M9ImNvZGUiPiAmbHQ7cGFyYW1ldGVyIG5hbWU9IkluZmxvd1NlY3VyaXR5IiZndDs8YnI+PC9icj4KICAgICZsdDthY3Rpb24mZ3Q7PGJyPjwvYnI+ICZsdDtpdGVtcyZndDtVc2VybmFtZVRva2VuCiAgICBUaW1lc3RhbXAmbHQ7L2l0ZW1zJmd0Ozxicj48L2JyPgogICAgJmx0O3Bhc3N3b3JkQ2FsbGJhY2tDbGFzcyZndDsvaG9tZS9nYWphYmEvYXhpczIvYy9kZXBsb3kvcmFtcGFydC9zYW1wbGVzL2NhbGxiYWNrL2xpYnB3Y2Iuc28mbHQ7L3Bhc3N3b3JkQ2FsbGJhY2tDbGFzcyZndDs8YnI+PC9icj4gJmx0Oy9hY3Rpb24mZ3Q7PGJyPjwvYnI+ICZsdDsvcGFyYW1ldGVyJmd0Ozxicj48L2JyPiA8L3A+CgogIDwvbGk+CjwvdWw+PHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBZb3UgbXVzdCByZXBsYWNlIHRoZSB2YWx1ZSBvZgo8Y29kZT5wYXNzd29yZENhbGxiYWNrQ2xhc3M8L2NvZGU+IHBhcmFtZXRlciB0byBzdWl0IHlvdXIgc2V0dGluZ3MuPC9wPjxwPk5vdyBldmVyeXRoaW5nIGlzIHNldHVwIHRvIHRyeSBvdXQgdGhlIHNhbXBsZS4gU3RhcnQgYXhpczIgc2VydmVyIGFuZCBydW4KdGhlIHNhbXBsZSB1bmRlciByYW1wYXJ0L3NhbXBsZXMvY2xpZW50L2VjaG8uIElmIGV2ZXJ5dGhpbmcgd29ya3MgZmluZSBhCnNlY3VyaXR5IGhlYWRlciBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIG91dGdvaW5nIFNPQVAgbWVzc2FnZS48L3A+PHA+Jmx0O3dzc2U6U2VjdXJpdHkgeG1sbnM6d3NzZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXNlY2V4dC0xLjAueHNkIiZndDs8YnI+PC9icj4gJmx0O3dzc2U6VXNlcm5hbWVUb2tlbiB4bWxuczp3c3U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS11dGlsaXR5LTEuMC54c2QiJmd0Ozxicj48L2JyPiAmbHQ7d3NzZTpVc2VybmFtZSZndDtHYWphYmEmbHQ7L3dzc2U6VXNlcm5hbWUmZ3Q7PGJyPjwvYnI+ICZsdDt3c3NlOlBhc3N3b3JkIFR5cGU9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3MtdXNlcm5hbWUtdG9rZW4tcHJvZmlsZS0xLjAjUGFzc3dvcmREaWdlc3QiJmd0O1dOUHpuQk4zUGVMeXBLWVhsd1Y3dzl6Slo5bz0mbHQ7L3dzc2U6UGFzc3dvcmQmZ3Q7PGJyPjwvYnI+ICZsdDt3c3NlOk5vbmNlJmd0O0lDQWdJQ0FnSURFd05EWTBORGsxTWc9PSZsdDsvd3NzZTpOb25jZSZndDs8YnI+PC9icj4gJmx0O3dzdTpDcmVhdGVkJmd0OzIwMDYtMDgtMjhUMTE6NTI6MjdaJmx0Oy93c3U6Q3JlYXRlZCZndDs8YnI+PC9icj4gJmx0Oy93c3NlOlVzZXJuYW1lVG9rZW4mZ3Q7PGJyPjwvYnI+ICZsdDt3c3U6VGltZXN0YW1wIHhtbG5zOndzdT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXV0aWxpdHktMS4wLnhzZCImZ3Q7PGJyPjwvYnI+ICZsdDt3c3U6Q3JlYXRlZCZndDsyMDA2LTA4LTI4VDExOjUyOjI3WiZsdDsvd3N1OkNyZWF0ZWQmZ3Q7PGJyPjwvYnI+ICZsdDt3c3U6RXhwaXJlcyZndDsyMDA2LTA4LTI4VDExOjU4OjI3WiZsdDsvd3N1OkV4cGlyZXMmZ3Q7PGJyPjwvYnI+ICZsdDsvd3N1OlRpbWVzdGFtcCZndDs8YnI+PC9icj4mbHQ7L3dzc2U6U2VjdXJpdHkmZ3Q7PGJyPjwvYnI+PC9wPjxwPjxzdHJvbmc+Tm90ZTogPC9zdHJvbmc+Rm9yIHRoZSBhYm92ZSBzYW1wbGUgd2UgaGF2ZSB1c2VkIHRoZSBzYW1lIGF4aXMyLnhtbCBmaWxlIGZvcgpib3RoIHNlcnZlciBhbmQgdGhlIGNsaWVudC4gQnV0IGluIHRoZSByZWFsIHdvcmxkIHRoaXMgaXMgbm90IHBvc3NpYmxlLiBJbgpzdWNoIGEgc2l0dWF0aW9uIHlvdSBjYW4gc3BlY2lmeSBhIGNsaWVudCBob21lIGFzIGFuIGFyZ3VtZW50LjwvcD4KICAgIDxkaXYgY2xhc3M9InNvdXJjZSI+PHByZT4uL2VjaG8gW2VuZHBvaW50X3VybF0gW3BhdGggdG8geW91ciBjbGllbnRfaG9tZV0KCjwvcHJlPjwvZGl2PgogIDwvZGl2PjxkaXYgY2xhc3M9InN1YnNlY3Rpb24iPjxhIG5hbWU9IlNlbWFudGljc19vZl9QYXJhbWV0ZXJzX1NwZWNpZmllZF9pbl9heGlzMl94bWwiPjwvYT48aDM+U2VtYW50aWNzIG9mIFBhcmFtZXRlcnMgU3BlY2lmaWVkIGluIGF4aXMyLnhtbDwvaDM+PHRhYmxlIGNsYXNzPSJib2R5VGFibGUiPjx0Ym9keT4KICAgIDx0ciBjbGFzcz0iYiI+PHRkPjxzdHJvbmc+UGFyYW1ldGVyPC9zdHJvbmc+PC90ZD48dGQ+PHN0cm9uZz5TZW1hbnRpYzwvc3Ryb25nPjwvdGQ+PC90cj4KICAgIDx0ciBjbGFzcz0iYSI+PHRkPml0ZW1zPC90ZD48dGQ+U3BlY2lmeSB0aGUgdG9rZW5zIHRvIGJlIHVzZWQgZm9yIHRoZSBjcmVkZW50aWFsIGV4Y2hhbmdlLiBJbiB0aGUKICAgICAgICBhYm92ZSBleGFtcGxlIHdlIHVzZWQgYm90aCBVc2VybmFtZVRva2VucyBhbmQgVGltZXN0YW1wczwvdGQ+PC90cj4KICAgIDx0ciBjbGFzcz0iYiI+PHRkPnVzZXI8L3RkPjx0ZD5UaGUgdXNlcm5hbWUgb2YgdGhlIFVzZXJuYW1lVG9rZW48L3RkPjwvdHI+CiAgICA8dHIgY2xhc3M9ImEiPjx0ZD5wYXNzd29yZFR5cGU8L3RkPjx0ZD5UaGUgd2F5IHBhc3N3b3JkIGlzIGRlbGl2ZXJlZC4gVGhpcyBjYW4gYmUgZWl0aGVyIHBhc3N3b3JkVGV4dCBvcgogICAgICAgIHRoZSBwYXNzd29yZERpZ2VzdC4gVGhlIGZvcm1lciBkZWxpdmVycyBwYXNzd29yZCBpbiBwbGFpblRleHQgd2hpbHN0CiAgICAgICAgdGhlIGxhdHRlciBkZWxpdmVycyB0aGUgaGFzaGVkIHZhbHVlIG9mIHRoZSBwYXNzd29yZC4gRGVmYXVsdCBpcwogICAgICAgIHBhc3N3b3JkVGV4dDwvdGQ+PC90cj4KICAgIDx0ciBjbGFzcz0iYiI+PHRkPnBhc3N3b3JkQ2FsbGJhY2tDbGFzczwvdGQ+PHRkPlRoZSBtb2R1bGUgdGhhdCBwcm92aWRlcyB0aGUgcGFzc3dvcmQgZm9yIGEgcGFydGljdWxhciB1c2VyPC90ZD48L3RyPgogICAgPHRyIGNsYXNzPSJhIj48dGQ+dGltZVRvTGl2ZTwvdGQ+PHRkPlRoZSB2YWxpZGl0eSBwZXJpb2Qgb2YgdGhlIFRpbWVzdGFtcFRva2VuIGFmdGVyIGlzc3VpbmcuIFRoZSB0aW1lCiAgICAgICAgaXMgaW4gc2Vjb25kcy4gSW4gdGhlIGFib3ZlIGV4YW1wbGUsIGl0J3MgNiBtaW51dGVzLiBJZiBub3QKICAgICAgICBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGlzIDUgbWludXRlczwvdGQ+PC90cj4KICA8L3Rib2R5PjwvdGFibGU+PHA+PGEgaWQ9IldyaXRpbmdfb3duX3Bhc3N3b3JkX2NhbGxiYWNrX21vZHVsZSI+PC9hPjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJXcml0aW5nX1lvdXJfT3duX1Bhc3N3b3JkX0NhbGxiYWNrX01vZHVsZSI+PC9hPjxoMz5Xcml0aW5nIFlvdXIgT3duIFBhc3N3b3JkIENhbGxiYWNrIE1vZHVsZTwvaDM+PHA+VGhlIFJhbXBhcnQgbW9kdWxlIGlzIG5vdCBkZXBlbmRlbnQgb24gdGhlIHdheSB0aGF0IHBhc3N3b3JkcyBhcmUgc3RvcmVkLgpGb3IgZXhhbXBsZSwgeW91IG1heSBoYXZlIHBhc3N3b3JkcyBpbiBhIGZsYXQgZmlsZSBvciBpbiBhIHNlY3VyZWQgZGF0YWJhc2UuCldoYXQgZXZlciB0aGUgd2F5LCBSYW1wYXJ0IGV4cGVjdHMgYSBwYXNzd29yZCBjYWxsYmFjayBtb2R1bGUgdG8gcmV0cmlldmUKcGFzc3dvcmRzIGZvciBhIGdpdmVuIHVzZXJuYW1lLiBUaGUgc2FtcGxlIGNvbWluZyB1bmRlcgoiJmx0O2F4aXMyY19ob21lJmd0O3JhbXBhcnQvc2FtcGxlcy9jYWxsYmFjayIgaXMgYSBzaW1wbGUgb25lIGNvbnRhaW5pbmcgYSAKZmV3IGhhcmQtY29kZWQgcGFzc3dvcmRzLiBJdCBhc3NpZ25zIGEgZnVuY3Rpb24gdG8gdGhlIGZ1bmN0aW9uIHBvaW50ZXIuPC9wPgogICAgPGRpdiBjbGFzcz0ic291cmNlIj48cHJlPnJjYi0mZ3Q7b3BzLSZndDtjYWxsYmFja19wYXNzd29yZCA9IGdldF9zYW1wbGVfcGFzc3dvcmQ7Cgo8L3ByZT48L2Rpdj4KICA8cD48Y29kZT5jYWxsYmFja19wYXNzd29yZDwvY29kZT4gaXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGFueSBmdW5jdGlvbiB3aGljaApoYXMgdGhlIGZvbGxvd2luZyBzaWduYXR1cmUuPC9wPgogICAgPGRpdiBjbGFzcz0ic291cmNlIj48cHJlPioKeW91cl9mdW5jdGlvbihyYW1wYXJ0X2NhbGxiYWNrX3QgKnJjYiwKICAgICAgICAgICAgICBjb25zdCBheGlzMl9lbnZfdCAqZW52LCBjb25zdCBheGlzMl9jaGFyX3QgKnVzZXJuYW1lKQoKPC9wcmU+PC9kaXY+CiAgPHA+PGNvZGU+eW91cl9mdW5jdGlvbjwvY29kZT4gc2hvdWxkIHJldHVybiB0aGUgcGFzc3dvcmQgYXMKPGNvZGU+YXhpczJfY2hhcl90PC9jb2RlPiogcGVyIHRoZSB1c2VybmFtZSBzcGVjaWZpZWQsIGlmIGFueS4gSW5zaWRlIHlvdXIKZnVuY3Rpb24sIHlvdSBtYXkgd3JpdGUgeW91ciBjb2RlIHRvIHN1cHBseSBzdG9yZWQgcGFzc3dvcmRzLjwvcD48cD5UaGVuIHRoZSBwYXRoIHRvIHRoZSBjYWxsYmFjayBtb2R1bGUgbmVlZHMgdG8gYmUgc3BlY2lmaWVkIGluIGF4aXMyLnhtbAp1bmRlciBwYXNzd29yZENhbGxiYWNrQ2xhc3MuIFtUaGUgd29yZCBDbGFzcywgaW5zdGVhZCBvZiBNb2R1bGUgaXMgb25seSBmb3IKY29tcGF0aWJpbGl0eSB3aXRoIGphdmEgaW1wbGVtZW50YXRpb25dPC9wPjxwPjxhIGlkPSJBZGRpbmdfc2VjdXJpdHlfcGFyYW1ldGVyc19keW5hbWljYWxseSI+PC9hPjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJBZGRpbmdfU2VjdXJpdHlfUGFyYW1ldGVyc19EeW5hbWljYWxseSI+PC9hPjxoMz5BZGRpbmcgU2VjdXJpdHkgUGFyYW1ldGVycyBEeW5hbWljYWxseTwvaDM+PHA+T3V0ZmxvdyBwYXJhbWV0ZXJzIHNwZWNpZmllZCBpbiB0aGUgYXhpczIueG1sIGNhbiBiZSBhZGRlZCBkeW5hbWljYWxseSBpbgp0aGUgY2xpZW50IGxldmVsLiBUaGlzIGNhbiBiZSBkb25lIGFzIHNob3duIGluIHRoZSBmb2xsb3dpbmcgc2FtcGxlIGNvZGUuPC9wPgogICAgPGRpdiBjbGFzcz0ic291cmNlIj48cHJlPiB1bl9wcm9wZXJ0eSA9IGF4aXMyX3Byb3BlcnR5X2NyZWF0ZShlbnYpOwpBWElTMl9QUk9QRVJUWV9TRVRfVkFMVUUodW5fcHJvcGVydHksIGVudiwgIkdhamFiYSIpOwpBWElTMl9PUFRJT05TX1NFVF9QUk9QRVJUWShvcHRpb25zLCBlbnYsIFJBTVBBUlRfQUNUSU9OX1VTRVIsIHVuX3Byb3BlcnR5KTsKCjwvcHJlPjwvZGl2PgogIDxwPlRoZSBhYm92ZSBjb2RlIHdpbGwgc2V0IHRoZSB1c2VybmFtZSBwYXJhbWV0ZXIgZHluYW1pY2FsbHkuIEFsbCB0aGUgdmFsdWVzCnNwZWNpZmllZCBpbiB0aGUgYXhpczIueG1sIHdpbGwgYmUgb3ZlcnJpZGRlbiBieSB0aGUgZHluYW1pYyBzZXR0aW5ncy48L3A+PC9kaXY+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iUmVmZXJlbmNlcyI+PC9hPjxoMz5SZWZlcmVuY2VzPC9oMz48dWw+CiAgPGxpPkludHJvZHVjaW5nIEFwYWNoZSBBeGlzMi9DIC0gPGEgaHJlZj0iaHR0cDovL3d3dy53c28yLm5ldC9hcnRpY2xlcy9heGlzMi9jLzIwMDYvMDkvMDQvaW50cm9kdWN0aW9uIiBjbGFzcz0iZXh0ZXJuYWxMaW5rIiB0aXRsZT0iRXh0ZXJuYWwgTGluayI+aHR0cDovL3d3dy53c28yLm5ldC9hcnRpY2xlcy9heGlzMi9jLzIwMDYvMDkvMDQvaW50cm9kdWN0aW9uPC9hPjwvbGk+CiAgPGxpPkludHJvZHVjaW5nIFJhbXBhcnQvQy0gPGEgaHJlZj0iaHR0cDovL3d3dy53c28yLm5ldC9hcnRpY2xlcy9yYW1wYXJ0L2MvMjAwNi8wOS8xOS9pbnRyb2R1Y3Rpb24iIGNsYXNzPSJleHRlcm5hbExpbmsiIHRpdGxlPSJFeHRlcm5hbCBMaW5rIj5odHRwOi8vd3d3LndzbzIubmV0L2FydGljbGVzL3JhbXBhcnQvYy8yMDA2LzA5LzE5L2ludHJvZHVjdGlvbjwvYT48L2xpPgo8L3VsPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj48aHI+PC9ocj48L2Rpdj48ZGl2IGlkPSJmb290ZXIiPjxkaXYgY2xhc3M9InhyaWdodCI+qSAyMDA1LTIwMDYsIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPjxocj48L2hyPjwvZGl2PjwvZGl2PjwvYm9keT48L2h0bWw+