PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBGcmFtZXNldC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvZnJhbWVzZXQuZHRkIj4KPCEtLU5ld1BhZ2UtLT4KPEhUTUw+CjxIRUFEPgo8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFdlZCBBcHIgMTQgMDg6MjY6MzQgRURUIDIwMDQgLS0+CjxUSVRMRT4KVmVsb2NpdHkgMS40IEFQSTogQ2xhc3MgIFZlbG9jaXR5U2VydmxldAo8L1RJVExFPgo8TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+CjwvSEVBRD4KPEJPRFkgQkdDT0xPUj0id2hpdGUiPgoKPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgo8QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+CjxUUj4KPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgo8QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL1ZlbG9jaXR5U2VydmxldC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDwvVFI+CjwvVEFCTEU+CjwvVEQ+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgo8L0VNPgo8L1REPgo8L1RSPgoKPFRSPgo8VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgombmJzcDtQUkVWIENMQVNTJm5ic3A7CiZuYnNwO05FWFQgQ0xBU1M8L0ZPTlQ+PC9URD4KPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKJm5ic3A7PEEgSFJFRj0iVmVsb2NpdHlTZXJ2bGV0Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT48L0ZPTlQ+PC9URD4KPC9UUj4KPFRSPgo8VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgogIFNVTU1BUlk6ICZuYnNwO0lOTkVSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+CjxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+CkRFVEFJTDogJm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KPC9UUj4KPC9UQUJMRT4KPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgoKPEhSPgo8IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+CjxIMj4KPEZPTlQgU0laRT0iLTEiPgpvcmcuYXBhY2hlLnZlbG9jaXR5LnNlcnZsZXQ8L0ZPTlQ+CjxCUj4KQ2xhc3MgIFZlbG9jaXR5U2VydmxldDwvSDI+CjxQUkU+CmphdmEubGFuZy5PYmplY3QKICB8CiAgKy0tamF2YXguc2VydmxldC5HZW5lcmljU2VydmxldAogICAgICAgIHwKICAgICAgICArLS1qYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXQKICAgICAgICAgICAgICB8CiAgICAgICAgICAgICAgKy0tPEI+b3JnLmFwYWNoZS52ZWxvY2l0eS5zZXJ2bGV0LlZlbG9jaXR5U2VydmxldDwvQj4KPC9QUkU+CjxETD4KPERUPjxCPkFsbCBJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOjwvQj4gPEREPmphdmEuaW8uU2VyaWFsaXphYmxlLCBqYXZheC5zZXJ2bGV0LlNlcnZsZXQsIGphdmF4LnNlcnZsZXQuU2VydmxldENvbmZpZzwvREQ+CjwvREw+CjxETD4KPERUPjxCPkRpcmVjdCBLbm93biBTdWJjbGFzc2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvdGVzdC9WZWxvY2l0eVNlcnZsZXRUZXN0Lk1vY2tWZWxvY2l0eVNlcnZsZXQuaHRtbCI+VmVsb2NpdHlTZXJ2bGV0VGVzdC5Nb2NrVmVsb2NpdHlTZXJ2bGV0PC9BPjwvREQ+CjwvREw+CjxIUj4KPERMPgo8RFQ+cHVibGljIGFic3RyYWN0IGNsYXNzIDxCPlZlbG9jaXR5U2VydmxldDwvQj48RFQ+ZXh0ZW5kcyBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXQ8L0RMPgoKPFA+CkJhc2UgY2xhc3Mgd2hpY2ggc2ltcGxpZmllcyB0aGUgdXNlIG9mIFZlbG9jaXR5IHdpdGggU2VydmxldHMuCiBFeHRlbmQgdGhpcyBjbGFzcywgaW1wbGVtZW50IHRoZSA8Y29kZT5oYW5kbGVSZXF1ZXN0KCk8L2NvZGU+IG1ldGhvZCwgCiBhbmQgYWRkIHlvdXIgZGF0YSB0byB0aGUgY29udGV4dC4gIFRoZW4gY2FsbCAKIDxjb2RlPmdldFRlbXBsYXRlKCJteVRlbXBsYXRlLndtIik8L2NvZGU+LgogCiBUaGlzIGNsYXNzIHB1dHMgc29tZSB0aGluZ3MgaW50byB0aGUgY29udGV4dCBvYmplY3QgdGhhdCB5b3Ugc2hvdWxkCiBiZSBhd2FyZSBvZjoKIDxwcmU+CiAicmVxIiAtIFRoZSBIdHRwU2VydmxldFJlcXVlc3Qgb2JqZWN0CiAicmVzIiAtIFRoZSBIdHRwU2VydmxldFJlc3BvbnNlIG9iamVjdAogPC9wcmU+CgogVGhlcmUgYXJlIG90aGVyIG1ldGhvZHMgeW91IGNhbiBvdmVycmlkZSB0byBhY2Nlc3MsIGFsdGVyIG9yIGNvbnRyb2wKIGFueSBwYXJ0IG9mIHRoZSByZXF1ZXN0IHByb2Nlc3NpbmcgY2hhaW4uICBQbGVhc2Ugc2VlIHRoZSBqYXZhZG9jcyBmb3IKIG1vcmUgaW5mb3JtYXRpb24gb24gOgogPHVsPgogPGxpPiBsb2FkQ29uZmlndXJhdGlvbigpIDogZm9yIHNldHRpbmcgdXAgdGhlIFZlbG9jaXR5IHJ1bnRpbWUKIDxsaT4gY3JlYXRlQ29udGV4dCgpIDogZm9yIGNyZWF0aW5nIGFuZCBsb2FkaW5nIHRoZSBDb250ZXh0CiA8bGk+IHNldENvbnRlbnRUeXBlKCkgOiBmb3IgY2hhbmdpbmcgdGhlIGNvbnRlbnQgdHlwZSBvbiBhIHJlcXVlc3QKICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHJlcXVlc3QgYmFzaXMKIDxsaT4gaGFuZGxlUmVxdWVzdCgpIDogeW91IDxiPm11c3Q8L2I+IGltcGxlbWVudCB0aGlzIAogPGxpPiBtZXJnZVRlbXBsYXRlKCkgIDogdGhlIHRlbXBsYXRlIHJlbmRlcmluZyBwcm9jZXNzCiA8bGk+IHJlcXVlc3RDbGVhbnVwKCkgOiBwb3N0IHJlbmRlcmluZyByZXNvdXJjZSBvciBvdGhlciBjbGVhbnVwCiA8bGk+IGVycm9yKCkgOiBlcnJvciBoYW5kbGluZwogPC91bD4KIDxicj4KIElmIHlvdSBwdXQgYSBjb250ZW50VHlwZSBvYmplY3QgaW50byB0aGUgY29udGV4dCB3aXRoaW4gZWl0aGVyIHlvdXIKIHNlcmx2ZXQgb3Igd2l0aGluIHlvdXIgdGVtcGxhdGUsIHRoZW4gdGhhdCB3aWxsIGJlIHVzZWQgdG8gb3ZlcnJpZGUKIHRoZSBkZWZhdWx0IGNvbnRlbnQgdHlwZSBzcGVjaWZpZWQgaW4gdGhlIHByb3BlcnRpZXMgZmlsZS4KCiAiY29udGVudFR5cGUiIC0gVGhlIHZhbHVlIGZvciB0aGUgQ29udGVudC1UeXBlOiBoZWFkZXIKPFA+CjxETD4KPERUPjxCPkF1dGhvcjogPC9CPjxERD5EYXZlIEJyeXNvbiwgPGEgaHJlZj0ibWFpbHRvOmpvbkBsYXRjaGtleS5jb20iPkpvbiBTLiBTdGV2ZW5zPC9hPiwgPGEgaHJlZj0ibWFpbHRvOmdlaXJtQG9wdG9ubGluZS5uZXQiPkdlaXIgTWFnbnVzc29uIEpyLjwvYT4sIDxhIGhyZWY9Imtqb2huc29uQHRyYW5zcGFyZW50LmNvbSI+S2VudCBKb2huc29uPC9hPiwgPGEgaHJlZj0iZGxyQGZpbmVtYWx0Y29kaW5nLmNvbSI+RGFuaWVsIFJhbGw8L2E+CiAkSWQ6IFZlbG9jaXR5U2VydmxldC5qYXZhLHYgMS41Mi40LjEgMjAwNC8wMy8wMyAyMzoyMzowMyBnZWlybSBFeHAgJDwvREQ+CjxEVD48Qj5TZWUgQWxzbzogPC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9zZXJpYWxpemVkLWZvcm0uaHRtbCNvcmcuYXBhY2hlLnZlbG9jaXR5LnNlcnZsZXQuVmVsb2NpdHlTZXJ2bGV0Ij5TZXJpYWxpemVkIEZvcm08L0E+PC9ETD4KPEhSPgoKPFA+CjwhLS0gPT09PT09PT0gSU5ORVIgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KCgo8IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Cgo8QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+CjxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgo8VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+c3RhdGljJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvc2VydmxldC9WZWxvY2l0eVNlcnZsZXQuaHRtbCNDT05URU5UX1RZUEUiPkNPTlRFTlRfVFlQRTwvQT48L0I+PC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgSFRUUCBjb250ZW50IHR5cGUgY29udGV4dCBrZXkuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+c3RhdGljJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvc2VydmxldC9WZWxvY2l0eVNlcnZsZXQuaHRtbCNERUZBVUxUX0NPTlRFTlRfVFlQRSI+REVGQVVMVF9DT05URU5UX1RZUEU8L0E+PC9CPjwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGRlZmF1bHQgY29udGVudCB0eXBlIGZvciB0aGUgcmVzcG9uc2U8L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9zZXJ2bGV0L1ZlbG9jaXR5U2VydmxldC5odG1sI0RFRkFVTFRfT1VUUFVUX0VOQ09ESU5HIj5ERUZBVUxUX09VVFBVVF9FTkNPRElORzwvQT48L0I+PC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtFbmNvZGluZyBmb3IgdGhlIG91dHB1dCBzdHJlYW08L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5wcml2YXRlIHN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3NlcnZsZXQvVmVsb2NpdHlTZXJ2bGV0Lmh0bWwjZGVmYXVsdENvbnRlbnRUeXBlIj5kZWZhdWx0Q29udGVudFR5cGU8L0E+PC9CPjwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGRlZmF1bHQgY29udGVudCB0eXBlLCBpdHNlbGYgZGVmYXVsdGluZyB0byA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3NlcnZsZXQvVmVsb2NpdHlTZXJ2bGV0Lmh0bWwjREVGQVVMVF9DT05URU5UX1RZUEUiPjxDT0RFPkRFRkFVTFRfQ09OVEVOVF9UWVBFPC9DT0RFPjwvQT4gaWYgbm90IGNvbmZpZ3VyZWQuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+cHJvdGVjdGVkIHN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3NlcnZsZXQvVmVsb2NpdHlTZXJ2bGV0Lmh0bWwjSU5JVF9QUk9QU19LRVkiPklOSVRfUFJPUFNfS0VZPC9BPjwvQj48L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgaXMgdGhlIHN0cmluZyB0aGF0IGlzIGxvb2tlZCBmb3Igd2hlbiBnZXRJbml0UGFyYW1ldGVyIGlzCiBjYWxsZWQgKDxjb2RlPm9yZy5hcGFjaGUudmVsb2NpdHkucHJvcGVydGllczwvY29kZT4pLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnByaXZhdGUgc3RhdGljJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvc2VydmxldC9WZWxvY2l0eVNlcnZsZXQuaHRtbCNPTERfSU5JVF9QUk9QU19LRVkiPk9MRF9JTklUX1BST1BTX0tFWTwvQT48L0I+PC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtVc2Ugb2YgdGhpcyBwcm9wZXJ0aWVzIGtleSBoYXMgYmVlbiBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZQogcmVtb3ZlZCBpbiBWZWxvY2l0eSB2ZXJzaW9uIDEuNS48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9zZXJ2bGV0L1ZlbG9jaXR5U2VydmxldC5odG1sI1JFUVVFU1QiPlJFUVVFU1Q8L0E+PC9CPjwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGNvbnRleHQga2V5IGZvciB0aGUgSFRUUCByZXF1ZXN0IG9iamVjdC48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9zZXJ2bGV0L1ZlbG9jaXR5U2VydmxldC5odG1sI1JFU1BPTlNFIj5SRVNQT05TRTwvQT48L0I+PC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgY29udGV4dCBrZXkgZm9yIHRoZSBIVFRQIHJlc3BvbnNlIG9iamVjdC48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5wcml2YXRlIHN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvdXRpbC9TaW1wbGVQb29sLmh0bWwiPlNpbXBsZVBvb2w8L0E+PC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9zZXJ2bGV0L1ZlbG9jaXR5U2VydmxldC5odG1sI3dyaXRlclBvb2wiPndyaXRlclBvb2w8L0E+PC9CPjwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q2FjaGUgb2Ygd3JpdGVyczwvVEQ+CjwvVFI+CjwvVEFCTEU+CiZuYnNwOzxBIE5BTUU9ImZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXQiPjwhLS0gLS0+PC9BPgo8VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+CjxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0PC9CPjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQ+PENPREU+SEVBREVSX0lGTU9EU0lOQ0UsIEhFQURFUl9MQVNUTU9ELCBMU1RSSU5HX0ZJTEUsIGxTdHJpbmdzLCBNRVRIT0RfREVMRVRFLCBNRVRIT0RfR0VULCBNRVRIT0RfSEVBRCwgTUVUSE9EX09QVElPTlMsIE1FVEhPRF9QT1NULCBNRVRIT0RfUFVULCBNRVRIT0RfVFJBQ0U8L0NPREU+PC9URD4KPC9UUj4KPC9UQUJMRT4KJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmF4LnNlcnZsZXQuR2VuZXJpY1NlcnZsZXQiPjwhLS0gLS0+PC9BPgo8VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+CjxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YXguc2VydmxldC5HZW5lcmljU2VydmxldDwvQj48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREPjxDT0RFPmNvbmZpZzwvQ09ERT48L1REPgo8L1RSPgo8L1RBQkxFPgombmJzcDsKPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgoKPEEgTkFNRT0iY29uc3RydWN0b3Jfc3VtbWFyeSI+PCEtLSAtLT48L0E+CjxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgo8VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+CjxCPkNvbnN0cnVjdG9yIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9zZXJ2bGV0L1ZlbG9jaXR5U2VydmxldC5odG1sI1ZlbG9jaXR5U2VydmxldCgpIj5WZWxvY2l0eVNlcnZsZXQ8L0E+PC9CPigpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgo8L1RSPgo8L1RBQkxFPgombmJzcDsKPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgoKPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgo8VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+CjxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgo8Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+cHJvdGVjdGVkICZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3NlcnZsZXQvVmVsb2NpdHlTZXJ2bGV0Lmh0bWwjY2hvb3NlQ2hhcmFjdGVyRW5jb2RpbmcoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCkiPmNob29zZUNoYXJhY3RlckVuY29kaW5nPC9BPjwvQj4oamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCZuYnNwO3JlcXVlc3QpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDaG9vc2VzIHRoZSBvdXRwdXQgY2hhcmFjdGVyIGVuY29kaW5nIHRvIGJlIHVzZWQgYXMgdGhlIHZhbHVlCiBmb3IgdGhlICJjaGFyc2V0PSIgcG9ydGlvbiBvZiB0aGUgSFRUUCBDb250ZW50LVR5cGUgaGVhZGVyIChhbmQKIHRodXMgcmV0dXJuZWQgYnkgPGNvZGU+cmVzcG9uc2UuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTwvY29kZT4pLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnByb3RlY3RlZCAmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L2NvbnRleHQvQ29udGV4dC5odG1sIj5Db250ZXh0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvc2VydmxldC9WZWxvY2l0eVNlcnZsZXQuaHRtbCNjcmVhdGVDb250ZXh0KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlKSI+Y3JlYXRlQ29udGV4dDwvQT48L0I+KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QmbmJzcDtyZXF1ZXN0LAogICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlJm5ic3A7cmVzcG9uc2UpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgY29udGV4dCBzdWl0YWJsZSB0byBwYXNzIHRvIHRoZSBoYW5kbGVSZXF1ZXN0KCkgbWV0aG9kCiAgPGJyPjxicj4KICBEZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwgY3JlYXRlIGEgVmVsb2NpdHlDb250ZXh0IG9iamVjdCwKICAgcHV0IHRoZSBIdHRwU2VydmxldFJlcXVlc3QgYW5kIEh0dHBTZXJ2bGV0UmVzcG9uc2UKICBpbnRvIHRoZSBjb250ZXh0IGFjY2Vzc2FibGUgdmlhIHRoZSBrZXlzIFZlbG9jaXR5U2VydmxldC5SRVFVRVNUIGFuZAogIFZlbG9jaXR5U2VydmxldC5SRVNQT05TRSwgcmVzcGVjdGl2ZWx5LjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3NlcnZsZXQvVmVsb2NpdHlTZXJ2bGV0Lmh0bWwjZG9HZXQoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpIj5kb0dldDwvQT48L0I+KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QmbmJzcDtyZXF1ZXN0LAogICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSZuYnNwO3Jlc3BvbnNlKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SGFuZGxlcyBIVFRQIDxjb2RlPkdFVDwvY29kZT4gcmVxdWVzdHMgYnkgY2FsbGluZyA8Q09ERT4jZG9SZXF1ZXN0KCk8L0NPREU+LjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3NlcnZsZXQvVmVsb2NpdHlTZXJ2bGV0Lmh0bWwjZG9Qb3N0KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlKSI+ZG9Qb3N0PC9BPjwvQj4oamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCZuYnNwO3JlcXVlc3QsCiAgICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSZuYnNwO3Jlc3BvbnNlKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SGFuZGxlcyBIVFRQIDxjb2RlPlBPU1Q8L2NvZGU+IHJlcXVlc3RzIGJ5IGNhbGxpbmcgPENPREU+I2RvUmVxdWVzdCgpPC9DT0RFPi48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5wcm90ZWN0ZWQgJm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvc2VydmxldC9WZWxvY2l0eVNlcnZsZXQuaHRtbCNkb1JlcXVlc3QoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpIj5kb1JlcXVlc3Q8L0E+PC9CPihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Jm5ic3A7cmVxdWVzdCwKICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlJm5ic3A7cmVzcG9uc2UpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtIYW5kbGVzIGFsbCByZXF1ZXN0cyAoYnkgZGVmYXVsdCkuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+cHJvdGVjdGVkICZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3NlcnZsZXQvVmVsb2NpdHlTZXJ2bGV0Lmh0bWwjZXJyb3IoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UsIGphdmEubGFuZy5FeGNlcHRpb24pIj5lcnJvcjwvQT48L0I+KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QmbmJzcDtyZXF1ZXN0LAogICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSZuYnNwO3Jlc3BvbnNlLAogICAgICBqYXZhLmxhbmcuRXhjZXB0aW9uJm5ic3A7Y2F1c2UpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtJbnZva2VkIHdoZW4gdGhlcmUgaXMgYW4gZXJyb3IgdGhyb3duIGluIGFueSBwYXJ0IG9mIGRvUmVxdWVzdCgpIHByb2Nlc3NpbmcuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9UZW1wbGF0ZS5odG1sIj5UZW1wbGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3NlcnZsZXQvVmVsb2NpdHlTZXJ2bGV0Lmh0bWwjZ2V0VGVtcGxhdGUoamF2YS5sYW5nLlN0cmluZykiPmdldFRlbXBsYXRlPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO25hbWUpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXRyaWV2ZXMgdGhlIHJlcXVlc3RlZCB0ZW1wbGF0ZS48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L1RlbXBsYXRlLmh0bWwiPlRlbXBsYXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvc2VydmxldC9WZWxvY2l0eVNlcnZsZXQuaHRtbCNnZXRUZW1wbGF0ZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+Z2V0VGVtcGxhdGU8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmFtZSwKICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2VuY29kaW5nKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0cmlldmVzIHRoZSByZXF1ZXN0ZWQgdGVtcGxhdGUgd2l0aCB0aGUgc3BlY2lmaWVkCiBjaGFyYWN0ZXIgZW5jb2RpbmcuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+cHJvdGVjdGVkICZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvVGVtcGxhdGUuaHRtbCI+VGVtcGxhdGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9zZXJ2bGV0L1ZlbG9jaXR5U2VydmxldC5odG1sI2hhbmRsZVJlcXVlc3Qob3JnLmFwYWNoZS52ZWxvY2l0eS5jb250ZXh0LkNvbnRleHQpIj5oYW5kbGVSZXF1ZXN0PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9jb250ZXh0L0NvbnRleHQuaHRtbCI+Q29udGV4dDwvQT4mbmJzcDtjdHgpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5Vc2UKIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvc2VydmxldC9WZWxvY2l0eVNlcnZsZXQuaHRtbCNoYW5kbGVSZXF1ZXN0KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlLCBvcmcuYXBhY2hlLnZlbG9jaXR5LmNvbnRleHQuQ29udGV4dCkiPjxDT0RFPmhhbmRsZVJlcXVlc3QoIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCAKIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIENvbnRleHQgY3R4ICk8L0NPREU+PC9BPjwvST48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5wcm90ZWN0ZWQgJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9UZW1wbGF0ZS5odG1sIj5UZW1wbGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3NlcnZsZXQvVmVsb2NpdHlTZXJ2bGV0Lmh0bWwjaGFuZGxlUmVxdWVzdChqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSwgb3JnLmFwYWNoZS52ZWxvY2l0eS5jb250ZXh0LkNvbnRleHQpIj5oYW5kbGVSZXF1ZXN0PC9BPjwvQj4oamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCZuYnNwO3JlcXVlc3QsCiAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UmbmJzcDtyZXNwb25zZSwKICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L2NvbnRleHQvQ29udGV4dC5odG1sIj5Db250ZXh0PC9BPiZuYnNwO2N0eCk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0ltcGxlbWVudCB0aGlzIG1ldGhvZCB0byBhZGQgeW91ciBhcHBsaWNhdGlvbiBkYXRhIHRvIHRoZSBjb250ZXh0LCAKIGNhbGxpbmcgdGhlIDxjb2RlPmdldFRlbXBsYXRlKCk8L2NvZGU+IG1ldGhvZCB0byBwcm9kdWNlIHlvdXIgcmV0dXJuIAogdmFsdWUuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvc2VydmxldC9WZWxvY2l0eVNlcnZsZXQuaHRtbCNpbml0KGphdmF4LnNlcnZsZXQuU2VydmxldENvbmZpZykiPmluaXQ8L0E+PC9CPihqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb25maWcmbmJzcDtjb25maWcpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQZXJmb3JtcyBpbml0aWFsaXphdGlvbiBvZiB0aGlzIHNlcnZsZXQuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+cHJvdGVjdGVkICZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3NlcnZsZXQvVmVsb2NpdHlTZXJ2bGV0Lmh0bWwjaW5pdFZlbG9jaXR5KGphdmF4LnNlcnZsZXQuU2VydmxldENvbmZpZykiPmluaXRWZWxvY2l0eTwvQT48L0I+KGphdmF4LnNlcnZsZXQuU2VydmxldENvbmZpZyZuYnNwO2NvbmZpZyk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0luaXRpYWxpemVzIHRoZSBWZWxvY2l0eSBydW50aW1lLCBmaXJzdCBjYWxsaW5nIAogIGxvYWRDb25maWd1cmF0aW9uKFNlcnZsZXRDb252aWcpIHRvIGdldCBhIAogIGphdmEudXRpbC5Qcm9wZXJ0aWVzIG9mIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KICBhbmQgdGhlbiBjYWxsaW5nIFZlbG9jaXR5LmluaXQoKS48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5wcm90ZWN0ZWQgJm5ic3A7amF2YS51dGlsLlByb3BlcnRpZXM8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3NlcnZsZXQvVmVsb2NpdHlTZXJ2bGV0Lmh0bWwjbG9hZENvbmZpZ3VyYXRpb24oamF2YXguc2VydmxldC5TZXJ2bGV0Q29uZmlnKSI+bG9hZENvbmZpZ3VyYXRpb248L0E+PC9CPihqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb25maWcmbmJzcDtjb25maWcpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtMb2FkcyB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQgcmV0dXJucyB0aGF0IAogIGluZm9ybWF0aW9uIGFzIGEgUHJvcGVydGllcywgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIAogIGluaXRpYWxpemUgdGhlIFZlbG9jaXR5IHJ1bnRpbWUuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+cHJvdGVjdGVkICZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3NlcnZsZXQvVmVsb2NpdHlTZXJ2bGV0Lmh0bWwjbWVyZ2VUZW1wbGF0ZShvcmcuYXBhY2hlLnZlbG9jaXR5LlRlbXBsYXRlLCBvcmcuYXBhY2hlLnZlbG9jaXR5LmNvbnRleHQuQ29udGV4dCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpIj5tZXJnZVRlbXBsYXRlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9UZW1wbGF0ZS5odG1sIj5UZW1wbGF0ZTwvQT4mbmJzcDt0ZW1wbGF0ZSwKICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L2NvbnRleHQvQ29udGV4dC5odG1sIj5Db250ZXh0PC9BPiZuYnNwO2NvbnRleHQsCiAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UmbmJzcDtyZXNwb25zZSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO21lcmdlcyB0aGUgdGVtcGxhdGUgd2l0aCB0aGUgY29udGV4dC48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5wcm90ZWN0ZWQgJm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvc2VydmxldC9WZWxvY2l0eVNlcnZsZXQuaHRtbCNyZXF1ZXN0Q2xlYW51cChqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSwgb3JnLmFwYWNoZS52ZWxvY2l0eS5jb250ZXh0LkNvbnRleHQpIj5yZXF1ZXN0Q2xlYW51cDwvQT48L0I+KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QmbmJzcDtyZXF1ZXN0LAogICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSZuYnNwO3Jlc3BvbnNlLAogICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L2NvbnRleHQvQ29udGV4dC5odG1sIj5Db250ZXh0PC9BPiZuYnNwO2NvbnRleHQpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIGNsZWFudXAgcm91dGluZSB3aGljaCBpcyBjYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9zZXJ2bGV0L1ZlbG9jaXR5U2VydmxldC5odG1sI2RvUmVxdWVzdChqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSkiPjxDT0RFPmRvUmVxdWVzdChIdHRwU2VydmxldFJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UpPC9DT0RFPjwvQT4KICBwcm9jZXNzaW5nIHNlcXVlbmNlLCBhbGxvd2luZyBhIGRlcml2ZWQgY2xhc3MgdG8gZG8gcmVzb3VyY2UKICBjbGVhbnVwIG9yIG90aGVyIGVuZCBvZiBwcm9jZXNzIGN5Y2xlIHRhc2tzLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnByb3RlY3RlZCAmbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9zZXJ2bGV0L1ZlbG9jaXR5U2VydmxldC5odG1sI3NldENvbnRlbnRUeXBlKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlKSI+c2V0Q29udGVudFR5cGU8L0E+PC9CPihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Jm5ic3A7cmVxdWVzdCwKICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UmbmJzcDtyZXNwb25zZSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIGNvbnRlbnQgdHlwZSBvZiB0aGUgcmVzcG9uc2UsIGRlZmF1bHRpbmcgdG8gPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9zZXJ2bGV0L1ZlbG9jaXR5U2VydmxldC5odG1sI2RlZmF1bHRDb250ZW50VHlwZSI+PENPREU+ZGVmYXVsdENvbnRlbnRUeXBlPC9DT0RFPjwvQT4gaWYgbm90IG92ZXJyaWRlbi48L1REPgo8L1RSPgo8L1RBQkxFPgombmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldCI+PCEtLSAtLT48L0E+CjxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgo8VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0PC9CPjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQ+PENPREU+PGNsaW5pdD4sIGRvRGVsZXRlLCBkb0hlYWQsIGRvT3B0aW9ucywgZG9QdXQsIGRvVHJhY2UsIGdldEFsbERlY2xhcmVkTWV0aG9kcywgZ2V0TGFzdE1vZGlmaWVkLCBtYXliZVNldExhc3RNb2RpZmllZCwgc2VydmljZSwgc2VydmljZTwvQ09ERT48L1REPgo8L1RSPgo8L1RBQkxFPgombmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmF4LnNlcnZsZXQuR2VuZXJpY1NlcnZsZXQiPjwhLS0gLS0+PC9BPgo8VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+CjxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmF4LnNlcnZsZXQuR2VuZXJpY1NlcnZsZXQ8L0I+PC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURD48Q09ERT5kZXN0cm95LCBnZXRJbml0UGFyYW1ldGVyLCBnZXRJbml0UGFyYW1ldGVyTmFtZXMsIGdldFNlcnZsZXRDb25maWcsIGdldFNlcnZsZXRDb250ZXh0LCBnZXRTZXJ2bGV0SW5mbywgZ2V0U2VydmxldE5hbWUsIGluaXQsIGxvZywgbG9nPC9DT0RFPjwvVEQ+CjwvVFI+CjwvVEFCTEU+CiZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+CjxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgo8VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLk9iamVjdDwvQj48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREPjxDT0RFPmNsb25lLCBlcXVhbHMsIGZpbmFsaXplLCBnZXRDbGFzcywgaGFzaENvZGUsIG5vdGlmeSwgbm90aWZ5QWxsLCByZWdpc3Rlck5hdGl2ZXMsIHRvU3RyaW5nLCB3YWl0LCB3YWl0LCB3YWl0PC9DT0RFPjwvVEQ+CjwvVFI+CjwvVEFCTEU+CiZuYnNwOwo8UD4KCjwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KCjxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+CjxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgo8VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+CjxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KPC9UUj4KPC9UQUJMRT4KCjxBIE5BTUU9IlJFUVVFU1QiPjwhLS0gLS0+PC9BPjxIMz4KUkVRVUVTVDwvSDM+CjxQUkU+CnB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5SRVFVRVNUPC9CPjwvUFJFPgo8REw+CjxERD5UaGUgY29udGV4dCBrZXkgZm9yIHRoZSBIVFRQIHJlcXVlc3Qgb2JqZWN0LjwvREw+CjxIUj4KCjxBIE5BTUU9IlJFU1BPTlNFIj48IS0tIC0tPjwvQT48SDM+ClJFU1BPTlNFPC9IMz4KPFBSRT4KcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIDxCPlJFU1BPTlNFPC9CPjwvUFJFPgo8REw+CjxERD5UaGUgY29udGV4dCBrZXkgZm9yIHRoZSBIVFRQIHJlc3BvbnNlIG9iamVjdC48L0RMPgo8SFI+Cgo8QSBOQU1FPSJDT05URU5UX1RZUEUiPjwhLS0gLS0+PC9BPjxIMz4KQ09OVEVOVF9UWVBFPC9IMz4KPFBSRT4KcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIDxCPkNPTlRFTlRfVFlQRTwvQj48L1BSRT4KPERMPgo8REQ+VGhlIEhUVFAgY29udGVudCB0eXBlIGNvbnRleHQga2V5LjwvREw+CjxIUj4KCjxBIE5BTUU9IkRFRkFVTFRfQ09OVEVOVF9UWVBFIj48IS0tIC0tPjwvQT48SDM+CkRFRkFVTFRfQ09OVEVOVF9UWVBFPC9IMz4KPFBSRT4KcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIDxCPkRFRkFVTFRfQ09OVEVOVF9UWVBFPC9CPjwvUFJFPgo8REw+CjxERD5UaGUgZGVmYXVsdCBjb250ZW50IHR5cGUgZm9yIHRoZSByZXNwb25zZTwvREw+CjxIUj4KCjxBIE5BTUU9IkRFRkFVTFRfT1VUUFVUX0VOQ09ESU5HIj48IS0tIC0tPjwvQT48SDM+CkRFRkFVTFRfT1VUUFVUX0VOQ09ESU5HPC9IMz4KPFBSRT4KcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIDxCPkRFRkFVTFRfT1VUUFVUX0VOQ09ESU5HPC9CPjwvUFJFPgo8REw+CjxERD5FbmNvZGluZyBmb3IgdGhlIG91dHB1dCBzdHJlYW08L0RMPgo8SFI+Cgo8QSBOQU1FPSJkZWZhdWx0Q29udGVudFR5cGUiPjwhLS0gLS0+PC9BPjxIMz4KZGVmYXVsdENvbnRlbnRUeXBlPC9IMz4KPFBSRT4KcHJpdmF0ZSBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyA8Qj5kZWZhdWx0Q29udGVudFR5cGU8L0I+PC9QUkU+CjxETD4KPEREPlRoZSBkZWZhdWx0IGNvbnRlbnQgdHlwZSwgaXRzZWxmIGRlZmF1bHRpbmcgdG8gPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9zZXJ2bGV0L1ZlbG9jaXR5U2VydmxldC5odG1sI0RFRkFVTFRfQ09OVEVOVF9UWVBFIj48Q09ERT5ERUZBVUxUX0NPTlRFTlRfVFlQRTwvQ09ERT48L0E+IGlmIG5vdCBjb25maWd1cmVkLjwvREw+CjxIUj4KCjxBIE5BTUU9IklOSVRfUFJPUFNfS0VZIj48IS0tIC0tPjwvQT48SDM+CklOSVRfUFJPUFNfS0VZPC9IMz4KPFBSRT4KcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIDxCPklOSVRfUFJPUFNfS0VZPC9CPjwvUFJFPgo8REw+CjxERD5UaGlzIGlzIHRoZSBzdHJpbmcgdGhhdCBpcyBsb29rZWQgZm9yIHdoZW4gZ2V0SW5pdFBhcmFtZXRlciBpcwogY2FsbGVkICg8Y29kZT5vcmcuYXBhY2hlLnZlbG9jaXR5LnByb3BlcnRpZXM8L2NvZGU+KS48L0RMPgo8SFI+Cgo8QSBOQU1FPSJPTERfSU5JVF9QUk9QU19LRVkiPjwhLS0gLS0+PC9BPjxIMz4KT0xEX0lOSVRfUFJPUFNfS0VZPC9IMz4KPFBSRT4KcHJpdmF0ZSBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5PTERfSU5JVF9QUk9QU19LRVk8L0I+PC9QUkU+CjxETD4KPEREPlVzZSBvZiB0aGlzIHByb3BlcnRpZXMga2V5IGhhcyBiZWVuIGRlcHJlY2F0ZWQsIGFuZCB3aWxsIGJlCiByZW1vdmVkIGluIFZlbG9jaXR5IHZlcnNpb24gMS41LjwvREw+CjxIUj4KCjxBIE5BTUU9IndyaXRlclBvb2wiPjwhLS0gLS0+PC9BPjxIMz4Kd3JpdGVyUG9vbDwvSDM+CjxQUkU+CnByaXZhdGUgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvdXRpbC9TaW1wbGVQb29sLmh0bWwiPlNpbXBsZVBvb2w8L0E+IDxCPndyaXRlclBvb2w8L0I+PC9QUkU+CjxETD4KPEREPkNhY2hlIG9mIHdyaXRlcnM8L0RMPgoKPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgoKPEEgTkFNRT0iY29uc3RydWN0b3JfZGV0YWlsIj48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+CjxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgo8VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KPEI+Q29uc3RydWN0b3IgRGV0YWlsPC9CPjwvRk9OVD48L1REPgo8L1RSPgo8L1RBQkxFPgoKPEEgTkFNRT0iVmVsb2NpdHlTZXJ2bGV0KCkiPjwhLS0gLS0+PC9BPjxIMz4KVmVsb2NpdHlTZXJ2bGV0PC9IMz4KPFBSRT4KcHVibGljIDxCPlZlbG9jaXR5U2VydmxldDwvQj4oKTwvUFJFPgo8REw+CjwvREw+Cgo8IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Cgo8QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+CjxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgo8VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KPC9UUj4KPC9UQUJMRT4KCjxBIE5BTUU9ImluaXQoamF2YXguc2VydmxldC5TZXJ2bGV0Q29uZmlnKSI+PCEtLSAtLT48L0E+PEgzPgppbml0PC9IMz4KPFBSRT4KcHVibGljIHZvaWQgPEI+aW5pdDwvQj4oamF2YXguc2VydmxldC5TZXJ2bGV0Q29uZmlnJm5ic3A7Y29uZmlnKQogICAgICAgICAgdGhyb3dzIGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjwvUFJFPgo8REw+CjxERD5QZXJmb3JtcyBpbml0aWFsaXphdGlvbiBvZiB0aGlzIHNlcnZsZXQuICBDYWxsZWQgYnkgdGhlIHNlcnZsZXQgCiBjb250YWluZXIgb24gbG9hZGluZy48REQ+PERMPgo8RFQ+PEI+T3ZlcnJpZGVzOjwvQj48REQ+PENPREU+aW5pdDwvQ09ERT4gaW4gY2xhc3MgPENPREU+amF2YXguc2VydmxldC5HZW5lcmljU2VydmxldDwvQ09ERT48L0RMPgo8L0REPgo8REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmNvbmZpZzwvQ09ERT4gLSBUaGUgc2VydmxldCBjb25maWd1cmF0aW9uIHRvIGFwcGx5LjxEVD48Qj5UaHJvd3M6PC9CPjxERD48Q09ERT5qYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb248L0NPREU+IC0gJm5ic3A7PC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iaW5pdFZlbG9jaXR5KGphdmF4LnNlcnZsZXQuU2VydmxldENvbmZpZykiPjwhLS0gLS0+PC9BPjxIMz4KaW5pdFZlbG9jaXR5PC9IMz4KPFBSRT4KcHJvdGVjdGVkIHZvaWQgPEI+aW5pdFZlbG9jaXR5PC9CPihqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb25maWcmbmJzcDtjb25maWcpCiAgICAgICAgICAgICAgICAgICAgIHRocm93cyBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb248L1BSRT4KPERMPgo8REQ+SW5pdGlhbGl6ZXMgdGhlIFZlbG9jaXR5IHJ1bnRpbWUsIGZpcnN0IGNhbGxpbmcgCiAgbG9hZENvbmZpZ3VyYXRpb24oU2VydmxldENvbnZpZykgdG8gZ2V0IGEgCiAgamF2YS51dGlsLlByb3BlcnRpZXMgb2YgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbgogIGFuZCB0aGVuIGNhbGxpbmcgVmVsb2NpdHkuaW5pdCgpLiAgT3ZlcnJpZGUgdGhpcwogIHRvIGRvIGFueXRoaW5nIHRvIHRoZSBlbnZpcm9ubWVudCBiZWZvcmUgdGhlIAogIGluaXRpYWxpemF0aW9uIG9mIHRoZSBzaW5nZWx0b24gdGFrZXMgcGxhY2UsIG9yIHRvIAogIGluaXRpYWxpemUgdGhlIHNpbmdsZXRvbiBpbiBvdGhlciB3YXlzLjwvREw+CjxIUj4KCjxBIE5BTUU9ImxvYWRDb25maWd1cmF0aW9uKGphdmF4LnNlcnZsZXQuU2VydmxldENvbmZpZykiPjwhLS0gLS0+PC9BPjxIMz4KbG9hZENvbmZpZ3VyYXRpb248L0gzPgo8UFJFPgpwcm90ZWN0ZWQgamF2YS51dGlsLlByb3BlcnRpZXMgPEI+bG9hZENvbmZpZ3VyYXRpb248L0I+KGphdmF4LnNlcnZsZXQuU2VydmxldENvbmZpZyZuYnNwO2NvbmZpZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjwvUFJFPgo8REw+CjxERD5Mb2FkcyB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQgcmV0dXJucyB0aGF0IAogIGluZm9ybWF0aW9uIGFzIGEgUHJvcGVydGllcywgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIAogIGluaXRpYWxpemUgdGhlIFZlbG9jaXR5IHJ1bnRpbWUuCiAgPGJyPjxicj4KICBDdXJyZW50bHksIHRoaXMgbWV0aG9kIGdldHMgdGhlIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlcgogIFZlbG9jaXR5U2VydmxldC5JTklUX1BST1BTX0tFWSwgd2hpY2ggc2hvdWxkIGJlIGEgZmlsZSBjb250YWluaW5nCiAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCiAgPGJyPjxicj4KICBUbyBjb25maWd1cmUgeW91ciBTZXJ2bGV0IFNwZWMgMi4yIGNvbXBsaWFudCBzZXJ2bGV0IHJ1bm5lciB0byBwYXNzCiAgdGhpcyB0byB5b3UsIHB1dCB0aGUgZm9sbG93aW5nIGluIHlvdXIgV0VCLUlORi93ZWIueG1sIGZpbGUKICA8YnI+CiAgPHByZT4KICAgICZsdDtzZXJ2bGV0Jmd0OwogICAgICAmbHQ7c2VydmxldC1uYW1lJmd0OyBZb3VyU2VydmxldCAmbHQvc2VydmxldC1uYW1lJmd0OwogICAgICAmbHQ7c2VydmxldC1jbGFzcyZndDsgeW91ci5wYWNrYWdlLllvdXJTZXJ2bGV0ICZsdDsvc2VydmxldC1jbGFzcyZndDsKICAgICAgJmx0O2luaXQtcGFyYW0mZ3Q7CiAgICAgICAgICZsdDtwYXJhbS1uYW1lJmd0OyBvcmcuYXBhY2hlLnZlbG9jaXR5LnByb3BlcnRpZXMgJmx0Oy9wYXJhbS1uYW1lJmd0OwogICAgICAgICAmbHQ7cGFyYW0tdmFsdWUmZ3Q7IHZlbG9jaXR5LnByb3BlcnRpZXMgJmx0Oy9wYXJhbS12YWx1ZSZndDsKICAgICAgJmx0Oy9pbml0LXBhcmFtJmd0OwogICAgJmx0Oy9zZXJ2bGV0Jmd0OwogICA8L3ByZT4KCiBBbHRlcm5hdGVseSwgaWYgeW91IHdpc2ggdG8gY29uZmlndXJlIGFuIGVudGlyZSBjb250ZXh0IGluIHRoaXMKIGZhc2hpb24sIHlvdSBtYXkgdXNlIHRoZSBmb2xsb3dpbmc6CiAgPGJyPgogIDxwcmU+CiAgICAmbHQ7Y29udGV4dC1wYXJhbSZndDsKICAgICAgICZsdDtwYXJhbS1uYW1lJmd0OyBvcmcuYXBhY2hlLnZlbG9jaXR5LnByb3BlcnRpZXMgJmx0Oy9wYXJhbS1uYW1lJmd0OwogICAgICAgJmx0O3BhcmFtLXZhbHVlJmd0OyB2ZWxvY2l0eS5wcm9wZXJ0aWVzICZsdDsvcGFyYW0tdmFsdWUmZ3Q7CiAgICAgICAmbHQ7ZGVzY3JpcHRpb24mZ3Q7IFBhdGggdG8gVmVsb2NpdHkgY29uZmlndXJhdGlvbiAmbHQ7L2Rlc2NyaXB0aW9uJmd0OwogICAgJmx0Oy9jb250ZXh0LXBhcmFtJmd0OwogICA8L3ByZT4KIAogIERlcml2ZWQgY2xhc3NlcyBtYXkgZG8gdGhlIHNhbWUsIG9yIHRha2UgYWR2YW50YWdlIG9mIHRoaXMgY29kZSB0byBkbyB0aGUgbG9hZGluZyBmb3IgdGhlbSB2aWEgOgogICA8cHJlPgogICAgICBQcm9wZXJ0aWVzIHAgPSBzdXBlci5sb2FkQ29uZmlndXJhdGlvbiggY29uZmlnICk7CiAgIDwvcHJlPgogIGFuZCB0aGVuIGFkZCBvciBtb2RpZnkgdGhlIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGZyb20gdGhlIGZpbGUuCiAgPGJyPjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+Y29uZmlnPC9DT0RFPiAtIFNlcnZsZXRDb25maWcgcGFzc2VkIHRvIHRoZSBzZXJ2bGV0cyBpbml0KCkgZnVuY3Rpb24KICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgcmVhbCBwYXRoIHZpYSBTZXJ2bGV0Q29udGV4dCAoaGludCk8RFQ+PEI+UmV0dXJuczo8L0I+PEREPmphdmEudXRpbC5Qcm9wZXJ0aWVzIGxvYWRlZCB3aXRoIGNvbmZpZ3VyYXRpb24gdmFsdWVzIHRvIGJlIHVzZWQKICAgICAgICAgIHRvIGluaXRpYWxpemUgdGhlIFZlbG9jaXR5IHJ1bnRpbWUuPERUPjxCPlRocm93czo8L0I+PEREPjxDT0RFPmphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uPC9DT0RFPiAtIGlmIGEgc3BlY2lmaWVkIGZpbGUgaXMgbm90IGZvdW5kLjxERD48Q09ERT5qYXZhLmlvLklPRXhjZXB0aW9uPC9DT0RFPiAtIEkvTyBwcm9ibGVtIGFjY2Vzc2luZyB0aGUgc3BlY2lmaWVkIGZpbGUsIGlmIHNwZWNpZmllZC48L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJkb0dldChqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSkiPjwhLS0gLS0+PC9BPjxIMz4KZG9HZXQ8L0gzPgo8UFJFPgpwdWJsaWMgdm9pZCA8Qj5kb0dldDwvQj4oamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCZuYnNwO3JlcXVlc3QsCiAgICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlJm5ic3A7cmVzcG9uc2UpCiAgICAgICAgICAgdGhyb3dzIGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgamF2YS5pby5JT0V4Y2VwdGlvbjwvUFJFPgo8REw+CjxERD5IYW5kbGVzIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiByZXF1ZXN0cyBieSBjYWxsaW5nIDxDT0RFPiNkb1JlcXVlc3QoKTwvQ09ERT4uPEREPjxETD4KPERUPjxCPk92ZXJyaWRlczo8L0I+PEREPjxDT0RFPmRvR2V0PC9DT0RFPiBpbiBjbGFzcyA8Q09ERT5qYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXQ8L0NPREU+PC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iZG9Qb3N0KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlKSI+PCEtLSAtLT48L0E+PEgzPgpkb1Bvc3Q8L0gzPgo8UFJFPgpwdWJsaWMgdm9pZCA8Qj5kb1Bvc3Q8L0I+KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QmbmJzcDtyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UmbmJzcDtyZXNwb25zZSkKICAgICAgICAgICAgdGhyb3dzIGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgIGphdmEuaW8uSU9FeGNlcHRpb248L1BSRT4KPERMPgo8REQ+SGFuZGxlcyBIVFRQIDxjb2RlPlBPU1Q8L2NvZGU+IHJlcXVlc3RzIGJ5IGNhbGxpbmcgPENPREU+I2RvUmVxdWVzdCgpPC9DT0RFPi48REQ+PERMPgo8RFQ+PEI+T3ZlcnJpZGVzOjwvQj48REQ+PENPREU+ZG9Qb3N0PC9DT0RFPiBpbiBjbGFzcyA8Q09ERT5qYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXQ8L0NPREU+PC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iZG9SZXF1ZXN0KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlKSI+PCEtLSAtLT48L0E+PEgzPgpkb1JlcXVlc3Q8L0gzPgo8UFJFPgpwcm90ZWN0ZWQgdm9pZCA8Qj5kb1JlcXVlc3Q8L0I+KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QmbmJzcDtyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UmbmJzcDtyZXNwb25zZSkKICAgICAgICAgICAgICAgICAgdGhyb3dzIGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEuaW8uSU9FeGNlcHRpb248L1BSRT4KPERMPgo8REQ+SGFuZGxlcyBhbGwgcmVxdWVzdHMgKGJ5IGRlZmF1bHQpLjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cmVxdWVzdDwvQ09ERT4gLSBIdHRwU2VydmxldFJlcXVlc3Qgb2JqZWN0IGNvbnRhaW5pbmcgY2xpZW50IHJlcXVlc3Q8REQ+PENPREU+cmVzcG9uc2U8L0NPREU+IC0gSHR0cFNlcnZsZXRSZXNwb25zZSBvYmplY3QgZm9yIHRoZSByZXNwb25zZTwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9InJlcXVlc3RDbGVhbnVwKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlLCBvcmcuYXBhY2hlLnZlbG9jaXR5LmNvbnRleHQuQ29udGV4dCkiPjwhLS0gLS0+PC9BPjxIMz4KcmVxdWVzdENsZWFudXA8L0gzPgo8UFJFPgpwcm90ZWN0ZWQgdm9pZCA8Qj5yZXF1ZXN0Q2xlYW51cDwvQj4oamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCZuYnNwO3JlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlJm5ic3A7cmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvY29udGV4dC9Db250ZXh0Lmh0bWwiPkNvbnRleHQ8L0E+Jm5ic3A7Y29udGV4dCk8L1BSRT4KPERMPgo8REQ+QSBjbGVhbnVwIHJvdXRpbmUgd2hpY2ggaXMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgdGhlIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvc2VydmxldC9WZWxvY2l0eVNlcnZsZXQuaHRtbCNkb1JlcXVlc3QoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpIj48Q09ERT5kb1JlcXVlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlKTwvQ09ERT48L0E+CiAgcHJvY2Vzc2luZyBzZXF1ZW5jZSwgYWxsb3dpbmcgYSBkZXJpdmVkIGNsYXNzIHRvIGRvIHJlc291cmNlCiAgY2xlYW51cCBvciBvdGhlciBlbmQgb2YgcHJvY2VzcyBjeWNsZSB0YXNrcy48REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnJlcXVlc3Q8L0NPREU+IC0gc2VydmxldCByZXF1ZXN0IGZyb20gY2xpZW50PEREPjxDT0RFPnJlc3BvbnNlPC9DT0RFPiAtIHNlcnZsZXQgcmVwb25zZTxERD48Q09ERT5jb250ZXh0PC9DT0RFPiAtIGNvbnRleHQgY3JlYXRlZCBieSB0aGUgY3JlYXRlQ29udGV4dCgpIG1ldGhvZDwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9Im1lcmdlVGVtcGxhdGUob3JnLmFwYWNoZS52ZWxvY2l0eS5UZW1wbGF0ZSwgb3JnLmFwYWNoZS52ZWxvY2l0eS5jb250ZXh0LkNvbnRleHQsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlKSI+PCEtLSAtLT48L0E+PEgzPgptZXJnZVRlbXBsYXRlPC9IMz4KPFBSRT4KcHJvdGVjdGVkIHZvaWQgPEI+bWVyZ2VUZW1wbGF0ZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9UZW1wbGF0ZS5odG1sIj5UZW1wbGF0ZTwvQT4mbmJzcDt0ZW1wbGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L2NvbnRleHQvQ29udGV4dC5odG1sIj5Db250ZXh0PC9BPiZuYnNwO2NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UmbmJzcDtyZXNwb25zZSkKICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L2V4Y2VwdGlvbi9SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uLmh0bWwiPlJlc291cmNlTm90Rm91bmRFeGNlcHRpb248L0E+LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvZXhjZXB0aW9uL1BhcnNlRXJyb3JFeGNlcHRpb24uaHRtbCI+UGFyc2VFcnJvckV4Y2VwdGlvbjwvQT4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9leGNlcHRpb24vTWV0aG9kSW52b2NhdGlvbkV4Y2VwdGlvbi5odG1sIj5NZXRob2RJbnZvY2F0aW9uRXhjZXB0aW9uPC9BPiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmlvLklPRXhjZXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuRXhjZXB0aW9uPC9QUkU+CjxETD4KPEREPm1lcmdlcyB0aGUgdGVtcGxhdGUgd2l0aCB0aGUgY29udGV4dC4gIE9ubHkgb3ZlcnJpZGUgdGhpcyBpZiB5b3UgcmVhbGx5LCByZWFsbHkKICByZWFsbHkgbmVlZCB0by4gKEFuZCBkb24ndCBjYWxsIHVzIHdpdGggcXVlc3Rpb25zIGlmIGl0IGJyZWFrcyA6KTxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dGVtcGxhdGU8L0NPREU+IC0gdGVtcGxhdGUgb2JqZWN0IHJldHVybmVkIGJ5IHRoZSBoYW5kbGVSZXF1ZXN0KCkgbWV0aG9kPEREPjxDT0RFPmNvbnRleHQ8L0NPREU+IC0gY29udGV4dCBjcmVhdGVkIGJ5IHRoZSBjcmVhdGVDb250ZXh0KCkgbWV0aG9kPEREPjxDT0RFPnJlc3BvbnNlPC9DT0RFPiAtIHNlcnZsZXQgcmVwb25zZSAodXNlIHRoaXMgdG8gZ2V0IHRoZSBvdXRwdXQgc3RyZWFtIG9yIFdyaXRlcjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9InNldENvbnRlbnRUeXBlKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlKSI+PCEtLSAtLT48L0E+PEgzPgpzZXRDb250ZW50VHlwZTwvSDM+CjxQUkU+CnByb3RlY3RlZCB2b2lkIDxCPnNldENvbnRlbnRUeXBlPC9CPihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Jm5ic3A7cmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UmbmJzcDtyZXNwb25zZSk8L1BSRT4KPERMPgo8REQ+U2V0cyB0aGUgY29udGVudCB0eXBlIG9mIHRoZSByZXNwb25zZSwgZGVmYXVsdGluZyB0byA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3NlcnZsZXQvVmVsb2NpdHlTZXJ2bGV0Lmh0bWwjZGVmYXVsdENvbnRlbnRUeXBlIj48Q09ERT5kZWZhdWx0Q29udGVudFR5cGU8L0NPREU+PC9BPiBpZiBub3Qgb3ZlcnJpZGVuLiAgRGVsZWdhdGVzIHRvIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvc2VydmxldC9WZWxvY2l0eVNlcnZsZXQuaHRtbCNjaG9vc2VDaGFyYWN0ZXJFbmNvZGluZyhqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0KSI+PENPREU+Y2hvb3NlQ2hhcmFjdGVyRW5jb2RpbmcoSHR0cFNlcnZsZXRSZXF1ZXN0KTwvQ09ERT48L0E+IHRvIHNlbGVjdCB0aGUKIGFwcHJvcHJpYXRlIGNoYXJhY3RlciBlbmNvZGluZy48REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnJlcXVlc3Q8L0NPREU+IC0gVGhlIHNlcnZsZXQgcmVxdWVzdCBmcm9tIHRoZSBjbGllbnQuPEREPjxDT0RFPnJlc3BvbnNlPC9DT0RFPiAtIFRoZSBzZXJ2bGV0IHJlcG9uc2UgdG8gdGhlIGNsaWVudC48L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJjaG9vc2VDaGFyYWN0ZXJFbmNvZGluZyhqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0KSI+PCEtLSAtLT48L0E+PEgzPgpjaG9vc2VDaGFyYWN0ZXJFbmNvZGluZzwvSDM+CjxQUkU+CnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIDxCPmNob29zZUNoYXJhY3RlckVuY29kaW5nPC9CPihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Jm5ic3A7cmVxdWVzdCk8L1BSRT4KPERMPgo8REQ+Q2hvb3NlcyB0aGUgb3V0cHV0IGNoYXJhY3RlciBlbmNvZGluZyB0byBiZSB1c2VkIGFzIHRoZSB2YWx1ZQogZm9yIHRoZSAiY2hhcnNldD0iIHBvcnRpb24gb2YgdGhlIEhUVFAgQ29udGVudC1UeXBlIGhlYWRlciAoYW5kCiB0aHVzIHJldHVybmVkIGJ5IDxjb2RlPnJlc3BvbnNlLmdldENoYXJhY3RlckVuY29kaW5nKCk8L2NvZGU+KS4KIENhbGxlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3NlcnZsZXQvVmVsb2NpdHlTZXJ2bGV0Lmh0bWwjc2V0Q29udGVudFR5cGUoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpIj48Q09ERT5zZXRDb250ZW50VHlwZShIdHRwU2VydmxldFJlcXVlc3QsCiBIdHRwU2VydmxldFJlc3BvbnNlKTwvQ09ERT48L0E+IGlmIGFuIGVuY29kaW5nIGlzbid0IGFscmVhZHkgc3BlY2lmaWVkIGJ5CiBDb250ZW50LVR5cGUuICBCeSBkZWZhdWx0LCBjaG9vc2VzIHRoZSB2YWx1ZSBvZgogUnVudGltZVNpbmdsZXRvbidzIDxjb2RlPm91dHB1dC5lbmNvZGluZzwvY29kZT4gcHJvcGVydHkuPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5yZXF1ZXN0PC9DT0RFPiAtIFRoZSBzZXJ2bGV0IHJlcXVlc3QgZnJvbSB0aGUgY2xpZW50LjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImNyZWF0ZUNvbnRleHQoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpIj48IS0tIC0tPjwvQT48SDM+CmNyZWF0ZUNvbnRleHQ8L0gzPgo8UFJFPgpwcm90ZWN0ZWQgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9jb250ZXh0L0NvbnRleHQuaHRtbCI+Q29udGV4dDwvQT4gPEI+Y3JlYXRlQ29udGV4dDwvQj4oamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCZuYnNwO3JlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UmbmJzcDtyZXNwb25zZSk8L1BSRT4KPERMPgo8REQ+UmV0dXJucyBhIGNvbnRleHQgc3VpdGFibGUgdG8gcGFzcyB0byB0aGUgaGFuZGxlUmVxdWVzdCgpIG1ldGhvZAogIDxicj48YnI+CiAgRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aWxsIGNyZWF0ZSBhIFZlbG9jaXR5Q29udGV4dCBvYmplY3QsCiAgIHB1dCB0aGUgSHR0cFNlcnZsZXRSZXF1ZXN0IGFuZCBIdHRwU2VydmxldFJlc3BvbnNlCiAgaW50byB0aGUgY29udGV4dCBhY2Nlc3NhYmxlIHZpYSB0aGUga2V5cyBWZWxvY2l0eVNlcnZsZXQuUkVRVUVTVCBhbmQKICBWZWxvY2l0eVNlcnZsZXQuUkVTUE9OU0UsIHJlc3BlY3RpdmVseS48REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnJlcXVlc3Q8L0NPREU+IC0gc2VydmxldCByZXF1ZXN0IGZyb20gY2xpZW50PEREPjxDT0RFPnJlc3BvbnNlPC9DT0RFPiAtIHNlcnZsZXQgcmVwb25zZSB0byBjbGllbnQ8RFQ+PEI+UmV0dXJuczo8L0I+PEREPmNvbnRleHQ8L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJnZXRUZW1wbGF0ZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgpnZXRUZW1wbGF0ZTwvSDM+CjxQUkU+CnB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L1RlbXBsYXRlLmh0bWwiPlRlbXBsYXRlPC9BPiA8Qj5nZXRUZW1wbGF0ZTwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO25hbWUpCiAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L2V4Y2VwdGlvbi9SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uLmh0bWwiPlJlc291cmNlTm90Rm91bmRFeGNlcHRpb248L0E+LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9leGNlcHRpb24vUGFyc2VFcnJvckV4Y2VwdGlvbi5odG1sIj5QYXJzZUVycm9yRXhjZXB0aW9uPC9BPiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5FeGNlcHRpb248L1BSRT4KPERMPgo8REQ+UmV0cmlldmVzIHRoZSByZXF1ZXN0ZWQgdGVtcGxhdGUuPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5uYW1lPC9DT0RFPiAtIFRoZSBmaWxlIG5hbWUgb2YgdGhlIHRlbXBsYXRlIHRvIHJldHJpZXZlIHJlbGF0aXZlIHRvIHRoZSAKICAgICAgICAgICAgIHRlbXBsYXRlIHJvb3QuPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgcmVxdWVzdGVkIHRlbXBsYXRlLjxEVD48Qj5UaHJvd3M6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L2V4Y2VwdGlvbi9SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uLmh0bWwiPlJlc291cmNlTm90Rm91bmRFeGNlcHRpb248L0E+PC9DT0RFPiAtIGlmIHRlbXBsYXRlIG5vdCBmb3VuZAogICAgICAgICAgZnJvbSBhbnkgYXZhaWxhYmxlIHNvdXJjZS48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9leGNlcHRpb24vUGFyc2VFcnJvckV4Y2VwdGlvbi5odG1sIj5QYXJzZUVycm9yRXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBpZiB0ZW1wbGF0ZSBjYW5ub3QgYmUgcGFyc2VkIGR1ZQogICAgICAgICAgdG8gc3ludGF4IChvciBvdGhlcikgZXJyb3IuPEREPjxDT0RFPmphdmEubGFuZy5FeGNlcHRpb248L0NPREU+IC0gaWYgYW4gZXJyb3Igb2NjdXJzIGluIHRlbXBsYXRlIGluaXRpYWxpemF0aW9uPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iZ2V0VGVtcGxhdGUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KZ2V0VGVtcGxhdGU8L0gzPgo8UFJFPgpwdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9UZW1wbGF0ZS5odG1sIj5UZW1wbGF0ZTwvQT4gPEI+Z2V0VGVtcGxhdGU8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2VuY29kaW5nKQogICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9leGNlcHRpb24vUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbi5odG1sIj5SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uPC9BPiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvZXhjZXB0aW9uL1BhcnNlRXJyb3JFeGNlcHRpb24uaHRtbCI+UGFyc2VFcnJvckV4Y2VwdGlvbjwvQT4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuRXhjZXB0aW9uPC9QUkU+CjxETD4KPEREPlJldHJpZXZlcyB0aGUgcmVxdWVzdGVkIHRlbXBsYXRlIHdpdGggdGhlIHNwZWNpZmllZAogY2hhcmFjdGVyIGVuY29kaW5nLjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bmFtZTwvQ09ERT4gLSBUaGUgZmlsZSBuYW1lIG9mIHRoZSB0ZW1wbGF0ZSB0byByZXRyaWV2ZSByZWxhdGl2ZSB0byB0aGUgCiAgICAgICAgICAgICB0ZW1wbGF0ZSByb290LjxERD48Q09ERT5lbmNvZGluZzwvQ09ERT4gLSB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIG9mIHRoZSB0ZW1wbGF0ZTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIHJlcXVlc3RlZCB0ZW1wbGF0ZS48RFQ+PEI+VGhyb3dzOjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9leGNlcHRpb24vUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbi5odG1sIj5SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBpZiB0ZW1wbGF0ZSBub3QgZm91bmQKICAgICAgICAgIGZyb20gYW55IGF2YWlsYWJsZSBzb3VyY2UuPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvZXhjZXB0aW9uL1BhcnNlRXJyb3JFeGNlcHRpb24uaHRtbCI+UGFyc2VFcnJvckV4Y2VwdGlvbjwvQT48L0NPREU+IC0gaWYgdGVtcGxhdGUgY2Fubm90IGJlIHBhcnNlZCBkdWUKICAgICAgICAgIHRvIHN5bnRheCAob3Igb3RoZXIpIGVycm9yLjxERD48Q09ERT5qYXZhLmxhbmcuRXhjZXB0aW9uPC9DT0RFPiAtIGlmIGFuIGVycm9yIG9jY3VycyBpbiB0ZW1wbGF0ZSBpbml0aWFsaXphdGlvbjxEVD48Qj5TaW5jZTogPC9CPjxERD5WZWxvY2l0eSB2MS4xPC9ERD4KPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iaGFuZGxlUmVxdWVzdChqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSwgb3JnLmFwYWNoZS52ZWxvY2l0eS5jb250ZXh0LkNvbnRleHQpIj48IS0tIC0tPjwvQT48SDM+CmhhbmRsZVJlcXVlc3Q8L0gzPgo8UFJFPgpwcm90ZWN0ZWQgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9UZW1wbGF0ZS5odG1sIj5UZW1wbGF0ZTwvQT4gPEI+aGFuZGxlUmVxdWVzdDwvQj4oamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCZuYnNwO3JlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlJm5ic3A7cmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvY29udGV4dC9Db250ZXh0Lmh0bWwiPkNvbnRleHQ8L0E+Jm5ic3A7Y3R4KQogICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uPC9QUkU+CjxETD4KPEREPkltcGxlbWVudCB0aGlzIG1ldGhvZCB0byBhZGQgeW91ciBhcHBsaWNhdGlvbiBkYXRhIHRvIHRoZSBjb250ZXh0LCAKIGNhbGxpbmcgdGhlIDxjb2RlPmdldFRlbXBsYXRlKCk8L2NvZGU+IG1ldGhvZCB0byBwcm9kdWNlIHlvdXIgcmV0dXJuIAogdmFsdWUuCiA8YnI+PGJyPgogSW4gdGhlIGV2ZW50IG9mIGEgcHJvYmxlbSwgeW91IG1heSBoYW5kbGUgdGhlIHJlcXVlc3QgZGlyZWN0bHkKIGFuZCByZXR1cm4gPGNvZGU+bnVsbDwvY29kZT4gb3IgdGhyb3cgYSBtb3JlIG1lYW5pbmdmdWwgZXhjZXB0aW9uCiBmb3IgdGhlIGVycm9yIGhhbmRsZXIgdG8gY2F0Y2guPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5yZXF1ZXN0PC9DT0RFPiAtIHNlcnZsZXQgcmVxdWVzdCBmcm9tIGNsaWVudDxERD48Q09ERT5yZXNwb25zZTwvQ09ERT4gLSBzZXJ2bGV0IHJlcG9uc2U8REQ+PENPREU+Y3R4PC9DT0RFPiAtIFRoZSBjb250ZXh0IHRvIGFkZCB5b3VyIGRhdGEgdG8uPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgdGVtcGxhdGUgdG8gbWVyZ2Ugd2l0aCB5b3VyIGNvbnRleHQgb3IgbnVsbCwgaW5kaWNhdGluZwogICAgdGhhdCB5b3UgaGFuZGxlZCB0aGUgcHJvY2Vzc2luZy48RFQ+PEI+U2luY2U6IDwvQj48REQ+VmVsb2NpdHkgdjEuMTwvREQ+CjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImhhbmRsZVJlcXVlc3Qob3JnLmFwYWNoZS52ZWxvY2l0eS5jb250ZXh0LkNvbnRleHQpIj48IS0tIC0tPjwvQT48SDM+CmhhbmRsZVJlcXVlc3Q8L0gzPgo8UFJFPgpwcm90ZWN0ZWQgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9UZW1wbGF0ZS5odG1sIj5UZW1wbGF0ZTwvQT4gPEI+aGFuZGxlUmVxdWVzdDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9jb250ZXh0L0NvbnRleHQuaHRtbCI+Q29udGV4dDwvQT4mbmJzcDtjdHgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb248L1BSRT4KPERMPgo8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+VXNlCiA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3NlcnZsZXQvVmVsb2NpdHlTZXJ2bGV0Lmh0bWwjaGFuZGxlUmVxdWVzdChqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSwgb3JnLmFwYWNoZS52ZWxvY2l0eS5jb250ZXh0LkNvbnRleHQpIj48Q09ERT5oYW5kbGVSZXF1ZXN0KCBIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgCiBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBDb250ZXh0IGN0eCApPC9DT0RFPjwvQT48L0k+CjxQPgo8REQ+SW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIGFkZCB5b3VyIGFwcGxpY2F0aW9uIGRhdGEgdG8gdGhlIGNvbnRleHQsIAogY2FsbGluZyB0aGUgPGNvZGU+Z2V0VGVtcGxhdGUoKTwvY29kZT4gbWV0aG9kIHRvIHByb2R1Y2UgeW91ciByZXR1cm4gCiB2YWx1ZS4KIDxicj48YnI+CiBJbiB0aGUgZXZlbnQgb2YgYSBwcm9ibGVtLCB5b3UgbWF5IHNpbXBsZSByZXR1cm4gPGNvZGU+bnVsbDwvY29kZT4KIG9yIHRocm93IGEgbW9yZSBtZWFuaW5nZnVsIGV4Y2VwdGlvbi48REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmN0eDwvQ09ERT4gLSBUaGUgY29udGV4dCB0byBhZGQgeW91ciBkYXRhIHRvLjxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIHRlbXBsYXRlIHRvIG1lcmdlIHdpdGggeW91ciBjb250ZXh0LjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImVycm9yKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlLCBqYXZhLmxhbmcuRXhjZXB0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgplcnJvcjwvSDM+CjxQUkU+CnByb3RlY3RlZCB2b2lkIDxCPmVycm9yPC9CPihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Jm5ic3A7cmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UmbmJzcDtyZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLkV4Y2VwdGlvbiZuYnNwO2NhdXNlKQogICAgICAgICAgICAgIHRocm93cyBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24sCiAgICAgICAgICAgICAgICAgICAgIGphdmEuaW8uSU9FeGNlcHRpb248L1BSRT4KPERMPgo8REQ+SW52b2tlZCB3aGVuIHRoZXJlIGlzIGFuIGVycm9yIHRocm93biBpbiBhbnkgcGFydCBvZiBkb1JlcXVlc3QoKSBwcm9jZXNzaW5nLgogPGJyPjxicj4KIERlZmF1bHQgd2lsbCBzZW5kIGEgc2ltcGxlIEhUTUwgcmVzcG9uc2UgaW5kaWNhdGluZyB0aGVyZSB3YXMgYSBwcm9ibGVtLjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cmVxdWVzdDwvQ09ERT4gLSBvcmlnaW5hbCBIdHRwU2VydmxldFJlcXVlc3QgZnJvbSBzZXJ2bGV0IGNvbnRhaW5lci48REQ+PENPREU+cmVzcG9uc2U8L0NPREU+IC0gSHR0cFNlcnZsZXRSZXNwb25zZSBvYmplY3QgZnJvbSBzZXJ2bGV0IGNvbnRhaW5lci48REQ+PENPREU+Y2F1c2U8L0NPREU+IC0gRXhjZXB0aW9uIHRoYXQgd2FzIHRocm93biBieSBzb21lIG90aGVyIHBhcnQgb2YgcHJvY2Vzcy48L0RMPgo8L0REPgo8L0RMPgo8IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+CjxIUj4KCjwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+CjxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgo8VFI+CjxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+CjxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+CiAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9WZWxvY2l0eVNlcnZsZXQuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8L1RSPgo8L1RBQkxFPgo8L1REPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KPC9FTT4KPC9URD4KPC9UUj4KCjxUUj4KPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KJm5ic3A7UFJFViBDTEFTUyZuYnNwOwombmJzcDtORVhUIENMQVNTPC9GT05UPjwvVEQ+CjxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+CiAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7CiZuYnNwOzxBIEhSRUY9IlZlbG9jaXR5U2VydmxldC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+PC9GT05UPjwvVEQ+CjwvVFI+CjxUUj4KPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KICBTVU1NQVJZOiAmbmJzcDtJTk5FUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgo8VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgpERVRBSUw6ICZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+CjwvVFI+CjwvVEFCTEU+CjwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KCjxIUj4KQ29weXJpZ2h0IKkgMjAwMiBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KPC9CT0RZPgo8L0hUTUw+Cg==