QWJvdXQgT3ZlckRyaXZlDQoNCk92ZXJEcml2ZSBpcyBhIHdvcmtpbmcgd2hpdGVib2FyZCBwcm9wb3NhbCBmb3IgYSBuZXcgU3RydXRzIHN1YnByb2plY3QuIA0KVGhlIHN1YnByb2plY3Qgd2lsbCBmZWF0dXJlIGEgc2V0IG9mIGJlc3QtcHJhY3RpY2UgYXBwbGljYXRpb25zIHdyaXR0ZW4gDQp1c2luZyBhIE1WQyBmcmFtZXdvcmsgdGhhdCBtZXJnZXMgU3RydXRzIHdpdGggdGhlIENvbW1vbnMgQ2hhaW4gb2YgDQpSZXNwb25zaWJsaXR5IHBhY2thZ2UuDQoNCi0tLS0NCg0KQXBwbGljYXRpb25zIHJ1bGUsIGZyYW1ld29ya3MgZHJvb2wuDQoNCk1vc3QgYXBwbGljYXRpb24gZnJhbWV3b3JrcyBzaGlwIHdpdGggb25lIG9yIG1vcmUgZXhhbXBsZSBhcHBsaWNhdGlvbnMuIA0KU3RydXRzIGhhcyBNYWlsUmVhZGVyLiBpQkFUSVMgaGFzIFBldHN0b3JlLiBKU0YgaGFzIENhckRlbW8uIEFTUC5ORVQgDQpkaXN0cmlidXRlcyBzZXZlcmFsICJzdGFydGVyIGtpdHMiLiBTb21lIGZyYW1ld29ya3MsIGxpa2UgU3ByaW5nLCBldmVuIA0KY29uc2lkZXIgdGhlIGV4YW1wbGVzIHRvIGJlICJmaXJzdC1jbGFzcyBjaXRpemVucyIuDQoNCkZyb20gdGhlIE92ZXJEcml2ZSBwZXJzcGVjdGl2ZSwgdGhlIGFwcGxpY2F0aW9ucyBhcmUgbm90IGp1c3QgZmlyc3QtY2xhc3MgDQpjaXRpemVucywgdGhleSBhcmUgdGhlIG9ubHkgZmlyc3QtY2xhc3MgY2l0aXplbnMuIFRoZSBNVkMgZnJhbWV3b3JrIHNoYXJlZCANCmJ5IHRoZSBhcHBsaWNhdGlvbnMgaXMgc2ltcGx5IGEgbWVhbnMgdG8gYW4gZW5kLg0KDQpPdmVyRHJpdmUgaXMgYWJvdXQgd3JpdGluZyBidXNpbmVzcyBhcHBsaWNhdGlvbnMsIHJlZ2FyZGxlc3Mgb2YgcGxhdGZvcm0sIA0KYW5kIGV4dHJhY3RpbmcgY29tcG9uZW50cyB0aGUgYXBwbGljYXRpb25zIGNhbiBzaGFyZS4gVGhlIGluaXRpYWwgT3ZlckRyaXZlIA0KYXBwbGljYXRpb25zIGFyZSBiZWluZyB3cml0dGVuIGZvciBBU1AuTkVUL01vbm8sIGJ1dCB2ZXJzaW9ucyBmb3IgSmF2YTUgYW5kIA0KUEhQNSBhcmUgZXhwZWN0ZWQuDQoNClRoZSBmaXJzdCB0d28gYXBwbGljYXRpb25zIG9uIHRoZSBiaWxsZXQgYXJlDQoNCiAgICAqIFBob25lQm9vayCWIEEgc2luZ2xlLXRhYmxlIGVtcGxveWVlIGRpcmVjdG9yeS4NCiAgICAqIE1haWxSZWFkZXIgliBBIG11bHRpLXRhYmxlIGFjY291bnQgbGlzdGluZy4NCg0KT25jZSB0aGVzZSBzaGlwLCBvdGhlcnMgd2lsbCBmb2xsb3csIGluY2x1ZGluZw0KDQogICAgKiBFeGFtcGxlcyCWIEEgY29kaW5nIHJlZmVyZW5jZSB0byBkb2N1bWVudCBjb21tb24gc3RyYXRlZ2llcy4NCiAgICAqIFdpY2tlciAtIEEgc2hvcHBpbmcgY2FydCBhcHBsaWNhdGlvbi4NCiAgICAqIEdhdmVsIC0gQW4gb25saW5lIGIyYyBhdWN0aW9uIGFwcGxpY2F0aW9uLg0KDQpUaGUgTVZDIEZyYW1ld29yayBiZWhpbmQgdGhlIE92ZXJEcml2ZSBhcHBsaWNhdGlvbnMgYnVuZGxlcyB0d28gbWFqb3IgY29tcG9uZW50czoNCg0KICAgICogQWdpbGl0eSwgYSBDIyBwb3J0IG9mIENvbW1vbnMgQ2hhaW4gb2YgUmVzcG9uc2liaWxpdHkuDQogICAgKiBOZXh1cywgYW4gYXBwbGljYXRpb24gY29udHJvbGxlciBidWlsdCBvdmVyIEFnaWxpdHkuDQoNCi0tLS0NCg0KSW5zdGFsbGluZyBhIGRldmVsb3BtZW50IGNvcHkgb2YgT3ZlckRyaXZlIA0KDQoNClNVQlZFUlNJT04NCg0KKiBVc2UgU3VidmVyc2lvbiB0byBjaGVja291dCBPdmVyRHJpdmUgZnJvbSB0aGUgDQogICBbQXBhY2hlIHJlcG9zaXRvcnl8aHR0cDovL3N2bi5hcGFjaGUub3JnL3ZpZXdjdnMuY2dpL3N0cnV0cy9zYW5kYm94L3RydW5rL292ZXJkcml2ZS9dLg0KDQoqIElmIHlvdSBhcmUgdXNpbmcgW1RvcnRvaXNlU1ZOfGh0dHA6Ly90b3J0b2lzZXN2bi50aWdyaXMub3JnL10gKHJlY29tbWVuZGVkKSANCioqIENyZWF0ZSBhIGxpa2VseSBzdWJkaXJlY3RvcnkgKGUuZy4gL3Byb2plY3RzL1N0cnV0cy9PdmVyRHJpdmUpDQoqKiBSaWdodC1jbGljayBvbiB0aGUgc3VkaXJlY3RvcnkgYW5kIHNlbGVjdCBDaGVja291dA0KKiogRW50ZXIgdGhlIFVSTDogW2h0dHBzOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL3N0cnV0cy9zYW5kYm94L3RydW5rL292ZXJkcml2ZV0NCioqKiBCZSBzdXJlIHRoZSBkZXN0aW5hdGlvbiBwYXRoIGlzIHNldCB0byB0aGUgZm9sZGVyIHlvdSBjcmVhdGVkIQ0KDQoqIEFmdGVyIHRoZSBjaGVja291dDoNCioqIFtEb3dubG9hZCB0aGUgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzfA0KICAgaHR0cDovL29wZW5zb3VyY2UyLmF0bGFzc2lhbi5jb20vY29uZmx1ZW5jZS9vc3MvZG93bmxvYWQvYXR0YWNobWVudHMvNDQyL292ZXJkcml2ZS1sb2NhbC1jYWNoZS56aXBdIA0KICAgKGxvY2FsLWNhY2hlKSB0byB0aGUgc2FtZSBkaXJlY3RvcnkuDQoqKiBVbnppcCB0aGlzIGFyY2hpdmUgdG8gdGhlIHNhbWUgZGlyZWN0b3J5LCB0byBjcmVhdGUgdGhlIGZvbGRlciBsb2NhbC1jYWNoZSANCiAgIHdpdGggc2V2ZXJhbCBzdWJmb2xkZXJzLg0KKioqIGxvY2FsLWNhY2hlDQoqKioqIEFnaWxpdHkNCioqKiogaUJhdGlzTmV0DQoqKioqIE5Vbml0QXNwDQoqKioqIE5leHVzDQoqKioqIFNwcmluZ05ldCANCioqIFRoaXMgYXJjaGl2ZSBtYXkgY29udGFpbiBkZXZlbG9wbWVudCB2ZXJzaW9ucyBvZiBzb21lIHByb2R1Y3RzLCANCiAgIHNvIGJlIHN1cmUgdG8gdXNlIHRoZXNlIHJhdGhlciB0aGFuIHRoZSByZWxlYXNlZCBhc3NlbWJsaWVzLiANCiAgIE91ciBnb2FsIGlzIHRvIHN0YXkgY3VycmVudCB3aXRoIHRoZSBkZXZlbG9wbWVudCB2ZXJzaW9ucyBmb3Igbm93Lg0KKiogSWYgeW91IGhhdmUgbm90IGFscmVhZHkgZG9uZSBzbywgYWxzbyBpbnN0YWxsIE5Vbml0IDIuMiBvciBsYXRlci4gDQogICBUaGVyZSBpcyBhIE1TSSBhdmFpbGFibGUgZnJvbSAgW2h0dHA6Ly9OVW5pdC5vcmddLCBhbG9uZyB3aXRoIGEgTW9uby1mcmllbmRseSBaSVAuIA0KDQotLS0tDQoNClNlZSBhbHNvIA0KKiBbVlN0dWRpbyBSZWFkbWVdDQoqIFtEYXRhYmFzZSBSZWFkbWVdDQoNCg0KVklTVUFMIFNUVURJTw0KDQpoMi4gTlVuaXQNCg0KKiBUbyBydW4gdGhlIE5Vbml0IFRlc3RzICh2Mi4yKQ0KKiogQ29uZmlndXJlIHRoZSBUZXN0IHByb2plY3QgdG8gcnVuIE5Vbml0DQoqKiogUmlnaHQgQ2xpY2sgb24gIlRlc3RzIiwgc2VsZWN0ICJQcm9wZXJ0aWVzIg0KKioqIE9wZW4gIkNvbmZpZ3VyYXRpb24gUHJvcGVydGllcyINCioqKiBPcGVuICJEZWJ1Z2dpbmciDQoqKiogQ2hhbmdlICJEZWJ1ZyBNb2RlIiB0byAiUHJvZ3JhbSINCioqKiBQcmVzcyBBcHBseSANCioqKiBGb3IgIlN0YXJ0IEFwcGxpY2F0aW9uIiwgYnJvd3NlIHRvIHlvdXIgaW5zdGFuY2Ugb2YgIm51bml0LWd1aS5leGUiLg0KDQoqIFdlIHJlY29tbWVuZCB1c2luZyB0aGUgVGVzdERyaXZlbi5OZXQgcGx1Z2luIHJhdGhlciB0aGFuIHRoZSBOVW5pdCBHVUkuDQoqKiBbaHR0cDovL3d3dy50ZXN0ZHJpdmVuLm5ldC9dDQoNCmgyLiBBZ2lsaXR5IA0KDQoqIEJ1aWxkIEFnaWxpdHkgZmlyc3QNCg0KaDIuIE5leHVzDQoNCiogVGhlIE5leHVzIHNvbHV0aW9uIGhhcyBhIHdlYiBwcm9qZWN0LiBUbyBhbGxvdyBydW5uaW5nIHRoZSBwcm9qZWN0IGluLXBsYWNlOiANCioqIFJpZ2h0LWNsaWNrIG9uIHRoZSAiTmV4dXMvV2ViIiBmb2xkZXIgDQoqKiBPcGVuICJTaGFyaW5nIiBhbmQgIlNlY3VyaXR5L1dlYiBTaGFyaW5nIg0KKiogU2V0IHRoZSBzaGFyZW5hbWUgdG8gIk5leHVzIg0KKiBCdWlsZCBBZ2lsaXR5IGJlZm9yZSBidWlsZGluZyBOZXh1cw0KDQpoMi4gUGhvbmVCb29rDQoNCiogVGhlIFBob25lQm9vayBzb2x1dGlvbiBoYXMgYSB3ZWIgcHJvamVjdC4gVG8gYWxsb3cgcnVubmluZyB0aGUgcHJvamVjdCBpbi1wbGFjZTogDQoqKiBSaWdodC1jbGljayBvbiB0aGUgIlBob25lQm9vay9XZWIiIGZvbGRlciANCioqIE9wZW4gIlNoYXJpbmciIGFuZCAiU2VjdXJpdHkvV2ViIiBTaGFyaW5nDQoqKiBTZXQgdGhlIHNoYXJlbmFtZSB0byAiUGhvbmVib29rIg0KKiBCdWlsZCBOZXh1cyAoYW5kIEFnaWxpdHkpIGJlZm9yZSBidWlsZGluZyBQaG9uZUJvb2sNCg0KaDIuIFN1YnZlcnNpb24gDQoNCiogV2UgcmVjb21tZW5kIHVzaW5nIHRoZSBBbmtoIHBsdWdpbiBmb3IgU3VidmVyc2lvbi4NCioqIFtodHRwOi8vYW5raHN2bi50aWdyaXMub3JnL10NCg0KLS0tLQ0KDQpTZWUgYWxzbw0KDQoqIFtTdWJ2ZXJzaW9uIFJlYWRtZV0NCiogW0RhdGFiYXNlIFJlYWRtZV0NCg0KDQpEQVRBQkFTRQ0KDQoqIFJpZ2h0IG5vdywgdGhlIFBob25lQm9vayBhcHBsaWNhdGlvbiBpcyB1c2luZyBhIE15U1FMIDQuMCBkYXRhYmFzZSBieSBkZWZhdWx0LiANCioqIFdlIG1lYW4gdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHRoYXQgdG8gW1NoYXJwSFNRTHwNCiAgIGh0dHA6Ly93d3cuYy1zaGFycGNvcm5lci5jb20vZGF0YWJhc2UvU2hhcnBIU1FMLmFzcF0gUmVhbCBTb29uIE5vdywgDQogICBhbmQgbWFrZSBpdCBlYXN5IHRvIHN3aXRjaCBiZXR3ZWVuIHZhcmlvdXMgZGF0YWJhc2Ugc3lzdGVtcy4gDQoqKiBCdXQgZm9yIG5vdywgeW91IHdpbGwgbmVlZCBbTXlTUUwgNC4wfA0KICAgZnRwOi8vbWlycm9yLm1jcy5hbmwuZ292L3B1Yi9teXNxbC9Eb3dubG9hZHMvTXlTUUwtNC4wL10gaW5zdGFsbGVkLiANCiAgIFRoZW4sIGFsbCB5b3UgbmVlZCB0byBkbyBpcyBleGVjdXRlIHRoZSB7e1Bob25lYm9vay1TdGFydC5zcWx9fSBzY3JpcHQNCg0Ke2NvZGU6c3FsfQ0KQ1JFQVRFIERBVEFCQVNFIGBwaG9uZWJvb2tgOw0KVVNFIGBwaG9uZWJvb2tgOw0KQ1JFQVRFIFRBQkxFIGBlbnRyeWAgKA0KICBgcGtfZW50cnlgIGNoYXIoMzYpIE5PVCBOVUxMIGRlZmF1bHQgJycsDQogIGBsYXN0X25hbWVgIGNoYXIoMTgpIE5PVCBOVUxMIGRlZmF1bHQgJycsDQogIGBmaXJzdF9uYW1lYCBjaGFyKDE4KSBOT1QgTlVMTCBkZWZhdWx0ICcnLA0KICBgZXh0ZW5zaW9uYCBjaGFyKDE4KSBOT1QgTlVMTCBkZWZhdWx0ICcnLA0KICBgdXNlcl9uYW1lYCBjaGFyKDkpIE5PVCBOVUxMIGRlZmF1bHQgJycsDQogIGBlZGl0b3JgIHRpbnlpbnQoMykgdW5zaWduZWQgTk9UIE5VTEwgZGVmYXVsdCAnMCcsDQogIGBoaXJlZGAgZGF0ZXRpbWUgTk9UIE5VTEwgZGVmYXVsdCAnMDAwMC0wMC0wMCAwMDowMDowMCcsDQogIGBob3Vyc2AgZG91YmxlIE5PVCBOVUxMIGRlZmF1bHQgJzM3LjUnDQopIFRZUEU9TXlJU0FNIFJPV19GT1JNQVQ9RklYRUQ7DQpJTlNFUlQgSU5UTyBgZW50cnlgIChgcGtfZW50cnlgLGBsYXN0X25hbWVgLGBmaXJzdF9uYW1lYCxgZXh0ZW5zaW9uYCxgdXNlcl9uYW1lYCxgZWRpdG9yYCxgaGlyZWRgLGBob3Vyc2ApIFZBTFVFUyANCiAoJ2M1YjZiYmIxLTY2ZDYtNDljYi05ZGI2LTc0M2FmNjYyNzgyOCcsJ0NsaW50b24nLCdXaWxsaWFtJywnNTU1NzQzNzgyOCcsJ2J1YmJhJywwLCcxOTkyLTA4LTE5IDAwOjAwOjAwJywzNy41KSwNCiAoJzdjNDI0MjI3LThlMTktNGZiNS1iMDg5LTQyM2NmY2E3MjNlMScsJ1Jvb3NldmVsdCcsJ1RoZW9kb3JlJywnNTU1NzQzODk0MicsJ2J1bGwnLDAsJzIwMDEtMDktMTQgMDA6MDA6MDAnLDM3LjUpLA0KICgnOTMyMGVhNDAtMGMwMS00M2U4LTljZWMtOGZiOWIzOTI4YzJjJywnS2VubmVkeScsJ0pvaG4gRi4nLCc1NTU3NDMzOTI4JywnZml0eicsMCwnMTk4Ny0wNS0yOSAwMDowMDowMCcsMzcuNSksDQogKCczYjI3YzkzMy1jMWRjLTRkODUtOTc0NC1jN2Q5ZGViYWUxOTYnLCdQaWVyY2UnLCdGcmFua2xpbicsJzU1NTc0Mzc5MTknLCdoYXdrZXllJywwLCcxOTg0LTExLTE4IDAwOjAwOjAwJywzNSksDQogKCc1NTRmZjllNy1hNmY1LTQ3OGEtYjc2Yi1hNjY2ZjVjNTRlNDAnLCdKZWZmZXJzb24nLCdUaG9tYXMnLCc1NTU3NDM1NDQwJywnbW9udHknLDAsJzE5NzYtMDctMDQgMDA6MDA6MDAnLDM3LjUpOw0Ke2NvZGV9DQoNCi0tLS0NCg0KU2VlIGFsc28gDQoNCiogW1N1YnZlcnNpb24gUmVhZG1lXSANCiogW1ZTdHVkaW8gUmVhZG1lXQ0KDQotLS0tDQoNCkZvciBtb3JlIGhlbHAsIHZpc2l0IGh0dHA6Ly9vcGVuc291cmNlLmF0bGFzc2lhbi5jb20vY29uZmx1ZW5jZS9vc3MvZGlzcGxheS9PVlIvSG9tZQ0KDQotLS0tDQo=