QURWQU5DRUQgTUlDUk8gREVWSUNFUywgSU5DLgoKT0JKRUNUIENPREUgRElTVFJJQlVUSU9OIEFHUkVFTUVOVAoKSU1QT1JUQU5ULSBSRUFEIENBUkVGVUxMWTogIERPIE5PVCBJTlNUQUxMLCBDT1BZIE9SIFVTRSBUSEUgRU5DTE9TRUQKU09GVFdBUkUsICiTTElDRU5TRUQgU09GVFdBUkWUKSBPUiBMSUNFTlNFRCBUT09MIChBUyBERUZJTkVEIEJFTE9XKSwgT1IKQU5ZIFBPUlRJT04gVEhFUkVPRiwgVU5USUwgWU9VIEhBVkUgQ0FSRUZVTExZIFJFQUQgQU5EIEFHUkVFRCBUTyBUSEUKRk9MTE9XSU5HIFRFUk1TIEFORCBDT05ESVRJT05TLiAgVEhJUyBJUyBBIExFR0FMIEFHUkVFTUVOVCAoIkFHUkVFTUVOVCIpCkJFVFdFRU4gWU9VIChFSVRIRVIgQU4gSU5ESVZJRFVBTCBPUiBBTiBFTlRJVFkpICgiWU9VIikgQU5EIEFEVkFOQ0VECk1JQ1JPIERFVklDRVMsIElOQy4gKCJBTUQiKS4gQlkgVVNJTkcgVEhFIExJQ0VOU0VEIFNPRlRXQVJFIE9SIExJQ0VOU0VEClRPT0wsIFlPVSBBUkUgQUdSRUVJTkcgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4KCklGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIE9GIFRISVMgQUdSRUVNRU5ULCBETyBOT1QgSU5TVEFMTCwgQ09QWQpPUiBVU0UgVEhFIExJQ0VOU0VEIFNPRlRXQVJFLCBMSUNFTlNFRCBUT09MLCBPUiBBTlkgUE9SVElPTiBUSEVSRU9GLgoKMS4gIERFRklOSVRJT05TCgoxLjEgk0RvY3VtZW50YXRpb26UIG1lYW5zIGluc3RhbGwgc2NyaXB0cyBhbmQgb25saW5lIG9yIGVsZWN0cm9uaWMKZG9jdW1lbnRhdGlvbiBhc3NvY2lhdGVkLCBpbmNsdWRlZCwgb3IgcHJvdmlkZWQgaW4gY29ubmVjdGlvbiB3aXRoIHRoZQpPYmplY3QgQ29kZSBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUsIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YuCgoxLjIgk0ludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHOUIG1lYW5zIGFsbCBjb3B5cmlnaHRzLCB0cmFkZW1hcmtzLAp0cmFkZSBzZWNyZXRzLCBwYXRlbnRzLCBtYXNrIHdvcmtzLCBhbmQgYWxsIHJlbGF0ZWQsIHNpbWlsYXIsIG9yIG90aGVyCmludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgcmVjb2duaXplZCBpbiBhbnkganVyaXNkaWN0aW9uIHdvcmxkd2lkZSwKaW5jbHVkaW5nIGFsbCBhcHBsaWNhdGlvbnMgYW5kIHJlZ2lzdHJhdGlvbnMgd2l0aCByZXNwZWN0IHRoZXJldG8uCgoxLjMgk09iamVjdCBDb2RllCBtZWFucyBtYWNoaW5lIHJlYWRhYmxlIGNvbXB1dGVyIHByb2dyYW1taW5nIGNvZGUgZmlsZXMsCndoaWNoIGlzIG5vdCBpbiBhIGh1bWFuIHJlYWRhYmxlIGZvcm0uCgoxLjQgk0xpY2Vuc2VkIFRvb2yUIG1lYW5zIEJJTlVUSUwyLmV4ZSwgdGhlIGFzc29jaWF0ZWQgdG9vbCB0byBiZSB1c2VkIHRvCnNldCB0aGUgYmFzZSBleGVjdXRpb24gYWRkcmVzcy4KCjIuICBMSUNFTlNFLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCwgQU1ECmhlcmVieSBncmFudHMgWW91IGEgbm9uLWV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCByZXZvY2FibGUsCm5vbi10cmFuc2ZlcmFibGUsIGxpbWl0ZWQsIGNvcHlyaWdodCBsaWNlbnNlIHRvCgogICBhKSB1c2UsIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIHRvCiAgICAgIGN1c3RvbWVycyBhbmQgZW5kIHVzZXJzIChjb2xsZWN0aXZlbHksIJNEaXN0cmlidXRpb24gQ2hhbm5lbJQpCiAgICAgIGZvciB1c2Ugd2l0aCBZb3VyIHByb2R1Y3RzIHRoYXQgaW5jb3Jwb3JhdGUgQU1EIHByb2R1Y3RzLiBTdWNoCiAgICAgIGRpc3RyaWJ1dGlvbiBtYXkgYmUgbWFkZSB0aHJvdWdoIG11bHRpcGxlIHRpZXJzIG9mIGRpc3RyaWJ1dGlvbiwKICAgICAgb25seSBzdWJqZWN0IHRvIGFuIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50IHRoYXQgbWVldHMgdGhlCiAgICAgIHJlcXVpcmVtZW50cyBpbiBzZWN0aW9uIDIuMS4KICAgYikgbW9kaWZ5IHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSB1c2luZyB0aGUgTGljZW5zZWQgVG9vbCB0byBzZXQgdGhlCiAgICAgIGJhc2UgZXhlY3V0aW9uIGFkZHJlc3MgaW4gdGhlIExpY2Vuc2UgU29mdHdhcmUgb25seTsKICAgYykgdXNlIHRoZSBMaWNlbnNlZCBUb29sIG9ubHkgYXMgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSBsaW1pdGVkCiAgICAgIHJpZ2h0cyBpbiBTZWN0aW9uIDIoYikgYWJvdmUuCgoyLjEgRW5kIFVzZXIgTGljZW5zZSBBZ3JlZW1lbnQuICAgRGlzdHJpYnV0aW9uIG9mIExpY2Vuc2VkIFNvZnR3YXJlIGJ5CllvdSBhbmQgWW91ciBEaXN0cmlidXRpb24gQ2hhbm5lbCB3aWxsIGJlIHB1cnN1YW50IHRvIGFuIGVuZm9yY2VhYmxlCmVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50ICiTRW5kIFVzZXIgTGljZW5zZSBBZ3JlZW1lbnSUKSB3aXRoIHRlcm1zCmFuZCBjb25kaXRpb25zIHRoYXQgYXQgYSBtaW5pbXVtIGFyZSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhvc2Ugc2V0CmZvcnRoIGluIFNlY3Rpb24gMyBhbmQgdGhlIGZvbGxvd2luZzoKCiAgIChhKSBwcm9oaWJpdGlvbiBvbiB0cmFuc2ZlciBvciBkdXBsaWNhdGlvbiBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUKICAgICAgIChleGNlcHQgZm9yIHJlYXNvbmFibGUgYmFja3VwKTsKICAgKGIpIHByb2hpYml0aW9ucyBvbiByZXZlcnNlIGVuZ2luZWVyaW5nICh1bmxlc3MgYWxsb3dlZCBieSBsYXcgZm9yCiAgICAgICBpbnRlcm9wZXJhYmlsaXR5KSwgZGlzYXNzZW1ibHkgb3IgZGUtY29tcGlsYXRpb24gb2YgdGhlIExpY2Vuc2VkCiAgICAgICBTb2Z0d2FyZTsKICAgKGQpIGRpc2NsYWltZXIsIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBvZiBZb3VyCiAgICAgICBhbmQgWW91ciBsaWNlbnNvcnOSIGxpYWJpbGl0eSBmb3IgYW55IGRhbWFnZXMsIHdoZXRoZXIgcHVuaXRpdmUsCiAgICAgICBkaXJlY3QsIGluY2lkZW50YWwsIGluZGlyZWN0LCBzcGVjaWFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywKICAgICAgIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mLCBvciBkaXN0cmlidXRpb24gb2YgdGhlIExpY2Vuc2VkIFNvZnR3YXJlOwogICAoZikgcmVxdWlyZW1lbnQgdGhhdCB0aGUgZW5kIHVzZXIgY29tcGx5IGZ1bGx5IHdpdGggYWxsIHJlbGV2YW50CiAgICAgICBleHBvcnQgbGF3cyBhbmQgcmVndWxhdGlvbnMgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgYW5kIG90aGVyCiAgICAgICBhcHBsaWNhYmxlIGV4cG9ydCBhbmQgaW1wb3J0IGxhd3M7IGFuZCAoZykgbm90aWZpY2F0aW9uIHRvIHRoZQogICAgICAgZW5kIHVzZXIgdGhhdCB0aGUgTGljZW5zZWQgU29mdHdhcmUgaXMgc3ViamVjdCB0byBhIHJlc3RyaWN0ZWQKICAgICAgIGxpY2Vuc2UgYW5kIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgaW50ZW5kZWQKICAgICAgIEFNRCBwcm9kdWN0cy4gICBZb3Ugd2lsbCBiZSBmaW5hbmNpYWxseSByZXNwb25zaWJsZSBmb3IgYWxsIGNsYWltcwogICAgICAgYW5kIGRhbWFnZXMgdG8gQU1EIGNhdXNlZCBieSBhIGJyZWFjaCBvZiB0aGlzIFNlY3Rpb24gMi4xLiBBTUQKICAgICAgIGlzIGEgdGhpcmQgcGFydHkgYmVuZWZpY2lhcnkgb2YgYW55IEVuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50LgoKMy4gIFJFU1RSSUNUSU9OUy4gIEV4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgbGljZW5zZSBleHByZXNzbHkgZ3JhbnRlZCBpbgpTZWN0aW9uIDIgaGVyZWluLCBZb3UgaGF2ZSBubyBvdGhlciByaWdodHMgaW4gdGhlIExpY2Vuc2VkIFNvZnR3YXJlLAp3aGV0aGVyIGV4cHJlc3MsIGltcGxpZWQsIGFyaXNpbmcgYnkgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiAgRnVydGhlcgpyZXN0cmljdGlvbnMgcmVnYXJkaW5nIFlvdXIgdXNlIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBhcmUgc2V0IGZvcnRoCmJlbG93LiAgRXhjZXB0IGFzIGV4cHJlc3NseSBhdXRob3JpemVkIGhlcmVpbiwgWW91IG1heSBub3Q6CgogICBhKSBtb2RpZnkgb3IgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIExpY2Vuc2VkIFNvZnR3YXJlOwogICBiKSBkaXN0cmlidXRlLCBwdWJsaXNoLCBkaXNwbGF5LCBzdWJsaWNlbnNlLCBhc3NpZ24gb3Igb3RoZXJ3aXNlCiAgICAgIHRyYW5zZmVyIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZTsKICAgYykgZGVjb21waWxlLCByZXZlcnNlIGVuZ2luZWVyLCBkaXNhc3NlbWJsZSBvciBvdGhlcndpc2UgcmVkdWNlIHRoZQogICAgICBMaWNlbnNlZCBTb2Z0d2FyZSBpbiBPYmplY3QgQ29kZSB0byBhIGh1bWFuLXBlcmNlaXZhYmxlIGZvcm0KICAgICAgKGV4Y2VwdCBhcyBhbGxvd2VkIGJ5IGFwcGxpY2FibGUgbGF3KTsKICAgZCkgYWx0ZXIgb3IgcmVtb3ZlIGFueSBjb3B5cmlnaHQsIHRyYWRlbWFyayBvciBwYXRlbnQgbm90aWNlKHMpIGluCiAgICAgIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBvcgogICBlKSB1c2UgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIHRvOgoKICAgICAgIChpKSAgIGRldmVsb3AgaW52ZW50aW9ucyBkaXJlY3RseSBkZXJpdmVkIGZyb20gQ29uZmlkZW50aWFsCiAgICAgICAgICAgICBJbmZvcm1hdGlvbiB0byBzZWVrIHBhdGVudCBwcm90ZWN0aW9uCiAgICAgICAoaWkpICBhc3Npc3QgaW4gdGhlIGFuYWx5c2lzIG9mIFlvdXIgcGF0ZW50cyBhbmQgcGF0ZW50CiAgICAgICAgICAgICBhcHBsaWNhdGlvbnMgb3IKICAgICAgIChpaWkpIG1vZGlmeSBZb3VyIGV4aXN0aW5nIHBhdGVudHMgb3IgcGF0ZW50IGFwcGxpY2F0aW9ucy4KCjQuICBPV05FUlNISVAuICBUaGUgTGljZW5zZWQgU29mdHdhcmUgaW5jbHVkaW5nIGFsbCBJbnRlbGxlY3R1YWwgUHJvcGVydHkKUmlnaHRzIHRoZXJlaW4gaXMgYW5kICByZW1haW5zIHRoZSBzb2xlIGFuZCBleGNsdXNpdmUgcHJvcGVydHkgb2YgQU1EIG9yCml0cyBsaWNlbnNvcnMsIGFuZCBZb3Ugc2hhbGwgaGF2ZSBubyByaWdodCwgdGl0bGUgb3IgaW50ZXJlc3QgdGhlcmVpbgpleGNlcHQgYXMgZXhwcmVzc2x5IHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4KCjUuICBGRUVEQkFDSy4gIFlvdSBoYXZlIG5vIG9ibGlnYXRpb24gdG8gZ2l2ZSBBTUQgYW55IHN1Z2dlc3Rpb25zLApjb21tZW50cyBvciBvdGhlciBmZWVkYmFjayAok0ZlZWRiYWNrlCkgcmVsYXRpbmcgdG8gdGhlIExpY2Vuc2VkIFNvZnR3YXJlLgpIb3dldmVyLCBBTUQgbWF5IHVzZSBhbmQgaW5jbHVkZSBhbnkgRmVlZGJhY2sgdGhhdCBpdCByZWNlaXZlcyBmcm9tIFlvdSB0bwppbXByb3ZlIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBvciBvdGhlciBBTUQgcHJvZHVjdHMsIHNvZnR3YXJlIGFuZAp0ZWNobm9sb2dpZXMuICBBY2NvcmRpbmdseSwgZm9yIGFueSBGZWVkYmFjayBZb3UgcHJvdmlkZSB0byBBTUQsIFlvdSBncmFudApBTUQgYW5kIGl0cyBhZmZpbGlhdGVzIGFuZCBzdWJzaWRpYXJpZXMgYSB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsCmlycmV2b2NhYmxlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCBsaWNlbnNlIHRvLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LAp1c2UsIHJlcHJvZHVjZSwgbGljZW5zZSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSwgbWFrZSwgaGF2ZSBtYWRlLCBzZWxsIGFuZApvdGhlcndpc2UgY29tbWVyY2lhbGl6ZSB0aGUgRmVlZGJhY2sgaW4gdGhlIExpY2Vuc2VkIFNvZnR3YXJlIG9yIG90aGVyIEFNRApwcm9kdWN0cywgc29mdHdhcmUgYW5kIHRlY2hub2xvZ2llcy4gIFlvdSBmdXJ0aGVyIGFncmVlIG5vdCB0byBwcm92aWRlIGFueQpGZWVkYmFjayB0aGF0CgogICAoYSkgWW91IGtub3cgaXMgc3ViamVjdCB0byBhbnkgSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0cyBvZiBhbnkKICAgICAgIHRoaXJkIHBhcnR5IG9yCiAgIChiKSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgd2hpY2ggc2VlayB0byByZXF1aXJlIGFueSBwcm9kdWN0cwogICAgICAgaW5jb3Jwb3JhdGluZyBvciBkZXJpdmVkIGZyb20gc3VjaCBGZWVkYmFjaywgb3Igb3RoZXIgQU1ECiAgICAgICBJbnRlbGxlY3R1YWwgUHJvcGVydHksIHRvIGJlIGxpY2Vuc2VkIHRvIG9yIG90aGVyd2lzZSBzaGFyZWQKICAgICAgIHdpdGggYW55IHRoaXJkIHBhcnR5LgoKNi4gIFNVUFBPUlQgQU5EIFVQREFURVMuICBBTUQgaXMgdW5kZXIgbm8gb2JsaWdhdGlvbiB0byBwcm92aWRlIGFueSBraW5kCm9mIHN1cHBvcnQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuICBBTUQgbWF5LCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLCBwcm92aWRlCllvdSB3aXRoIHVwZGF0ZXMgdG8gdGhlIExpY2Vuc2VkIFNvZnR3YXJlLCBhbmQgc3VjaCB1cGRhdGVzIHdpbGwgYmUKY292ZXJlZCB1bmRlciB0aGlzIEFncmVlbWVudC4KCjcuICBXQVJSQU5UWSBESVNDTEFJTUVSLCBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBBTkQgSU5ERU1OSUZJQ0FUSU9OLgoKNy4xIERpc2NsYWltZXIgT0YgV2FycmFudHkuIFRIRSBMSUNFTlNFRCBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiCldJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuICBBTUQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTLCBFWFBSRVNTLApJTVBMSUVELCBPUiBTVEFUVVRPUlksIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUwpPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSwgQU5ECk5PTi1JTkZSSU5HRU1FTlQsIFRIQVQgVEhFIExJQ0VOU0VEIFNPRlRXQVJFIFdJTEwgUlVOIFVOSU5URVJSVVBURUQgT1IKRVJST1ItRlJFRSBPUiBXQVJSQU5USUVTIEFSSVNJTkcgRlJPTSBDVVNUT00gT0YgVFJBREUgT1IgQ09VUlNFIE9GIFVTQUdFLgpUSEUgRU5USVJFIFJJU0sgQVNTT0NJQVRFRCBXSVRIIFRIRSBVU0UgT0YgVEhFIExJQ0VOU0VEIFNPRlRXQVJFIElTCkFTU1VNRUQgQlkgWU9VIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBQRVJGT1JNQU5DRSBBTkQKSU5URVJPUEVSQUJJTElUWSBJU1NVRVMgVEhBVCBNQVkgQURWRVJTRUxZIEFGRkVDVCBZT1VSIEVYUEVSSUVOQ0UgQU5EClRIRSBTVEFCSUxJVFkgT0YgWU9VUiBDT01QVVRJTkcgU1lTVEVNOyBBTkQgKEMpIE9USEVSIEVYUEVSSUVOQ0VTClJFU1VMVElORyBJTiBBRFZFUlNFIEVGRkVDVFMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVELCBUTyBEQVRBCkNPUlJVUFRJT04gT1IgTE9TUy4gU29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9mCmltcGxpZWQgd2FycmFudGllcywgc28gdGhlIGFib3ZlIGV4Y2x1c2lvbiBtYXkgbm90IGFwcGx5IHRvIFlvdS4KCjcuMiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSBhbmQgSW5kZW1uaWZpY2F0aW9uLiAgQU1EIEFORCBJVFMgTElDRU5TT1JTCldJTEwgTk9ULCBVTkRFUiBBTlkgQ0lSQ1VNU1RBTkNFUyBCRSBMSUFCTEUgVE8gWU9VIEZPUiBBTlkgUFVOSVRJVkUsCkRJUkVDVCwgSU5DSURFTlRBTCwgSU5ESVJFQ1QsIFNQRUNJQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIElOQ0xVRElORwpMT1NTIE9GIFVTRSwgUFJPRklUUywgT1IgREFUQSBBUklTSU5HIEZST00gVVNFIE9GIFRIRSBMSUNFTlNFRCBTT0ZUV0FSRQpPUiBUSElTIEFHUkVFTUVOVCBFVkVOIElGIEFNRCBBTkQgSVRTIExJQ0VOU09SUyBIQVZFIEJFRU4gQURWSVNFRCBPRiBUSEUKUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiAgSW4gbm8gZXZlbnQgc2hhbGwgQU1EJ3MgdG90YWwgbGlhYmlsaXR5IGZvcgphbGwgZGFtYWdlcywgbG9zc2VzLCBhbmQgY2F1c2VzIG9mIGFjdGlvbiAod2hldGhlciBpbiBjb250cmFjdCwgdG9ydAooaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpIG9yIG90aGVyd2lzZSkgZXhjZWVkIHRoZSBhbW91bnQgb2YgJDEwMCBVU0QuICBZb3UKYWdyZWUgdG8gZGVmZW5kLCBpbmRlbW5pZnkgYW5kIGhvbGQgaGFybWxlc3MgQU1EIGFuZCBpdHMgbGljZW5zb3JzLCBhbmQKYW55IG9mIHRoZWlyIGRpcmVjdG9ycywgb2ZmaWNlcnMsIGVtcGxveWVlcywgYWZmaWxpYXRlcyBvciBhZ2VudHMgZnJvbQphbmQgYWdhaW5zdCBhbnkgYW5kIGFsbCBsb3NzLCBkYW1hZ2UsIGxpYWJpbGl0eSBhbmQgb3RoZXIgZXhwZW5zZXMKKGluY2x1ZGluZyByZWFzb25hYmxlIGF0dG9ybmV5cycgZmVlcyksIHJlc3VsdGluZyBmcm9tIFlvdXIgdXNlLApkaXN0cmlidXRpb24gb3Igc3VibGljZW5zZSBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgb3IgdmlvbGF0aW9uIG9mIHRoZQp0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBieSBZb3Ugb3IgYW55IHN1YmxpY2Vuc2UuICBUaGUKcGFydGllcyBhZ3JlZSB0aGF0IHRoZXNlIGxpbWl0YXRpb25zIGFyZSBhbiBlc3NlbnRpYWwgZWxlbWVudCBpbiBzZXR0aW5nCmNvbnNpZGVyYXRpb24gaGVyZWluLgoKOC4gIENPTkZJREVOVElBTElUWS4gWW91IHNoYWxsIHByb3RlY3QgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIGFuZCBhbnkKaW5mb3JtYXRpb24gcmVsYXRlZCB0aGVyZXRvIChjb2xsZWN0aXZlbHksIJNDb25maWRlbnRpYWwgSW5mb3JtYXRpb26UKQpieSB1c2luZyB0aGUgc2FtZSBkZWdyZWUgb2YgY2FyZSwgYnV0IG5vIGxlc3MgdGhhbiBhIHJlYXNvbmFibGUgZGVncmVlCm9mIGNhcmUsIHRvIHByZXZlbnQgdGhlIHVuYXV0aG9yaXplZCB1c2UsIGRpc3NlbWluYXRpb24gb3IgcHVibGljYXRpb24Kb2YgdGhlIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiBhcyBZb3UgdXNlIHRvIHByb3RlY3QgaXRzIG93biBjb25maWRlbnRpYWwKaW5mb3JtYXRpb24gb2YgYSBsaWtlIG5hdHVyZS4gICBZb3Ugc2hhbGwgbm90IGRpc2Nsb3NlIGFueSBDb25maWRlbnRpYWwKSW5mb3JtYXRpb24gZGlzY2xvc2VkIGhlcmV1bmRlciB0byBhbnkgdGhpcmQgcGFydHkgYW5kIHNoYWxsIGxpbWl0CmRpc2Nsb3N1cmUgb2YgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIHRvIG9ubHkgdGhvc2Ugb2YgaXRzIGVtcGxveWVlcwphbmQgY29udHJhY3RvcnMgd2l0aCBhIG5lZWQgdG8ga25vdyBhbmQgd2hvIGFyZSBib3VuZCBieSBjb25maWRlbnRpYWxpdHkKb2JsaWdhdGlvbnMgd2l0aCBZb3UgYXQgbGVhc3QgYXMgcmVzdHJpY3RpdmUgYXMgdGhvc2UgY29udGFpbmVkIGluIHRoaXMKQWdyZWVtZW50LiAgWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBpdHMgZW1wbG95ZWVzIGFuZCBjb250cmFjdG9ycwphZGhlcmVuY2UgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LiAgWW91IG1heSBkaXNjbG9zZSBDb25maWRlbnRpYWwKSW5mb3JtYXRpb24gaW4gYWNjb3JkYW5jZSB3aXRoIGEganVkaWNpYWwgb3Igb3RoZXIgZ292ZXJubWVudGFsIG9yZGVyLApwcm92aWRlZCB0aGF0IFlvdSBlaXRoZXIgKGEpIGdpdmUgQU1EIHJlYXNvbmFibGUgbm90aWNlIHByaW9yIHRvIHN1Y2gKZGlzY2xvc3VyZSB0byBhbGxvdyBBTUQgYSByZWFzb25hYmxlIG9wcG9ydHVuaXR5IHRvIHNlZWsgYSBwcm90ZWN0aXZlCm9yZGVyIG9yIGVxdWl2YWxlbnQgb3IgKGIpIG9idGFpbiB3cml0dGVuIGFzc3VyYW5jZSBmcm9tIHRoZSBhcHBsaWNhYmxlCmp1ZGljaWFsIG9yIGdvdmVybm1lbnRhbCBlbnRpdHkgdGhhdCBpdCB3aWxsIGFmZm9yZCB0aGUgQ29uZmlkZW50aWFsCkluZm9ybWF0aW9uIHRoZSBoaWdoZXN0IGxldmVsIG9mIHByb3RlY3Rpb24gYWZmb3JkZWQgdW5kZXIgYXBwbGljYWJsZQpsYXcgb3IgcmVndWxhdGlvbi4KCjkuICBURVJNSU5BVElPTiBBTkQgU1VSVklWQUwuICBUaGUgdGVybSBvZiB0aGlzIEFncmVlbWVudCBpcyBmaXZlICg1KQp5ZWFycyBmcm9tIHRoZSBkYXRlIFlvdSBhY2NlcHQgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LiAgQU1EIG1heQp0ZXJtaW5hdGUgdGhlIEFncmVlbWVudCBpbW1lZGlhdGVseSB1cG9uIHRoZSBicmVhY2ggYnkgWW91IG9yIGFueQpzdWItbGljZW5zZWUgb2YgYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGUgQWdyZWVtZW50LiBZb3UgbWF5IHRlcm1pbmF0ZQp0aGUgQWdyZWVtZW50IHVwb24gdGhpcnR5ICgzMCkgZGF5cyB3cml0dGVuIG5vdGljZSB0byBBTUQuICBUaGUKdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgc2hhbGw6CgogICAoaSkgIGltbWVkaWF0ZWx5IHJlc3VsdCBpbiB0aGUgdGVybWluYXRpb24gb2YgYWxsIHJpZ2h0cwogICAgICAgIGdyYW50ZWQgYnkgWW91IHRvIGRpc3RyaWJ1dGUgdGhlIExpY2Vuc2VkIFNvZnR3YXJlCiAgICAgICAgdGhyb3VnaCBtdWx0aXBsZSB0aWVycyBvZiBkaXN0cmlidXRpb24gdW5kZXIgU2VjdGlvbiAyOwogICAgICAgIGFuZAogICAoaWkpIGhhdmUgbm8gZWZmZWN0IG9uIGFueSBzdWJsaWNlbnNlcyBwcmV2aW91c2x5IGdyYW50ZWQgYnkKICAgICAgICBZb3UgdG8gZW5kIHVzZXJzIHVuZGVyIFN1YnNlY3Rpb25zIDIsIHdoaWNoIHN1YmxpY2Vuc2VzCiAgICAgICAgc2hhbGwgc3Vydml2ZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlaXIgdGVybXMuIFVwb24KICAgICAgICB0ZXJtaW5hdGlvbiBvciBleHBpcmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LCBhbGwKICAgICAgICBwcm92aXNpb25zIHN1cnZpdmUgZXhjZXB0IGZvciBTZWN0aW9uIDIuIFVwb24gdGVybWluYXRpb24KICAgICAgICBvciBleHBpcmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LCBZb3Ugd2lsbCBjZWFzZSB1c2luZyBhbmQKICAgICAgICBkZXN0cm95IG9yIHJldHVybiB0byBBTUQgYWxsIGNvcGllcyBvZiB0aGUgTGljZW5zZWQKICAgICAgICBTb2Z0d2FyZS4KCjEwLiBFWFBPUlQgUkVTVFJJQ1RJT05TLiAgWW91IHNoYWxsIGFkaGVyZSB0byBhbGwgYXBwbGljYWJsZSBVLlMuLApFdXJvcGVhbiwgYW5kIG90aGVyIGV4cG9ydCBsYXdzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBVLlMuCkV4cG9ydCBBZG1pbmlzdHJhdGlvbiBSZWd1bGF0aW9ucyAok0VBUpQpICgxNSBDLkYuUiBTZWN0aW9ucyA3MzAtNzc0KSwKYW5kIEUuVS4gQ291bmNpbCBSZWd1bGF0aW9uIChFQykgTm8gNDI4LzIwMDkgb2YgIDUgTWF5IDIwMDkuICBGdXJ0aGVyLApwdXJzdWFudCB0byBTZWN0aW9uIDc0MC42IG9mIHRoZSBFQVIsIFlvdSBoZXJlYnkgY2VydGlmaWVzIHRoYXQsIGV4Y2VwdApwdXJzdWFudCB0byBhIGxpY2Vuc2UgZ3JhbnRlZCBieSB0aGUgVW5pdGVkIFN0YXRlcyBEZXBhcnRtZW50IG9mIENvbW1lcmNlCkJ1cmVhdSBvZiBJbmR1c3RyeSBhbmQgU2VjdXJpdHkgb3IgYXMgb3RoZXJ3aXNlIHBlcm1pdHRlZCBwdXJzdWFudCB0byBhCkxpY2Vuc2UgRXhjZXB0aW9uIHVuZGVyIHRoZSBFQVIsIFlvdSB3aWxsIG5vdAoKICAgKDEpIGV4cG9ydCwgcmUtZXhwb3J0IG9yIHJlbGVhc2UgdG8gYSBuYXRpb25hbCBvZiBhIGNvdW50cnkgaW4gQ291bnRyeQogICAgICAgR3JvdXBzIEQ6MSwgRToxIG9yIEU6MiBhbnkgcmVzdHJpY3RlZCB0ZWNobm9sb2d5LCBzb2Z0d2FyZSwgb3IKICAgICAgIHNvdXJjZSBjb2RlIGl0IHJlY2VpdmVzIGZyb20gQU1ELCBvcgogICAoMikgZXhwb3J0IHRvIENvdW50cnkgR3JvdXBzIEQ6MSwgRToxIG9yIEU6MiB0aGUgZGlyZWN0IHByb2R1Y3Qgb2YKICAgICAgIHN1Y2ggdGVjaG5vbG9neSBvciBzb2Z0d2FyZSwgaWYgc3VjaCBmb3JlaWduIHByb2R1Y2VkIGRpcmVjdAogICAgICAgcHJvZHVjdCBpcyBzdWJqZWN0IHRvIG5hdGlvbmFsIHNlY3VyaXR5IGNvbnRyb2xzIGFzIGlkZW50aWZpZWQgb24KICAgICAgIHRoZSBDb21tZXJjZSBDb250cm9sIExpc3QgKGN1cnJlbnRseSBmb3VuZCBpbiBTdXBwbGVtZW50IDEgdG8KICAgICAgIFBhcnQgNzc0IG9mIEVBUikuICBGb3IgdGhlIG1vc3QgY3VycmVudCBDb3VudHJ5IEdyb3VwIGxpc3RpbmdzLAogICAgICAgb3IgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEVBUiBvciBZb3VyIG9ibGlnYXRpb25zCiAgICAgICB1bmRlciB0aG9zZSByZWd1bGF0aW9ucywgcGxlYXNlIHJlZmVyIHRvIHRoZSBVLlMuIEJ1cmVhdSBvZgogICAgICAgSW5kdXN0cnkgYW5kIFNlY3VyaXR5knMgd2Vic2l0ZSBhdCBodHRwOi8vd3d3LmJpcy5kb2MuZ292Ly4KCjExLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy4gVGhlIExpY2Vuc2VkIFNvZnR3YXJlIGlzIHByb3ZpZGVkIHdpdGgKk1JFU1RSSUNURUQgUklHSFRTLpQgIFVzZSwgZHVwbGljYXRpb24gb3IgZGlzY2xvc3VyZSBieSB0aGUgR292ZXJubWVudAppcyBzdWJqZWN0IHRvIHJlc3RyaWN0aW9ucyBhcyBzZXQgZm9ydGggaW4gRkFSIDUyLjIyNy0xNCBhbmQgREZBUgoyNTIuMjI3LTcwMTMsIGV0IHNlcS4sIG9yIGl0cyBzdWNjZXNzb3IuICBVc2Ugb2YgdGhlIExpY2Vuc2VkIFNvZnR3YXJlCmJ5IHRoZSBHb3Zlcm5tZW50IGNvbnN0aXR1dGVzIGFja25vd2xlZGdtZW50IG9mIEFNRJJzIHByb3ByaWV0YXJ5IHJpZ2h0cwppbiBpdC4KCjEyLiBHT1ZFUk5JTkcgTEFXLiAgVGhpcyBBZ3JlZW1lbnQgaXMgbWFkZSB1bmRlciBhbmQgc2hhbGwgYmUgY29uc3RydWVkCmFjY29yZGluZyB0byB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgVGV4YXMsIGV4Y2x1ZGluZyBjb25mbGljdHMgb2YgbGF3CnJ1bGVzLiAgRWFjaCBwYXJ0eSBzdWJtaXRzIHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIHN0YXRlIGFuZCBmZWRlcmFsCmNvdXJ0cyBvZiBUcmF2aXMgQ291bnR5IGFuZCB0aGUgV2VzdGVybiBEaXN0cmljdCBvZiBUZXhhcyBmb3IgdGhlIHB1cnBvc2VzCm9mIHRoaXMgQWdyZWVtZW50LiAgWW91IGFja25vd2xlZGdlIHRoYXQgWW91ciBicmVhY2ggb2YgdGhpcyBBZ3JlZW1lbnQgbWF5CmNhdXNlIGlycmVwYXJhYmxlIGRhbWFnZSBhbmQgYWdyZWUgdGhhdCBBTUQgc2hhbGwgYmUgZW50aXRsZWQgdG8gc2Vlawppbmp1bmN0aXZlIHJlbGllZiB1bmRlciB0aGlzIEFncmVlbWVudCwgYXMgd2VsbCBhcyBzdWNoIGZ1cnRoZXIgcmVsaWVmIGFzCm1heSBiZSBncmFudGVkIGJ5IGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbi4KCjEzLiBHRU5FUkFMIFBST1ZJU0lPTlMuICBZb3UgbWF5IG5vdCBhc3NpZ24gdGhpcyBBZ3JlZW1lbnQgd2l0aG91dCB0aGUKcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIEFNRCBhbmQgYW55IGFzc2lnbm1lbnQgd2l0aG91dCBzdWNoIGNvbnNlbnQgd2lsbApiZSBudWxsIGFuZCB2b2lkLiAgVGhlIHBhcnRpZXMgZG8gbm90IGludGVuZCB0aGF0IGFueSBhZ2VuY3kgb3IKcGFydG5lcnNoaXAgcmVsYXRpb25zaGlwIGJlIGNyZWF0ZWQgYmV0d2VlbiB0aGVtIGJ5IHRoaXMgQWdyZWVtZW50LiAgRWFjaApwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgaW50ZXJwcmV0ZWQgaW4gc3VjaCBhIG1hbm5lciBhcyB0byBiZQplZmZlY3RpdmUgYW5kIHZhbGlkIHVuZGVyIGFwcGxpY2FibGUgbGF3LiAgSG93ZXZlciwgaW4gdGhlIGV2ZW50IHRoYXQgYW55CnByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBiZWNvbWVzIG9yIGlzIGRlY2xhcmVkIHVuZW5mb3JjZWFibGUgYnkgYW55CmNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIGRlZW1lZCBkZWxldGVkCmFuZCB0aGUgcmVtYWluZGVyIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIHJlbWFpbiBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuCgoxNC4gRU5USVJFIEFHUkVFTUVOVC4gIFRoaXMgQWdyZWVtZW50IHNldHMgZm9ydGggdGhlIGVudGlyZSBhZ3JlZW1lbnQgYW5kCnVuZGVyc3RhbmRpbmcgYmV0d2VlbiB0aGUgUGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIExpY2Vuc2VkIFNvZnR3YXJlCmFuZCBzdXBlcnNlZGVzIGFuZCBtZXJnZXMgYWxsIHByaW9yIG9yYWwgYW5kIHdyaXR0ZW4gYWdyZWVtZW50cywKZGlzY3Vzc2lvbnMgYW5kIHVuZGVyc3RhbmRpbmdzIGJldHdlZW4gdGhlbSByZWdhcmRpbmcgdGhlIHN1YmplY3QgbWF0dGVyCm9mIHRoaXMgQWdyZWVtZW50LiAgTm8gd2FpdmVyIG9yIG1vZGlmaWNhdGlvbiBvZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMKQWdyZWVtZW50IHNoYWxsIGJlIGJpbmRpbmcgdW5sZXNzIG1hZGUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IGFuCmF1dGhvcml6ZWQgcmVwcmVzZW50YXRpdmUgb2YgZWFjaCBQYXJ0eS4KCklGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIE9GIFRISVMgQUdSRUVNRU5ULCBETyBOT1QgSU5TVEFMTCwgQ09QWQpPUiBVU0UgVEhFIExJQ0VOU0VEIFNPRlRXQVJFLCBMSUNFTlNFRCBUT09MLCBPUiBBTlkgUE9SVElPTiBUSEVSRU9GLgo=