PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBGcmFtZXNldC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvZnJhbWVzZXQuZHRkIj4KPCEtLU5ld1BhZ2UtLT4KPEhUTUw+CjxIRUFEPgo8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFdlZCBBcHIgMTQgMDg6MjY6MzMgRURUIDIwMDQgLS0+CjxUSVRMRT4KVmVsb2NpdHkgMS40IEFQSTogQ2xhc3MgIENvbmZpZ3VyYXRpb24KPC9USVRMRT4KPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgo8L0hFQUQ+CjxCT0RZIEJHQ09MT1I9IndoaXRlIj4KCjwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+CjxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgo8VFI+CjxURCBDT0xTUEFOPTIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+CjxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+CiAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9Db25maWd1cmF0aW9uLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPC9UUj4KPC9UQUJMRT4KPC9URD4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+CjwvRU0+CjwvVEQ+CjwvVFI+Cgo8VFI+CjxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+CiZuYnNwO1BSRVYgQ0xBU1MmbmJzcDsKJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5Qcm9wZXJ0aWVzUmVhZGVyLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgo8VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgogIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwombmJzcDs8QSBIUkVGPSJDb25maWd1cmF0aW9uLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT48L0ZPTlQ+PC9URD4KPC9UUj4KPFRSPgo8VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgogIFNVTU1BUlk6ICZuYnNwOzxBIEhSRUY9IiNpbm5lcl9jbGFzc19zdW1tYXJ5Ij5JTk5FUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KREVUQUlMOiAmbmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgo8L1RSPgo8L1RBQkxFPgo8IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Cgo8SFI+CjwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KPEgyPgo8Rk9OVCBTSVpFPSItMSI+Cm9yZy5hcGFjaGUudmVsb2NpdHkucnVudGltZS5jb25maWd1cmF0aW9uPC9GT05UPgo8QlI+CkNsYXNzICBDb25maWd1cmF0aW9uPC9IMj4KPFBSRT4KamF2YS5sYW5nLk9iamVjdAogIHwKICArLS1qYXZhLnV0aWwuRGljdGlvbmFyeQogICAgICAgIHwKICAgICAgICArLS1qYXZhLnV0aWwuSGFzaHRhYmxlCiAgICAgICAgICAgICAgfAogICAgICAgICAgICAgICstLTxCPm9yZy5hcGFjaGUudmVsb2NpdHkucnVudGltZS5jb25maWd1cmF0aW9uLkNvbmZpZ3VyYXRpb248L0I+CjwvUFJFPgo8REw+CjxEVD48Qj5BbGwgSW1wbGVtZW50ZWQgSW50ZXJmYWNlczo8L0I+IDxERD5qYXZhLmxhbmcuQ2xvbmVhYmxlLCBqYXZhLnV0aWwuTWFwLCBqYXZhLmlvLlNlcmlhbGl6YWJsZTwvREQ+CjwvREw+CjxIUj4KPEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+QXMgb2YgdmVyc2lvbiAxLjEsIHBsZWFzZSB1c2UgRXh0ZW5kZWRQcm9wZXJ0aWVzIGZyb20KIHRoZSBKYWthcnRhIENvbW1vbnMgQ29sbGVjdGlvbnMgY29tcG9uZW50LjwvST4KPFA+CjxETD4KPERUPnB1YmxpYyBjbGFzcyA8Qj5Db25maWd1cmF0aW9uPC9CPjxEVD5leHRlbmRzIGphdmEudXRpbC5IYXNodGFibGU8L0RMPgoKPFA+ClRoaXMgY2xhc3MgZXh0ZW5kcyBub3JtYWwgSmF2YSBwcm9wZXJ0aWVzIGJ5IGFkZGluZyB0aGUgcG9zc2liaWxpdHkKIHRvIHVzZSB0aGUgc2FtZSBrZXkgbWFueSB0aW1lcyBjb25jYXRlbmF0aW5nIHRoZSB2YWx1ZSBzdHJpbmdzCiBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIHRoZW0uCgogPHA+VGhlIEV4dGVuZGVkIFByb3BlcnRpZXMgc3ludGF4IGlzIGV4cGxhaW5lZCBoZXJlOgoKIDx1bD4KICA8bGk+CiAgIEVhY2ggcHJvcGVydHkgaGFzIHRoZSBzeW50YXggPGNvZGU+a2V5ID0gdmFsdWU8L2NvZGU+CiAgPC9saT4KICA8bGk+CiAgIFRoZSA8aT5rZXk8L2k+IG1heSB1c2UgYW55IGNoYXJhY3RlciBidXQgdGhlIGVxdWFsIHNpZ24gJz0nLgogIDwvbGk+CiAgPGxpPgogICA8aT52YWx1ZTwvaT4gbWF5IGJlIHNlcGFyYXRlZCBvbiBkaWZmZXJlbnQgbGluZXMgaWYgYSBiYWNrc2xhc2gKICAgaXMgcGxhY2VkIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUgdGhhdCBjb250aW51ZXMgYmVsb3cuCiAgPC9saT4KICA8bGk+CiAgIElmIDxpPnZhbHVlPC9pPiBpcyBhIGxpc3Qgb2Ygc3RyaW5ncywgZWFjaCB0b2tlbiBpcyBzZXBhcmF0ZWQKICAgYnkgYSBjb21tYSAnLCcuCiAgPC9saT4KICA8bGk+CiAgIENvbW1hcyBpbiBlYWNoIHRva2VuIGFyZSBlc2NhcGVkIHBsYWNpbmcgYSBiYWNrc2xhc2ggcmlnaHQgYmVmb3JlCiAgIHRoZSBjb21tYS4KICA8L2xpPgogIDxsaT4KICAgSWYgYSA8aT5rZXk8L2k+IGlzIHVzZWQgbW9yZSB0aGFuIG9uY2UsIHRoZSB2YWx1ZXMgYXJlIGFwcGVuZGVkCiAgIGxpa2UgaWYgdGhleSB3ZXJlIG9uIHRoZSBzYW1lIGxpbmUgc2VwYXJhdGVkIHdpdGggY29tbWFzLgogIDwvbGk+CiAgPGxpPgogICBCbGFuayBsaW5lcyBhbmQgbGluZXMgc3RhcnRpbmcgd2l0aCBjaGFyYWN0ZXIgJyMnIGFyZSBza2lwcGVkLgogIDwvbGk+CiAgPGxpPgogICBJZiBhIHByb3BlcnR5IGlzIG5hbWVkICJpbmNsdWRlIiAob3Igd2hhdGV2ZXIgaXMgZGVmaW5lZCBieQogICBzZXRJbmNsdWRlKCkgYW5kIGdldEluY2x1ZGUoKSBhbmQgdGhlIHZhbHVlIG9mIHRoYXQgcHJvcGVydHkgaXMKICAgdGhlIGZ1bGwgcGF0aCB0byBhIGZpbGUgb24gZGlzaywgdGhhdCBmaWxlIHdpbGwgYmUgaW5jbHVkZWQgaW50bwogICB0aGUgQ29uZmlndXJhdGlvbnNSZXBvc2l0b3J5LiBZb3UgY2FuIGFsc28gcHVsbCBpbiBmaWxlcyByZWxhdGl2ZQogICB0byB0aGUgcGFyZW50IGNvbmZpZ3VyYXRpb24gZmlsZS4gU28gaWYgeW91IGhhdmUgc29tZXRoaW5nCiAgIGxpa2UgdGhlIGZvbGxvd2luZzoKCiAgIGluY2x1ZGUgPSBhZGRpdGlvbmFsLnByb3BlcnRpZXMKCiAgIFRoZW4gImFkZGl0aW9uYWwucHJvcGVydGllcyIgaXMgZXhwZWN0ZWQgdG8gYmUgaW4gdGhlIHNhbWUKICAgZGlyZWN0b3J5IGFzIHRoZSBwYXJlbnQgY29uZmlndXJhdGlvbiBmaWxlLgogCiAgIER1cGxpY2F0ZSBuYW1lIHZhbHVlcyB3aWxsIGJlIHJlcGxhY2VkLCBzbyBiZSBjYXJlZnVsLgoKICA8L2xpPgogPC91bD4KCiA8cD5IZXJlIGlzIGFuIGV4YW1wbGUgb2YgYSB2YWxpZCBleHRlbmRlZCBwcm9wZXJ0aWVzIGZpbGU6CgogPHA+PHByZT4KICAgICAgIyBsaW5lcyBzdGFydGluZyB3aXRoICMgYXJlIGNvbW1lbnRzCgogICAgICAjIFRoaXMgaXMgdGhlIHNpbXBsZXN0IHByb3BlcnR5CiAgICAgIGtleSA9IHZhbHVlCgogICAgICAjIEEgbG9uZyBwcm9wZXJ0eSBtYXkgYmUgc2VwYXJhdGVkIG9uIG11bHRpcGxlIGxpbmVzCiAgICAgIGxvbmd2YWx1ZSA9IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSBcCiAgICAgICAgICAgICAgICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQoKICAgICAgIyBUaGlzIGlzIGEgcHJvcGVydHkgd2l0aCBtYW55IHRva2VucwogICAgICB0b2tlbnNfb25fYV9saW5lID0gZmlyc3QgdG9rZW4sIHNlY29uZCB0b2tlbgoKICAgICAgIyBUaGlzIHNlcXVlbmNlIGdlbmVyYXRlcyBleGFjdGx5IHRoZSBzYW1lIHJlc3VsdAogICAgICB0b2tlbnNfb25fbXVsdGlwbGVfbGluZXMgPSBmaXJzdCB0b2tlbgogICAgICB0b2tlbnNfb25fbXVsdGlwbGVfbGluZXMgPSBzZWNvbmQgdG9rZW4KCiAgICAgICMgY29tbWFzIG1heSBiZSBlc2NhcGVkIGluIHRva2VucwogICAgICBjb21tYXMuZXhjYXBlZCA9IEhpXCwgd2hhdCd1cD8KIDwvcHJlPgoKIDxwPjxiPk5PVEU8L2I+OiB0aGlzIGNsYXNzIGhhcyA8Yj5ub3Q8L2I+IGJlZW4gd3JpdHRlbiBmb3IKIHBlcmZvcm1hbmNlIG5vciBsb3cgbWVtb3J5IHVzYWdlLiAgSW4gZmFjdCwgaXQncyB3YXkgc2xvd2VyIHRoYW4gaXQKIGNvdWxkIGJlIGFuZCBnZW5lcmF0ZXMgdG9vIG11Y2ggbWVtb3J5IGdhcmJhZ2UuICBCdXQgc2luY2UKIHBlcmZvcm1hbmNlIGlzIG5vdCBhbiBpc3N1ZSBkdXJpbmcgaW50aWFsaXphdGlvbiAoYW5kIHRoZXJlIGlzIG5vdAogbXVjaCB0aW1lIHRvIGltcHJvdmUgaXQpLCBJIHdyb3RlIGl0IHRoaXMgd2F5LiAgSWYgeW91IGRvbid0IGxpa2UKIGl0LCBnbyBhaGVhZCBhbmQgdHVuZSBpdCB1cCEKPFA+CjxETD4KPERUPjxCPlZlcnNpb246IDwvQj48REQ+JElkOiBDb25maWd1cmF0aW9uLmphdmEsdiAxLjM0IDIwMDMvMDUvMDQgMTc6MTQ6MzcgZ2Vpcm0gRXhwICQ8L0REPgo8RFQ+PEI+QXV0aG9yOiA8L0I+PEREPjxhIGhyZWY9Im1haWx0bzpzdGVmYW5vQGFwYWNoZS5vcmciPlN0ZWZhbm8gTWF6em9jY2hpPC9hPiwgPGEgaHJlZj0ibWFpbHRvOmpvbkBsYXRjaGtleS5jb20iPkpvbiBTLiBTdGV2ZW5zPC9hPiwgPGEgaHJlZj0ibWFpbHRvOmRhdmViQG1pY2VkYS1kYXRhIj5EYXZlIEJyeXNvbjwvYT4sIDxhIGhyZWY9Im1haWx0bzpqdmFuenlsQGFwYWNoZS5vcmciPkphc29uIHZhbiBaeWw8L2E+LCA8YSBocmVmPSJtYWlsdG86Z2Vpcm1Ab3B0b25saW5lLm5ldCI+R2VpciBNYWdudXNzb24gSnIuPC9hPiwgPGEgaHJlZj0ibWFpbHRvOmxlb25Ab3B0aWNvZGUuY28uemEiPkxlb24gTWVzc2Vyc2NobWlkdDwvYT4sIDxhIGhyZWY9Im1haWx0bzpram9obnNvbkB0cmFuc3BhcmVudC5jb20+S2VudCBKb2huc29uPC9hPjwvREQ+CjxEVD48Qj5TZWUgQWxzbzogPC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9zZXJpYWxpemVkLWZvcm0uaHRtbCNvcmcuYXBhY2hlLnZlbG9jaXR5LnJ1bnRpbWUuY29uZmlndXJhdGlvbi5Db25maWd1cmF0aW9uIj5TZXJpYWxpemVkIEZvcm08L0E+PC9ETD4KPEhSPgoKPFA+CjwhLS0gPT09PT09PT0gSU5ORVIgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KCjxBIE5BTUU9ImlubmVyX2NsYXNzX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgo8VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+CjxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgo8Qj5Jbm5lciBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT4ocGFja2FnZSBwcml2YXRlKSAmbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uUHJvcGVydGllc1JlYWRlci5odG1sIj5Db25maWd1cmF0aW9uLlByb3BlcnRpZXNSZWFkZXI8L0E+PC9CPjwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7VGhpcyBjbGFzcyBpcyB1c2VkIHRvIHJlYWQgcHJvcGVydGllcyBsaW5lcy48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT4ocGFja2FnZSBwcml2YXRlKSAmbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uUHJvcGVydGllc1Rva2VuaXplci5odG1sIj5Db25maWd1cmF0aW9uLlByb3BlcnRpZXNUb2tlbml6ZXI8L0E+PC9CPjwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7VGhpcyBjbGFzcyBkaXZpZGVzIGludG8gdG9rZW5zIGEgcHJvcGVydHkgdmFsdWUuPC9URD4KPC9UUj4KPC9UQUJMRT4KJm5ic3A7PEEgTkFNRT0iaW5uZXJfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLnV0aWwuTWFwIj48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+CjxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgo8VEQ+PEI+SW5uZXIgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLnV0aWwuTWFwPC9CPjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQ+PENPREU+amF2YS51dGlsLk1hcC5FbnRyeTwvQ09ERT48L1REPgo8L1RSPgo8L1RBQkxFPgombmJzcDsKPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgoKPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+CjxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgo8VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+CjxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnByb3RlY3RlZCAmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sI2Jhc2VQYXRoIj5iYXNlUGF0aDwvQT48L0I+PC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtCYXNlIHBhdGggb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2VkIHRvIGNyZWF0ZQogdGhpcyBDb25maWd1cmF0aW9uIG9iamVjdC48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5wcml2YXRlICZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCI+Q29uZmlndXJhdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwjZGVmYXVsdHMiPmRlZmF1bHRzPC9BPjwvQj48L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwO0RlZmF1bHQgY29uZmlndXJhdGlvbnMgcmVwb3NpdG9yeS48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5wcml2YXRlICZuYnNwO29yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5FeHRlbmRlZFByb3BlcnRpZXM8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwjZGVwcmVjYXRpb25DcnV0Y2giPmRlcHJlY2F0aW9uQ3J1dGNoPC9BPjwvQj48L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOyZuYnNwOzwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnByb3RlY3RlZCAmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sI2ZpbGUiPmZpbGU8L0E+PC9CPjwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7VGhlIGZpbGUgY29ubmVjdGVkIHRvIHRoaXMgcmVwb3NpdG9yeSAoaG9sZGluZyBjb21tZW50cyBhbmQKIHN1Y2gpLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnByb3RlY3RlZCAmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sI2ZpbGVTZXBhcmF0b3IiPmZpbGVTZXBhcmF0b3I8L0E+PC9CPjwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7RmlsZSBzZXBhcmF0b3IuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+cHJvdGVjdGVkIHN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwjaW5jbHVkZSI+aW5jbHVkZTwvQT48L0I+PC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNhbiBwb2ludCB0byBvdGhlcgogcHJvcGVydGllcyBmaWxlIGZvciBpbmNsdWRpbmcgb3RoZXIgcHJvcGVydGllcyBmaWxlcy48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5wcm90ZWN0ZWQgJm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCNpc0luaXRpYWxpemVkIj5pc0luaXRpYWxpemVkPC9BPjwvQj48L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwO0hhcyB0aGlzIGNvbmZpZ3VyYXRpb24gYmVlbiBpbnRpYWxpemVkLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnByb3RlY3RlZCAmbmJzcDtqYXZhLnV0aWwuQXJyYXlMaXN0PC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sI2tleXNBc0xpc3RlZCI+a2V5c0FzTGlzdGVkPC9BPjwvQj48L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwO1RoZXNlIGFyZSB0aGUga2V5cyBpbiB0aGUgb3JkZXIgdGhleSBsaXN0ZWQKIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuPC9URD4KPC9UUj4KPC9UQUJMRT4KJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEudXRpbC5IYXNodGFibGUiPjwhLS0gLS0+PC9BPgo8VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+CjxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS51dGlsLkhhc2h0YWJsZTwvQj48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREPjxDT0RFPmNvdW50LCBlbXB0eUVudW1lcmF0b3IsIGVtcHR5SXRlcmF0b3IsIEVOVFJJRVMsIGVudHJ5U2V0LCBLRVlTLCBrZXlTZXQsIGxvYWRGYWN0b3IsIG1vZENvdW50LCBzZXJpYWxWZXJzaW9uVUlELCB0YWJsZSwgdGhyZXNob2xkLCB2YWx1ZXMsIFZBTFVFUzwvQ09ERT48L1REPgo8L1RSPgo8L1RBQkxFPgombmJzcDsKPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgoKPEEgTkFNRT0iY29uc3RydWN0b3Jfc3VtbWFyeSI+PCEtLSAtLT48L0E+CjxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgo8VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+CjxCPkNvbnN0cnVjdG9yIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sI0NvbmZpZ3VyYXRpb24oKSI+Q29uZmlndXJhdGlvbjwvQT48L0I+KCk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgZXh0ZW5kZWQgcHJvcGVydGllcyBvYmplY3QuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwjQ29uZmlndXJhdGlvbihqYXZhLmxhbmcuU3RyaW5nKSI+Q29uZmlndXJhdGlvbjwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtmaWxlKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7Q3JlYXRlcyBhbmQgbG9hZHMgdGhlIGV4dGVuZGVkIHByb3BlcnRpZXMgZnJvbSB0aGUgc3BlY2lmaWVkCiBmaWxlLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sI0NvbmZpZ3VyYXRpb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPkNvbmZpZ3VyYXRpb248L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7ZmlsZSwKICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7ZGVmYXVsdEZpbGUpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtDcmVhdGVzIGFuZCBsb2FkcyB0aGUgZXh0ZW5kZWQgcHJvcGVydGllcyBmcm9tIHRoZSBzcGVjaWZpZWQKIGZpbGUuPC9URD4KPC9UUj4KPC9UQUJMRT4KJm5ic3A7CjwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KCjxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+CjxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgo8VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwjYWRkUHJvcGVydHkoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLk9iamVjdCkiPmFkZFByb3BlcnR5PC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSwKICAgICAgICAgICAgamF2YS5sYW5nLk9iamVjdCZuYnNwO3Rva2VuKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7QWRkIGEgcHJvcGVydHkgdG8gdGhlIGNvbmZpZ3VyYXRpb24uPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+cHJpdmF0ZSAmbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sI2FkZFN0cmluZ1Byb3BlcnR5KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj5hZGRTdHJpbmdQcm9wZXJ0eTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXksCiAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcmbmJzcDt0b2tlbik8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwO1NldHMgYSBzdHJpbmcgcHJvcGVydHkgdy9vIGNoZWNraW5nIGZvciBjb21tYXMgLSB1c2VkCiAgaW50ZXJuYWxseSB3aGVuIGEgcHJvcGVydHkgaGFzIGJlZW4gYnJva2VuIHVwIGludG8KICBzdHJpbmdzIHRoYXQgY291bGQgY29udGFpbiBlc2NhcGVkIGNvbW1hcyB0byBwcmV2ZW50CiAgdGhlIGluYWR2ZXJ0YW50IHZlY3Rvcml6YXRpb24uPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCNjbGVhclByb3BlcnR5KGphdmEubGFuZy5TdHJpbmcpIj5jbGVhclByb3BlcnR5PC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwO0NsZWFyIGEgcHJvcGVydHkgaW4gdGhlIGNvbmZpZ3VyYXRpb24uPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCNjb21iaW5lKG9yZy5hcGFjaGUudmVsb2NpdHkucnVudGltZS5jb25maWd1cmF0aW9uLkNvbmZpZ3VyYXRpb24pIj5jb21iaW5lPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sIj5Db25maWd1cmF0aW9uPC9BPiZuYnNwO2MpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtDb21iaW5lcyBhbiBleGlzdGluZyBIYXNodGFibGUgd2l0aCB0aGlzIEhhc2h0YWJsZS48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwiPkNvbmZpZ3VyYXRpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sI2NvbnZlcnRQcm9wZXJ0aWVzKGphdmEudXRpbC5Qcm9wZXJ0aWVzKSI+Y29udmVydFByb3BlcnRpZXM8L0E+PC9CPihqYXZhLnV0aWwuUHJvcGVydGllcyZuYnNwO3ApPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtDb252ZXJ0IGEgc3RhbmRhcmQgcHJvcGVydGllcyBjbGFzcyBpbnRvIGEgY29uZmlndXJhdGlvbgogY2xhc3MuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCNkaXNwbGF5KCkiPmRpc3BsYXk8L0E+PC9CPigpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtEaXNwbGF5IHRoZSBjb25maWd1cmF0aW9uIGZvciBkZWJ1Z2dpbmcKIHB1cnBvc2VzLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwjZ2V0Qm9vbGVhbihqYXZhLmxhbmcuU3RyaW5nKSI+Z2V0Qm9vbGVhbjwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXkpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtHZXQgYSBib29sZWFuIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBrZXkuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCNnZXRCb29sZWFuKGphdmEubGFuZy5TdHJpbmcsIGJvb2xlYW4pIj5nZXRCb29sZWFuPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSwKICAgICAgICAgICBib29sZWFuJm5ic3A7ZGVmYXVsdFZhbHVlKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7R2V0IGEgYm9vbGVhbiBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24ga2V5LjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPiZuYnNwO2phdmEubGFuZy5Cb29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sI2dldEJvb2xlYW4oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLkJvb2xlYW4pIj5nZXRCb29sZWFuPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSwKICAgICAgICAgICBqYXZhLmxhbmcuQm9vbGVhbiZuYnNwO2RlZmF1bHRWYWx1ZSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwO0dldCBhIGJvb2xlYW4gYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIGtleS48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT4mbmJzcDtieXRlPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sI2dldEJ5dGUoamF2YS5sYW5nLlN0cmluZykiPmdldEJ5dGU8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7a2V5KTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7R2V0IGEgYnl0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24ga2V5LjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPiZuYnNwO2J5dGU8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwjZ2V0Qnl0ZShqYXZhLmxhbmcuU3RyaW5nLCBieXRlKSI+Z2V0Qnl0ZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXksCiAgICAgICAgYnl0ZSZuYnNwO2RlZmF1bHRWYWx1ZSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwO0dldCBhIGJ5dGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIGtleS48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT4mbmJzcDtqYXZhLmxhbmcuQnl0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCNnZXRCeXRlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5CeXRlKSI+Z2V0Qnl0ZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXksCiAgICAgICAgamF2YS5sYW5nLkJ5dGUmbmJzcDtkZWZhdWx0VmFsdWUpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtHZXQgYSBieXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBrZXkuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+Jm5ic3A7ZG91YmxlPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sI2dldERvdWJsZShqYXZhLmxhbmcuU3RyaW5nKSI+Z2V0RG91YmxlPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwO0dldCBhIGRvdWJsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24ga2V5LjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPiZuYnNwO2RvdWJsZTwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCNnZXREb3VibGUoamF2YS5sYW5nLlN0cmluZywgZG91YmxlKSI+Z2V0RG91YmxlPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSwKICAgICAgICAgIGRvdWJsZSZuYnNwO2RlZmF1bHRWYWx1ZSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwO0dldCBhIGRvdWJsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24ga2V5LjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPiZuYnNwO2phdmEubGFuZy5Eb3VibGU8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwjZ2V0RG91YmxlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5Eb3VibGUpIj5nZXREb3VibGU8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7a2V5LAogICAgICAgICAgamF2YS5sYW5nLkRvdWJsZSZuYnNwO2RlZmF1bHRWYWx1ZSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwO0dldCBhIGRvdWJsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24ga2V5LjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPiZuYnNwO29yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5FeHRlbmRlZFByb3BlcnRpZXM8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwjZ2V0RXh0ZW5kZWRQcm9wZXJ0aWVzKCkiPmdldEV4dGVuZGVkUHJvcGVydGllczwvQT48L0I+KCk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPkRvIG5vdCB1c2UuICBGb3IgZGVwcmVjYXRpb24gYXNzaXN0YW5jZSBvbmx5LjwvST48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT4mbmJzcDtmbG9hdDwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCNnZXRGbG9hdChqYXZhLmxhbmcuU3RyaW5nKSI+Z2V0RmxvYXQ8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7a2V5KTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7R2V0IGEgZmxvYXQgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIGtleS48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT4mbmJzcDtmbG9hdDwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCNnZXRGbG9hdChqYXZhLmxhbmcuU3RyaW5nLCBmbG9hdCkiPmdldEZsb2F0PC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSwKICAgICAgICAgZmxvYXQmbmJzcDtkZWZhdWx0VmFsdWUpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtHZXQgYSBmbG9hdCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24ga2V5LjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPiZuYnNwO2phdmEubGFuZy5GbG9hdDwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCNnZXRGbG9hdChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuRmxvYXQpIj5nZXRGbG9hdDwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXksCiAgICAgICAgIGphdmEubGFuZy5GbG9hdCZuYnNwO2RlZmF1bHRWYWx1ZSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwO0dldCBhIGZsb2F0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBrZXkuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+Jm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCNnZXRJbmNsdWRlKCkiPmdldEluY2x1ZGU8L0E+PC9CPigpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtHZXRzIHRoZSBwcm9wZXJ0eSB2YWx1ZSBmb3IgaW5jbHVkaW5nIG90aGVyIHByb3BlcnRpZXMgZmlsZXMuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sI2dldEludChqYXZhLmxhbmcuU3RyaW5nKSI+Z2V0SW50PC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO25hbWUpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtUaGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBnZXQgdGhlIGNvbmZpZ3VyYXRpb24gcmVzb3VyY2UKIHdpdGggdGhlIGdpdmVuIG5hbWUgYXMgYW4gaW50ZWdlci48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwjZ2V0SW50KGphdmEubGFuZy5TdHJpbmcsIGludCkiPmdldEludDwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtuYW1lLAogICAgICAgaW50Jm5ic3A7ZGVmKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7VGhlIHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG8gZ2V0IHRoZSBjb25maWd1cmF0aW9uIHJlc291cmNlCiB3aXRoIHRoZSBnaXZlbiBuYW1lIGFzIGFuIGludGVnZXIsIG9yIGEgZGVmYXVsdCB2YWx1ZS48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwjZ2V0SW50ZWdlcihqYXZhLmxhbmcuU3RyaW5nKSI+Z2V0SW50ZWdlcjwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXkpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtHZXQgYSBpbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIGtleS48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwjZ2V0SW50ZWdlcihqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIj5nZXRJbnRlZ2VyPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSwKICAgICAgICAgICBpbnQmbmJzcDtkZWZhdWx0VmFsdWUpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtHZXQgYSBpbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIGtleS48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT4mbmJzcDtqYXZhLmxhbmcuSW50ZWdlcjwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCNnZXRJbnRlZ2VyKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5JbnRlZ2VyKSI+Z2V0SW50ZWdlcjwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXksCiAgICAgICAgICAgamF2YS5sYW5nLkludGVnZXImbmJzcDtkZWZhdWx0VmFsdWUpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtHZXQgYSBpbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIGtleS48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT4mbmJzcDtqYXZhLnV0aWwuSXRlcmF0b3I8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwjZ2V0S2V5cygpIj5nZXRLZXlzPC9BPjwvQj4oKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7R2V0IHRoZSBsaXN0IG9mIHRoZSBrZXlzIGNvbnRhaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbgogcmVwb3NpdG9yeS48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT4mbmJzcDtqYXZhLnV0aWwuSXRlcmF0b3I8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwjZ2V0S2V5cyhqYXZhLmxhbmcuU3RyaW5nKSI+Z2V0S2V5czwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtwcmVmaXgpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtHZXQgdGhlIGxpc3Qgb2YgdGhlIGtleXMgY29udGFpbmVkIGluIHRoZSBjb25maWd1cmF0aW9uCiByZXBvc2l0b3J5IHRoYXQgbWF0Y2ggdGhlIHNwZWNpZmllZCBwcmVmaXguPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+Jm5ic3A7bG9uZzwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCNnZXRMb25nKGphdmEubGFuZy5TdHJpbmcpIj5nZXRMb25nPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwO0dldCBhIGxvbmcgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIGtleS48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT4mbmJzcDtsb25nPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sI2dldExvbmcoamF2YS5sYW5nLlN0cmluZywgbG9uZykiPmdldExvbmc8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7a2V5LAogICAgICAgIGxvbmcmbmJzcDtkZWZhdWx0VmFsdWUpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtHZXQgYSBsb25nIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBrZXkuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+Jm5ic3A7amF2YS5sYW5nLkxvbmc8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwjZ2V0TG9uZyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuTG9uZykiPmdldExvbmc8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7a2V5LAogICAgICAgIGphdmEubGFuZy5Mb25nJm5ic3A7ZGVmYXVsdFZhbHVlKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7R2V0IGEgbG9uZyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24ga2V5LjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPiZuYnNwO2phdmEudXRpbC5Qcm9wZXJ0aWVzPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sI2dldFByb3BlcnRpZXMoamF2YS5sYW5nLlN0cmluZykiPmdldFByb3BlcnRpZXM8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7a2V5KTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7R2V0IGEgbGlzdCBvZiBwcm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4KIGNvbmZpZ3VyYXRpb24ga2V5LjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPiZuYnNwO2phdmEudXRpbC5Qcm9wZXJ0aWVzPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sI2dldFByb3BlcnRpZXMoamF2YS5sYW5nLlN0cmluZywgamF2YS51dGlsLlByb3BlcnRpZXMpIj5nZXRQcm9wZXJ0aWVzPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSwKICAgICAgICAgICAgICBqYXZhLnV0aWwuUHJvcGVydGllcyZuYnNwO2RlZmF1bHRzKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7R2V0IGEgbGlzdCBvZiBwcm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4KIGNvbmZpZ3VyYXRpb24ga2V5LjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPiZuYnNwO2phdmEubGFuZy5PYmplY3Q8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwjZ2V0UHJvcGVydHkoamF2YS5sYW5nLlN0cmluZykiPmdldFByb3BlcnR5PC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwO0dldHMgYSBwcm9wZXJ0eSBmcm9tIHRoZSBjb25maWd1cmF0aW9uLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPiZuYnNwO3Nob3J0PC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sI2dldFNob3J0KGphdmEubGFuZy5TdHJpbmcpIj5nZXRTaG9ydDwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXkpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtHZXQgYSBzaG9ydCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24ga2V5LjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPiZuYnNwO3Nob3J0PC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sI2dldFNob3J0KGphdmEubGFuZy5TdHJpbmcsIHNob3J0KSI+Z2V0U2hvcnQ8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7a2V5LAogICAgICAgICBzaG9ydCZuYnNwO2RlZmF1bHRWYWx1ZSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwO0dldCBhIHNob3J0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBrZXkuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+Jm5ic3A7amF2YS5sYW5nLlNob3J0PC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sI2dldFNob3J0KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TaG9ydCkiPmdldFNob3J0PC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSwKICAgICAgICAgamF2YS5sYW5nLlNob3J0Jm5ic3A7ZGVmYXVsdFZhbHVlKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7R2V0IGEgc2hvcnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIGtleS48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT4mbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sI2dldFN0cmluZyhqYXZhLmxhbmcuU3RyaW5nKSI+Z2V0U3RyaW5nPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwO0dldCBhIHN0cmluZyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24ga2V5LjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwjZ2V0U3RyaW5nKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj5nZXRTdHJpbmc8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7a2V5LAogICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2RlZmF1bHRWYWx1ZSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwO0dldCBhIHN0cmluZyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24ga2V5LjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPiZuYnNwO2phdmEubGFuZy5TdHJpbmdbXTwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCNnZXRTdHJpbmdBcnJheShqYXZhLmxhbmcuU3RyaW5nKSI+Z2V0U3RyaW5nQXJyYXk8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7a2V5KTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7R2V0IGFuIGFycmF5IG9mIHN0cmluZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uCiBrZXkuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+Jm5ic3A7amF2YS51dGlsLlZlY3RvcjwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCNnZXRWZWN0b3IoamF2YS5sYW5nLlN0cmluZykiPmdldFZlY3RvcjwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXkpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtHZXQgYSBWZWN0b3Igb2Ygc3RyaW5ncyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24KIGtleS48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT4mbmJzcDtqYXZhLnV0aWwuVmVjdG9yPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sI2dldFZlY3RvcihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLnV0aWwuVmVjdG9yKSI+Z2V0VmVjdG9yPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSwKICAgICAgICAgIGphdmEudXRpbC5WZWN0b3ImbmJzcDtkZWZhdWx0VmFsdWUpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtHZXQgYSBWZWN0b3Igb2Ygc3RyaW5ncyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24KIGtleS48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5wcml2YXRlICZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwjaW5pdChvcmcuYXBhY2hlLnZlbG9jaXR5LnJ1bnRpbWUuY29uZmlndXJhdGlvbi5Db25maWd1cmF0aW9uKSI+aW5pdDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCI+Q29uZmlndXJhdGlvbjwvQT4mbmJzcDtleHApPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtQcml2YXRlIGluaXRpYWxpemVyIG1ldGhvZCB0aGF0IHNldHMgdXAgdGhlIGdlbmVyaWMKIHJlc291cmNlcy48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sI2lzSW5pdGlhbGl6ZWQoKSI+aXNJbml0aWFsaXplZDwvQT48L0I+KCk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwO0luZGljYXRlIHRvIGNsaWVudCBjb2RlIHdoZXRoZXIgcHJvcGVydHkKIHJlc291cmNlcyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgb3Igbm90LjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwjbG9hZChqYXZhLmlvLklucHV0U3RyZWFtKSI+bG9hZDwvQT48L0I+KGphdmEuaW8uSW5wdXRTdHJlYW0mbmJzcDtpbnB1dCk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwO0xvYWQgdGhlIHByb3BlcnRpZXMgZnJvbSB0aGUgZ2l2ZW4gaW5wdXQgc3RyZWFtLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSwgamF2YS5sYW5nLlN0cmluZykiPnNhdmU8L0E+PC9CPihqYXZhLmlvLk91dHB1dFN0cmVhbSZuYnNwO291dHB1dCwKICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7SGVhZGVyKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7U2F2ZSB0aGUgcHJvcGVydGllcyB0byB0aGUgZ2l2ZW4gb3V0cHV0c3RyZWFtLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwjc2V0SW5jbHVkZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0SW5jbHVkZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtpbmMpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtTZXRzIHRoZSBwcm9wZXJ0eSB2YWx1ZSBmb3IgaW5jbHVkaW5nIG90aGVyIHByb3BlcnRpZXMgZmlsZXMuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCNzZXRQcm9wZXJ0eShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0KSI+c2V0UHJvcGVydHk8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7a2V5LAogICAgICAgICAgICBqYXZhLmxhbmcuT2JqZWN0Jm5ic3A7dmFsdWUpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtTZXQgYSBwcm9wZXJ0eSwgdGhpcyB3aWxsIHJlcGxhY2UgYW55IHByZXZpb3VzbHkKIHNldCB2YWx1ZXMuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS92ZWxvY2l0eS9ydW50aW1lL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi5odG1sIj5Db25maWd1cmF0aW9uPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCNzdWJzZXQoamF2YS5sYW5nLlN0cmluZykiPnN1YnNldDwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtwcmVmaXgpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtDcmVhdGUgYSBDb25maWd1cmF0aW9ucyBvYmplY3QgdGhhdCBpcyBhIHN1YnNldAogb2YgdGhpcyBvbmUuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+Jm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCN0ZXN0Qm9vbGVhbihqYXZhLmxhbmcuU3RyaW5nKSI+dGVzdEJvb2xlYW48L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dmFsdWUpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDtUZXN0IHdoZXRoZXIgdGhlIHN0cmluZyByZXByZXNlbnQgYnkgdmFsdWUgbWFwcyB0byBhIGJvb2xlYW4KIHZhbHVlIG9yIG5vdC48L1REPgo8L1RSPgo8L1RBQkxFPgombmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEudXRpbC5IYXNodGFibGUiPjwhLS0gLS0+PC9BPgo8VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+CjxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEudXRpbC5IYXNodGFibGU8L0I+PC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURD48Q09ERT48Y2xpbml0PiwgY2xlYXIsIGNsb25lLCBjb250YWlucywgY29udGFpbnNLZXksIGNvbnRhaW5zVmFsdWUsIGVsZW1lbnRzLCBlbnRyeVNldCwgZXF1YWxzLCBnZXQsIGdldEVudW1lcmF0aW9uLCBnZXRJdGVyYXRvciwgaGFzaENvZGUsIGlzRW1wdHksIGtleXMsIGtleVNldCwgcHV0LCBwdXRBbGwsIHJlYWRPYmplY3QsIHJlaGFzaCwgcmVtb3ZlLCBzaXplLCB0b1N0cmluZywgdmFsdWVzLCB3cml0ZU9iamVjdDwvQ09ERT48L1REPgo8L1RSPgo8L1RBQkxFPgombmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgo8VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+CjxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy5PYmplY3Q8L0I+PC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURD48Q09ERT5maW5hbGl6ZSwgZ2V0Q2xhc3MsIG5vdGlmeSwgbm90aWZ5QWxsLCByZWdpc3Rlck5hdGl2ZXMsIHdhaXQsIHdhaXQsIHdhaXQ8L0NPREU+PC9URD4KPC9UUj4KPC9UQUJMRT4KJm5ic3A7CjxQPgoKPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgoKPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+CjxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgo8VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1REPgo8L1RSPgo8L1RBQkxFPgoKPEEgTkFNRT0iZGVwcmVjYXRpb25DcnV0Y2giPjwhLS0gLS0+PC9BPjxIMz4KZGVwcmVjYXRpb25DcnV0Y2g8L0gzPgo8UFJFPgpwcml2YXRlIG9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5FeHRlbmRlZFByb3BlcnRpZXMgPEI+ZGVwcmVjYXRpb25DcnV0Y2g8L0I+PC9QUkU+CjxETD4KPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzwvREw+CjxIUj4KCjxBIE5BTUU9ImRlZmF1bHRzIj48IS0tIC0tPjwvQT48SDM+CmRlZmF1bHRzPC9IMz4KPFBSRT4KcHJpdmF0ZSA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwiPkNvbmZpZ3VyYXRpb248L0E+IDxCPmRlZmF1bHRzPC9CPjwvUFJFPgo8REw+CjxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8REQ+RGVmYXVsdCBjb25maWd1cmF0aW9ucyByZXBvc2l0b3J5LjwvREw+CjxIUj4KCjxBIE5BTUU9ImZpbGUiPjwhLS0gLS0+PC9BPjxIMz4KZmlsZTwvSDM+CjxQUkU+CnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIDxCPmZpbGU8L0I+PC9QUkU+CjxETD4KPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxERD5UaGUgZmlsZSBjb25uZWN0ZWQgdG8gdGhpcyByZXBvc2l0b3J5IChob2xkaW5nIGNvbW1lbnRzIGFuZAogc3VjaCkuPC9ETD4KPEhSPgoKPEEgTkFNRT0iYmFzZVBhdGgiPjwhLS0gLS0+PC9BPjxIMz4KYmFzZVBhdGg8L0gzPgo8UFJFPgpwcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyA8Qj5iYXNlUGF0aDwvQj48L1BSRT4KPERMPgo8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEREPkJhc2UgcGF0aCBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHVzZWQgdG8gY3JlYXRlCiB0aGlzIENvbmZpZ3VyYXRpb24gb2JqZWN0LjwvREw+CjxIUj4KCjxBIE5BTUU9ImZpbGVTZXBhcmF0b3IiPjwhLS0gLS0+PC9BPjxIMz4KZmlsZVNlcGFyYXRvcjwvSDM+CjxQUkU+CnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIDxCPmZpbGVTZXBhcmF0b3I8L0I+PC9QUkU+CjxETD4KPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxERD5GaWxlIHNlcGFyYXRvci48L0RMPgo8SFI+Cgo8QSBOQU1FPSJpc0luaXRpYWxpemVkIj48IS0tIC0tPjwvQT48SDM+CmlzSW5pdGlhbGl6ZWQ8L0gzPgo8UFJFPgpwcm90ZWN0ZWQgYm9vbGVhbiA8Qj5pc0luaXRpYWxpemVkPC9CPjwvUFJFPgo8REw+CjxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8REQ+SGFzIHRoaXMgY29uZmlndXJhdGlvbiBiZWVuIGludGlhbGl6ZWQuPC9ETD4KPEhSPgoKPEEgTkFNRT0iaW5jbHVkZSI+PCEtLSAtLT48L0E+PEgzPgppbmNsdWRlPC9IMz4KPFBSRT4KcHJvdGVjdGVkIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nIDxCPmluY2x1ZGU8L0I+PC9QUkU+CjxETD4KPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxERD5UaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNhbiBwb2ludCB0byBvdGhlcgogcHJvcGVydGllcyBmaWxlIGZvciBpbmNsdWRpbmcgb3RoZXIgcHJvcGVydGllcyBmaWxlcy48L0RMPgo8SFI+Cgo8QSBOQU1FPSJrZXlzQXNMaXN0ZWQiPjwhLS0gLS0+PC9BPjxIMz4Ka2V5c0FzTGlzdGVkPC9IMz4KPFBSRT4KcHJvdGVjdGVkIGphdmEudXRpbC5BcnJheUxpc3QgPEI+a2V5c0FzTGlzdGVkPC9CPjwvUFJFPgo8REw+CjxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8REQ+VGhlc2UgYXJlIHRoZSBrZXlzIGluIHRoZSBvcmRlciB0aGV5IGxpc3RlZAogaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gVGhpcyBpcyB1c2VmdWwgd2hlbgogeW91IHdpc2ggdG8gcGVyZm9ybSBvcGVyYXRpb25zIHdpdGggY29uZmlndXJhdGlvbgogaW5mb3JtYXRpb24gaW4gYSBwYXJ0aWN1bGFyIG9yZGVyLjwvREw+Cgo8IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Cgo8QSBOQU1FPSJjb25zdHJ1Y3Rvcl9kZXRhaWwiPjwhLS0gLS0+PC9BPgo8VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+CjxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgo8Qj5Db25zdHJ1Y3RvciBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+CjwvVFI+CjwvVEFCTEU+Cgo8QSBOQU1FPSJDb25maWd1cmF0aW9uKCkiPjwhLS0gLS0+PC9BPjxIMz4KQ29uZmlndXJhdGlvbjwvSDM+CjxQUkU+CnB1YmxpYyA8Qj5Db25maWd1cmF0aW9uPC9CPigpPC9QUkU+CjxETD4KPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxERD5DcmVhdGVzIGFuIGVtcHR5IGV4dGVuZGVkIHByb3BlcnRpZXMgb2JqZWN0LjwvREw+CjxIUj4KCjxBIE5BTUU9IkNvbmZpZ3VyYXRpb24oamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KQ29uZmlndXJhdGlvbjwvSDM+CjxQUkU+CnB1YmxpYyA8Qj5Db25maWd1cmF0aW9uPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7ZmlsZSkKICAgICAgICAgICAgICB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbjwvUFJFPgo8REw+CjxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8REQ+Q3JlYXRlcyBhbmQgbG9hZHMgdGhlIGV4dGVuZGVkIHByb3BlcnRpZXMgZnJvbSB0aGUgc3BlY2lmaWVkCiBmaWxlLjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+ZmlsZTwvQ09ERT4gLSBBIFN0cmluZy48RFQ+PEI+VGhyb3dzOjwvQj48REQ+PENPREU+SU9FeGNlcHRpb24uPC9DT0RFPiAtICZuYnNwOzwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9IkNvbmZpZ3VyYXRpb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KQ29uZmlndXJhdGlvbjwvSDM+CjxQUkU+CnB1YmxpYyA8Qj5Db25maWd1cmF0aW9uPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7ZmlsZSwKICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2RlZmF1bHRGaWxlKQogICAgICAgICAgICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uPC9QUkU+CjxETD4KPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxERD5DcmVhdGVzIGFuZCBsb2FkcyB0aGUgZXh0ZW5kZWQgcHJvcGVydGllcyBmcm9tIHRoZSBzcGVjaWZpZWQKIGZpbGUuPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5maWxlPC9DT0RFPiAtIEEgU3RyaW5nLjxEVD48Qj5UaHJvd3M6PC9CPjxERD48Q09ERT5JT0V4Y2VwdGlvbi48L0NPREU+IC0gJm5ic3A7PC9ETD4KPC9ERD4KPC9ETD4KCjwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KCjxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgo8VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+CjxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgo8Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgo8L1RSPgo8L1RBQkxFPgoKPEEgTkFNRT0iaW5pdChvcmcuYXBhY2hlLnZlbG9jaXR5LnJ1bnRpbWUuY29uZmlndXJhdGlvbi5Db25maWd1cmF0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgppbml0PC9IMz4KPFBSRT4KcHJpdmF0ZSB2b2lkIDxCPmluaXQ8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCI+Q29uZmlndXJhdGlvbjwvQT4mbmJzcDtleHApCiAgICAgICAgICAgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb248L1BSRT4KPERMPgo8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEREPlByaXZhdGUgaW5pdGlhbGl6ZXIgbWV0aG9kIHRoYXQgc2V0cyB1cCB0aGUgZ2VuZXJpYwogcmVzb3VyY2VzLjxERD48REw+CjxEVD48Qj5UaHJvd3M6PC9CPjxERD48Q09ERT5JT0V4Y2VwdGlvbiw8L0NPREU+IC0gaWYgdGhlcmUgd2FzIGFuIEkvTyBwcm9ibGVtLjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImlzSW5pdGlhbGl6ZWQoKSI+PCEtLSAtLT48L0E+PEgzPgppc0luaXRpYWxpemVkPC9IMz4KPFBSRT4KcHVibGljIGJvb2xlYW4gPEI+aXNJbml0aWFsaXplZDwvQj4oKTwvUFJFPgo8REw+CjxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8REQ+SW5kaWNhdGUgdG8gY2xpZW50IGNvZGUgd2hldGhlciBwcm9wZXJ0eQogcmVzb3VyY2VzIGhhdmUgYmVlbiBpbml0aWFsaXplZCBvciBub3QuPC9ETD4KPEhSPgoKPEEgTkFNRT0iZ2V0SW5jbHVkZSgpIj48IS0tIC0tPjwvQT48SDM+CmdldEluY2x1ZGU8L0gzPgo8UFJFPgpwdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8Qj5nZXRJbmNsdWRlPC9CPigpPC9QUkU+CjxETD4KPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxERD5HZXRzIHRoZSBwcm9wZXJ0eSB2YWx1ZSBmb3IgaW5jbHVkaW5nIG90aGVyIHByb3BlcnRpZXMgZmlsZXMuCiBCeSBkZWZhdWx0IGl0IGlzICJpbmNsdWRlIi48REQ+PERMPgo8RFQ+PEI+UmV0dXJuczo8L0I+PEREPkEgU3RyaW5nLjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9InNldEluY2x1ZGUoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4Kc2V0SW5jbHVkZTwvSDM+CjxQUkU+CnB1YmxpYyB2b2lkIDxCPnNldEluY2x1ZGU8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtpbmMpPC9QUkU+CjxETD4KPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxERD5TZXRzIHRoZSBwcm9wZXJ0eSB2YWx1ZSBmb3IgaW5jbHVkaW5nIG90aGVyIHByb3BlcnRpZXMgZmlsZXMuCiBCeSBkZWZhdWx0IGl0IGlzICJpbmNsdWRlIi48REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmluYzwvQ09ERT4gLSBBIFN0cmluZy48L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJsb2FkKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+CmxvYWQ8L0gzPgo8UFJFPgpwdWJsaWMgdm9pZCA8Qj5sb2FkPC9CPihqYXZhLmlvLklucHV0U3RyZWFtJm5ic3A7aW5wdXQpCiAgICAgICAgICB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbjwvUFJFPgo8REw+CjxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8REQ+TG9hZCB0aGUgcHJvcGVydGllcyBmcm9tIHRoZSBnaXZlbiBpbnB1dCBzdHJlYW0uPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5pbnB1dDwvQ09ERT4gLSBBbiBJbnB1dFN0cmVhbS48RFQ+PEI+VGhyb3dzOjwvQj48REQ+PENPREU+SU9FeGNlcHRpb24uPC9DT0RFPiAtICZuYnNwOzwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImdldFByb3BlcnR5KGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+CmdldFByb3BlcnR5PC9IMz4KPFBSRT4KcHVibGljIGphdmEubGFuZy5PYmplY3QgPEI+Z2V0UHJvcGVydHk8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXkpPC9QUkU+CjxETD4KPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxERD5HZXRzIGEgcHJvcGVydHkgZnJvbSB0aGUgY29uZmlndXJhdGlvbi48REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmtleTwvQ09ERT4gLSBwcm9wZXJ0eSB0byByZXRyaWV2ZTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dmFsdWUgYXMgb2JqZWN0LiBXaWxsIHJldHVybiB1c2VyIHZhbHVlIGlmIGV4aXN0cywKICAgICAgICAgIGlmIG5vdCB0aGVuIGRlZmF1bHQgdmFsdWUgaWYgZXhpc3RzLCBvdGhlcndpc2UgbnVsbDwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImFkZFByb3BlcnR5KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+CmFkZFByb3BlcnR5PC9IMz4KPFBSRT4KcHVibGljIHZvaWQgPEI+YWRkUHJvcGVydHk8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXksCiAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5PYmplY3QmbmJzcDt0b2tlbik8L1BSRT4KPERMPgo8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEREPkFkZCBhIHByb3BlcnR5IHRvIHRoZSBjb25maWd1cmF0aW9uLiBJZiBpdCBhbHJlYWR5CiBleGlzdHMgdGhlbiB0aGUgdmFsdWUgc3RhdGVkIGhlcmUgd2lsbCBiZSBhZGRlZAogdG8gdGhlIGNvbmZpZ3VyYXRpb24gZW50cnkuIEZvciBleGFtcGxlLCBpZgoKIHJlc291cmNlLmxvYWRlciA9IGZpbGUKCiBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHlvdQoKIGFkZFByb3BlcnR5KCJyZXNvdXJjZS5sb2FkZXIiLCAiY2xhc3NwYXRoIikKCiBUaGVuIHlvdSB3aWxsIGVuZCB1cCB3aXRoIGEgVmVjdG9yIGxpa2UgdGhlCiBmb2xsb3dpbmc6CgogWyJmaWxlIiwgImNsYXNzcGF0aCJdPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5TdHJpbmc8L0NPREU+IC0ga2V5PEREPjxDT0RFPlN0cmluZzwvQ09ERT4gLSB2YWx1ZTwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImFkZFN0cmluZ1Byb3BlcnR5KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+CmFkZFN0cmluZ1Byb3BlcnR5PC9IMz4KPFBSRT4KcHJpdmF0ZSB2b2lkIDxCPmFkZFN0cmluZ1Byb3BlcnR5PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7a2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO3Rva2VuKTwvUFJFPgo8REw+CjxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8REQ+U2V0cyBhIHN0cmluZyBwcm9wZXJ0eSB3L28gY2hlY2tpbmcgZm9yIGNvbW1hcyAtIHVzZWQKICBpbnRlcm5hbGx5IHdoZW4gYSBwcm9wZXJ0eSBoYXMgYmVlbiBicm9rZW4gdXAgaW50bwogIHN0cmluZ3MgdGhhdCBjb3VsZCBjb250YWluIGVzY2FwZWQgY29tbWFzIHRvIHByZXZlbnQKICB0aGUgaW5hZHZlcnRhbnQgdmVjdG9yaXphdGlvbi4KCiAgVGhhbmtzIHRvIExlb24gTWVzc2Vyc2NobWlkdCBmb3IgdGhpcyBvbmUuPC9ETD4KPEhSPgoKPEEgTkFNRT0ic2V0UHJvcGVydHkoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4Kc2V0UHJvcGVydHk8L0gzPgo8UFJFPgpwdWJsaWMgdm9pZCA8Qj5zZXRQcm9wZXJ0eTwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLk9iamVjdCZuYnNwO3ZhbHVlKTwvUFJFPgo8REw+CjxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8REQ+U2V0IGEgcHJvcGVydHksIHRoaXMgd2lsbCByZXBsYWNlIGFueSBwcmV2aW91c2x5CiBzZXQgdmFsdWVzLiBTZXQgdmFsdWVzIGlzIGltcGxpY2l0bHkgYSBjYWxsCiB0byBjbGVhclByb3BlcnR5KGtleSksIGFkZFByb3BlcnR5KGtleSx2YWx1ZSkuPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5TdHJpbmc8L0NPREU+IC0ga2V5PEREPjxDT0RFPlN0cmluZzwvQ09ERT4gLSB2YWx1ZTwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9InNhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0sIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+CnNhdmU8L0gzPgo8UFJFPgpwdWJsaWMgdm9pZCA8Qj5zYXZlPC9CPihqYXZhLmlvLk91dHB1dFN0cmVhbSZuYnNwO291dHB1dCwKICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7SGVhZGVyKQogICAgICAgICAgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb248L1BSRT4KPERMPgo8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEREPlNhdmUgdGhlIHByb3BlcnRpZXMgdG8gdGhlIGdpdmVuIG91dHB1dHN0cmVhbS48REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm91dHB1dDwvQ09ERT4gLSBBbiBPdXRwdXRTdHJlYW0uPEREPjxDT0RFPmhlYWRlcjwvQ09ERT4gLSBBIFN0cmluZy48RFQ+PEI+VGhyb3dzOjwvQj48REQ+PENPREU+SU9FeGNlcHRpb24uPC9DT0RFPiAtICZuYnNwOzwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImNvbWJpbmUob3JnLmFwYWNoZS52ZWxvY2l0eS5ydW50aW1lLmNvbmZpZ3VyYXRpb24uQ29uZmlndXJhdGlvbikiPjwhLS0gLS0+PC9BPjxIMz4KY29tYmluZTwvSDM+CjxQUkU+CnB1YmxpYyB2b2lkIDxCPmNvbWJpbmU8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCI+Q29uZmlndXJhdGlvbjwvQT4mbmJzcDtjKTwvUFJFPgo8REw+CjxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8REQ+Q29tYmluZXMgYW4gZXhpc3RpbmcgSGFzaHRhYmxlIHdpdGggdGhpcyBIYXNodGFibGUuCgogV2FybmluZzogSXQgd2lsbCBvdmVyd3JpdGUgcHJldmlvdXMgZW50cmllcyB3aXRob3V0IHdhcm5pbmcuPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5Db25maWd1cmF0aW9uPC9DT0RFPiAtICZuYnNwOzwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImNsZWFyUHJvcGVydHkoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KY2xlYXJQcm9wZXJ0eTwvSDM+CjxQUkU+CnB1YmxpYyB2b2lkIDxCPmNsZWFyUHJvcGVydHk8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXkpPC9QUkU+CjxETD4KPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxERD5DbGVhciBhIHByb3BlcnR5IGluIHRoZSBjb25maWd1cmF0aW9uLjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+U3RyaW5nPC9DT0RFPiAtIGtleSB0byByZW1vdmUgYWxvbmcgd2l0aCBjb3JyZXNwb25kaW5nIHZhbHVlLjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImdldEtleXMoKSI+PCEtLSAtLT48L0E+PEgzPgpnZXRLZXlzPC9IMz4KPFBSRT4KcHVibGljIGphdmEudXRpbC5JdGVyYXRvciA8Qj5nZXRLZXlzPC9CPigpPC9QUkU+CjxETD4KPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxERD5HZXQgdGhlIGxpc3Qgb2YgdGhlIGtleXMgY29udGFpbmVkIGluIHRoZSBjb25maWd1cmF0aW9uCiByZXBvc2l0b3J5LjxERD48REw+CjxEVD48Qj5SZXR1cm5zOjwvQj48REQ+QW4gSXRlcmF0b3IuPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iZ2V0S2V5cyhqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgpnZXRLZXlzPC9IMz4KPFBSRT4KcHVibGljIGphdmEudXRpbC5JdGVyYXRvciA8Qj5nZXRLZXlzPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7cHJlZml4KTwvUFJFPgo8REw+CjxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8REQ+R2V0IHRoZSBsaXN0IG9mIHRoZSBrZXlzIGNvbnRhaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbgogcmVwb3NpdG9yeSB0aGF0IG1hdGNoIHRoZSBzcGVjaWZpZWQgcHJlZml4LjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cHJlZml4PC9DT0RFPiAtIFRoZSBwcmVmaXggdG8gdGVzdCBhZ2FpbnN0LjxEVD48Qj5SZXR1cm5zOjwvQj48REQ+QW4gSXRlcmF0b3Igb2Yga2V5cyB0aGF0IG1hdGNoIHRoZSBwcmVmaXguPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0ic3Vic2V0KGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+CnN1YnNldDwvSDM+CjxQUkU+CnB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLmh0bWwiPkNvbmZpZ3VyYXRpb248L0E+IDxCPnN1YnNldDwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3ByZWZpeCk8L1BSRT4KPERMPgo8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEREPkNyZWF0ZSBhIENvbmZpZ3VyYXRpb25zIG9iamVjdCB0aGF0IGlzIGEgc3Vic2V0CiBvZiB0aGlzIG9uZS4gVGFrZSBpbnRvIGFjY291bnQgZHVwbGljYXRlIGtleXMKIGJ5IHVzaW5nIHRoZSBzZXRQcm9wZXJ0eSgpIGluIENvbmZpZ3VyYXRpb24uPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5TdHJpbmc8L0NPREU+IC0gcHJlZml4PC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iZGlzcGxheSgpIj48IS0tIC0tPjwvQT48SDM+CmRpc3BsYXk8L0gzPgo8UFJFPgpwdWJsaWMgdm9pZCA8Qj5kaXNwbGF5PC9CPigpPC9QUkU+CjxETD4KPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxERD5EaXNwbGF5IHRoZSBjb25maWd1cmF0aW9uIGZvciBkZWJ1Z2dpbmcKIHB1cnBvc2VzLjwvREw+CjxIUj4KCjxBIE5BTUU9ImdldFN0cmluZyhqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgpnZXRTdHJpbmc8L0gzPgo8UFJFPgpwdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8Qj5nZXRTdHJpbmc8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXkpPC9QUkU+CjxETD4KPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxERD5HZXQgYSBzdHJpbmcgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIGtleS48REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmtleTwvQ09ERT4gLSBUaGUgY29uZmlndXJhdGlvbiBrZXkuPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgYXNzb2NpYXRlZCBzdHJpbmcuPERUPjxCPlRocm93czo8L0I+PEREPjxDT0RFPkNsYXNzQ2FzdEV4Y2VwdGlvbjwvQ09ERT4gLSBpcyB0aHJvd24gaWYgdGhlIGtleSBtYXBzIHRvIGFuCiBvYmplY3QgdGhhdCBpcyBub3QgYSBTdHJpbmcuPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iZ2V0U3RyaW5nKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+CmdldFN0cmluZzwvSDM+CjxQUkU+CnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxCPmdldFN0cmluZzwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcmbmJzcDtkZWZhdWx0VmFsdWUpPC9QUkU+CjxETD4KPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxERD5HZXQgYSBzdHJpbmcgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIGtleS48REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmtleTwvQ09ERT4gLSBUaGUgY29uZmlndXJhdGlvbiBrZXkuPEREPjxDT0RFPmRlZmF1bHRWYWx1ZTwvQ09ERT4gLSBUaGUgZGVmYXVsdCB2YWx1ZS48RFQ+PEI+UmV0dXJuczo8L0I+PEREPlRoZSBhc3NvY2lhdGVkIHN0cmluZyBpZiBrZXkgaXMgZm91bmQsCiBkZWZhdWx0IHZhbHVlIG90aGVyd2lzZS48RFQ+PEI+VGhyb3dzOjwvQj48REQ+PENPREU+Q2xhc3NDYXN0RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUga2V5IG1hcHMgdG8gYW4KIG9iamVjdCB0aGF0IGlzIG5vdCBhIFN0cmluZy48L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJnZXRQcm9wZXJ0aWVzKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+CmdldFByb3BlcnRpZXM8L0gzPgo8UFJFPgpwdWJsaWMgamF2YS51dGlsLlByb3BlcnRpZXMgPEI+Z2V0UHJvcGVydGllczwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSk8L1BSRT4KPERMPgo8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEREPkdldCBhIGxpc3Qgb2YgcHJvcGVydGllcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuCiBjb25maWd1cmF0aW9uIGtleS48REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmtleTwvQ09ERT4gLSBUaGUgY29uZmlndXJhdGlvbiBrZXkuPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgYXNzb2NpYXRlZCBwcm9wZXJ0aWVzIGlmIGtleSBpcyBmb3VuZC48RFQ+PEI+VGhyb3dzOjwvQj48REQ+PENPREU+Q2xhc3NDYXN0RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUga2V5IG1hcHMgdG8gYW4KIG9iamVjdCB0aGF0IGlzIG5vdCBhIFN0cmluZy9WZWN0b3IuPEREPjxDT0RFPmphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb248L0NPREU+IC0gaWYgb25lIG9mIHRoZSB0b2tlbnMgaXMKIG1hbGZvcm1lZCAoZG9lcyBub3QgY29udGFpbiBhbiBlcXVhbHMgc2lnbikuPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iZ2V0UHJvcGVydGllcyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLnV0aWwuUHJvcGVydGllcykiPjwhLS0gLS0+PC9BPjxIMz4KZ2V0UHJvcGVydGllczwvSDM+CjxQUkU+CnB1YmxpYyBqYXZhLnV0aWwuUHJvcGVydGllcyA8Qj5nZXRQcm9wZXJ0aWVzPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7a2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuUHJvcGVydGllcyZuYnNwO2RlZmF1bHRzKTwvUFJFPgo8REw+CjxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8REQ+R2V0IGEgbGlzdCBvZiBwcm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4KIGNvbmZpZ3VyYXRpb24ga2V5LjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+a2V5PC9DT0RFPiAtIFRoZSBjb25maWd1cmF0aW9uIGtleS48RFQ+PEI+UmV0dXJuczo8L0I+PEREPlRoZSBhc3NvY2lhdGVkIHByb3BlcnRpZXMgaWYga2V5IGlzIGZvdW5kLjxEVD48Qj5UaHJvd3M6PC9CPjxERD48Q09ERT5DbGFzc0Nhc3RFeGNlcHRpb248L0NPREU+IC0gaXMgdGhyb3duIGlmIHRoZSBrZXkgbWFwcyB0byBhbgogb2JqZWN0IHRoYXQgaXMgbm90IGEgU3RyaW5nL1ZlY3Rvci48REQ+PENPREU+amF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvQ09ERT4gLSBpZiBvbmUgb2YgdGhlIHRva2VucyBpcwogbWFsZm9ybWVkIChkb2VzIG5vdCBjb250YWluIGFuIGVxdWFscyBzaWduKS48L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJnZXRTdHJpbmdBcnJheShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgpnZXRTdHJpbmdBcnJheTwvSDM+CjxQUkU+CnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gPEI+Z2V0U3RyaW5nQXJyYXk8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXkpPC9QUkU+CjxETD4KPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxERD5HZXQgYW4gYXJyYXkgb2Ygc3RyaW5ncyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24KIGtleS48REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmtleTwvQ09ERT4gLSBUaGUgY29uZmlndXJhdGlvbiBrZXkuPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgYXNzb2NpYXRlZCBzdHJpbmcgYXJyYXkgaWYga2V5IGlzIGZvdW5kLjxEVD48Qj5UaHJvd3M6PC9CPjxERD48Q09ERT5DbGFzc0Nhc3RFeGNlcHRpb248L0NPREU+IC0gaXMgdGhyb3duIGlmIHRoZSBrZXkgbWFwcyB0byBhbgogb2JqZWN0IHRoYXQgaXMgbm90IGEgU3RyaW5nL1ZlY3Rvci48L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJnZXRWZWN0b3IoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KZ2V0VmVjdG9yPC9IMz4KPFBSRT4KcHVibGljIGphdmEudXRpbC5WZWN0b3IgPEI+Z2V0VmVjdG9yPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7a2V5KTwvUFJFPgo8REw+CjxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8REQ+R2V0IGEgVmVjdG9yIG9mIHN0cmluZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uCiBrZXkuPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5rZXk8L0NPREU+IC0gVGhlIGNvbmZpZ3VyYXRpb24ga2V5LjxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIGFzc29jaWF0ZWQgVmVjdG9yLjxEVD48Qj5UaHJvd3M6PC9CPjxERD48Q09ERT5DbGFzc0Nhc3RFeGNlcHRpb248L0NPREU+IC0gaXMgdGhyb3duIGlmIHRoZSBrZXkgbWFwcyB0byBhbgogb2JqZWN0IHRoYXQgaXMgbm90IGEgVmVjdG9yLjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImdldFZlY3RvcihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLnV0aWwuVmVjdG9yKSI+PCEtLSAtLT48L0E+PEgzPgpnZXRWZWN0b3I8L0gzPgo8UFJFPgpwdWJsaWMgamF2YS51dGlsLlZlY3RvciA8Qj5nZXRWZWN0b3I8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuVmVjdG9yJm5ic3A7ZGVmYXVsdFZhbHVlKTwvUFJFPgo8REw+CjxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8REQ+R2V0IGEgVmVjdG9yIG9mIHN0cmluZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uCiBrZXkuPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5rZXk8L0NPREU+IC0gVGhlIGNvbmZpZ3VyYXRpb24ga2V5LjxERD48Q09ERT5kZWZhdWx0VmFsdWU8L0NPREU+IC0gVGhlIGRlZmF1bHQgdmFsdWUuPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgYXNzb2NpYXRlZCBWZWN0b3IuPERUPjxCPlRocm93czo8L0I+PEREPjxDT0RFPkNsYXNzQ2FzdEV4Y2VwdGlvbjwvQ09ERT4gLSBpcyB0aHJvd24gaWYgdGhlIGtleSBtYXBzIHRvIGFuCiBvYmplY3QgdGhhdCBpcyBub3QgYSBWZWN0b3IuPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iZ2V0Qm9vbGVhbihqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgpnZXRCb29sZWFuPC9IMz4KPFBSRT4KcHVibGljIGJvb2xlYW4gPEI+Z2V0Qm9vbGVhbjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSk8L1BSRT4KPERMPgo8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEREPkdldCBhIGJvb2xlYW4gYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIGtleS48REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmtleTwvQ09ERT4gLSBUaGUgY29uZmlndXJhdGlvbiBrZXkuPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgYXNzb2NpYXRlZCBib29sZWFuLjxEVD48Qj5UaHJvd3M6PC9CPjxERD48Q09ERT5qYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbjwvQ09ERT4gLSBpcyB0aHJvd24gaWYgdGhlIGtleSBkb2Vzbid0CiBtYXAgdG8gYW4gZXhpc3Rpbmcgb2JqZWN0LjxERD48Q09ERT5DbGFzc0Nhc3RFeGNlcHRpb248L0NPREU+IC0gaXMgdGhyb3duIGlmIHRoZSBrZXkgbWFwcyB0byBhbgogb2JqZWN0IHRoYXQgaXMgbm90IGEgQm9vbGVhbi48L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJnZXRCb29sZWFuKGphdmEubGFuZy5TdHJpbmcsIGJvb2xlYW4pIj48IS0tIC0tPjwvQT48SDM+CmdldEJvb2xlYW48L0gzPgo8UFJFPgpwdWJsaWMgYm9vbGVhbiA8Qj5nZXRCb29sZWFuPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7a2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4mbmJzcDtkZWZhdWx0VmFsdWUpPC9QUkU+CjxETD4KPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxERD5HZXQgYSBib29sZWFuIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBrZXkuPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5rZXk8L0NPREU+IC0gVGhlIGNvbmZpZ3VyYXRpb24ga2V5LjxERD48Q09ERT5kZWZhdWx0VmFsdWU8L0NPREU+IC0gVGhlIGRlZmF1bHQgdmFsdWUuPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgYXNzb2NpYXRlZCBib29sZWFuLjxEVD48Qj5UaHJvd3M6PC9CPjxERD48Q09ERT5DbGFzc0Nhc3RFeGNlcHRpb248L0NPREU+IC0gaXMgdGhyb3duIGlmIHRoZSBrZXkgbWFwcyB0byBhbgogb2JqZWN0IHRoYXQgaXMgbm90IGEgQm9vbGVhbi48L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJnZXRCb29sZWFuKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5Cb29sZWFuKSI+PCEtLSAtLT48L0E+PEgzPgpnZXRCb29sZWFuPC9IMz4KPFBSRT4KcHVibGljIGphdmEubGFuZy5Cb29sZWFuIDxCPmdldEJvb2xlYW48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5Cb29sZWFuJm5ic3A7ZGVmYXVsdFZhbHVlKTwvUFJFPgo8REw+CjxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8REQ+R2V0IGEgYm9vbGVhbiBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24ga2V5LjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+a2V5PC9DT0RFPiAtIFRoZSBjb25maWd1cmF0aW9uIGtleS48REQ+PENPREU+ZGVmYXVsdFZhbHVlPC9DT0RFPiAtIFRoZSBkZWZhdWx0IHZhbHVlLjxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIGFzc29jaWF0ZWQgYm9vbGVhbiBpZiBrZXkgaXMgZm91bmQgYW5kIGhhcyB2YWxpZAogZm9ybWF0LCBkZWZhdWx0IHZhbHVlIG90aGVyd2lzZS48RFQ+PEI+VGhyb3dzOjwvQj48REQ+PENPREU+Q2xhc3NDYXN0RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUga2V5IG1hcHMgdG8gYW4KIG9iamVjdCB0aGF0IGlzIG5vdCBhIEJvb2xlYW4uPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0idGVzdEJvb2xlYW4oamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KdGVzdEJvb2xlYW48L0gzPgo8UFJFPgpwdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8Qj50ZXN0Qm9vbGVhbjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3ZhbHVlKTwvUFJFPgo8REw+CjxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8REQ+VGVzdCB3aGV0aGVyIHRoZSBzdHJpbmcgcmVwcmVzZW50IGJ5IHZhbHVlIG1hcHMgdG8gYSBib29sZWFuCiB2YWx1ZSBvciBub3QuIFdlIHdpbGwgYWxsb3cgPGNvZGU+dHJ1ZTwvY29kZT4sIDxjb2RlPm9uPC9jb2RlPiwKIGFuZCA8Y29kZT55ZXM8L2NvZGU+IGZvciBhIDxjb2RlPnRydWU8L2NvZGU+IGJvb2xlYW4gdmFsdWUsIGFuZAogPGNvZGU+ZmFsc2U8L2NvZGU+LCA8Y29kZT5vZmY8L2NvZGU+LCBhbmQgPGNvZGU+bm88L2NvZGU+IGZvcgogPGNvZGU+ZmFsc2U8L2NvZGU+IGJvb2xlYW4gdmFsdWVzLiAgQ2FzZSBvZiB2YWx1ZSB0byB0ZXN0IGZvcgogYm9vbGVhbiBzdGF0dXMgaXMgaWdub3JlZC48REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPlN0cmluZzwvQ09ERT4gLSBUaGUgdmFsdWUgdG8gdGVzdCBmb3IgYm9vbGVhbiBzdGF0ZS48RFQ+PEI+UmV0dXJuczo8L0I+PEREPjxjb2RlPnRydWU8L2NvZGU+IG9yIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiB0aGUgc3VwcGxpZWQKIHRleHQgbWFwcyB0byBhIGJvb2xlYW4gdmFsdWUsIG9yIDxjb2RlPm51bGw8L2NvZGU+IG90aGVyd2lzZS48L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJnZXRCeXRlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+CmdldEJ5dGU8L0gzPgo8UFJFPgpwdWJsaWMgYnl0ZSA8Qj5nZXRCeXRlPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7a2V5KTwvUFJFPgo8REw+CjxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8REQ+R2V0IGEgYnl0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24ga2V5LjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+a2V5PC9DT0RFPiAtIFRoZSBjb25maWd1cmF0aW9uIGtleS48RFQ+PEI+UmV0dXJuczo8L0I+PEREPlRoZSBhc3NvY2lhdGVkIGJ5dGUuPERUPjxCPlRocm93czo8L0I+PEREPjxDT0RFPmphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUga2V5IGRvZXNuJ3QKIG1hcCB0byBhbiBleGlzdGluZyBvYmplY3QuPEREPjxDT0RFPkNsYXNzQ2FzdEV4Y2VwdGlvbjwvQ09ERT4gLSBpcyB0aHJvd24gaWYgdGhlIGtleSBtYXBzIHRvIGFuCiBvYmplY3QgdGhhdCBpcyBub3QgYSBCeXRlLjxERD48Q09ERT5qYXZhLmxhbmcuTnVtYmVyRm9ybWF0RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUgdmFsdWUgbWFwcGVkCiBieSB0aGUga2V5IGhhcyBub3QgYSB2YWxpZCBudW1iZXIgZm9ybWF0LjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImdldEJ5dGUoamF2YS5sYW5nLlN0cmluZywgYnl0ZSkiPjwhLS0gLS0+PC9BPjxIMz4KZ2V0Qnl0ZTwvSDM+CjxQUkU+CnB1YmxpYyBieXRlIDxCPmdldEJ5dGU8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXksCiAgICAgICAgICAgICAgICAgICAgYnl0ZSZuYnNwO2RlZmF1bHRWYWx1ZSk8L1BSRT4KPERMPgo8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEREPkdldCBhIGJ5dGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIGtleS48REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmtleTwvQ09ERT4gLSBUaGUgY29uZmlndXJhdGlvbiBrZXkuPEREPjxDT0RFPmRlZmF1bHRWYWx1ZTwvQ09ERT4gLSBUaGUgZGVmYXVsdCB2YWx1ZS48RFQ+PEI+UmV0dXJuczo8L0I+PEREPlRoZSBhc3NvY2lhdGVkIGJ5dGUuPERUPjxCPlRocm93czo8L0I+PEREPjxDT0RFPkNsYXNzQ2FzdEV4Y2VwdGlvbjwvQ09ERT4gLSBpcyB0aHJvd24gaWYgdGhlIGtleSBtYXBzIHRvIGFuCiBvYmplY3QgdGhhdCBpcyBub3QgYSBCeXRlLjxERD48Q09ERT5qYXZhLmxhbmcuTnVtYmVyRm9ybWF0RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUgdmFsdWUgbWFwcGVkCiBieSB0aGUga2V5IGhhcyBub3QgYSB2YWxpZCBudW1iZXIgZm9ybWF0LjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImdldEJ5dGUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLkJ5dGUpIj48IS0tIC0tPjwvQT48SDM+CmdldEJ5dGU8L0gzPgo8UFJFPgpwdWJsaWMgamF2YS5sYW5nLkJ5dGUgPEI+Z2V0Qnl0ZTwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLkJ5dGUmbmJzcDtkZWZhdWx0VmFsdWUpPC9QUkU+CjxETD4KPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxERD5HZXQgYSBieXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBrZXkuPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5rZXk8L0NPREU+IC0gVGhlIGNvbmZpZ3VyYXRpb24ga2V5LjxERD48Q09ERT5kZWZhdWx0VmFsdWU8L0NPREU+IC0gVGhlIGRlZmF1bHQgdmFsdWUuPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgYXNzb2NpYXRlZCBieXRlIGlmIGtleSBpcyBmb3VuZCBhbmQgaGFzIHZhbGlkCiBmb3JtYXQsIGRlZmF1bHQgdmFsdWUgb3RoZXJ3aXNlLjxEVD48Qj5UaHJvd3M6PC9CPjxERD48Q09ERT5DbGFzc0Nhc3RFeGNlcHRpb248L0NPREU+IC0gaXMgdGhyb3duIGlmIHRoZSBrZXkgbWFwcyB0byBhbgogb2JqZWN0IHRoYXQgaXMgbm90IGEgQnl0ZS48REQ+PENPREU+amF2YS5sYW5nLk51bWJlckZvcm1hdEV4Y2VwdGlvbjwvQ09ERT4gLSBpcyB0aHJvd24gaWYgdGhlIHZhbHVlIG1hcHBlZAogYnkgdGhlIGtleSBoYXMgbm90IGEgdmFsaWQgbnVtYmVyIGZvcm1hdC48L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJnZXRTaG9ydChqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgpnZXRTaG9ydDwvSDM+CjxQUkU+CnB1YmxpYyBzaG9ydCA8Qj5nZXRTaG9ydDwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSk8L1BSRT4KPERMPgo8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEREPkdldCBhIHNob3J0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBrZXkuPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5rZXk8L0NPREU+IC0gVGhlIGNvbmZpZ3VyYXRpb24ga2V5LjxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIGFzc29jaWF0ZWQgc2hvcnQuPERUPjxCPlRocm93czo8L0I+PEREPjxDT0RFPmphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUga2V5IGRvZXNuJ3QKIG1hcCB0byBhbiBleGlzdGluZyBvYmplY3QuPEREPjxDT0RFPkNsYXNzQ2FzdEV4Y2VwdGlvbjwvQ09ERT4gLSBpcyB0aHJvd24gaWYgdGhlIGtleSBtYXBzIHRvIGFuCiBvYmplY3QgdGhhdCBpcyBub3QgYSBTaG9ydC48REQ+PENPREU+amF2YS5sYW5nLk51bWJlckZvcm1hdEV4Y2VwdGlvbjwvQ09ERT4gLSBpcyB0aHJvd24gaWYgdGhlIHZhbHVlIG1hcHBlZAogYnkgdGhlIGtleSBoYXMgbm90IGEgdmFsaWQgbnVtYmVyIGZvcm1hdC48L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJnZXRTaG9ydChqYXZhLmxhbmcuU3RyaW5nLCBzaG9ydCkiPjwhLS0gLS0+PC9BPjxIMz4KZ2V0U2hvcnQ8L0gzPgo8UFJFPgpwdWJsaWMgc2hvcnQgPEI+Z2V0U2hvcnQ8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXksCiAgICAgICAgICAgICAgICAgICAgICBzaG9ydCZuYnNwO2RlZmF1bHRWYWx1ZSk8L1BSRT4KPERMPgo8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEREPkdldCBhIHNob3J0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBrZXkuPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5rZXk8L0NPREU+IC0gVGhlIGNvbmZpZ3VyYXRpb24ga2V5LjxERD48Q09ERT5kZWZhdWx0VmFsdWU8L0NPREU+IC0gVGhlIGRlZmF1bHQgdmFsdWUuPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgYXNzb2NpYXRlZCBzaG9ydC48RFQ+PEI+VGhyb3dzOjwvQj48REQ+PENPREU+Q2xhc3NDYXN0RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUga2V5IG1hcHMgdG8gYW4KIG9iamVjdCB0aGF0IGlzIG5vdCBhIFNob3J0LjxERD48Q09ERT5qYXZhLmxhbmcuTnVtYmVyRm9ybWF0RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUgdmFsdWUgbWFwcGVkCiBieSB0aGUga2V5IGhhcyBub3QgYSB2YWxpZCBudW1iZXIgZm9ybWF0LjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImdldFNob3J0KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TaG9ydCkiPjwhLS0gLS0+PC9BPjxIMz4KZ2V0U2hvcnQ8L0gzPgo8UFJFPgpwdWJsaWMgamF2YS5sYW5nLlNob3J0IDxCPmdldFNob3J0PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7a2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TaG9ydCZuYnNwO2RlZmF1bHRWYWx1ZSk8L1BSRT4KPERMPgo8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEREPkdldCBhIHNob3J0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBrZXkuPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5rZXk8L0NPREU+IC0gVGhlIGNvbmZpZ3VyYXRpb24ga2V5LjxERD48Q09ERT5kZWZhdWx0VmFsdWU8L0NPREU+IC0gVGhlIGRlZmF1bHQgdmFsdWUuPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgYXNzb2NpYXRlZCBzaG9ydCBpZiBrZXkgaXMgZm91bmQgYW5kIGhhcyB2YWxpZAogZm9ybWF0LCBkZWZhdWx0IHZhbHVlIG90aGVyd2lzZS48RFQ+PEI+VGhyb3dzOjwvQj48REQ+PENPREU+Q2xhc3NDYXN0RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUga2V5IG1hcHMgdG8gYW4KIG9iamVjdCB0aGF0IGlzIG5vdCBhIFNob3J0LjxERD48Q09ERT5qYXZhLmxhbmcuTnVtYmVyRm9ybWF0RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUgdmFsdWUgbWFwcGVkCiBieSB0aGUga2V5IGhhcyBub3QgYSB2YWxpZCBudW1iZXIgZm9ybWF0LjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImdldEludChqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgpnZXRJbnQ8L0gzPgo8UFJFPgpwdWJsaWMgaW50IDxCPmdldEludDwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO25hbWUpPC9QUkU+CjxETD4KPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxERD5UaGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBnZXQgdGhlIGNvbmZpZ3VyYXRpb24gcmVzb3VyY2UKIHdpdGggdGhlIGdpdmVuIG5hbWUgYXMgYW4gaW50ZWdlci48REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm5hbWU8L0NPREU+IC0gVGhlIHJlc291cmNlIG5hbWUuPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgdmFsdWUgb2YgdGhlIHJlc291cmNlIGFzIGFuIGludGVnZXIuPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iZ2V0SW50KGphdmEubGFuZy5TdHJpbmcsIGludCkiPjwhLS0gLS0+PC9BPjxIMz4KZ2V0SW50PC9IMz4KPFBSRT4KcHVibGljIGludCA8Qj5nZXRJbnQ8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtuYW1lLAogICAgICAgICAgICAgICAgICBpbnQmbmJzcDtkZWYpPC9QUkU+CjxETD4KPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxERD5UaGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBnZXQgdGhlIGNvbmZpZ3VyYXRpb24gcmVzb3VyY2UKIHdpdGggdGhlIGdpdmVuIG5hbWUgYXMgYW4gaW50ZWdlciwgb3IgYSBkZWZhdWx0IHZhbHVlLjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bmFtZTwvQ09ERT4gLSBUaGUgcmVzb3VyY2UgbmFtZTxERD48Q09ERT5kZWY8L0NPREU+IC0gVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHJlc291cmNlLjxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIHZhbHVlIG9mIHRoZSByZXNvdXJjZSBhcyBhbiBpbnRlZ2VyLjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImdldEludGVnZXIoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KZ2V0SW50ZWdlcjwvSDM+CjxQUkU+CnB1YmxpYyBpbnQgPEI+Z2V0SW50ZWdlcjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSk8L1BSRT4KPERMPgo8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEREPkdldCBhIGludCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24ga2V5LjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+a2V5PC9DT0RFPiAtIFRoZSBjb25maWd1cmF0aW9uIGtleS48RFQ+PEI+UmV0dXJuczo8L0I+PEREPlRoZSBhc3NvY2lhdGVkIGludC48RFQ+PEI+VGhyb3dzOjwvQj48REQ+PENPREU+amF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNlcHRpb248L0NPREU+IC0gaXMgdGhyb3duIGlmIHRoZSBrZXkgZG9lc24ndAogbWFwIHRvIGFuIGV4aXN0aW5nIG9iamVjdC48REQ+PENPREU+Q2xhc3NDYXN0RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUga2V5IG1hcHMgdG8gYW4KIG9iamVjdCB0aGF0IGlzIG5vdCBhIEludGVnZXIuPEREPjxDT0RFPmphdmEubGFuZy5OdW1iZXJGb3JtYXRFeGNlcHRpb248L0NPREU+IC0gaXMgdGhyb3duIGlmIHRoZSB2YWx1ZSBtYXBwZWQKIGJ5IHRoZSBrZXkgaGFzIG5vdCBhIHZhbGlkIG51bWJlciBmb3JtYXQuPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iZ2V0SW50ZWdlcihqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIj48IS0tIC0tPjwvQT48SDM+CmdldEludGVnZXI8L0gzPgo8UFJFPgpwdWJsaWMgaW50IDxCPmdldEludGVnZXI8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXksCiAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtkZWZhdWx0VmFsdWUpPC9QUkU+CjxETD4KPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxERD5HZXQgYSBpbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIGtleS48REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmtleTwvQ09ERT4gLSBUaGUgY29uZmlndXJhdGlvbiBrZXkuPEREPjxDT0RFPmRlZmF1bHRWYWx1ZTwvQ09ERT4gLSBUaGUgZGVmYXVsdCB2YWx1ZS48RFQ+PEI+UmV0dXJuczo8L0I+PEREPlRoZSBhc3NvY2lhdGVkIGludC48RFQ+PEI+VGhyb3dzOjwvQj48REQ+PENPREU+Q2xhc3NDYXN0RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUga2V5IG1hcHMgdG8gYW4KIG9iamVjdCB0aGF0IGlzIG5vdCBhIEludGVnZXIuPEREPjxDT0RFPmphdmEubGFuZy5OdW1iZXJGb3JtYXRFeGNlcHRpb248L0NPREU+IC0gaXMgdGhyb3duIGlmIHRoZSB2YWx1ZSBtYXBwZWQKIGJ5IHRoZSBrZXkgaGFzIG5vdCBhIHZhbGlkIG51bWJlciBmb3JtYXQuPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iZ2V0SW50ZWdlcihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuSW50ZWdlcikiPjwhLS0gLS0+PC9BPjxIMz4KZ2V0SW50ZWdlcjwvSDM+CjxQUkU+CnB1YmxpYyBqYXZhLmxhbmcuSW50ZWdlciA8Qj5nZXRJbnRlZ2VyPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7a2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuSW50ZWdlciZuYnNwO2RlZmF1bHRWYWx1ZSk8L1BSRT4KPERMPgo8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEREPkdldCBhIGludCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24ga2V5LjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+a2V5PC9DT0RFPiAtIFRoZSBjb25maWd1cmF0aW9uIGtleS48REQ+PENPREU+ZGVmYXVsdFZhbHVlPC9DT0RFPiAtIFRoZSBkZWZhdWx0IHZhbHVlLjxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIGFzc29jaWF0ZWQgaW50IGlmIGtleSBpcyBmb3VuZCBhbmQgaGFzIHZhbGlkCiBmb3JtYXQsIGRlZmF1bHQgdmFsdWUgb3RoZXJ3aXNlLjxEVD48Qj5UaHJvd3M6PC9CPjxERD48Q09ERT5DbGFzc0Nhc3RFeGNlcHRpb248L0NPREU+IC0gaXMgdGhyb3duIGlmIHRoZSBrZXkgbWFwcyB0byBhbgogb2JqZWN0IHRoYXQgaXMgbm90IGEgSW50ZWdlci48REQ+PENPREU+amF2YS5sYW5nLk51bWJlckZvcm1hdEV4Y2VwdGlvbjwvQ09ERT4gLSBpcyB0aHJvd24gaWYgdGhlIHZhbHVlIG1hcHBlZAogYnkgdGhlIGtleSBoYXMgbm90IGEgdmFsaWQgbnVtYmVyIGZvcm1hdC48L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJnZXRMb25nKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+CmdldExvbmc8L0gzPgo8UFJFPgpwdWJsaWMgbG9uZyA8Qj5nZXRMb25nPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7a2V5KTwvUFJFPgo8REw+CjxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8REQ+R2V0IGEgbG9uZyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24ga2V5LjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+a2V5PC9DT0RFPiAtIFRoZSBjb25maWd1cmF0aW9uIGtleS48RFQ+PEI+UmV0dXJuczo8L0I+PEREPlRoZSBhc3NvY2lhdGVkIGxvbmcuPERUPjxCPlRocm93czo8L0I+PEREPjxDT0RFPmphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUga2V5IGRvZXNuJ3QKIG1hcCB0byBhbiBleGlzdGluZyBvYmplY3QuPEREPjxDT0RFPkNsYXNzQ2FzdEV4Y2VwdGlvbjwvQ09ERT4gLSBpcyB0aHJvd24gaWYgdGhlIGtleSBtYXBzIHRvIGFuCiBvYmplY3QgdGhhdCBpcyBub3QgYSBMb25nLjxERD48Q09ERT5qYXZhLmxhbmcuTnVtYmVyRm9ybWF0RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUgdmFsdWUgbWFwcGVkCiBieSB0aGUga2V5IGhhcyBub3QgYSB2YWxpZCBudW1iZXIgZm9ybWF0LjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImdldExvbmcoamF2YS5sYW5nLlN0cmluZywgbG9uZykiPjwhLS0gLS0+PC9BPjxIMz4KZ2V0TG9uZzwvSDM+CjxQUkU+CnB1YmxpYyBsb25nIDxCPmdldExvbmc8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXksCiAgICAgICAgICAgICAgICAgICAgbG9uZyZuYnNwO2RlZmF1bHRWYWx1ZSk8L1BSRT4KPERMPgo8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEREPkdldCBhIGxvbmcgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIGtleS48REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmtleTwvQ09ERT4gLSBUaGUgY29uZmlndXJhdGlvbiBrZXkuPEREPjxDT0RFPmRlZmF1bHRWYWx1ZTwvQ09ERT4gLSBUaGUgZGVmYXVsdCB2YWx1ZS48RFQ+PEI+UmV0dXJuczo8L0I+PEREPlRoZSBhc3NvY2lhdGVkIGxvbmcuPERUPjxCPlRocm93czo8L0I+PEREPjxDT0RFPkNsYXNzQ2FzdEV4Y2VwdGlvbjwvQ09ERT4gLSBpcyB0aHJvd24gaWYgdGhlIGtleSBtYXBzIHRvIGFuCiBvYmplY3QgdGhhdCBpcyBub3QgYSBMb25nLjxERD48Q09ERT5qYXZhLmxhbmcuTnVtYmVyRm9ybWF0RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUgdmFsdWUgbWFwcGVkCiBieSB0aGUga2V5IGhhcyBub3QgYSB2YWxpZCBudW1iZXIgZm9ybWF0LjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImdldExvbmcoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLkxvbmcpIj48IS0tIC0tPjwvQT48SDM+CmdldExvbmc8L0gzPgo8UFJFPgpwdWJsaWMgamF2YS5sYW5nLkxvbmcgPEI+Z2V0TG9uZzwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLkxvbmcmbmJzcDtkZWZhdWx0VmFsdWUpPC9QUkU+CjxETD4KPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxERD5HZXQgYSBsb25nIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBrZXkuPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5rZXk8L0NPREU+IC0gVGhlIGNvbmZpZ3VyYXRpb24ga2V5LjxERD48Q09ERT5kZWZhdWx0VmFsdWU8L0NPREU+IC0gVGhlIGRlZmF1bHQgdmFsdWUuPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgYXNzb2NpYXRlZCBsb25nIGlmIGtleSBpcyBmb3VuZCBhbmQgaGFzIHZhbGlkCiBmb3JtYXQsIGRlZmF1bHQgdmFsdWUgb3RoZXJ3aXNlLjxEVD48Qj5UaHJvd3M6PC9CPjxERD48Q09ERT5DbGFzc0Nhc3RFeGNlcHRpb248L0NPREU+IC0gaXMgdGhyb3duIGlmIHRoZSBrZXkgbWFwcyB0byBhbgogb2JqZWN0IHRoYXQgaXMgbm90IGEgTG9uZy48REQ+PENPREU+amF2YS5sYW5nLk51bWJlckZvcm1hdEV4Y2VwdGlvbjwvQ09ERT4gLSBpcyB0aHJvd24gaWYgdGhlIHZhbHVlIG1hcHBlZAogYnkgdGhlIGtleSBoYXMgbm90IGEgdmFsaWQgbnVtYmVyIGZvcm1hdC48L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJnZXRGbG9hdChqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgpnZXRGbG9hdDwvSDM+CjxQUkU+CnB1YmxpYyBmbG9hdCA8Qj5nZXRGbG9hdDwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSk8L1BSRT4KPERMPgo8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEREPkdldCBhIGZsb2F0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBrZXkuPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5rZXk8L0NPREU+IC0gVGhlIGNvbmZpZ3VyYXRpb24ga2V5LjxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIGFzc29jaWF0ZWQgZmxvYXQuPERUPjxCPlRocm93czo8L0I+PEREPjxDT0RFPmphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUga2V5IGRvZXNuJ3QKIG1hcCB0byBhbiBleGlzdGluZyBvYmplY3QuPEREPjxDT0RFPkNsYXNzQ2FzdEV4Y2VwdGlvbjwvQ09ERT4gLSBpcyB0aHJvd24gaWYgdGhlIGtleSBtYXBzIHRvIGFuCiBvYmplY3QgdGhhdCBpcyBub3QgYSBGbG9hdC48REQ+PENPREU+amF2YS5sYW5nLk51bWJlckZvcm1hdEV4Y2VwdGlvbjwvQ09ERT4gLSBpcyB0aHJvd24gaWYgdGhlIHZhbHVlIG1hcHBlZAogYnkgdGhlIGtleSBoYXMgbm90IGEgdmFsaWQgbnVtYmVyIGZvcm1hdC48L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJnZXRGbG9hdChqYXZhLmxhbmcuU3RyaW5nLCBmbG9hdCkiPjwhLS0gLS0+PC9BPjxIMz4KZ2V0RmxvYXQ8L0gzPgo8UFJFPgpwdWJsaWMgZmxvYXQgPEI+Z2V0RmxvYXQ8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtrZXksCiAgICAgICAgICAgICAgICAgICAgICBmbG9hdCZuYnNwO2RlZmF1bHRWYWx1ZSk8L1BSRT4KPERMPgo8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEREPkdldCBhIGZsb2F0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBrZXkuPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5rZXk8L0NPREU+IC0gVGhlIGNvbmZpZ3VyYXRpb24ga2V5LjxERD48Q09ERT5kZWZhdWx0VmFsdWU8L0NPREU+IC0gVGhlIGRlZmF1bHQgdmFsdWUuPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgYXNzb2NpYXRlZCBmbG9hdC48RFQ+PEI+VGhyb3dzOjwvQj48REQ+PENPREU+Q2xhc3NDYXN0RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUga2V5IG1hcHMgdG8gYW4KIG9iamVjdCB0aGF0IGlzIG5vdCBhIEZsb2F0LjxERD48Q09ERT5qYXZhLmxhbmcuTnVtYmVyRm9ybWF0RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUgdmFsdWUgbWFwcGVkCiBieSB0aGUga2V5IGhhcyBub3QgYSB2YWxpZCBudW1iZXIgZm9ybWF0LjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImdldEZsb2F0KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5GbG9hdCkiPjwhLS0gLS0+PC9BPjxIMz4KZ2V0RmxvYXQ8L0gzPgo8UFJFPgpwdWJsaWMgamF2YS5sYW5nLkZsb2F0IDxCPmdldEZsb2F0PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7a2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5GbG9hdCZuYnNwO2RlZmF1bHRWYWx1ZSk8L1BSRT4KPERMPgo8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEREPkdldCBhIGZsb2F0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBrZXkuPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5rZXk8L0NPREU+IC0gVGhlIGNvbmZpZ3VyYXRpb24ga2V5LjxERD48Q09ERT5kZWZhdWx0VmFsdWU8L0NPREU+IC0gVGhlIGRlZmF1bHQgdmFsdWUuPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgYXNzb2NpYXRlZCBmbG9hdCBpZiBrZXkgaXMgZm91bmQgYW5kIGhhcyB2YWxpZAogZm9ybWF0LCBkZWZhdWx0IHZhbHVlIG90aGVyd2lzZS48RFQ+PEI+VGhyb3dzOjwvQj48REQ+PENPREU+Q2xhc3NDYXN0RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUga2V5IG1hcHMgdG8gYW4KIG9iamVjdCB0aGF0IGlzIG5vdCBhIEZsb2F0LjxERD48Q09ERT5qYXZhLmxhbmcuTnVtYmVyRm9ybWF0RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUgdmFsdWUgbWFwcGVkCiBieSB0aGUga2V5IGhhcyBub3QgYSB2YWxpZCBudW1iZXIgZm9ybWF0LjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImdldERvdWJsZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgpnZXREb3VibGU8L0gzPgo8UFJFPgpwdWJsaWMgZG91YmxlIDxCPmdldERvdWJsZTwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSk8L1BSRT4KPERMPgo8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEREPkdldCBhIGRvdWJsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24ga2V5LjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+a2V5PC9DT0RFPiAtIFRoZSBjb25maWd1cmF0aW9uIGtleS48RFQ+PEI+UmV0dXJuczo8L0I+PEREPlRoZSBhc3NvY2lhdGVkIGRvdWJsZS48RFQ+PEI+VGhyb3dzOjwvQj48REQ+PENPREU+amF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNlcHRpb248L0NPREU+IC0gaXMgdGhyb3duIGlmIHRoZSBrZXkgZG9lc24ndAogbWFwIHRvIGFuIGV4aXN0aW5nIG9iamVjdC48REQ+PENPREU+Q2xhc3NDYXN0RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUga2V5IG1hcHMgdG8gYW4KIG9iamVjdCB0aGF0IGlzIG5vdCBhIERvdWJsZS48REQ+PENPREU+amF2YS5sYW5nLk51bWJlckZvcm1hdEV4Y2VwdGlvbjwvQ09ERT4gLSBpcyB0aHJvd24gaWYgdGhlIHZhbHVlIG1hcHBlZAogYnkgdGhlIGtleSBoYXMgbm90IGEgdmFsaWQgbnVtYmVyIGZvcm1hdC48L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJnZXREb3VibGUoamF2YS5sYW5nLlN0cmluZywgZG91YmxlKSI+PCEtLSAtLT48L0E+PEgzPgpnZXREb3VibGU8L0gzPgo8UFJFPgpwdWJsaWMgZG91YmxlIDxCPmdldERvdWJsZTwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlJm5ic3A7ZGVmYXVsdFZhbHVlKTwvUFJFPgo8REw+CjxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8REQ+R2V0IGEgZG91YmxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBrZXkuPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5rZXk8L0NPREU+IC0gVGhlIGNvbmZpZ3VyYXRpb24ga2V5LjxERD48Q09ERT5kZWZhdWx0VmFsdWU8L0NPREU+IC0gVGhlIGRlZmF1bHQgdmFsdWUuPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgYXNzb2NpYXRlZCBkb3VibGUuPERUPjxCPlRocm93czo8L0I+PEREPjxDT0RFPkNsYXNzQ2FzdEV4Y2VwdGlvbjwvQ09ERT4gLSBpcyB0aHJvd24gaWYgdGhlIGtleSBtYXBzIHRvIGFuCiBvYmplY3QgdGhhdCBpcyBub3QgYSBEb3VibGUuPEREPjxDT0RFPmphdmEubGFuZy5OdW1iZXJGb3JtYXRFeGNlcHRpb248L0NPREU+IC0gaXMgdGhyb3duIGlmIHRoZSB2YWx1ZSBtYXBwZWQKIGJ5IHRoZSBrZXkgaGFzIG5vdCBhIHZhbGlkIG51bWJlciBmb3JtYXQuPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iZ2V0RG91YmxlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5Eb3VibGUpIj48IS0tIC0tPjwvQT48SDM+CmdldERvdWJsZTwvSDM+CjxQUkU+CnB1YmxpYyBqYXZhLmxhbmcuRG91YmxlIDxCPmdldERvdWJsZTwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5Eb3VibGUmbmJzcDtkZWZhdWx0VmFsdWUpPC9QUkU+CjxETD4KPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxERD5HZXQgYSBkb3VibGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIGtleS48REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmtleTwvQ09ERT4gLSBUaGUgY29uZmlndXJhdGlvbiBrZXkuPEREPjxDT0RFPmRlZmF1bHRWYWx1ZTwvQ09ERT4gLSBUaGUgZGVmYXVsdCB2YWx1ZS48RFQ+PEI+UmV0dXJuczo8L0I+PEREPlRoZSBhc3NvY2lhdGVkIGRvdWJsZSBpZiBrZXkgaXMgZm91bmQgYW5kIGhhcyB2YWxpZAogZm9ybWF0LCBkZWZhdWx0IHZhbHVlIG90aGVyd2lzZS48RFQ+PEI+VGhyb3dzOjwvQj48REQ+PENPREU+Q2xhc3NDYXN0RXhjZXB0aW9uPC9DT0RFPiAtIGlzIHRocm93biBpZiB0aGUga2V5IG1hcHMgdG8gYW4KIG9iamVjdCB0aGF0IGlzIG5vdCBhIERvdWJsZS48REQ+PENPREU+amF2YS5sYW5nLk51bWJlckZvcm1hdEV4Y2VwdGlvbjwvQ09ERT4gLSBpcyB0aHJvd24gaWYgdGhlIHZhbHVlIG1hcHBlZAogYnkgdGhlIGtleSBoYXMgbm90IGEgdmFsaWQgbnVtYmVyIGZvcm1hdC48L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJjb252ZXJ0UHJvcGVydGllcyhqYXZhLnV0aWwuUHJvcGVydGllcykiPjwhLS0gLS0+PC9BPjxIMz4KY29udmVydFByb3BlcnRpZXM8L0gzPgo8UFJFPgpwdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL29yZy9hcGFjaGUvdmVsb2NpdHkvcnVudGltZS9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24uaHRtbCI+Q29uZmlndXJhdGlvbjwvQT4gPEI+Y29udmVydFByb3BlcnRpZXM8L0I+KGphdmEudXRpbC5Qcm9wZXJ0aWVzJm5ic3A7cCk8L1BSRT4KPERMPgo8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEREPkNvbnZlcnQgYSBzdGFuZGFyZCBwcm9wZXJ0aWVzIGNsYXNzIGludG8gYSBjb25maWd1cmF0aW9uCiBjbGFzcy48REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPlByb3BlcnRpZXM8L0NPREU+IC0gcHJvcGVydGllcyBvYmplY3QgdG8gY29udmVydCBpbnRvCiAgICAgICAgICAgICAgICAgICBhIENvbmZpZ3VyYXRpb24gb2JqZWN0LjxEVD48Qj5SZXR1cm5zOjwvQj48REQ+Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uIGNyZWF0ZWQgZnJvbSB0aGUKICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgb2JqZWN0LjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImdldEV4dGVuZGVkUHJvcGVydGllcygpIj48IS0tIC0tPjwvQT48SDM+CmdldEV4dGVuZGVkUHJvcGVydGllczwvSDM+CjxQUkU+CnB1YmxpYyBvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMuRXh0ZW5kZWRQcm9wZXJ0aWVzIDxCPmdldEV4dGVuZGVkUHJvcGVydGllczwvQj4oKTwvUFJFPgo8REw+CjxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5EbyBub3QgdXNlLiAgRm9yIGRlcHJlY2F0aW9uIGFzc2lzdGFuY2Ugb25seS48L0k+CjxQPgo8REQ+PHA+CiAgUm91dGluZSBpbnRlbmRlZCBmb3IgZGVwcmVjYXRpb24gcGVyaW9kIG9ubHkKICBhcyB3ZSBzd2l0Y2ggZnJvbSB1c2luZyB0aGUgQ29uZmlndXJhdGlvbgogIGNsYXNzIGluIFZlbG9jaXR5IHRvIHRoZSBKYWthcnRhIENvbW1vbnMKICBFeHRlbmRlZFByb3BlcnRpZXMKICA8L3A+CiAgPHA+CiAgRG8gbm90IHVzZSB0aGlzIGZvciBnZW5lcmFsIHVzZS4gSXQgd2lsbCBkaXNhcHBlYXIKIDwvcD48REQ+PERMPgo8RFQ+PEI+UmV0dXJuczo8L0I+PEREPkV4dGVuZGVkUHJvcGVydGllcyBjb250YWluaW5nIGRhdGEgb2YgQ29uZmlndXJhdGlvbjwvREw+CjwvREQ+CjwvREw+CjwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KPEhSPgoKPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgo8QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+CjxUUj4KPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgo8QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iY2xhc3MtdXNlL0NvbmZpZ3VyYXRpb24uaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8L1RSPgo8L1RBQkxFPgo8L1REPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KPC9FTT4KPC9URD4KPC9UUj4KCjxUUj4KPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KJm5ic3A7UFJFViBDTEFTUyZuYnNwOwombmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3ZlbG9jaXR5L3J1bnRpbWUvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uLlByb3BlcnRpZXNSZWFkZXIuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+CjxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+CiAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7CiZuYnNwOzxBIEhSRUY9IkNvbmZpZ3VyYXRpb24uaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPjwvRk9OVD48L1REPgo8L1RSPgo8VFI+CjxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+CiAgU1VNTUFSWTogJm5ic3A7PEEgSFJFRj0iI2lubmVyX2NsYXNzX3N1bW1hcnkiPklOTkVSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgo8VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgpERVRBSUw6ICZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+CjwvVFI+CjwvVEFCTEU+CjwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KCjxIUj4KQ29weXJpZ2h0IKkgMjAwMiBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KPC9CT0RZPgo8L0hUTUw+Cg==