PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+CjwhLS1OZXdQYWdlLS0+CjxIVE1MPgo8SEVBRD4KPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBGcmkgQXVnIDIyIDAzOjQzOjU3IEVEVCAyMDAzIC0tPgo8VElUTEU+Cm9yZy5hcGFjaGUuc3RydXRzLnV0aWwgKEFwYWNoZSBTdHJ1dHMgQVBJIERvY3VtZW50YXRpb24pCjwvVElUTEU+CjxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnN0cnV0cy51dGlsIHBhY2thZ2UiPgo8TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+CjwvSEVBRD4KPFNDUklQVD4KZnVuY3Rpb24gYXNkKCkKewpwYXJlbnQuZG9jdW1lbnQudGl0bGU9Im9yZy5hcGFjaGUuc3RydXRzLnV0aWwgKEFwYWNoZSBTdHJ1dHMgQVBJIERvY3VtZW50YXRpb24pIjsKfQo8L1NDUklQVD4KPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KCjwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+CjxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgo8VFI+CjxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+CjxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+CiAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5QYWNrYWdlPC9CPjwvRk9OVD4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdXNlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPC9UUj4KPC9UQUJMRT4KPC9URD4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+CjwvRU0+CjwvVEQ+CjwvVFI+Cgo8VFI+CjxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+CiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL3VwbG9hZC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEI+UFJFViBQQUNLQUdFPC9CPjwvQT4mbmJzcDsKJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvdmFsaWRhdG9yL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Qj5ORVhUIFBBQ0tBR0U8L0I+PC9BPjwvRk9OVD48L1REPgo8VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgogIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwombmJzcDs8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7CiZuYnNwOwo8U0NSSVBUPgogIDwhLS0KICBpZih3aW5kb3c9PXRvcCkgewogICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7CiAgfQogIC8vLS0+CjwvU0NSSVBUPgo8Tk9TQ1JJUFQ+CjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgo8L05PU0NSSVBUPgo8L0ZPTlQ+PC9URD4KPC9UUj4KPC9UQUJMRT4KPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgoKPEhSPgo8SDI+ClBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMudXRpbAo8L0gyPgpUaGUgVXRpbGl0aWVzIHBhY2thZ2UgcHJvdmlkZXMgYSB2YXJpZXR5IG9mIGZhbWlsaWVzIG9mIGNsYXNzZXMsCnRvIHNvbHZlIHByb2JsZW1zIHRoYXQgYXJlIGNvbW1vbmx5IGVuY291bnRlcmVkIGluIGJ1aWxkaW5nIHdlYiBhcHBsaWNhdGlvbnMuCjxQPgo8Qj5TZWU6PC9CPgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxBIEhSRUY9IiNwYWNrYWdlX2Rlc2NyaXB0aW9uIj48Qj5EZXNjcmlwdGlvbjwvQj48L0E+CjxQPgoKPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+CjxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgo8VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KPEI+Q2xhc3MgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJFcnJvck1lc3NhZ2VzLmh0bWwiPkVycm9yTWVzc2FnZXM8L0E+PC9CPjwvVEQ+CjxURD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5Vc2Ugb3JnLmFwYWNoZS5zdHJ1dHMuYWN0aW9uLkFjdGlvbkVycm9ycyBpbnN0ZWFkPC9JPjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iR2VuZXJpY0RhdGFTb3VyY2UuaHRtbCI+R2VuZXJpY0RhdGFTb3VyY2U8L0E+PC9CPjwvVEQ+CjxURD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5Vc2UgYSA8Y29kZT5CYXNpY0RhdGFTb3VyY2U8L2NvZGU+IGRpcmVjdGx5LCBvciBpbmRpcmVjdGx5CiAgYWNxdWlyZSBhIGRhdGEgc291cmNlIHByb3ZpZGVkIGJ5IHlvdXIgY29udGFpbmVyPC9JPjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iSW1hZ2VCdXR0b25CZWFuLmh0bWwiPkltYWdlQnV0dG9uQmVhbjwvQT48L0I+PC9URD4KPFREPkEgc2ltcGxlIEphdmFCZWFuIHRvIGVuY2Fwc3VsYXRlIHRoZSByZXF1ZXN0IHBhcmFtZXRlcnMgc2VudCBmb3IgYW4gSFRNTAogaW5wdXQgZWxlbWVudCBvZiB0eXBlIGltYWdlLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iSXRlcmF0b3JBZGFwdGVyLmh0bWwiPkl0ZXJhdG9yQWRhcHRlcjwvQT48L0I+PC9URD4KPFREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPlVzZSBjb21tb25zLWNvbGxlY3Rpb25zJyBJdGVyYXRvclV0aWxzLmFzSXRlcmF0b3IoRW51bWVyYXRpb24pLjwvST48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IkxhYmVsVmFsdWVCZWFuLmh0bWwiPkxhYmVsVmFsdWVCZWFuPC9BPjwvQj48L1REPgo8VEQ+QSBzaW1wbGUgSmF2YUJlYW4gdG8gcmVwcmVzZW50IGxhYmVsLXZhbHVlIHBhaXJzLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iTWVzc2FnZVJlc291cmNlcy5odG1sIj5NZXNzYWdlUmVzb3VyY2VzPC9BPjwvQj48L1REPgo8VEQ+R2VuZXJhbCBwdXJwb3NlIGFic3RyYWN0IGNsYXNzIHRoYXQgZGVzY3JpYmVzIGFuIEFQSSBmb3IgcmV0cmlldmluZwogTG9jYWxlLXNlbnNpdGl2ZSBtZXNzYWdlcyBmcm9tIHVuZGVybHlpbmcgcmVzb3VyY2UgbG9jYXRpb25zIG9mIGFuCiB1bnNwZWNpZmllZCBkZXNpZ24sIGFuZCBvcHRpb25hbGx5IHV0aWxpemluZyB0aGUgPGNvZGU+TWVzc2FnZUZvcm1hdDwvY29kZT4KIGNsYXNzIHRvIHByb2R1Y2UgaW50ZXJuYXRpb25hbGl6ZWQgbWVzc2FnZXMgd2l0aCBwYXJhbWV0cmljIHJlcGxhY2VtZW50LjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iTWVzc2FnZVJlc291cmNlc0ZhY3RvcnkuaHRtbCI+TWVzc2FnZVJlc291cmNlc0ZhY3Rvcnk8L0E+PC9CPjwvVEQ+CjxURD5GYWN0b3J5IGZvciA8Y29kZT5NZXNzYWdlUmVzb3VyY2VzPC9jb2RlPiBpbnN0YW5jZXMuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJQcm9wZXJ0eU1lc3NhZ2VSZXNvdXJjZXMuaHRtbCI+UHJvcGVydHlNZXNzYWdlUmVzb3VyY2VzPC9BPjwvQj48L1REPgo8VEQ+Q29uY3JldGUgc3ViY2xhc3Mgb2YgPGNvZGU+TWVzc2FnZVJlc291cmNlczwvY29kZT4gdGhhdCByZWFkcyBtZXNzYWdlIGtleXMKIGFuZCBjb3JyZXNwb25kaW5nIHN0cmluZ3MgZnJvbSBuYW1lZCBwcm9wZXJ0eSByZXNvdXJjZXMgaW4gdGhlIHNhbWUgbWFubmVyCiB0aGF0IDxjb2RlPmphdmEudXRpbC5Qcm9wZXJ0eVJlc291cmNlQnVuZGxlPC9jb2RlPiBkb2VzLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iUHJvcGVydHlNZXNzYWdlUmVzb3VyY2VzRmFjdG9yeS5odG1sIj5Qcm9wZXJ0eU1lc3NhZ2VSZXNvdXJjZXNGYWN0b3J5PC9BPjwvQj48L1REPgo8VEQ+RmFjdG9yeSBmb3IgPGNvZGU+UHJvcGVydHlNZXNzYWdlUmVzb3VyY2VzPC9jb2RlPiBpbnN0YW5jZXMuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJSZXF1ZXN0VXRpbHMuaHRtbCI+UmVxdWVzdFV0aWxzPC9BPjwvQj48L1REPgo8VEQ+R2VuZXJhbCBwdXJwb3NlIHV0aWxpdHkgbWV0aG9kcyByZWxhdGVkIHRvIHByb2Nlc3NpbmcgYSBzZXJ2bGV0IHJlcXVlc3QKIGluIHRoZSBTdHJ1dHMgY29udHJvbGxlciBmcmFtZXdvcmsuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJSZXNwb25zZVV0aWxzLmh0bWwiPlJlc3BvbnNlVXRpbHM8L0E+PC9CPjwvVEQ+CjxURD5HZW5lcmFsIHB1cnBvc2UgdXRpbGl0eSBtZXRob2RzIHJlbGF0ZWQgdG8gZ2VuZXJhdGluZyBhIHNlcnZsZXQgcmVzcG9uc2UKIGluIHRoZSBTdHJ1dHMgY29udHJvbGxlciBmcmFtZXdvcmsuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJTZXJ2bGV0Q29udGV4dFdyaXRlci5odG1sIj5TZXJ2bGV0Q29udGV4dFdyaXRlcjwvQT48L0I+PC9URD4KPFREPkEgUHJpbnRXcml0ZXIgaW1wbGVtZW50YXRpb24gdGhhdCB1c2VzIHRoZSBsb2dnaW5nIGZhY2lsaXRpZXMgb2YgYQogPGNvZGU+amF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDwvY29kZT4gdG8gb3V0cHV0IGl0cyByZXN1bHRzLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iU3RydXRzVmFsaWRhdG9yLmh0bWwiPlN0cnV0c1ZhbGlkYXRvcjwvQT48L0I+PC9URD4KPFREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPkFzIG9mIFN0cnV0cyAxLjEsIHJlcGxhY2VkIGJ5ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL3ZhbGlkYXRvci9GaWVsZENoZWNrcy5odG1sIj48Q09ERT5GaWVsZENoZWNrczwvQ09ERT48L0E+PC9JPjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iU3RydXRzVmFsaWRhdG9yVXRpbC5odG1sIj5TdHJ1dHNWYWxpZGF0b3JVdGlsPC9BPjwvQj48L1REPgo8VEQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+QXMgb2YgU3RydXRzIDEuMSwgcmVwbGFjZWQgYnkgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvdmFsaWRhdG9yL1Jlc291cmNlcy5odG1sIj48Q09ERT5SZXNvdXJjZXM8L0NPREU+PC9BPjwvST48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlRva2VuUHJvY2Vzc29yLmh0bWwiPlRva2VuUHJvY2Vzc29yPC9BPjwvQj48L1REPgo8VEQ+VG9rZW5Qcm9jZXNzb3IgaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGFsbCB0b2tlbiByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuPC9URD4KPC9UUj4KPC9UQUJMRT4KJm5ic3A7Cgo8UD4KCjxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgo8VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+CjxCPkV4Y2VwdGlvbiBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IkFwcEV4Y2VwdGlvbi5odG1sIj5BcHBFeGNlcHRpb248L0E+PC9CPjwvVEQ+CjxURD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST51c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvdXRpbC9Nb2R1bGVFeGNlcHRpb24uaHRtbCI+PENPREU+TW9kdWxlRXhjZXB0aW9uPC9DT0RFPjwvQT48L0k+PC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJNb2R1bGVFeGNlcHRpb24uaHRtbCI+TW9kdWxlRXhjZXB0aW9uPC9BPjwvQj48L1REPgo8VEQ+VXNlZCBmb3Igc3BlY2lhbGl6ZWQgZXhjZXB0aW9uIGhhbmRsaW5nLjwvVEQ+CjwvVFI+CjwvVEFCTEU+CiZuYnNwOwoKPFA+CjxBIE5BTUU9InBhY2thZ2VfZGVzY3JpcHRpb24iPjwhLS0gLS0+PC9BPjxIMj4KUGFja2FnZSBvcmcuYXBhY2hlLnN0cnV0cy51dGlsIERlc2NyaXB0aW9uCjwvSDI+Cgo8UD4KVGhlIFV0aWxpdGllcyBwYWNrYWdlIHByb3ZpZGVzIGEgdmFyaWV0eSBvZiBmYW1pbGllcyBvZiBjbGFzc2VzLAp0byBzb2x2ZSBwcm9ibGVtcyB0aGF0IGFyZSBjb21tb25seSBlbmNvdW50ZXJlZCBpbiBidWlsZGluZyB3ZWIgYXBwbGljYXRpb25zLgo8YnI+PGJyPgo8YSBuYW1lPSJkb2MuRGVzY3JpcHRpb24iPjwvYT4KPGRpdiBhbGlnbj0iY2VudGVyIj4KPGEgaHJlZj0iI2RvYy5JbnRybyI+W0ludHJvZHVjdGlvbl08L2E+CjxhIGhyZWY9IiNkb2MuQmVhbnMiPltCZWFuc108L2E+CjxhIGhyZWY9IiNkb2MuVXRpbGl0aWVzIj5bU2VydmxldCBVdGlsaXRpZXNdPC9hPgo8YSBocmVmPSIjZG9jLk1lc3NhZ2VzIj5bTWVzc2FnZSBSZXNvdXJjZXNdPC9hPgo8L2Rpdj4KCjxocj4KCjxhIG5hbWU9ImRvYy5JbnRybyI+PC9hPgo8aDM+SW50cm9kdWN0aW9uPC9oMz4KCjxwPlRoZSBTdHJ1dHMgVXRpbGl0aWVzIFBhY2thZ2Ugb2ZmZXJzIHNldmVyYWwgZmFtaWxpZXMKb2YgY2xhc3NlcyB0aGF0IGFzc2lzdCBpbiBzb2x2aW5nIGNvbW1vbmx5IGVuY291bnRlcmVkIHByb2JsZW1zIHdoZW4gYnVpbGRpbmcKd2ViIGFwcGxpY2F0aW9ucy4gIE1vc3Qgb2YgdGhlIGNsYXNzZXMgaW4gdGhpcyBwYWNrYWdlIGRvIG5vdCByZWx5IG9uIHRoZQpjb250cm9sbGVyIHNlcnZsZXQgZnJhbWV3b3JrLCBvciB0aGUgY3VzdG9tIHRhZyBsaWJyYXJpZXMsIHNvIHRoZXkgYXJlIGFsc28Kc3VpdGFibGUgZm9yIGdlbmVyYWwgSmF2YSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZy4gIFRoZSBmb2xsb3dpbmcgZmFtaWxpZXMKYXJlIGluY2x1ZGVkOjwvcD4KPHVsPgo8bGk+PGEgaHJlZj0iI2RvYy5CZWFucyI+QmVhbnM8L2E+IC0gQSBzbWFsbCBzZXQgb2YgdXRpbGl0eSBiZWFucyB1c2VmdWwgZm9yIAogICAgZW5jYXBzdWxhdGluZyBmb3JtIGVsZW1lbnRzLjwvbGk+CjxsaT48YSBocmVmPSIjZG9jLlV0aWxpdGllcyI+U2VydmxldCBVdGlsaXRpZXM8L2E+IC0gQSBzZXQgb2YgY2xhc3NlcyB1c2VmdWwKICAgIGZvciB3b3JraW5nIHdpdGggc2VydmxldC1yZWxhdGVkIGNsYXNzZXMuPC9saT4KPGxpPjxhIGhyZWY9IiNkb2MuTWVzc2FnZXMiPk1lc3NhZ2UgUmVzb3VyY2VzPC9hPiAtIEEgZmFtaWx5IG9mIGNsYXNzZXMgdGhhdAogICAgZmVhdHVyZXMgYWNjZXNzIHRvIGludGVybmF0aW9uYWxpemVkIG1lc3NhZ2Ugc3RyaW5ncyBiYXNlZCBvbiBhIG1lc3NhZ2UKICAgIGtleSBjb3VwbGVkIHdpdGggYSA8Y29kZT5qYXZhLnV0aWwuTG9jYWxlPC9jb2RlPiBvYmplY3QgcmVwcmVzZW50aW5nIGEKICAgIHBhcnRpY3VsYXIgdXNlcidzIHByZWZlcnJlZCBsYW5ndWFnZS48L2xpPgo8L3VsPgoKPGhyPgoKPGEgbmFtZT0iZG9jLkJlYW5zIj48L2E+CjxoMz5CZWFuczwvaDM+Cgo8cD4gVGhlIDxjb2RlPkltYWdlQnV0dG9uQmVhbjwvY29kZT4gaXMgYSBzaW1wbGUgSmF2YUJlYW4gdG8gZW5jYXBzdWxhdGUgdGhlIAogICAgcmVxdWVzdCBwYXJhbWV0ZXJzIHNlbnQgZm9yIGFuIEhUTUwgaW5wdXQgZWxlbWVudCBvZiB0eXBlIGltYWdlLiBUaGUgCiAgICA8Y29kZT5MYWJlbFZhbHVlQmVhbjwvY29kZT4gaXMgYSBzaW1wbGUgSmF2YUJlYW4gdG8gcmVwcmVzZW50IGxhYmVsLXZhbHVlIAogICAgcGFpcnMsIGVzcGVjaWFsbHkgdXNlZnVsIGZvciBodG1sIG9wdGlvbiBlbGVtZW50cy4KPC9wPgoKPGhyPgoKPGEgbmFtZT0iZG9jLlV0aWxpdGllcyI+PC9hPgo8aDM+U2VydmxldCBVdGlsaXRpZXM8L2gzPgoKPHA+IFRoZSA8Y29kZT5SZXF1ZXN0VXRpbHM8L2NvZGU+IGlzIGEgZ2VuZXJhbCBwdXJwb3NlIHV0aWxpdHkgbWV0aG9kcyAKICAgIHJlbGF0ZWQgdG8gcHJvY2Vzc2luZyBhIHNlcnZsZXQgcmVxdWVzdC4gVGhlIDxjb2RlPlJlc3BvbnNlVXRpbHM8L2NvZGU+CiAgICBpcyBhIGdlbmVyYWwgcHVycG9zZSB1dGlsaXR5IG1ldGhvZHMgcmVsYXRlZCB0byBnZW5lcmF0aW5nIGEgc2VydmxldCAKICAgIHJlc3BvbnNlLiBUaGUgPGNvZGU+U2VydmxldENvbnRleHRXcml0ZXI8L2NvZGU+IGlzIGEgUHJpbnRXcml0ZXIgCiAgICBpbXBsZW1lbnRhdGlvbiB0aGF0IHVzZXMgdGhlIGxvZ2dpbmcgZmFjaWxpdGllcyBvZiBhIAogICAgPGNvZGU+amF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDwvY29kZT4gdG8gb3V0cHV0IGl0cyByZXN1bHRzLgo8L3A+Cgo8aHI+Cgo8YSBuYW1lPSJkb2MuTWVzc2FnZXMiPjwvYT4KPGgzPk1lc3NhZ2UgUmVzb3VyY2VzPC9oMz4KCjxoNT5CYWNrZ3JvdW5kPC9oNT4KCjxwPk1vZGVybiBhcHBsaWNhdGlvbnMgb2Z0ZW4gaW5jbHVkZSB0aGUgcmVxdWlyZW1lbnQgdG8gc3VwcG9ydCBtdWx0aXBsZQpsYW5ndWFnZXMsIGZvciB1c2VycyB3aG8gcHJlZmVyIHRvIGludGVyYWN0IGluIGEgbGFuZ3VhZ2Ugb3RoZXIgdGhhbiB0aGUKZGVmYXVsdCBsYW5ndWFnZSBjb25maWd1cmVkIG9uIHRoZSBzZXJ2ZXIgcGxhdGZvcm0uICBJbiBhZGRpdGlvbiwgc2VudGVuY2VzCm9mdGVuIG5lZWQgdG8gYmUgY29uc3RydWN0ZWQsIHdpdGggZHluYW1pYyBjb250ZW50IHdob3NlIHBsYWNlbWVudCBpbiB0aGUKbWVzc2FnZSBkZXBlbmRzIG9uIHRoZSBzdGFuZGFyZCBzZW50ZW5jZSBzdHJ1Y3R1cmUgaW4gdGhhdCBwYXJ0aWN1bGFyCmxhbmd1YWdlLjwvcD4KCjxwPlRoZSBzdGFuZGFyZCBKYXZhIHBsYXRmb3JtIGluY2x1ZGVzIGEgZmFtaWx5IG9mIGNsYXNzZXMKKDxjb2RlPmphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTwvY29kZT4pIGRlc2lnbmVkIHRvIHN1cHBvcnQgbG9va2luZyB1cCBtZXNzYWdlCnN0cmluZ3MgYmFzZWQgb24gYSBzdGFuZGFyZCAia2V5Ii4gIFRoZSByZXNvdXJjZSBidW5kbGUgY2xhc3NlcyBhdXRvbWF0aWNhbGx5CmFjY2VzcyBhIEphdmEgY2xhc3MgKG9yIHByb3BlcnRpZXMgZmlsZSkgdGhhdCBpcyBuYW1lZCB3aXRoIGEgbmFtaW5nCmNvbnZlbnRpb24gdGhhdCBpbmNsdWRlcyB0aGUgTG9jYWxlIHRvIHdoaWNoIG1lc3NhZ2VzIGluIHRoYXQgY2xhc3MgKG9yIGZpbGUpCnBlcnRhaW4uICBIb3dldmVyLCB0aGlzIHNlbGVjdGlvbiBpcyBiYXNlZCBvbmx5IG9uIHRoZSBkZWZhdWx0IExvY2FsZSBvZiB0aGUKc2VydmVyIHBsYXRmb3JtLCBhbmQgY2Fubm90IGJlIGFkanVzdGVkIG9uIGEgcGVyLXVzZXIgYmFzaXMgYXMgcmVxdWlyZWQgZm9yIGFuCmludGVybmF0aW9uYWxpemVkIHdlYiBhcHBsaWNhdGlvbi48L3A+Cgo8cD5TdHJ1dHMgaW5jbHVkZXMgYSBmYW1pbHkgb2YgY2xhc3NlcwooPGNvZGU+b3JnLmFwYWNoZS5zdHJ1dHMudXRpbC5NZXNzYWdlUmVzb3VyY2VzPC9jb2RlPikgdGhhdCBleHRlbmRzIHRoZSBiYXNpYwphcHByb2FjaCB0byBsb29raW5nIHVwIG1lc3NhZ2Ugc3RyaW5ncyBieSBrZXksIGFsbG93aW5nIHlvdSB0byBvcHRpb25hbGx5CnNwZWNpZnkgYSBMb2NhbGUgYWxvbmcgd2l0aCB0aGUga2V5LiAgSW4gdGhpcyB3YXksIHlvdSBjYW4gYnVpbGQgYXBwbGljYXRpb25zCnRoYXQgbGV0IHlvdXIgdXNlcnMgc2VsZWN0IHdoaWNoIExvY2FsZSB0aGV5IHdpc2ggdG8gb3BlcmF0ZSB3aXRoaW4sIGFuZCB0aGVuCmxvb2sgdXAgbWVzc2FnZXMgaW4gdGhhdCBsYW5ndWFnZSAtIHVzaW5nIHRoZSBzYW1lIG1lc3NhZ2Uga2V5cyBubyBtYXR0ZXIgd2hhdApsYW5ndWFnZSBpcyBzZWxlY3RlZC48L3A+Cgo8cD5JbiBhZGRpdGlvbiB0byBzdXBwb3J0aW5nIGR5bmFtaWMgc2VsZWN0aW9uIG9mIGEgTG9jYWxlIGZvciBtZXNzYWdlIGxvb2t1cCwKdGhlIDxjb2RlPk1lc3NhZ2VSZXNvdXJjZXM8L2NvZGU+IGZhbWlseSBvZiBjbGFzc2VzIG9wdGlvbmFsbHkgYWxsb3cgeW91IHRvCnNwZWNpZnkgdXAgdG8gZm91ciBwYXJhbWV0ZXIgcmVwbGFjZW1lbnQgb2JqZWN0cywgd2hpY2ggYXJlIHVzZWQgdG8gcmVwbGFjZSB0aGUKcGFyYW1ldGVyIHBsYWNlaG9sZGVycyAiezB9IiB0aHJvdWdoICJ7M30iIGluIHRoZSByZXRyaWV2ZWQgbWVzc2FnZS4gIFRoaXMKcmVwbGFjZW1lbnQgdXNlcyB0aGUgZmFjaWxpdGllcyBvZiB0aGUgc3RhbmRhcmQgSmF2YQo8Y29kZT5qYXZhLnRleHQuTWVzc2FnZUZvcm1hdDwvY29kZT4gY2xhc3MsIHdoaWNoIHN1cHBvcnRzIG1hbnkgZXh0ZW5kZWQKZm9ybWF0dGluZyBjYXBhYmlsaXRpZXMgYXMgd2VsbC48L3A+Cgo8cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBpbnRlcm5hdGlvbmFsaXplZCBtZXNzYWdlcywgY29uc3VsdCB0aGUgZm9sbG93aW5nCnJlc291cmNlcyBpbiB5b3VyIEphdmEgRGV2ZWxvcG1lbnQgS2l0IGRvY3VtZW50YXRpb24gYnVuZGxlOjwvcD4KPHVsPgo8bGk+PGVtPkludGVybmF0aW9uYWxpemF0aW9uIEluZm88L2VtPiAtIEdlbmVyYWwgaW5mb3JtYXRpb24gb24gSmF2YSdzIHN0YW5kYXJkCiAgICBzdXBwb3J0IGZvciBpbnRlcm5hdGlvbmFsaXplZCBhcHBsaWNhdGlvbnMgY2FuIGJlIGZvdW5kIGF0CiAgICA8Y29kZT4mbHQ7JEpBVkFfSE9NRS9kb2NzL2d1aWRlL2ludGVybmF0L2luZGV4Lmh0bWwmZ3Q7PC9jb2RlPi4KICAgIFRoZSAiSW50ZXJuYXRpb25hbGl6YXRpb24gT3ZlcnZpZXciIHNlY3Rpb24gaW5jbHVkZXMgdXNlZnVsIGluZm9ybWF0aW9uCiAgICBhYm91dCBMb2NhbGVzLCBsb2NhbGl6ZWQgcmVzb3VyY2VzLCBtZXNzYWdlIGZvcm1hdHRpbmcsIGFuZCBvdGhlcgogICAgcmVsZXZhbnQgdG9waWNzLjwvbGk+CjxsaT48ZW0+SW50ZXJuYXRpb25hbGl6YXRpb24gVHV0b3JpYWw8L2VtPiAtIFRoZSBKYXZhIExhbmd1YWdlIFR1dG9yaWFsIGhhcyBhCiAgICBjb21wcmVoZW5zaXZlIHRyYWlsIGNvdmVyaW5nIGludGVybmF0aW9uYWxpemF0aW9uLCBhdmFpbGFibGUgYXQ6CiAgICA8YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2RvY3MvYm9va3MvdHV0b3JpYWwvaTE4bi9pbmRleC5odG1sIj4KICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20vZG9jcy9ib29rcy90dXRvcmlhbC9pMThuL2luZGV4Lmh0bWw8L2E+LjwvbGk+CjxsaT48ZW0+SmF2YWRvYyBBUElzPC9lbT4gLSBZb3Ugd2lsbCB3YW50IHRvIGNvbnN1bHQgdGhlIEphdmFkb2MgQVBJCiAgICBkb2N1bWVudGF0aW9uIGZvciB0aGUgZm9sbG93aW5nIHN0YW5kYXJkIEphdmEgY2xhc3NlczoKICAgIDx1bD4KICAgIDxsaT48Y29kZT5qYXZhLnRleHQuTWVzc2FnZUZvcm1hdDwvY29kZT4KICAgIDxsaT48Y29kZT5qYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU8L2NvZGU+CiAgICA8bGk+PGNvZGU+amF2YS51dGlsLlByb3BlcnR5UmVzb3VyY2VCdW5kbGU8L2NvZGU+CiAgICA8bGk+PGNvZGU+amF2YS51dGlsLlByb3BlcnRpZXM8L2NvZGU+IC0gU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUKICAgICAgICA8Y29kZT5sb2FkKCk8L2NvZGU+IG1ldGhvZCBmb3IgdGhlIHZhbGlkIHN5bnRheCBvZiBwcm9wZXJ0aWVzIGZpbGVzCiAgICAgICAgdGhhdCB5b3UgcHJlcGFyZS48L2xpPgogICAgPC91bD48L2xpPgo8L3VsPgoKPGg1PlVzaW5nIHRoZSBTdGFuZGFyZCBNZXNzYWdlUmVzb3VyY2VzIEltcGxlbWVudGF0aW9uPC9oNT4KCjxwPlRoZSBzdGFuZGFyZCA8Y29kZT5NZXNzYWdlUmVzb3VyY2VzPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBwcm92aWRlZCBieSB0aGUKU3RydXRzIGxpYnJhcnkgdXNlcyBKYXZhIHByb3BlcnRpZXMgZmlsZXMgdG8gaW5pdGlhbGl6ZSBtZXNzYWdlIHN0cmluZ3MsIGluIGEKbWFubmVyIHZlcnkgc2ltaWxhciB0byB0aGF0IHN1cHBvcnRlZCBieSB0aGUKPGNvZGU+amF2YS51dGlsLlByb3BlcnR5UmVzb3VyY2VCdW5kbGU8L2NvZGU+IGNsYXNzLiAgVGhlIGZvbGxvd2luZyBzdGVwcyBhcmUKcmVxdWlyZWQgdG8gdXNlIHRoZXNlIGZhY2lsaXRpZXMgaW4geW91ciBKYXZhIGFwcGxpY2F0aW9uLjwvcD4KCjxwPkZpcnN0LCBwcmVwYXJlIGEgSmF2YSBwcm9wZXJ0aWVzIGZpbGUgZm9yIGVhY2ggbGFuZ3VhZ2UgKG9yIExvY2FsZSkgaW4gd2hpY2gKeW91IHdpc2ggdG8gc3VwcG9ydCB5b3VyIG1lc3NhZ2VzLiAgVGhlIGZpbGVuYW1lcyB5b3UgdXNlIG11c3QgY29uZm9ybSB0byB0aGUKbmFtaW5nIGNvbnZlbnRpb24gZm9yIHByb3BlcnR5IHJlc291cmNlIGJ1bmRsZXMsIGFzIGRlc2NyaWJlZCBpbiB0aGUKZG9jdW1lbnRhdGlvbiByZWZlcmVuY2VkIGFib3ZlLiAgQmUgc3VyZSB5b3UgdXNlIHRoZSBzYW1lIG1lc3NhZ2Uga2V5cyBpbiBlYWNoCmZpbGUgdG8gaWRlbnRpZnkgdGhlIHNhbWUgbWVzc2FnZS48L3A+Cgo8cD5Gb3IgZXhhbXBsZSwgeW91IG1pZ2h0IHByZXBhcmUgZmlsZXMgaW4gRnJlbmNoLCBTcGFuaXNoLCBhbmQgRW5nbGlzaCB0aGF0CmNvbnRhaW4gbGFuZ3VhZ2Utc3BlY2lmaWMgdmVyc2lvbnMgb2YgdGhlIHdvcmQgIkhlbGxvIi4gIFRoZSBGcmVuY2ggZmlsZSB3b3VsZApiZSBuYW1lZCA8Y29kZT5NZXNzYWdlc19mci5wcm9wZXJ0aWVzPC9jb2RlPiBhbmQgY29udGFpbiB0aGUgZm9sbG93aW5nOjwvcD4KPHByZT4KICAgIGhpPUJvbmpvdXIKPC9wcmU+CjxwPndoaWxlIHRoZSBTcGFuaXNoIGFuZCBFbmdsaXNoIGZpbGVzIHdvdWxkIGJlIG5hbWVkCjxjb2RlPk1lc3NhZ2VzX2VzLnByb3BlcnRpZXM8L2NvZGU+IGFuZCA8Y29kZT5NZXNzYWdlc19lbi5wcm9wZXJ0aWVzPC9jb2RlPgpyZXNwZWN0aXZlbHkuICBUaGUgY29ycmVzcG9uZGluZyBtZXNzYWdlIHN0cmluZyBkZWZpbml0aW9ucyB3b3VsZCBzYXkKPGNvZGU+aGk9SG9sYTwvY29kZT4gYW5kIDxjb2RlPmhpPUhlbGxvPC9jb2RlPiBpbiB0aGVzZSBmaWxlcy48L3A+Cgo8cD5TZWNvbmQsIHBsYWNlIHRoZXNlIHByb3BlcnRpZXMgZmlsZXMgaW50byB0aGUgY2xhc3MgcGF0aCBmb3IgeW91cgphcHBsaWNhdGlvbiwgZXhhY3RseSBhcyB5b3Ugd291bGQgd2l0aCBjbGFzcyBmaWxlcyB0aGVtc2VsdmVzLiAgVGhlIG5hbWUKYWN0dWFsbHkgdXNlZCB0byBsb2FkIHJlc291cmNlcyB3aWxsIGxvb2sgbGlrZSBhIGZ1bGx5IHF1YWxpZmllZCBKYXZhIGNsYXNzCm5hbWUgKHdpdGggYXBwcm9wcmlhdGUgcGFja2FnZSBwcmVmaXhlcyksIHNvIHRoZSBmaWxlIHNob3VsZCBiZSBuZXN0ZWQgaW5zaWRlCmEgZGlyZWN0b3J5IHN0cnVjdHVyZSB0aGF0IG1hdGNoZXMgdGhlIHBhY2thZ2luZyAoZWl0aGVyIGluIGFuIHVucGFja2VkCmRpcmVjdG9yeSwgb3Igd2l0aGluIGEgSkFSIGZpbGUsIGFzIGFwcHJvcHJpYXRlKS4gIEZvciBleGFtcGxlLCBhc3N1bWUgeW91CnBsYWNlIGRpcmVjdG9yeSAiZm9vIiBvbiB5b3VyIGNsYXNzcGF0aCwgYW5kIHN0b3JlZCB0aGUgYWJvdmUgcHJvcGVydGllcyBmaWxlcwppbiBkaXJlY3RvcnkgImZvby9jb20vbXljb21wYW55L215cGFja2FnZSIuICAoSWYgeW91IHdlcmUgdXNpbmcgYSBKQVIgZmlsZSBsaWtlCiJmb28uamFyIiBpbnN0ZWFkLCB0aGUgZmlsZXMgd291bGQgYmUgaW4gZGlyZWN0b3J5ICJjb20vbXljb21wYW55L215cGFja2FnZSIKd2l0aGluIHRoZSBKQVIgZmlsZSkuCgo8cD5UaGlyZCwgaW5pdGlhbGl6ZSBhIDxjb2RlPk1lc3NhZ2VSZXNvdXJjZXM8L2NvZGU+IG9iamVjdCB0aGF0IGNvcnJlc3BvbmRzCnRvIHRoZSBzZXQgb2YgcHJvcGVydGllcyBmaWxlcyBmb3IgYSBwYXJ0aWN1bGFyIG5hbWUsIHdpdGhpbiBhIHBhcnRpY3VsYXIKcGFja2FnZS4gIFRoZSBlYXNpZXN0IHdheSB0byBkbyB0aGlzIGlzIHRvIGluaXRpYWxpemUgYSB2YXJpYWJsZSBpbiB5b3VyIG1haW4KYXBwbGljYXRpb24gY2xhc3MsIGxpa2UgdGhpczo8L3A+CjxwcmU+CiAgICBwdWJsaWMgc3RhdGljIE1lc3NhZ2VSZXNvdXJjZXMgbWVzc2FnZXMgPQogICAgIE1lc3NhZ2VSZXNvdXJjZXMuZ2V0TWVzc2FnZVJlc291cmNlcygiY29tLm15Y29tcGFueS5teXBhY2thZ2UuTWVzc2FnZXMiKTsKPC9wcmU+Cgo8cD5Ob3RlIHRoYXQgdGhlICJjb20ubXljb21wYW55Lm15cGFja2FnZSIgcGFydCBvZiB0aGUgbmFtZSBtYXRjaGVzIHRoZSBwYWNrYWdlCmRpcmVjdG9yeSBpbnRvIHdoaWNoIHlvdSBwbGFjZWQgeW91ciBwcm9wZXJ0aWVzIGZpbGVzLCBhbmQgIk1lc3NhZ2VzIiBpcyB0aGUKZmlsZW5hbWUgcHJlZml4IGZvciB0aGUgcGFydGljdWxhciBmYW1pbHkgb2YgcHJvcGVydGllcyBmaWxlcyBzdXBwb3J0ZWQgYnkgdGhpcwo8Y29kZT5NZXNzYWdlUmVzb3VyY2VzPC9jb2RlPiBpbnN0YW5jZS4gIERlcGVuZGluZyBvbiB5b3VyIGRldmVsb3BtZW50IHByb2Nlc3MsCnlvdSBtaWdodCBmaW5kIGl0IGNvbnZlbmllbnQgdG8gc3RvcmUgYWxsIG1lc3NhZ2Ugc3RyaW5ncyBmb3IgYW4gZW50aXJlCmFwcGxpY2F0aW9uIGluIGEgc2luZ2xlIHByb3BlcnRpZXMgZmlsZSBmYW1pbHksIG9yIHRvIGhhdmUgc2V2ZXJhbCBmYW1pbGllcyAtCmluIFN0cnV0cywgZm9yIGV4YW1wbGUsIHRoZXJlIGlzIGEgZmFtaWx5IG9mIHByb3BlcnRpZXMgZmlsZXMgZm9yIGVhY2ggSmF2YQpwYWNrYWdlLjwvcD4KCjxwPlRvIGFjY2VzcyBhIG1lc3NhZ2Ugc3RyaW5nIHdpdGggYSBwYXJ0aWN1bGFyIExvY2FsZSwgZXhlY3V0ZSBhIHN0YXRlbWVudApsaWtlIHRoaXM6PC9wPgo8cHJlPgogICAgTG9jYWxlIGxvY2FsZSA9IC4uLiBzZWxlY3QgdGhlIGxvY2FsZSB0byBiZSB1c2VkIC4uLgogICAgU3RyaW5nIG1lc3NhZ2UgPSBtZXNzYWdlcy5nZXRNZXNzYWdlKGxvY2FsZSwgImhpIik7CjwvcHJlPgoKPHA+SW4gdGhpcyBjYXNlLCB0aGUgdmFyaWFibGUgPGNvZGU+bWVzc2FnZTwvY29kZT4gd2lsbCBjb250YWluIHRoZSBtZXNzYWdlCnN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSBrZXkgImhpIiwgaW4gdGhlIGxhbmd1YWdlIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlCmxvY2FsZSB0aGF0IHdhcyBzZWxlY3RlZC48L3A+Cgo8cD5Gb3IgYW4gZXhhbXBsZSBvZiBtZXNzYWdlIGZvcm1hdHRpbmcgd2l0aCByZXBsYWNlYWJsZSBwYXJhbWV0ZXJzLCBhc3N1bWUKdGhhdCB0aGUgbWVzc2FnZSBzdHJpbmdzIGxvb2tlZCBsaWtlIHRoaXMsIGluc3RlYWQgKG9ubHkgdGhlIEVuZ2xpc2ggdmVyc2lvbgppcyBzaG93biAtIGNvcnJlc3BvbmRpbmcgY2hhbmdlcyB3b3VsZCBiZSBtYWRlIGluIHRoZSBvdGhlciBmaWxlcyk6PC9wPgo8cHJlPgogICAgaGk9SGVsbG8gezB9CjwvcHJlPgoKPHA+Tm93LCB5b3UgY2FuIHBlcnNvbmFsaXplIHRoZSByZXRyaWV2ZWQgbWVzc2FnZSBsaWtlIHRoaXM6PC9wPgo8cHJlPgogICAgTG9jYWxlIGxvY2FsZSA9IC4uLiBzZWxlY3QgdGhlIGxvY2FsZSB0byBiZSB1c2VkIC4uLgogICAgU3RyaW5nIG5hbWUgPSAiSm9lIjsKICAgIFN0cmluZyBtZXNzYWdlID0gbWVzc2FnZXMuZ2V0TWVzc2FnZShsb2NhbGUsICJoaSIsIG5hbWUpOwo8L3ByZT4KCjxwPmFuZCB0aGUgbWFya2VyICJ7MH0iIHdpbGwgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IHRoZSBzcGVjaWZpZWQgbmFtZSAoSm9lKSwKbm8gbWF0dGVyIHdoaWNoIGxhbmd1YWdlIGlzIGluIHVzZS4gIFNlZSB0aGUgSmF2YURvYyBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlCjxjb2RlPmphdmEudGV4dC5NZXNzYWdlRm9ybWF0PC9jb2RlPiBjbGFzcyBmb3IgbW9yZSBhZHZhbmNlZCB1c2VzIG9mIHRoZQpwYXJhbWV0ZXIgcmVwbGFjZW1lbnQgbWVjaGFuaXNtLjwvcD4KCjxoNT5EZXZlbG9waW5nIFlvdXIgT3duIE1lc3NhZ2VSZXNvdXJjZXMgSW1wbGVtZW50YXRpb248L2g1PgoKPHA+SW4gdGhlIGFib3ZlIGV4YW1wbGUsIHdlIHdlcmUgdXNpbmcgdGhlIGRlZmF1bHQKPGNvZGU+TWVzc2FnZVJlc291cmNlczwvY29kZT4gaW1wbGVtZW50YXRpb24gc3VwcGxpZWQgYnkgU3RydXRzLCB3aGljaCB1c2VzCnByb3BlcnR5IGZpbGVzIHRvIHN0b3JlIHRoZSBtZXNzYWdlIHN0cmluZ3MuICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNyZWF0ZQpjdXN0b21pemVkIG1lY2hhbmlzbXMgdG8gcmV0cmlldmUgbWVzc2FnZXMgKHN1Y2ggYXMgbG9hZGluZyB0aGVtIG9uIGRlbWFuZApmcm9tIGEgZGF0YWJhc2UpLiAgVGhlIHN0ZXBzIHJlcXVpcmVkIGFyZSBhcyBmb2xsb3dzOjwvcD4KPHVsPgo8bGk+Q3JlYXRlIGEgY3VzdG9taXplZCBzdWJjbGFzcyBvZgogICAgPGNvZGU+b3JnLmFwYWNoZS5zdHJ1dHMudXRpbC5NZXNzYWdlUmVzb3VyY2VzPC9jb2RlPiB0aGF0IGltcGxlbWVudHMKICAgIG1lc3NhZ2UgbG9va3VwIG9wZXJhdGlvbnMgYXMgeW91IHJlcXVpcmUuPC9saT4KPGxpPkNyZWF0ZSBhIGN1c3RvbWl6ZWQgc3ViY2xhc3Mgb2YKICAgIDxjb2RlPm9yZy5hcGFjaGUuc3RydXRzLnV0aWwuTWVzc2FnZVJlc291cmNlc0ZhY3Rvcnk8L2NvZGU+IHRoYXQgd2lsbAogICAgY3JlYXRlIGFuIGluc3RhbmNlIG9mIHlvdXIgY3VzdG9tIDxjb2RlPk1lc3NhZ2VSZXNvdXJjZXM8L2NvZGU+IGNsYXNzCiAgICB3aGVuIHRoZSA8Y29kZT5jcmVhdGVSZXNvdXJjZXM8L2NvZGU+IG1ldGhvZCBpcyBjYWxsZWQuICBOb3RlIHRoYXQgdGhlCiAgICAiY29uZmlnIiBhcmd1bWVudCB0byB0aGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBzZWxlY3QgZmFtaWxpZXMgb2YKICAgIG1lc3NhZ2VzIGluIGFueSBtYW5uZXIgYXBwcm9wcmlhdGUgdG8geW91ciBuZWVkcyAtIHlvdSBhcmUgbm90IHJlcXVpcmVkCiAgICB0byBlbXVsYXRlIHRoZSAiZnVsbHkgcXVhbGlmaWVkIEphdmEgY2xhc3MgbmFtZSIgYXBwcm9hY2ggdGhhdCBpcyB1c2VkCiAgICBieSB0aGUgc3RhbmRhcmQgPGNvZGU+UHJvcGVydHlNZXNzYWdlUmVzb3VyY2VzRmFjdG9yeTwvY29kZT4gY2xhc3MuPC9saT4KPGxpPlRlbGwgdGhlIDxjb2RlPk1lc3NhZ2VSZXNvdXJjZXNGYWN0b3J5PC9jb2RlPiBjbGFzcyB0aGUgbmFtZSBvZiB0aGUKICAgIGN1c3RvbWl6ZWQgPGNvZGU+TWVzc2FnZVJlc291cmNlc0ZhY3Rvcnk8L2NvZGU+IGltcGxlbWVudGF0aW9uIHRvIHVzZQogICAgd2hlbiBjcmVhdGluZyBuZXcgZmFjdG9yeSBpbnN0YW5jZXMuPC9saT4KPGxpPkNyZWF0ZSBhIG5ldyBmYWN0b3J5IGluc3RhbmNlLjwvbGk+CjxsaT5Bc2sgdGhlIG5ldyBmYWN0b3J5IGluc3RhbmNlIHRvIGNyZWF0ZSBhIDxjb2RlPk1lc3NhZ2VSZXNvdXJjZXM8L2NvZGU+CiAgICBpbnN0YW5jZSBmb3IgeW91LjwvbGk+CjwvdWw+Cgo8cD5BIGNvZGUgZXhhbXBsZSB0aGF0IGlsbHVzdHJhdGVzIHRoaXMgdGVjaG5pcXVlIGlzOjwvcD4KPHByZT4KICAgIE1lc3NhZ2VSZXNvdXJjZXNGYWN0b3J5LnNldEZhY3RvcnlDbGFzcygiY29tLm15Y29tcGFueS5teXBrZy5NeUZhY3RvcnkiKTsKICAgIE1lc3NhZ2VSZXNvdXJjZXNGYWN0b3J5IGZhY3RvcnkgPSBNZXNzYWdlUmVzb3VyY2VzRmFjdG9yeS5jcmVhdGVGYWN0b3J5KCk7CiAgICBNZXNzYWdlUmVzb3VyY2VzIHJlc291cmNlcyA9CiAgICAgZmFjdG9yeS5jcmVhdGVSZXNvdXJjZXMoImNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24iKTsKPC9wcmU+Cgo8cD5PbmNlIHlvdSBoYXZlIGNyZWF0ZWQgeW91ciBjdXN0b20gTWVzc2FnZVJlc291cmNlcyBpbnN0YW5jZSwgeW91IHV0aWxpemUgaXQKdG8gYWNjZXNzIG1lc3NhZ2Ugc3RyaW5ncyAod2l0aCBvciB3aXRob3V0IHBhcmFtZXRlciByZXBsYWNlbWVudCBvYmplY3RzKSwKZXhhY3RseSBhcyB3ZSBpbGx1c3RyYXRlZCB3aXRoIHRoZSBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgcHJldmlvdXMKc2VjdGlvbi48L3A+Cgo8aDU+VXNpbmcgTWVzc2FnZVJlc291cmNlcyBXaXRoIFN0cnV0czwvaDU+Cgo8cD5JZiB5b3VyIGFwcGxpY2F0aW9uIHVzZXMgdGhlIFN0cnV0cyBjb250cm9sbGVyIHNlcnZsZXQsIHlvdSBjYW4gb3B0aW9uYWxseQpjb25maWd1cmUgU3RydXRzIHRvIGxvYWQgYW4gYXBwbGljYXRpb24tc3BlY2lmaWMgbWVzc2FnZSByZXNvdXJjZXMgaW5zdGFuY2UgZm9yCnlvdSwgYW5kIG1ha2UgaXQgYXZhaWxhYmxlIGFzIGEgc2VydmxldCBjb250ZXh0IGF0dHJpYnV0ZSAoaW4gSlNQIHRlcm1zLCBhbgphcHBsaWNhdGlvbi1zY29wZSBiZWFuKS4gIFRoaXMgbWVjaGFuaXNtIGlzIG1hbmFnZWQgYnkgc2V0dGluZyB0aGUgZm9sbG93aW5nCnNlcnZsZXQgaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyBpbiB0aGUgd2ViIGFwcGxpY2F0aW9uIGRlcGxveW1lbnQgZGVzY3JpcHRvcjoKPC9wPgo8dWw+CjxsaT48c3Ryb25nPmFwcGxpY2F0aW9uPC9zdHJvbmc+IC0gVGhlIGNvbmZpZ3VyYXRpb24gc3RyaW5nIHRoYXQgd2lsbCBiZQogICAgcGFzc2VkIHRvIHRoZSA8Y29kZT5jcmVhdGVSZXNvdXJjZXMoKTwvY29kZT4gbWV0aG9kIG9mIHRoZSBtZXNzYWdlCiAgICByZXNvdXJjZXMgZmFjdG9yeSwgaW4gb3JkZXIgdG8gaWRlbnRpZnkgdGhlIGZhbWlseSBvZiByZXNvdXJjZXMgdG8gYmUKICAgIHN1cHBvcnRlZC4gIElmIHlvdSB1c2UgdGhlIHN0YW5kYXJkIG1lc3NhZ2UgcmVzb3VyY2VzIGZhY3RvcnksIHRoaXMgbXVzdAogICAgYmUgdGhlIGJhc2UgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHByb3BlcnR5IHJlc291cmNlcyBmaWxlcyB1c2VkCiAgICB0byBjb250YWluIHRoZXNlIG1lc3NhZ2VzLCBhcyBpbGx1c3RyYXRlZCBhYm92ZS48L2xpPgo8bGk+PHN0cm9uZz5mYWN0b3J5PC9zdHJvbmc+IC0gRnVsbHkgcXVhbGlmaWVkIEphdmEgY2xhc3MgbmFtZSBvZiB0aGUKICAgIDxjb2RlPk1lc3NhZ2VSZXNvdXJjZXNGYWN0b3J5PC9jb2RlPiB0byBiZSB1c2VkLiAgQnkgZGVmYXVsdCwgdGhlIHN0YW5kYXJkCiAgICBpbXBsZW1lbnRhdGlvbiBwcm92aWRlZCBieSBTdHJ1dHMKICAgICg8Y29kZT5vcmcuYXBhY2hlLnN0cnV0cy51dGlsLlByb3BlcnR5TWVzc2FnZVJlc291cmNlc0ZhY3Rvcnk8L2NvZGU+KQogICAgd2lsbCBiZSB1c2VkLjwvbGk+CjwvdWw+Cgo8cD5TdHJ1dHMgcHJvdmlkZXMgc2V2ZXJhbCBKU1AgY3VzdG9tIHRhZ3MgdGhhdCBhc3N1bWUgdGhlIGV4aXN0ZW5jZSBvZiBhCjxjb2RlPmphdmEudXRpbC5Mb2NhbGU8L2NvZGU+IGF0dHJpYnV0ZSBpbiB0aGUgdXNlcidzIHNlc3Npb24sIHVuZGVyIHRoZSBrZXkKbmFtZWQgYnkgdGhlIGNvbnN0YW50IHN0cmluZyB2YWx1ZSBvZiA8Y29kZT5BY3Rpb24uTE9DQUxFX0tFWTwvY29kZT4uICBZb3VyIG93bgphcHBsaWNhdGlvbiBsb2dpYyBjYW4gc2V0IHRoaXMgYXR0cmlidXRlIGF0IGFueSB0aW1lLCBvciB5b3UgY2FuIGFzayBTdHJ1dHMgdG8Kc2V0IGl0IGF1dG9tYXRpY2FsbHkgKGlmIG5vdCBhbHJlYWR5IHNldCkgYmFzZWQgb24gdGhlCjxjb2RlPkFjY2VwdC1MYW5ndWFnZTwvY29kZT4gSFRUUCBoZWFkZXIgaW5jbHVkZWQgd2l0aCB0aGUgcmVxdWVzdC4gIFRoZXJlIGFyZQp0d28gbWVjaGFuaXNtcyBieSB3aGljaCB5b3UgcmVxdWVzdCBTdHJ1dHMgdG8gcGVyZm9ybSB0aGlzIHNlcnZpY2U6PC9wPgo8dWw+CjxsaT5UbyBoYXZlIHRoaXMgc2VydmljZSBwZXJmb3JtZWQgb24gZXZlcnkgcmVxdWVzdCBzdWJtaXR0ZWQgdG8gdGhlIGNvbnRyb2xsZXIKICAgIHNlcnZsZXQsIHNldCB0aGUgc2VydmxldCBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXIgPGNvZGU+bG9jYWxlPC9jb2RlPiB0bwogICAgdGhlIHZhbHVlIDxjb2RlPnRydWU8L2NvZGU+IGluIHRoZSBhcHBsaWNhdGlvbiBkZXBsb3ltZW50IGRlc2NyaXB0b3IuPC9saT4KPGxpPlRvIGhhdmUgdGhpcyBzZXJ2aWNlIHBlcmZvcm1lZCBieSBhIEpTUCBwYWdlIHdoZW4gaXQgaXMgYWNjZXNzZWQgZGlyZWN0bHkKICAgIGJ5IGEgdXNlciwgdXRpbGl6ZSBhIDxjb2RlPiZsdDtmb3JtOmh0bWwgLi4uIGxvY2FsZT0idHJ1ZSIgLi4uIC8mZ3Q7PC9jb2RlPgogICAgdGFnIGF0IHRoZSB0b3Agb2YgZWFjaCBwYWdlLjwvbGk+CjwvdWw+CjxQPgoKPFA+CjxIUj4KCjwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+CjxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgo8VFI+CjxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+CjxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+CiAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5QYWNrYWdlPC9CPjwvRk9OVD4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdXNlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPC9UUj4KPC9UQUJMRT4KPC9URD4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+CjwvRU0+CjwvVEQ+CjwvVFI+Cgo8VFI+CjxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+CiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL3VwbG9hZC9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEI+UFJFViBQQUNLQUdFPC9CPjwvQT4mbmJzcDsKJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvdmFsaWRhdG9yL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Qj5ORVhUIFBBQ0tBR0U8L0I+PC9BPjwvRk9OVD48L1REPgo8VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgogIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwombmJzcDs8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7CiZuYnNwOwo8U0NSSVBUPgogIDwhLS0KICBpZih3aW5kb3c9PXRvcCkgewogICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7CiAgfQogIC8vLS0+CjwvU0NSSVBUPgo8Tk9TQ1JJUFQ+CjxBIEhSRUY9Ii4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgo8L05PU0NSSVBUPgo8L0ZPTlQ+PC9URD4KPC9UUj4KPC9UQUJMRT4KPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgoKPEhSPgpDb3B5cmlnaHQgqSAyMDAwLTIwMDMgLSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbgo8L0JPRFk+CjwvSFRNTD4K