LyohLS0tLS0tLS0tLS0tLS0tLS0gVHlwZVNjcmlwdCBUaGlyZFBhcnR5Tm90aWNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNClRoZSBUeXBlU2NyaXB0IHNvZnR3YXJlIGluY29ycG9yYXRlcyB0aGlyZCBwYXJ0eSBtYXRlcmlhbCBmcm9tIHRoZSBwcm9qZWN0cyBsaXN0ZWQgYmVsb3cuIFRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgbGljZW5zZSB1bmRlciB3aGljaCBNaWNyb3NvZnQgcmVjZWl2ZWQgc3VjaCB0aGlyZCBwYXJ0eSBtYXRlcmlhbCBhcmUgc2V0IGZvcnRoIGJlbG93LiBNaWNyb3NvZnQgcmVzZXJ2ZXMgYWxsIG90aGVyIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQsIHdoZXRoZXIgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpUaGlyZCBQYXJ0eSBDb2RlIENvbXBvbmVudHMNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0gRGVmaW5pdGVseVR5cGVkIC0tLS0tLS0tLS0tLS0tLS0tLS0tDQpUaGlzIGZpbGUgaXMgYmFzZWQgb24gb3IgaW5jb3Jwb3JhdGVzIG1hdGVyaWFsIGZyb20gdGhlIHByb2plY3RzIGxpc3RlZCBiZWxvdyAoY29sbGVjdGl2ZWx5ICJUaGlyZCBQYXJ0eSBDb2RlIikuIE1pY3Jvc29mdCBpcyBub3QgdGhlIG9yaWdpbmFsIGF1dGhvciBvZiB0aGUgVGhpcmQgUGFydHkgQ29kZS4gVGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBsaWNlbnNlLCB1bmRlciB3aGljaCBNaWNyb3NvZnQgcmVjZWl2ZWQgc3VjaCBUaGlyZCBQYXJ0eSBDb2RlLCBhcmUgc2V0IGZvcnRoIGJlbG93LiBTdWNoIGxpY2Vuc2VzIGFuZCBub3RpY2VzIGFyZSBwcm92aWRlZCBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5LiBNaWNyb3NvZnQsIG5vdCB0aGUgdGhpcmQgcGFydHksIGxpY2Vuc2VzIHRoZSBUaGlyZCBQYXJ0eSBDb2RlIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgc2V0IGZvcnRoIGluIHRoZSBFVUxBIGZvciB0aGUgTWljcm9zb2Z0IFByb2R1Y3QuIE1pY3Jvc29mdCByZXNlcnZlcyBhbGwgb3RoZXIgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIGFncmVlbWVudCwgd2hldGhlciBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLg0KRGVmaW5pdGVseVR5cGVkDQpUaGlzIHByb2plY3QgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLiBDb3B5cmlnaHRzIGFyZSByZXNwZWN0aXZlIG9mIGVhY2ggY29udHJpYnV0b3IgbGlzdGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBkZWZpbml0aW9uIGZpbGUuIFByb3ZpZGVkIGZvciBJbmZvcm1hdGlvbmFsIFB1cnBvc2VzIE9ubHkNCg0KTUlUIExpY2Vuc2UNClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIiJTb2Z0d2FyZSIiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQoNClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KDQpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQotLS0tLS0tLS0tLS0tLS0tLS0tIFVuaWNvZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0NClVOSUNPREUsIElOQy4gTElDRU5TRSBBR1JFRU1FTlQgLSBEQVRBIEZJTEVTIEFORCBTT0ZUV0FSRQ0KDQpVbmljb2RlIERhdGEgRmlsZXMgaW5jbHVkZSBhbGwgZGF0YSBmaWxlcyB1bmRlciB0aGUgZGlyZWN0b3JpZXMNCmh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLywgaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzLywNCmh0dHA6Ly93d3cudW5pY29kZS5vcmcvY2xkci9kYXRhLywgaHR0cDovL3NvdXJjZS5pY3UtcHJvamVjdC5vcmcvcmVwb3MvaWN1LywgYW5kDQpodHRwOi8vd3d3LnVuaWNvZGUub3JnL3V0aWxpdHkvdHJhYy9icm93c2VyLy4NCg0KVW5pY29kZSBEYXRhIEZpbGVzIGRvIG5vdCBpbmNsdWRlIFBERiBvbmxpbmUgY29kZSBjaGFydHMgdW5kZXIgdGhlDQpkaXJlY3RvcnkgaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvLg0KDQpTb2Z0d2FyZSBpbmNsdWRlcyBhbnkgc291cmNlIGNvZGUgcHVibGlzaGVkIGluIHRoZSBVbmljb2RlIFN0YW5kYXJkDQpvciB1bmRlciB0aGUgZGlyZWN0b3JpZXMNCmh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLywgaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzLywNCmh0dHA6Ly93d3cudW5pY29kZS5vcmcvY2xkci9kYXRhLywgaHR0cDovL3NvdXJjZS5pY3UtcHJvamVjdC5vcmcvcmVwb3MvaWN1LywgYW5kDQpodHRwOi8vd3d3LnVuaWNvZGUub3JnL3V0aWxpdHkvdHJhYy9icm93c2VyLy4NCg0KTk9USUNFIFRPIFVTRVI6IENhcmVmdWxseSByZWFkIHRoZSBmb2xsb3dpbmcgbGVnYWwgYWdyZWVtZW50Lg0KQlkgRE9XTkxPQURJTkcsIElOU1RBTExJTkcsIENPUFlJTkcgT1IgT1RIRVJXSVNFIFVTSU5HIFVOSUNPREUgSU5DLidTDQpEQVRBIEZJTEVTICgiREFUQSBGSUxFUyIpLCBBTkQvT1IgU09GVFdBUkUgKCJTT0ZUV0FSRSIpLA0KWU9VIFVORVFVSVZPQ0FMTFkgQUNDRVBULCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlksIEFMTCBPRiBUSEUNClRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5ULg0KSUYgWU9VIERPIE5PVCBBR1JFRSwgRE8gTk9UIERPV05MT0FELCBJTlNUQUxMLCBDT1BZLCBESVNUUklCVVRFIE9SIFVTRQ0KVEhFIERBVEEgRklMRVMgT1IgU09GVFdBUkUuDQoNCkNPUFlSSUdIVCBBTkQgUEVSTUlTU0lPTiBOT1RJQ0UNCg0KQ29weXJpZ2h0IChjKSAxOTkxLTIwMTcgVW5pY29kZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRlcm1zIG9mIFVzZSBpbiBodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NvcHlyaWdodC5odG1sLg0KDQpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcNCmEgY29weSBvZiB0aGUgVW5pY29kZSBkYXRhIGZpbGVzIGFuZCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uDQoodGhlICJEYXRhIEZpbGVzIikgb3IgVW5pY29kZSBzb2Z0d2FyZSBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbg0KKHRoZSAiU29mdHdhcmUiKSB0byBkZWFsIGluIHRoZSBEYXRhIEZpbGVzIG9yIFNvZnR3YXJlDQp3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLA0KY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgYW5kL29yIHNlbGwgY29waWVzIG9mDQp0aGUgRGF0YSBGaWxlcyBvciBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIERhdGEgRmlsZXMNCm9yIFNvZnR3YXJlIGFyZSBmdXJuaXNoZWQgdG8gZG8gc28sIHByb3ZpZGVkIHRoYXQgZWl0aGVyDQooYSkgdGhpcyBjb3B5cmlnaHQgYW5kIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciB3aXRoIGFsbCBjb3BpZXMNCm9mIHRoZSBEYXRhIEZpbGVzIG9yIFNvZnR3YXJlLCBvcg0KKGIpIHRoaXMgY29weXJpZ2h0IGFuZCBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYXNzb2NpYXRlZA0KRG9jdW1lbnRhdGlvbi4NCg0KVEhFIERBVEEgRklMRVMgQU5EIFNPRlRXQVJFIEFSRSBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GDQpBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRQ0KV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORA0KTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4NCklOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIEhPTERFUlMgSU5DTFVERUQgSU4gVEhJUw0KTk9USUNFIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBPUiBBTlkgU1BFQ0lBTCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMDQpEQU1BR0VTLCBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLA0KREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUg0KVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUg0KUEVSRk9STUFOQ0UgT0YgVEhFIERBVEEgRklMRVMgT1IgU09GVFdBUkUuDQoNCkV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIGEgY29weXJpZ2h0IGhvbGRlcg0Kc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsDQp1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhlc2UgRGF0YSBGaWxlcyBvciBTb2Z0d2FyZSB3aXRob3V0IHByaW9yDQp3cml0dGVuIGF1dGhvcml6YXRpb24gb2YgdGhlIGNvcHlyaWdodCBob2xkZXIuDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS1Eb2N1bWVudCBPYmplY3QgTW9kZWwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KRE9NIA0KDQpXM0MgTGljZW5zZQ0KVGhpcyB3b3JrIGlzIGJlaW5nIHByb3ZpZGVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2UuDQpCeSBvYnRhaW5pbmcgYW5kL29yIGNvcHlpbmcgdGhpcyB3b3JrLCB5b3UgKHRoZSBsaWNlbnNlZSkgYWdyZWUgdGhhdCB5b3UgaGF2ZSByZWFkLCB1bmRlcnN0b29kLCBhbmQgd2lsbCBjb21wbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLg0KUGVybWlzc2lvbiB0byBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgd29yaywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiygZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBvciByb3lhbHR5IGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgDQpvbiBBTEwgY29waWVzIG9mIHRoZSB3b3JrIG9yIHBvcnRpb25zIHRoZXJlb2YsIGluY2x1ZGluZyBtb2RpZmljYXRpb25zOg0KKiBUaGUgZnVsbCB0ZXh0IG9mIHRoaXMgTk9USUNFIGluIGEgbG9jYXRpb24gdmlld2FibGUgdG8gdXNlcnMgb2YgdGhlIHJlZGlzdHJpYnV0ZWQgb3IgZGVyaXZhdGl2ZSB3b3JrLg0KKiBBbnkgcHJlLWV4aXN0aW5nIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBkaXNjbGFpbWVycywgbm90aWNlcywgb3IgdGVybXMgYW5kIGNvbmRpdGlvbnMuIElmIG5vbmUgZXhpc3QsIHRoZSBXM0MgU29mdHdhcmUgYW5kIERvY3VtZW50IFNob3J0IE5vdGljZSBzaG91bGQgYmUgaW5jbHVkZWQuDQoqIE5vdGljZSBvZiBhbnkgY2hhbmdlcyBvciBtb2RpZmljYXRpb25zLCB0aHJvdWdoIGEgY29weXJpZ2h0IHN0YXRlbWVudCBvbiB0aGUgbmV3IGNvZGUgb3IgZG9jdW1lbnQgc3VjaCBhcyAiVGhpcyBzb2Z0d2FyZSBvciBkb2N1bWVudCBpbmNsdWRlcyBtYXRlcmlhbCBjb3BpZWQgZnJvbSBvciBkZXJpdmVkIA0KZnJvbSBbdGl0bGUgYW5kIFVSSSBvZiB0aGUgVzNDIGRvY3VtZW50XS4gQ29weXJpZ2h0IKkgW1lFQVJdIFczQ64gKE1JVCwgRVJDSU0sIEtlaW8sIEJlaWhhbmcpLiIgDQpEaXNjbGFpbWVycw0KVEhJUyBXT1JLIElTIFBST1ZJREVEICJBUyBJUywiIEFORCBDT1BZUklHSFQgSE9MREVSUyBNQUtFIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8sIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIA0KRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5UIFdJTEwgTk9UIElORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBQQVRFTlRTLCBDT1BZUklHSFRTLCBUUkFERU1BUktTIE9SIE9USEVSIFJJR0hUUy4NCkNPUFlSSUdIVCBIT0xERVJTIFdJTEwgTk9UIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIEFOWSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5ULg0KVGhlIG5hbWUgYW5kIHRyYWRlbWFya3Mgb2YgY29weXJpZ2h0IGhvbGRlcnMgbWF5IE5PVCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIHRoZSB3b3JrIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gDQpUaXRsZSB0byBjb3B5cmlnaHQgaW4gdGhpcyB3b3JrIHdpbGwgYXQgYWxsIHRpbWVzIHJlbWFpbiB3aXRoIGNvcHlyaWdodCBob2xkZXJzLg0KDQotLS0tLS0tLS0NCg0KRE9NDQpDb3B5cmlnaHQgqSAyMDE4IFdIQVRXRyAoQXBwbGUsIEdvb2dsZSwgTW96aWxsYSwgTWljcm9zb2Z0KS4gVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIGEgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlOiBBdHRyaWJ1dGlvbiA0LjAgSW50ZXJuYXRpb25hbCANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IA0KQ3JlYXRpdmUgQ29tbW9ucyBDb3Jwb3JhdGlvbiAoIkNyZWF0aXZlIENvbW1vbnMiKSBpcyBub3QgYSBsYXcgZmlybSBhbmQgZG9lcyBub3QgcHJvdmlkZSBsZWdhbCBzZXJ2aWNlcyBvciBsZWdhbCBhZHZpY2UuIERpc3RyaWJ1dGlvbiBvZiBDcmVhdGl2ZSBDb21tb25zIHB1YmxpYyBsaWNlbnNlcyBkb2VzIG5vdCBjcmVhdGUgYSBsYXd5ZXItY2xpZW50IG9yIG90aGVyIHJlbGF0aW9uc2hpcC4gQ3JlYXRpdmUgQ29tbW9ucyBtYWtlcyBpdHMgbGljZW5zZXMgYW5kIHJlbGF0ZWQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIG9uIGFuICJhcy1pcyIgYmFzaXMuIENyZWF0aXZlIENvbW1vbnMgZ2l2ZXMgbm8gd2FycmFudGllcyByZWdhcmRpbmcgaXRzIGxpY2Vuc2VzLCBhbnkgbWF0ZXJpYWwgbGljZW5zZWQgdW5kZXIgdGhlaXIgdGVybXMgYW5kIGNvbmRpdGlvbnMsIG9yIGFueSByZWxhdGVkIGluZm9ybWF0aW9uLiBDcmVhdGl2ZSBDb21tb25zIGRpc2NsYWltcyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzIHJlc3VsdGluZyBmcm9tIHRoZWlyIHVzZSB0byB0aGUgZnVsbGVzdCBleHRlbnQgcG9zc2libGUuIFVzaW5nIENyZWF0aXZlIENvbW1vbnMgUHVibGljIExpY2Vuc2VzIENyZWF0aXZlIENvbW1vbnMgcHVibGljIGxpY2Vuc2VzIHByb3ZpZGUgYSBzdGFuZGFyZCBzZXQgb2YgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBjcmVhdG9ycyBhbmQgb3RoZXIgcmlnaHRzIGhvbGRlcnMgbWF5IHVzZSB0byBzaGFyZSBvcmlnaW5hbCB3b3JrcyBvZiBhdXRob3JzaGlwIGFuZCBvdGhlciBtYXRlcmlhbCBzdWJqZWN0IHRvIGNvcHlyaWdodCBhbmQgY2VydGFpbiBvdGhlciByaWdodHMgc3BlY2lmaWVkIGluIHRoZSBwdWJsaWMgbGljZW5zZSBiZWxvdy4gVGhlIGZvbGxvd2luZyBjb25zaWRlcmF0aW9ucyBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSwgYXJlIG5vdCBleGhhdXN0aXZlLCBhbmQgZG8gbm90IGZvcm0gcGFydCBvZiBvdXIgbGljZW5zZXMuIENvbnNpZGVyYXRpb25zIGZvciBsaWNlbnNvcnM6IE91ciBwdWJsaWMgbGljZW5zZXMgYXJlIGludGVuZGVkIGZvciB1c2UgYnkgdGhvc2UgYXV0aG9yaXplZCB0byBnaXZlIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgbWF0ZXJpYWwgaW4gd2F5cyBvdGhlcndpc2UgcmVzdHJpY3RlZCBieSBjb3B5cmlnaHQgYW5kIGNlcnRhaW4gb3RoZXIgcmlnaHRzLiBPdXIgbGljZW5zZXMgYXJlIGlycmV2b2NhYmxlLiBMaWNlbnNvcnMgc2hvdWxkIHJlYWQgYW5kIHVuZGVyc3RhbmQgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBsaWNlbnNlIHRoZXkgY2hvb3NlIGJlZm9yZSBhcHBseWluZyBpdC4gTGljZW5zb3JzIHNob3VsZCBhbHNvIHNlY3VyZSBhbGwgcmlnaHRzIG5lY2Vzc2FyeSBiZWZvcmUgYXBwbHlpbmcgb3VyIGxpY2Vuc2VzIHNvIHRoYXQgdGhlIHB1YmxpYyBjYW4gcmV1c2UgdGhlIG1hdGVyaWFsIGFzIGV4cGVjdGVkLiBMaWNlbnNvcnMgc2hvdWxkIGNsZWFybHkgbWFyayBhbnkgbWF0ZXJpYWwgbm90IHN1YmplY3QgdG8gdGhlIGxpY2Vuc2UuIFRoaXMgaW5jbHVkZXMgb3RoZXIgQ0MtIGxpY2Vuc2VkIG1hdGVyaWFsLCBvciBtYXRlcmlhbCB1c2VkIHVuZGVyIGFuIGV4Y2VwdGlvbiBvciBsaW1pdGF0aW9uIHRvIGNvcHlyaWdodC4gTW9yZSBjb25zaWRlcmF0aW9ucyBmb3IgbGljZW5zb3JzOg0KDQp3aWtpLmNyZWF0aXZlY29tbW9ucy5vcmcvQ29uc2lkZXJhdGlvbnNfZm9yX2xpY2Vuc29ycyBDb25zaWRlcmF0aW9ucyBmb3IgdGhlIHB1YmxpYzogQnkgdXNpbmcgb25lIG9mIG91ciBwdWJsaWMgbGljZW5zZXMsIGEgbGljZW5zb3IgZ3JhbnRzIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgdGhlIGxpY2Vuc2VkIG1hdGVyaWFsIHVuZGVyIHNwZWNpZmllZCB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSWYgdGhlIGxpY2Vuc29yJ3MgcGVybWlzc2lvbiBpcyBub3QgbmVjZXNzYXJ5IGZvciBhbnkgcmVhc29uLS1mb3IgZXhhbXBsZSwgYmVjYXVzZSBvZiBhbnkgYXBwbGljYWJsZSBleGNlcHRpb24gb3IgbGltaXRhdGlvbiB0byBjb3B5cmlnaHQtLXRoZW4gdGhhdCB1c2UgaXMgbm90IHJlZ3VsYXRlZCBieSB0aGUgbGljZW5zZS4gT3VyIGxpY2Vuc2VzIGdyYW50IG9ubHkgcGVybWlzc2lvbnMgdW5kZXIgY29weXJpZ2h0IGFuZCBjZXJ0YWluIG90aGVyIHJpZ2h0cyB0aGF0IGEgbGljZW5zb3IgaGFzIGF1dGhvcml0eSB0byBncmFudC4gVXNlIG9mIHRoZSBsaWNlbnNlZCBtYXRlcmlhbCBtYXkgc3RpbGwgYmUgcmVzdHJpY3RlZCBmb3Igb3RoZXIgcmVhc29ucywgaW5jbHVkaW5nIGJlY2F1c2Ugb3RoZXJzIGhhdmUgY29weXJpZ2h0IG9yIG90aGVyIHJpZ2h0cyBpbiB0aGUgbWF0ZXJpYWwuIEEgbGljZW5zb3IgbWF5IG1ha2Ugc3BlY2lhbCByZXF1ZXN0cywgc3VjaCBhcyBhc2tpbmcgdGhhdCBhbGwgY2hhbmdlcyBiZSBtYXJrZWQgb3IgZGVzY3JpYmVkLiBBbHRob3VnaCBub3QgcmVxdWlyZWQgYnkgb3VyIGxpY2Vuc2VzLCB5b3UgYXJlIGVuY291cmFnZWQgdG8gcmVzcGVjdCB0aG9zZSByZXF1ZXN0cyB3aGVyZSByZWFzb25hYmxlLiBNb3JlX2NvbnNpZGVyYXRpb25zIGZvciB0aGUgcHVibGljOiB3aWtpLmNyZWF0aXZlY29tbW9ucy5vcmcvQ29uc2lkZXJhdGlvbnNfZm9yX2xpY2Vuc2VlcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSANCkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gNC4wIEludGVybmF0aW9uYWwgUHVibGljIExpY2Vuc2UgQnkgZXhlcmNpc2luZyB0aGUgTGljZW5zZWQgUmlnaHRzIChkZWZpbmVkIGJlbG93KSwgWW91IGFjY2VwdCBhbmQgYWdyZWUgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiA0LjAgSW50ZXJuYXRpb25hbCBQdWJsaWMgTGljZW5zZSAoIlB1YmxpYyBMaWNlbnNlIikuIFRvIHRoZSBleHRlbnQgdGhpcyBQdWJsaWMgTGljZW5zZSBtYXkgYmUgaW50ZXJwcmV0ZWQgYXMgYSBjb250cmFjdCwgWW91IGFyZSBncmFudGVkIHRoZSBMaWNlbnNlZCBSaWdodHMgaW4gY29uc2lkZXJhdGlvbiBvZiBZb3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGFuZCB0aGUgTGljZW5zb3IgZ3JhbnRzIFlvdSBzdWNoIHJpZ2h0cyBpbiBjb25zaWRlcmF0aW9uIG9mIGJlbmVmaXRzIHRoZSBMaWNlbnNvciByZWNlaXZlcyBmcm9tIG1ha2luZyB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYXZhaWxhYmxlIHVuZGVyIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiBTZWN0aW9uIDEgLS0gRGVmaW5pdGlvbnMuIGEuIEFkYXB0ZWQgTWF0ZXJpYWwgbWVhbnMgbWF0ZXJpYWwgc3ViamVjdCB0byBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIHRoYXQgaXMgZGVyaXZlZCBmcm9tIG9yIGJhc2VkIHVwb24gdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGFuZCBpbiB3aGljaCB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgaXMgdHJhbnNsYXRlZCwgYWx0ZXJlZCwgYXJyYW5nZWQsIHRyYW5zZm9ybWVkLCBvciBvdGhlcndpc2UgbW9kaWZpZWQgaW4gYSBtYW5uZXIgcmVxdWlyaW5nIHBlcm1pc3Npb24gdW5kZXIgdGhlIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMgaGVsZCBieSB0aGUgTGljZW5zb3IuIEZvciBwdXJwb3NlcyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLCB3aGVyZSB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgaXMgYSBtdXNpY2FsIHdvcmssIHBlcmZvcm1hbmNlLCBvciBzb3VuZCByZWNvcmRpbmcsIEFkYXB0ZWQgTWF0ZXJpYWwgaXMgYWx3YXlzIHByb2R1Y2VkIHdoZXJlIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBpcyBzeW5jaGVkIGluIHRpbWVkIHJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UuIGIuIEFkYXB0ZXIncyBMaWNlbnNlIG1lYW5zIHRoZSBsaWNlbnNlIFlvdSBhcHBseSB0byBZb3VyIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMgaW4gWW91ciBjb250cmlidXRpb25zIHRvIEFkYXB0ZWQgTWF0ZXJpYWwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLiBjLiBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIG1lYW5zIGNvcHlyaWdodCBhbmQvb3Igc2ltaWxhciByaWdodHMgY2xvc2VseSByZWxhdGVkIHRvIGNvcHlyaWdodCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcGVyZm9ybWFuY2UsIGJyb2FkY2FzdCwgc291bmQgcmVjb3JkaW5nLCBhbmQgU3VpIEdlbmVyaXMgRGF0YWJhc2UgUmlnaHRzLCB3aXRob3V0IHJlZ2FyZCB0byBob3cgdGhlIHJpZ2h0cyBhcmUgbGFiZWxlZCBvciBjYXRlZ29yaXplZC4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgUHVibGljIExpY2Vuc2UsIHRoZSByaWdodHMgc3BlY2lmaWVkIGluIFNlY3Rpb24gMihiKSgxKS0oMikgYXJlIG5vdCBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzLiBkLiBFZmZlY3RpdmUgVGVjaG5vbG9naWNhbCBNZWFzdXJlcyBtZWFucyB0aG9zZSBtZWFzdXJlcyB0aGF0LCBpbiB0aGUgYWJzZW5jZSBvZiBwcm9wZXIgYXV0aG9yaXR5LCBtYXkgbm90IGJlIGNpcmN1bXZlbnRlZCB1bmRlciBsYXdzIGZ1bGZpbGxpbmcgb2JsaWdhdGlvbnMgdW5kZXIgQXJ0aWNsZSAxMSBvZiB0aGUgV0lQTyBDb3B5cmlnaHQgVHJlYXR5IGFkb3B0ZWQgb24gRGVjZW1iZXIgMjAsIDE5OTYsIGFuZC9vciBzaW1pbGFyIGludGVybmF0aW9uYWwgYWdyZWVtZW50cy4gZS4gRXhjZXB0aW9ucyBhbmQgTGltaXRhdGlvbnMgbWVhbnMgZmFpciB1c2UsIGZhaXIgZGVhbGluZywgYW5kL29yIGFueSBvdGhlciBleGNlcHRpb24gb3IgbGltaXRhdGlvbiB0byBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIHRoYXQgYXBwbGllcyB0byBZb3VyIHVzZSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwuIGYuIExpY2Vuc2VkIE1hdGVyaWFsIG1lYW5zIHRoZSBhcnRpc3RpYyBvciBsaXRlcmFyeSB3b3JrLCBkYXRhYmFzZSwgb3Igb3RoZXIgbWF0ZXJpYWwgdG8gd2hpY2ggdGhlIExpY2Vuc29yIGFwcGxpZWQgdGhpcyBQdWJsaWMgTGljZW5zZS4gZy4gTGljZW5zZWQgUmlnaHRzIG1lYW5zIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3Ugc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZSwgd2hpY2ggYXJlIGxpbWl0ZWQgdG8gYWxsIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMgdGhhdCBhcHBseSB0byBZb3VyIHVzZSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYW5kIHRoYXQgdGhlIExpY2Vuc29yIGhhcyBhdXRob3JpdHkgdG8gbGljZW5zZS4gaC4gTGljZW5zb3IgbWVhbnMgdGhlIGluZGl2aWR1YWwocykgb3IgZW50aXR5KGllcykgZ3JhbnRpbmcgcmlnaHRzIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UuIGkuIFNoYXJlIG1lYW5zIHRvIHByb3ZpZGUgbWF0ZXJpYWwgdG8gdGhlIHB1YmxpYyBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcyB0aGF0IHJlcXVpcmVzIHBlcm1pc3Npb24gdW5kZXIgdGhlIExpY2Vuc2VkIFJpZ2h0cywgc3VjaCBhcyByZXByb2R1Y3Rpb24sIHB1YmxpYyBkaXNwbGF5LCBwdWJsaWMgcGVyZm9ybWFuY2UsIGRpc3RyaWJ1dGlvbiwgZGlzc2VtaW5hdGlvbiwgY29tbXVuaWNhdGlvbiwgb3IgaW1wb3J0YXRpb24sIGFuZCB0byBtYWtlIG1hdGVyaWFsIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluY2x1ZGluZyBpbiB3YXlzIHRoYXQgbWVtYmVycyBvZiB0aGUgcHVibGljIG1heSBhY2Nlc3MgdGhlIG1hdGVyaWFsIGZyb20gYSBwbGFjZSBhbmQgYXQgYSB0aW1lIGluZGl2aWR1YWxseSBjaG9zZW4gYnkgdGhlbS4gai4gU3VpIEdlbmVyaXMgRGF0YWJhc2UgUmlnaHRzIG1lYW5zIHJpZ2h0cyBvdGhlciB0aGFuIGNvcHlyaWdodCByZXN1bHRpbmcgZnJvbSBEaXJlY3RpdmUgOTYvOS9FQyBvZiB0aGUgRXVyb3BlYW4gUGFybGlhbWVudCBhbmQgb2YgdGhlIENvdW5jaWwgb2YgMTEgTWFyY2ggMTk5NiBvbiB0aGUgbGVnYWwgcHJvdGVjdGlvbiBvZiBkYXRhYmFzZXMsIGFzIGFtZW5kZWQgYW5kL29yIHN1Y2NlZWRlZCwgYXMgd2VsbCBhcyBvdGhlciBlc3NlbnRpYWxseSBlcXVpdmFsZW50IHJpZ2h0cyBhbnl3aGVyZSBpbiB0aGUgd29ybGQuIGsuIFlvdSBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyB0aGUgTGljZW5zZWQgUmlnaHRzIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UuIFlvdXIgaGFzIGEgY29ycmVzcG9uZGluZyBtZWFuaW5nLiBTZWN0aW9uIDIgLS0gU2NvcGUuIGEuIExpY2Vuc2UgZ3JhbnQuIDEuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgUHVibGljIExpY2Vuc2UsIHRoZSBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tc3VibGljZW5zYWJsZSwgbm9uLWV4Y2x1c2l2ZSwgaXJyZXZvY2FibGUgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgTGljZW5zZWQgUmlnaHRzIGluIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCB0bzogYS4gcmVwcm9kdWNlIGFuZCBTaGFyZSB0aGUgTGljZW5zZWQgTWF0ZXJpYWwsIGluIHdob2xlIG9yIGluIHBhcnQ7IGFuZCBiLiBwcm9kdWNlLCByZXByb2R1Y2UsIGFuZCBTaGFyZSBBZGFwdGVkIE1hdGVyaWFsLiAyLiBFeGNlcHRpb25zIGFuZCBMaW1pdGF0aW9ucy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIEV4Y2VwdGlvbnMgYW5kIExpbWl0YXRpb25zIGFwcGx5IHRvIFlvdXIgdXNlLCB0aGlzIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IGFwcGx5LCBhbmQgWW91IGRvIG5vdCBuZWVkIHRvIGNvbXBseSB3aXRoIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gMy4gVGVybS4gVGhlIHRlcm0gb2YgdGhpcyBQdWJsaWMgTGljZW5zZSBpcyBzcGVjaWZpZWQgaW4gU2VjdGlvbiA2KGEpLiA0LiBNZWRpYSBhbmQgZm9ybWF0czsgdGVjaG5pY2FsIG1vZGlmaWNhdGlvbnMgYWxsb3dlZC4gVGhlIExpY2Vuc29yIGF1dGhvcml6ZXMgWW91IHRvIGV4ZXJjaXNlIHRoZSBMaWNlbnNlZCBSaWdodHMgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBjcmVhdGVkLCBhbmQgdG8gbWFrZSB0ZWNobmljYWwgbW9kaWZpY2F0aW9ucyBuZWNlc3NhcnkgdG8gZG8gc28uIFRoZSBMaWNlbnNvciB3YWl2ZXMgYW5kL29yIGFncmVlcyBub3QgdG8gYXNzZXJ0IGFueSByaWdodCBvciBhdXRob3JpdHkgdG8gZm9yYmlkIFlvdSBmcm9tIG1ha2luZyB0ZWNobmljYWwgbW9kaWZpY2F0aW9ucyBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIExpY2Vuc2VkIFJpZ2h0cywgaW5jbHVkaW5nIHRlY2huaWNhbCBtb2RpZmljYXRpb25zIG5lY2Vzc2FyeSB0byBjaXJjdW12ZW50IEVmZmVjdGl2ZSBUZWNobm9sb2dpY2FsIE1lYXN1cmVzLiBGb3IgcHVycG9zZXMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZSwgc2ltcGx5IG1ha2luZyBtb2RpZmljYXRpb25zIGF1dGhvcml6ZWQgYnkgdGhpcyBTZWN0aW9uIDIoYSkgKDQpIG5ldmVyIHByb2R1Y2VzIEFkYXB0ZWQgTWF0ZXJpYWwuIDUuIERvd25zdHJlYW0gcmVjaXBpZW50cy4gYS4gT2ZmZXIgZnJvbSB0aGUgTGljZW5zb3IgLS0gTGljZW5zZWQgTWF0ZXJpYWwuIEV2ZXJ5IHJlY2lwaWVudCBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYXV0b21hdGljYWxseSByZWNlaXZlcyBhbiBvZmZlciBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSB0aGUgTGljZW5zZWQgUmlnaHRzIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLiBiLiBObyBkb3duc3RyZWFtIHJlc3RyaWN0aW9ucy4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCB0ZXJtcyBvciBjb25kaXRpb25zIG9uLCBvciBhcHBseSBhbnkgRWZmZWN0aXZlIFRlY2hub2xvZ2ljYWwgTWVhc3VyZXMgdG8sIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBpZiBkb2luZyBzbyByZXN0cmljdHMgZXhlcmNpc2Ugb2YgdGhlIExpY2Vuc2VkIFJpZ2h0cyBieSBhbnkgcmVjaXBpZW50IG9mIHRoZSBMaWNlbnNlZCBNYXRlcmlhbC4gNi4gTm8gZW5kb3JzZW1lbnQuIE5vdGhpbmcgaW4gdGhpcyBQdWJsaWMgTGljZW5zZSBjb25zdGl0dXRlcyBvciBtYXkgYmUgY29uc3RydWVkIGFzIHBlcm1pc3Npb24gdG8gYXNzZXJ0IG9yIGltcGx5IHRoYXQgWW91IGFyZSwgb3IgdGhhdCBZb3VyIHVzZSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgaXMsIGNvbm5lY3RlZCB3aXRoLCBvciBzcG9uc29yZWQsIGVuZG9yc2VkLCBvciBncmFudGVkIG9mZmljaWFsIHN0YXR1cyBieSwgdGhlIExpY2Vuc29yIG9yIG90aGVycyBkZXNpZ25hdGVkIHRvIHJlY2VpdmUgYXR0cmlidXRpb24gYXMgcHJvdmlkZWQgaW4gU2VjdGlvbiAzKGEpKDEpKEEpKGkpLiBiLiBPdGhlciByaWdodHMuIDEuIE1vcmFsIHJpZ2h0cywgc3VjaCBhcyB0aGUgcmlnaHQgb2YgaW50ZWdyaXR5LCBhcmUgbm90IGxpY2Vuc2VkIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UsIG5vciBhcmUgcHVibGljaXR5LCBwcml2YWN5LCBhbmQvb3Igb3RoZXIgc2ltaWxhciBwZXJzb25hbGl0eSByaWdodHM7IGhvd2V2ZXIsIHRvIHRoZSBleHRlbnQgcG9zc2libGUsIHRoZSBMaWNlbnNvciB3YWl2ZXMgYW5kL29yIGFncmVlcyBub3QgdG8gYXNzZXJ0IGFueSBzdWNoIHJpZ2h0cyBoZWxkIGJ5IHRoZSBMaWNlbnNvciB0byB0aGUgbGltaXRlZCBleHRlbnQgbmVjZXNzYXJ5IHRvIGFsbG93IFlvdSB0byBleGVyY2lzZSB0aGUgTGljZW5zZWQgUmlnaHRzLCBidXQgbm90IG90aGVyd2lzZS4gMi4gUGF0ZW50IGFuZCB0cmFkZW1hcmsgcmlnaHRzIGFyZSBub3QgbGljZW5zZWQgdW5kZXIgdGhpcyBQdWJsaWMgTGljZW5zZS4gMy4gVG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgdGhlIExpY2Vuc29yIHdhaXZlcyBhbnkgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgZnJvbSBZb3UgZm9yIHRoZSBleGVyY2lzZSBvZiB0aGUgTGljZW5zZWQgUmlnaHRzLCB3aGV0aGVyIGRpcmVjdGx5IG9yIHRocm91Z2ggYSBjb2xsZWN0aW5nIHNvY2lldHkgdW5kZXIgYW55IHZvbHVudGFyeSBvciB3YWl2YWJsZSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lLiBJbiBhbGwgb3RoZXIgY2FzZXMgdGhlIExpY2Vuc29yIGV4cHJlc3NseSByZXNlcnZlcyBhbnkgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcy4gU2VjdGlvbiAzIC0tIExpY2Vuc2UgQ29uZGl0aW9ucy4gWW91ciBleGVyY2lzZSBvZiB0aGUgTGljZW5zZWQgUmlnaHRzIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zLiBhLiBBdHRyaWJ1dGlvbi4gMS4gSWYgWW91IFNoYXJlIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCAoaW5jbHVkaW5nIGluIG1vZGlmaWVkIGZvcm0pLCBZb3UgbXVzdDogYS4gcmV0YWluIHRoZSBmb2xsb3dpbmcgaWYgaXQgaXMgc3VwcGxpZWQgYnkgdGhlIExpY2Vuc29yIHdpdGggdGhlIExpY2Vuc2VkIE1hdGVyaWFsOiBpLiBpZGVudGlmaWNhdGlvbiBvZiB0aGUgY3JlYXRvcihzKSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYW5kIGFueSBvdGhlcnMgZGVzaWduYXRlZCB0byByZWNlaXZlIGF0dHJpYnV0aW9uLCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXIgcmVxdWVzdGVkIGJ5IHRoZSBMaWNlbnNvciAoaW5jbHVkaW5nIGJ5IHBzZXVkb255bSBpZiBkZXNpZ25hdGVkKTsgaWkuIGEgY29weXJpZ2h0IG5vdGljZTsgaWlpLiBhIG5vdGljZSB0aGF0IHJlZmVycyB0byB0aGlzIFB1YmxpYyBMaWNlbnNlOyBpdi4gYSBub3RpY2UgdGhhdCByZWZlcnMgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllczsgdi4gYSBVUkkgb3IgaHlwZXJsaW5rIHRvIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGU7IGIuIGluZGljYXRlIGlmIFlvdSBtb2RpZmllZCB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYW5kIHJldGFpbiBhbiBpbmRpY2F0aW9uIG9mIGFueSBwcmV2aW91cyBtb2RpZmljYXRpb25zOyBhbmQgYy4gaW5kaWNhdGUgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGlzIGxpY2Vuc2VkIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UsIGFuZCBpbmNsdWRlIHRoZSB0ZXh0IG9mLCBvciB0aGUgVVJJIG9yIGh5cGVybGluayB0bywgdGhpcyBQdWJsaWMgTGljZW5zZS4gMi4gWW91IG1heSBzYXRpc2Z5IHRoZSBjb25kaXRpb25zIGluIFNlY3Rpb24gMyhhKSgxKSBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXIgYmFzZWQgb24gdGhlIG1lZGl1bSwgbWVhbnMsIGFuZCBjb250ZXh0IGluIHdoaWNoIFlvdSBTaGFyZSB0aGUgTGljZW5zZWQgTWF0ZXJpYWwuIEZvciBleGFtcGxlLCBpdCBtYXkgYmUgcmVhc29uYWJsZSB0byBzYXRpc2Z5IHRoZSBjb25kaXRpb25zIGJ5IHByb3ZpZGluZyBhIFVSSSBvciBoeXBlcmxpbmsgdG8gYSByZXNvdXJjZSB0aGF0IGluY2x1ZGVzIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi4gMy4gSWYgcmVxdWVzdGVkIGJ5IHRoZSBMaWNlbnNvciwgWW91IG11c3QgcmVtb3ZlIGFueSBvZiB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgYnkgU2VjdGlvbiAzKGEpKDEpKEEpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gNC4gSWYgWW91IFNoYXJlIEFkYXB0ZWQgTWF0ZXJpYWwgWW91IHByb2R1Y2UsIHRoZSBBZGFwdGVyJ3MgTGljZW5zZSBZb3UgYXBwbHkgbXVzdCBub3QgcHJldmVudCByZWNpcGllbnRzIG9mIHRoZSBBZGFwdGVkIE1hdGVyaWFsIGZyb20gY29tcGx5aW5nIHdpdGggdGhpcyBQdWJsaWMgTGljZW5zZS4gU2VjdGlvbiA0IC0tIFN1aSBHZW5lcmlzIERhdGFiYXNlIFJpZ2h0cy4gV2hlcmUgdGhlIExpY2Vuc2VkIFJpZ2h0cyBpbmNsdWRlIFN1aSBHZW5lcmlzIERhdGFiYXNlIFJpZ2h0cyB0aGF0IGFwcGx5IHRvIFlvdXIgdXNlIG9mIHRoZSBMaWNlbnNlZCBNYXRlcmlhbDogYS4gZm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFNlY3Rpb24gMihhKSgxKSBncmFudHMgWW91IHRoZSByaWdodCB0byBleHRyYWN0LCByZXVzZSwgcmVwcm9kdWNlLCBhbmQgU2hhcmUgYWxsIG9yIGEgc3Vic3RhbnRpYWwgcG9ydGlvbiBvZiB0aGUgY29udGVudHMgb2YgdGhlIGRhdGFiYXNlOyBiLiBpZiBZb3UgaW5jbHVkZSBhbGwgb3IgYSBzdWJzdGFudGlhbCBwb3J0aW9uIG9mIHRoZSBkYXRhYmFzZSBjb250ZW50cyBpbiBhIGRhdGFiYXNlIGluIHdoaWNoIFlvdSBoYXZlIFN1aSBHZW5lcmlzIERhdGFiYXNlIFJpZ2h0cywgdGhlbiB0aGUgZGF0YWJhc2UgaW4gd2hpY2ggWW91IGhhdmUgU3VpIEdlbmVyaXMgRGF0YWJhc2UgUmlnaHRzIChidXQgbm90IGl0cyBpbmRpdmlkdWFsIGNvbnRlbnRzKSBpcyBBZGFwdGVkIE1hdGVyaWFsOyBhbmQgYy4gWW91IG11c3QgY29tcGx5IHdpdGggdGhlIGNvbmRpdGlvbnMgaW4gU2VjdGlvbiAzKGEpIGlmIFlvdSBTaGFyZSBhbGwgb3IgYSBzdWJzdGFudGlhbCBwb3J0aW9uIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgZGF0YWJhc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIFNlY3Rpb24gNCBzdXBwbGVtZW50cyBhbmQgZG9lcyBub3QgcmVwbGFjZSBZb3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2Ugd2hlcmUgdGhlIExpY2Vuc2VkIFJpZ2h0cyBpbmNsdWRlIG90aGVyIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMuIFNlY3Rpb24gNSAtLSBEaXNjbGFpbWVyIG9mIFdhcnJhbnRpZXMgYW5kIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBhLiBVTkxFU1MgT1RIRVJXSVNFIFNFUEFSQVRFTFkgVU5ERVJUQUtFTiBCWSBUSEUgTElDRU5TT1IsIFRPIFRIRSBFWFRFTlQgUE9TU0lCTEUsIFRIRSBMSUNFTlNPUiBPRkZFUlMgVEhFIExJQ0VOU0VEIE1BVEVSSUFMIEFTLUlTIEFORCBBUy1BVkFJTEFCTEUsIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBMSUNFTlNFRCBNQVRFUklBTCwgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlksIE9SIE9USEVSLiBUSElTIElOQ0xVREVTLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTi1JTkZSSU5HRU1FTlQsIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT1IgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIEtOT1dOIE9SIERJU0NPVkVSQUJMRS4gV0hFUkUgRElTQ0xBSU1FUlMgT0YgV0FSUkFOVElFUyBBUkUgTk9UIEFMTE9XRUQgSU4gRlVMTCBPUiBJTiBQQVJULCBUSElTIERJU0NMQUlNRVIgTUFZIE5PVCBBUFBMWSBUTyBZT1UuIGIuIFRPIFRIRSBFWFRFTlQgUE9TU0lCTEUsIElOIE5PIEVWRU5UIFdJTEwgVEhFIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSAoSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIE5FR0xJR0VOQ0UpIE9SIE9USEVSV0lTRSBGT1IgQU5ZIERJUkVDVCwgU1BFQ0lBTCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFLCBFWEVNUExBUlksIE9SIE9USEVSIExPU1NFUywgQ09TVFMsIEVYUEVOU0VTLCBPUiBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgUFVCTElDIExJQ0VOU0UgT1IgVVNFIE9GIFRIRSBMSUNFTlNFRCBNQVRFUklBTCwgRVZFTiBJRiBUSEUgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBMT1NTRVMsIENPU1RTLCBFWFBFTlNFUywgT1IgREFNQUdFUy4gV0hFUkUgQSBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBJUyBOT1QgQUxMT1dFRCBJTiBGVUxMIE9SIElOIFBBUlQsIFRISVMgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4gYy4gVGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyBhbmQgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgcHJvdmlkZWQgYWJvdmUgc2hhbGwgYmUgaW50ZXJwcmV0ZWQgaW4gYSBtYW5uZXIgdGhhdCwgdG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgbW9zdCBjbG9zZWx5IGFwcHJveGltYXRlcyBhbiBhYnNvbHV0ZSBkaXNjbGFpbWVyIGFuZCB3YWl2ZXIgb2YgYWxsIGxpYWJpbGl0eS4gU2VjdGlvbiA2IC0tIFRlcm0gYW5kIFRlcm1pbmF0aW9uLiBhLiBUaGlzIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgZm9yIHRoZSB0ZXJtIG9mIHRoZSBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIGxpY2Vuc2VkIGhlcmUuIEhvd2V2ZXIsIGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRoaXMgUHVibGljIExpY2Vuc2UsIHRoZW4gWW91ciByaWdodHMgdW5kZXIgdGhpcyBQdWJsaWMgTGljZW5zZSB0ZXJtaW5hdGUgYXV0b21hdGljYWxseS4gYi4gV2hlcmUgWW91ciByaWdodCB0byB1c2UgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGhhcyB0ZXJtaW5hdGVkIHVuZGVyIFNlY3Rpb24gNihhKSwgaXQgcmVpbnN0YXRlczogMS4gYXV0b21hdGljYWxseSBhcyBvZiB0aGUgZGF0ZSB0aGUgdmlvbGF0aW9uIGlzIGN1cmVkLCBwcm92aWRlZCBpdCBpcyBjdXJlZCB3aXRoaW4gMzAgZGF5cyBvZiBZb3VyIGRpc2NvdmVyeSBvZiB0aGUgdmlvbGF0aW9uOyBvciAyLiB1cG9uIGV4cHJlc3MgcmVpbnN0YXRlbWVudCBieSB0aGUgTGljZW5zb3IuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIFNlY3Rpb24gNihiKSBkb2VzIG5vdCBhZmZlY3QgYW55IHJpZ2h0IHRoZSBMaWNlbnNvciBtYXkgaGF2ZSB0byBzZWVrIHJlbWVkaWVzIGZvciBZb3VyIHZpb2xhdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZS4gYy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoZSBMaWNlbnNvciBtYXkgYWxzbyBvZmZlciB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgdW5kZXIgc2VwYXJhdGUgdGVybXMgb3IgY29uZGl0aW9ucyBvciBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYXQgYW55IHRpbWU7IGhvd2V2ZXIsIGRvaW5nIHNvIHdpbGwgbm90IHRlcm1pbmF0ZSB0aGlzIFB1YmxpYyBMaWNlbnNlLiBkLiBTZWN0aW9ucyAxLCA1LCA2LCA3LCBhbmQgOCBzdXJ2aXZlIHRlcm1pbmF0aW9uIG9mIHRoaXMgUHVibGljIExpY2Vuc2UuIFNlY3Rpb24gNyAtLSBPdGhlciBUZXJtcyBhbmQgQ29uZGl0aW9ucy4gYS4gVGhlIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgdGVybXMgb3IgY29uZGl0aW9ucyBjb21tdW5pY2F0ZWQgYnkgWW91IHVubGVzcyBleHByZXNzbHkgYWdyZWVkLiBiLiBBbnkgYXJyYW5nZW1lbnRzLCB1bmRlcnN0YW5kaW5ncywgb3IgYWdyZWVtZW50cyByZWdhcmRpbmcgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIG5vdCBzdGF0ZWQgaGVyZWluIGFyZSBzZXBhcmF0ZSBmcm9tIGFuZCBpbmRlcGVuZGVudCBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZS4gU2VjdGlvbiA4IC0tIEludGVycHJldGF0aW9uLiBhLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCwgYW5kIHNoYWxsIG5vdCBiZSBpbnRlcnByZXRlZCB0bywgcmVkdWNlLCBsaW1pdCwgcmVzdHJpY3QsIG9yIGltcG9zZSBjb25kaXRpb25zIG9uIGFueSB1c2Ugb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIHRoYXQgY291bGQgbGF3ZnVsbHkgYmUgbWFkZSB3aXRob3V0IHBlcm1pc3Npb24gdW5kZXIgdGhpcyBQdWJsaWMgTGljZW5zZS4gYi4gVG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgaWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlIGlzIGRlZW1lZCB1bmVuZm9yY2VhYmxlLCBpdCBzaGFsbCBiZSBhdXRvbWF0aWNhbGx5IHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gSWYgdGhlIHByb3Zpc2lvbiBjYW5ub3QgYmUgcmVmb3JtZWQsIGl0IHNoYWxsIGJlIHNldmVyZWQgZnJvbSB0aGlzIFB1YmxpYyBMaWNlbnNlIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluaW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLiBjLiBObyB0ZXJtIG9yIGNvbmRpdGlvbiBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlIHdpbGwgYmUgd2FpdmVkIGFuZCBubyBmYWlsdXJlIHRvIGNvbXBseSBjb25zZW50ZWQgdG8gdW5sZXNzIGV4cHJlc3NseSBhZ3JlZWQgdG8gYnkgdGhlIExpY2Vuc29yLiBkLiBOb3RoaW5nIGluIHRoaXMgUHVibGljIExpY2Vuc2UgY29uc3RpdHV0ZXMgb3IgbWF5IGJlIGludGVycHJldGVkIGFzIGEgbGltaXRhdGlvbiB1cG9uLCBvciB3YWl2ZXIgb2YsIGFueSBwcml2aWxlZ2VzIGFuZCBpbW11bml0aWVzIHRoYXQgYXBwbHkgdG8gdGhlIExpY2Vuc29yIG9yIFlvdSwgaW5jbHVkaW5nIGZyb20gdGhlIGxlZ2FsIHByb2Nlc3NlcyBvZiBhbnkganVyaXNkaWN0aW9uIG9yIGF1dGhvcml0eS4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byBpdHMgcHVibGljIGxpY2Vuc2VzLiBOb3R3aXRoc3RhbmRpbmcsIENyZWF0aXZlIENvbW1vbnMgbWF5IGVsZWN0IHRvIGFwcGx5IG9uZSBvZiBpdHMgcHVibGljIGxpY2Vuc2VzIHRvIG1hdGVyaWFsIGl0IHB1Ymxpc2hlcyBhbmQgaW4gdGhvc2UgaW5zdGFuY2VzIHdpbGwgYmUgY29uc2lkZXJlZCB0aGUgIkxpY2Vuc29yLiIgRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdGhhdCBtYXRlcmlhbCBpcyBzaGFyZWQgdW5kZXIgYSBDcmVhdGl2ZSBDb21tb25zIHB1YmxpYyBsaWNlbnNlIG9yIGFzIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgdGhlIENyZWF0aXZlIENvbW1vbnMgcG9saWNpZXMgcHVibGlzaGVkIGF0IGNyZWF0aXZlY29tbW9ucy5vcmcvcG9saWNpZXMsIENyZWF0aXZlIENvbW1vbnMgZG9lcyBub3QgYXV0aG9yaXplIHRoZSB1c2Ugb2YgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IG90aGVyIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCBpdHMgcHJpb3Igd3JpdHRlbiBjb25zZW50IGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBpbiBjb25uZWN0aW9uIHdpdGggYW55IHVuYXV0aG9yaXplZCBtb2RpZmljYXRpb25zIHRvIGFueSBvZiBpdHMgcHVibGljIGxpY2Vuc2VzIG9yIGFueSBvdGhlciBhcnJhbmdlbWVudHMsIHVuZGVyc3RhbmRpbmdzLCBvciBhZ3JlZW1lbnRzIGNvbmNlcm5pbmcgdXNlIG9mIGxpY2Vuc2VkIG1hdGVyaWFsLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyBwYXJhZ3JhcGggZG9lcyBub3QgZm9ybSBwYXJ0IG9mIHRoZSBwdWJsaWMgbGljZW5zZXMuIENyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBjcmVhdGl2ZWNvbW1vbnMub3JnLg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tV2ViIEJhY2tncm91bmQgU3luY2hyb25pemF0aW9uLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCldlYiBCYWNrZ3JvdW5kIFN5bmNocm9uaXphdGlvbiBTcGVjaWZpY2F0aW9uDQpQb3J0aW9ucyBvZiBzcGVjIKkgYnkgVzNDDQoNClczQyBDb21tdW5pdHkgRmluYWwgU3BlY2lmaWNhdGlvbiBBZ3JlZW1lbnQgDQpUbyBzZWN1cmUgY29tbWl0bWVudHMgZnJvbSBwYXJ0aWNpcGFudHMgZm9yIHRoZSBmdWxsIHRleHQgb2YgYSBDb21tdW5pdHkgb3IgQnVzaW5lc3MgR3JvdXAgUmVwb3J0LCB0aGUgZ3JvdXAgbWF5IGNhbGwgZm9yIHZvbHVudGFyeSBjb21taXRtZW50cyB0byB0aGUgZm9sbG93aW5nIHRlcm1zOyBhICJzdW1tYXJ5IiBpcyANCmF2YWlsYWJsZS4gU2VlIGFsc28gdGhlIHJlbGF0ZWQgIlczQyBDb21tdW5pdHkgQ29udHJpYnV0b3IgTGljZW5zZSBBZ3JlZW1lbnQiLg0KMS4gVGhlIFB1cnBvc2Ugb2YgdGhpcyBBZ3JlZW1lbnQuDQpUaGlzIEFncmVlbWVudCBzZXRzIGZvcnRoIHRoZSB0ZXJtcyB1bmRlciB3aGljaCBJIG1ha2UgY2VydGFpbiBjb3B5cmlnaHQgYW5kIHBhdGVudCByaWdodHMgYXZhaWxhYmxlIHRvIHlvdSBmb3IgeW91ciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3BlY2lmaWNhdGlvbi4gDQpBbnkgb3RoZXIgY2FwaXRhbGl6ZWQgdGVybXMgbm90IHNwZWNpZmljYWxseSBkZWZpbmVkIGhlcmVpbiBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgdGhvc2UgdGVybXMgaGF2ZSBpbiB0aGUgIlczQyBQYXRlbnQgUG9saWN5IiwgYW5kIGlmIG5vdCBkZWZpbmVkIHRoZXJlLCBpbiB0aGUgIlczQyBQcm9jZXNzIERvY3VtZW50Ii4NCjIuIENvcHlyaWdodHMuIA0KMi4xLiBDb3B5cmlnaHQgR3JhbnQuIEkgZ3JhbnQgdG8geW91IGEgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCksIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGNvcHlyaWdodCBsaWNlbnNlLCB3aXRob3V0IGFueSBvYmxpZ2F0aW9uIGZvciBhY2NvdW50aW5nIHRvIG1lLCB0byByZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSwgYW5kIGltcGxlbWVudCB0aGUgU3BlY2lmaWNhdGlvbiB0byB0aGUgZnVsbCBleHRlbnQgb2YgbXkgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBTcGVjaWZpY2F0aW9uLiANCjIuMi4gQXR0cmlidXRpb24uIEFzIGEgY29uZGl0aW9uIG9mIHRoZSBjb3B5cmlnaHQgZ3JhbnQsIHlvdSBtdXN0IGluY2x1ZGUgYW4gYXR0cmlidXRpb24gdG8gdGhlIFNwZWNpZmljYXRpb24gaW4gYW55IGRlcml2YXRpdmUgd29yayB5b3UgbWFrZSBiYXNlZCBvbiB0aGUgU3BlY2lmaWNhdGlvbi4gVGhhdCBhdHRyaWJ1dGlvbiBtdXN0IGluY2x1ZGUsIGF0IG1pbmltdW0sIHRoZSBTcGVjaWZpY2F0aW9uIG5hbWUgYW5kIHZlcnNpb24gbnVtYmVyLg0KMy4gUGF0ZW50cy4gDQozLjEuIFBhdGVudCBMaWNlbnNpbmcgQ29tbWl0bWVudC4gSSBhZ3JlZSB0byBsaWNlbnNlIG15IEVzc2VudGlhbCBDbGFpbXMgdW5kZXIgdGhlIFczQyBDb21tdW5pdHkgUkYgTGljZW5zaW5nIFJlcXVpcmVtZW50cy4gVGhpcyByZXF1aXJlbWVudCBpbmNsdWRlcyBFc3NlbnRpYWwgQ2xhaW1zIHRoYXQgSSBvd24gYW5kIGFueSB0aGF0IEkgaGF2ZSB0aGUgcmlnaHQgdG8gbGljZW5zZSB3aXRob3V0IG9ibGlnYXRpb24gb2YgcGF5bWVudCBvciBvdGhlciBjb25zaWRlcmF0aW9uIHRvIGFuIHVucmVsYXRlZCB0aGlyZCBwYXJ0eS4gVzNDIENvbW11bml0eSBSRiBMaWNlbnNpbmcgUmVxdWlyZW1lbnRzIG9ibGlnYXRpb25zIG1hZGUgY29uY2VybmluZyB0aGUgU3BlY2lmaWNhdGlvbiBhbmQgZGVzY3JpYmVkIGluIHRoaXMgcG9saWN5IGFyZSBiaW5kaW5nIG9uIG1lIGZvciB0aGUgbGlmZSBvZiB0aGUgcGF0ZW50cyBpbiBxdWVzdGlvbiBhbmQgZW5jdW1iZXIgdGhlIHBhdGVudHMgY29udGFpbmluZyBFc3NlbnRpYWwgQ2xhaW1zLCByZWdhcmRsZXNzIG9mIGNoYW5nZXMgaW4gcGFydGljaXBhdGlvbiBzdGF0dXMgb3IgVzNDIE1lbWJlcnNoaXAuIEkgYWxzbyBhZ3JlZSB0byBsaWNlbnNlIG15IEVzc2VudGlhbCBDbGFpbXMgdW5kZXIgdGhlIFczQyBDb21tdW5pdHkgUkYgTGljZW5zaW5nIFJlcXVpcmVtZW50cyBpbiBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGVjaWZpY2F0aW9uIHNvIGxvbmcgYXMgYWxsIG5vcm1hdGl2ZSBwb3J0aW9ucyBvZiB0aGUgU3BlY2lmaWNhdGlvbiBhcmUgbWFpbnRhaW5lZCBhbmQgdGhhdCB0aGlzIGxpY2Vuc2luZyBjb21taXRtZW50IGRvZXMgbm90IGV4dGVuZCB0byBhbnkgcG9ydGlvbiBvZiB0aGUgZGVyaXZhdGl2ZSB3b3JrIHRoYXQgd2FzIG5vdCBpbmNsdWRlZCBpbiB0aGUgU3BlY2lmaWNhdGlvbi4NCjMuMi4gT3B0aW9uYWwsIEFkZGl0aW9uYWwgUGF0ZW50IEdyYW50LiBJbiBhZGRpdGlvbiB0byB0aGUgcHJvdmlzaW9ucyBvZiBTZWN0aW9uIDMuMSwgSSBtYXkgYWxzbywgYXQgbXkgb3B0aW9uLCBtYWtlIGNlcnRhaW4gaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpbmZyaW5nZWQgYnkgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBTcGVjaWZpY2F0aW9uLCBpbmNsdWRpbmcgRXNzZW50aWFsIENsYWltcywgYXZhaWxhYmxlIGJ5IHByb3ZpZGluZyB0aG9zZSB0ZXJtcyB2aWEgdGhlIFczQyBXZWIgc2l0ZS4NCjQuIE5vIE90aGVyIFJpZ2h0cy4gRXhjZXB0IGFzIHNwZWNpZmljYWxseSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQsIG5vIG90aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCBwYXRlbnQsIHRyYWRlbWFyaywgY29weXJpZ2h0LCBvciBvdGhlciBwcm9wZXJ0eSByaWdodHMgYXJlIGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBieSBpbXBsaWNhdGlvbiwgd2FpdmVyLCBvciBlc3RvcHBlbC4NCjUuIEFudGl0cnVzdCBDb21wbGlhbmNlLiBJIGFja25vd2xlZGdlIHRoYXQgSSBtYXkgY29tcGV0ZSB3aXRoIG90aGVyIHBhcnRpY2lwYW50cywgdGhhdCBJIGFtIHVuZGVyIG5vIG9ibGlnYXRpb24gdG8gaW1wbGVtZW50IHRoZSBTcGVjaWZpY2F0aW9uLCB0aGF0IGVhY2ggcGFydGljaXBhbnQgaXMgZnJlZSB0byBkZXZlbG9wIGNvbXBldGluZyB0ZWNobm9sb2dpZXMgYW5kIHN0YW5kYXJkcywgYW5kIHRoYXQgZWFjaCBwYXJ0eSBpcyBmcmVlIHRvIGxpY2Vuc2UgaXRzIHBhdGVudCByaWdodHMgdG8gdGhpcmQgcGFydGllcywgaW5jbHVkaW5nIGZvciB0aGUgcHVycG9zZSBvZiBlbmFibGluZyBjb21wZXRpbmcgdGVjaG5vbG9naWVzIGFuZCBzdGFuZGFyZHMuDQo2LiBOb24tQ2lyY3VtdmVudGlvbi4gSSBhZ3JlZSB0aGF0IEkgd2lsbCBub3QgaW50ZW50aW9uYWxseSB0YWtlIG9yIHdpbGxmdWxseSBhc3Npc3QgYW55IHRoaXJkIHBhcnR5IHRvIHRha2UgYW55IGFjdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgY2lyY3VtdmVudGluZyBteSBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudC4NCjcuIFRyYW5zaXRpb24gdG8gVzNDIFJlY29tbWVuZGF0aW9uIFRyYWNrLiBUaGUgU3BlY2lmaWNhdGlvbiBkZXZlbG9wZWQgYnkgdGhlIFByb2plY3QgbWF5IHRyYW5zaXRpb24gdG8gdGhlIFczQyBSZWNvbW1lbmRhdGlvbiBUcmFjay4gVGhlIFczQyBUZWFtIGlzIHJlc3BvbnNpYmxlIGZvciBub3RpZnlpbmcgbWUgdGhhdCBhIENvcnJlc3BvbmRpbmcgV29ya2luZyBHcm91cCBoYXMgYmVlbiBjaGFydGVyZWQuIEkgaGF2ZSBubyBvYmxpZ2F0aW9uIHRvIGpvaW4gdGhlIENvcnJlc3BvbmRpbmcgV29ya2luZyBHcm91cC4gSWYgdGhlIFNwZWNpZmljYXRpb24gZGV2ZWxvcGVkIGJ5IHRoZSBQcm9qZWN0IHRyYW5zaXRpb25zIHRvIHRoZSBXM0MgUmVjb21tZW5kYXRpb24gVHJhY2ssIHRoZSBmb2xsb3dpbmcgdGVybXMgYXBwbHk6IA0KNy4xLiBJZiBJIGpvaW4gdGhlIENvcnJlc3BvbmRpbmcgV29ya2luZyBHcm91cC4gSWYgSSBqb2luIHRoZSBDb3JyZXNwb25kaW5nIFdvcmtpbmcgR3JvdXAsIEkgd2lsbCBiZSBzdWJqZWN0IHRvIGFsbCBXM0MgcnVsZXMsIG9ibGlnYXRpb25zLCBsaWNlbnNpbmcgY29tbWl0bWVudHMsIGFuZCBwb2xpY2llcyB0aGF0IGdvdmVybiB0aGF0IENvcnJlc3BvbmRpbmcgV29ya2luZyBHcm91cC4NCjcuMi4gSWYgSSBEbyBOb3QgSm9pbiB0aGUgQ29ycmVzcG9uZGluZyBXb3JraW5nIEdyb3VwLiANCjcuMi4xLiBMaWNlbnNpbmcgT2JsaWdhdGlvbnMgdG8gUmVzdWx0aW5nIFNwZWNpZmljYXRpb24uIElmIEkgZG8gbm90IGpvaW4gdGhlIENvcnJlc3BvbmRpbmcgV29ya2luZyBHcm91cCwgSSBhZ3JlZSB0byBvZmZlciBwYXRlbnQgbGljZW5zZXMgYWNjb3JkaW5nIHRvIHRoZSBXM0MgUm95YWx0eS1GcmVlIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gNSBvZiB0aGUgVzNDIFBhdGVudCBQb2xpY3kgZm9yIHRoZSBwb3J0aW9ucyBvZiB0aGUgU3BlY2lmaWNhdGlvbiBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5nIFJlY29tbWVuZGF0aW9uLiBUaGlzIGxpY2Vuc2luZyBjb21taXRtZW50IGRvZXMgbm90IGV4dGVuZCB0byBhbnkgcG9ydGlvbiBvZiBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUmVjb21tZW5kYXRpb24gdGhhdCB3YXMgbm90IGluY2x1ZGVkIGluIHRoZSBTcGVjaWZpY2F0aW9uLiBUaGlzIGxpY2Vuc2luZyBjb21taXRtZW50IG1heSBub3QgYmUgcmV2b2tlZCBidXQgbWF5IGJlIG1vZGlmaWVkIHRocm91Z2ggdGhlIGV4Y2x1c2lvbiBwcm9jZXNzIGRlZmluZWQgaW4gU2VjdGlvbiA0IG9mIHRoZSBXM0MgUGF0ZW50IFBvbGljeS4gSSBhbSBub3QgcmVxdWlyZWQgdG8gam9pbiB0aGUgQ29ycmVzcG9uZGluZyBXb3JraW5nIEdyb3VwIHRvIGV4Y2x1ZGUgcGF0ZW50cyBmcm9tIHRoZSBXM0MgUm95YWx0eS1GcmVlIGxpY2Vuc2luZyBjb21taXRtZW50LCBidXQgbXVzdCBvdGhlcndpc2UgZm9sbG93IHRoZSBub3JtYWwgZXhjbHVzaW9uIHByb2NlZHVyZXMgZGVmaW5lZCBieSB0aGUgVzNDIFBhdGVudCBQb2xpY3kuIFRoZSBXM0MgVGVhbSB3aWxsIG5vdGlmeSBtZSBvZiBhbnkgQ2FsbCBmb3IgRXhjbHVzaW9uIGluIHRoZSBDb3JyZXNwb25kaW5nIFdvcmtpbmcgR3JvdXAgYXMgc2V0IGZvcnRoIGluIFNlY3Rpb24gNC41IG9mIHRoZSBXM0MgUGF0ZW50IFBvbGljeS4NCjcuMi4yLiBObyBEaXNjbG9zdXJlIE9ibGlnYXRpb24uIElmIEkgZG8gbm90IGpvaW4gdGhlIENvcnJlc3BvbmRpbmcgV29ya2luZyBHcm91cCwgSSBoYXZlIG5vIHBhdGVudCBkaXNjbG9zdXJlIG9ibGlnYXRpb25zIG91dHNpZGUgb2YgdGhvc2Ugc2V0IGZvcnRoIGluIFNlY3Rpb24gNiBvZiB0aGUgVzNDIFBhdGVudCBQb2xpY3kuDQo4LiBDb25mbGljdCBvZiBJbnRlcmVzdC4gSSB3aWxsIGRpc2Nsb3NlIHNpZ25pZmljYW50IHJlbGF0aW9uc2hpcHMgd2hlbiB0aG9zZSByZWxhdGlvbnNoaXBzIG1pZ2h0IHJlYXNvbmFibHkgYmUgcGVyY2VpdmVkIGFzIGNyZWF0aW5nIGEgY29uZmxpY3Qgb2YgaW50ZXJlc3Qgd2l0aCBteSByb2xlLiBJIHdpbGwgbm90aWZ5IFczQyBvZiBhbnkgY2hhbmdlIGluIG15IGFmZmlsaWF0aW9uIHVzaW5nIFczQy1wcm92aWRlZCBtZWNoYW5pc21zLg0KOS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVycy4gSSByZXByZXNlbnQgYW5kIHdhcnJhbnQgdGhhdCBJIGFtIGxlZ2FsbHkgZW50aXRsZWQgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBhbmQgcHJvbWlzZXMgc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LiBJTiBBTEwgT1RIRVIgUkVTUEVDVFMgVEhFIFNQRUNJRklDQVRJT04gSVMgUFJPVklERUQgk0FTIElTLpQgVGhlIGVudGlyZSByaXNrIGFzIHRvIGltcGxlbWVudGluZyBvciBvdGhlcndpc2UgdXNpbmcgdGhlIFNwZWNpZmljYXRpb24gaXMgYXNzdW1lZCBieSB0aGUgaW1wbGVtZW50ZXIgYW5kIHVzZXIuIEV4Y2VwdCBhcyBzdGF0ZWQgaGVyZWluLCBJIGV4cHJlc3NseSBkaXNjbGFpbSBhbnkgd2FycmFudGllcyAoZXhwcmVzcywgaW1wbGllZCwgb3Igb3RoZXJ3aXNlKSwgaW5jbHVkaW5nIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHksIG5vbi1pbmZyaW5nZW1lbnQsIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLCBvciB0aXRsZSwgcmVsYXRlZCB0byB0aGUgU3BlY2lmaWNhdGlvbi4gSU4gTk8gRVZFTlQgV0lMTCBBTlkgUEFSVFkgQkUgTElBQkxFIFRPIEFOWSBPVEhFUiBQQVJUWSBGT1IgTE9TVCBQUk9GSVRTIE9SIEFOWSBGT1JNIE9GIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBGUk9NIEFOWSBDQVVTRVMgT0YgQUNUSU9OIE9GIEFOWSBLSU5EIFdJVEggUkVTUEVDVCBUTyBUSElTIEFHUkVFTUVOVCwgV0hFVEhFUiBCQVNFRCBPTiBCUkVBQ0ggT0YgQ09OVFJBQ1QsIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgT1IgT1RIRVJXSVNFLCBBTkQgV0hFVEhFUiBPUiBOT1QgVEhFIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiBBbGwgb2YgbXkgb2JsaWdhdGlvbnMgdW5kZXIgU2VjdGlvbiAzIHJlZ2FyZGluZyB0aGUgdHJhbnNmZXIsIHN1Y2Nlc3NvcnMgaW4gaW50ZXJlc3QsIG9yIGFzc2lnbm1lbnQgb2YgR3JhbnRlZCBDbGFpbXMgd2lsbCBiZSBzYXRpc2ZpZWQgaWYgSSBub3RpZnkgdGhlIHRyYW5zZmVyZWUgb3IgYXNzaWduZWUgb2YgYW55IHBhdGVudCB0aGF0IEkga25vdyBjb250YWlucyBHcmFudGVkIENsYWltcyBvZiB0aGUgb2JsaWdhdGlvbnMgdW5kZXIgU2VjdGlvbiAzLiBOb3RoaW5nIGluIHRoaXMgQWdyZWVtZW50IHJlcXVpcmVzIG1lIHRvIHVuZGVydGFrZSBhIHBhdGVudCBzZWFyY2guDQoxMC4gRGVmaW5pdGlvbnMuIA0KMTAuMS4gQWdyZWVtZW50LiCTQWdyZWVtZW50lCBtZWFucyB0aGlzIFczQyBDb21tdW5pdHkgRmluYWwgU3BlY2lmaWNhdGlvbiBBZ3JlZW1lbnQuDQoxMC4yLiBDb3JyZXNwb25kaW5nIFdvcmtpbmcgR3JvdXAuIJNDb3JyZXNwb25kaW5nIFdvcmtpbmcgR3JvdXCUIGlzIGEgVzNDIFdvcmtpbmcgR3JvdXAgdGhhdCBpcyBjaGFydGVyZWQgdG8gZGV2ZWxvcCBhIFJlY29tbWVuZGF0aW9uLCBhcyBkZWZpbmVkIGluIHRoZSBXM0MgUHJvY2VzcyBEb2N1bWVudCwgdGhhdCB0YWtlcyB0aGUgU3BlY2lmaWNhdGlvbiBhcyBhbiBpbnB1dC4NCjEwLjMuIEVzc2VudGlhbCBDbGFpbXMuIJNFc3NlbnRpYWwgQ2xhaW1zlCBzaGFsbCBtZWFuIGFsbCBjbGFpbXMgaW4gYW55IHBhdGVudCBvciBwYXRlbnQgYXBwbGljYXRpb24gaW4gYW55IGp1cmlzZGljdGlvbiBpbiB0aGUgd29ybGQgdGhhdCB3b3VsZCBuZWNlc3NhcmlseSBiZSBpbmZyaW5nZWQgYnkgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNwZWNpZmljYXRpb24uIEEgY2xhaW0gaXMgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGhlcmV1bmRlciBvbmx5IHdoZW4gaXQgaXMgbm90IHBvc3NpYmxlIHRvIGF2b2lkIGluZnJpbmdpbmcgaXQgYmVjYXVzZSB0aGVyZSBpcyBubyBub24taW5mcmluZ2luZyBhbHRlcm5hdGl2ZSBmb3IgaW1wbGVtZW50aW5nIHRoZSBub3JtYXRpdmUgcG9ydGlvbnMgb2YgdGhlIFNwZWNpZmljYXRpb24uIEV4aXN0ZW5jZSBvZiBhIG5vbi1pbmZyaW5naW5nIGFsdGVybmF0aXZlIHNoYWxsIGJlIGp1ZGdlZCBiYXNlZCBvbiB0aGUgc3RhdGUgb2YgdGhlIGFydCBhdCB0aGUgdGltZSBvZiB0aGUgcHVibGljYXRpb24gb2YgdGhlIFNwZWNpZmljYXRpb24uIFRoZSBmb2xsb3dpbmcgYXJlIGV4cHJlc3NseSBleGNsdWRlZCBmcm9tIGFuZCBzaGFsbCBub3QgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgRXNzZW50aWFsIENsYWltczogDQoxMC4zLjEuIGFueSBjbGFpbXMgb3RoZXIgdGhhbiBhcyBzZXQgZm9ydGggYWJvdmUgZXZlbiBpZiBjb250YWluZWQgaW4gdGhlIHNhbWUgcGF0ZW50IGFzIEVzc2VudGlhbCBDbGFpbXM7IGFuZA0KMTAuMy4yLiBjbGFpbXMgd2hpY2ggd291bGQgYmUgaW5mcmluZ2VkIG9ubHkgYnk6IA0KcG9ydGlvbnMgb2YgYW4gaW1wbGVtZW50YXRpb24gdGhhdCBhcmUgbm90IHNwZWNpZmllZCBpbiB0aGUgbm9ybWF0aXZlIHBvcnRpb25zIG9mIHRoZSBTcGVjaWZpY2F0aW9uLCBvcg0KZW5hYmxpbmcgdGVjaG5vbG9naWVzIHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBtYWtlIG9yIHVzZSBhbnkgcHJvZHVjdCBvciBwb3J0aW9uIHRoZXJlb2YgdGhhdCBjb21wbGllcyB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uIGFuZCBhcmUgbm90IHRoZW1zZWx2ZXMgZXhwcmVzc2x5IHNldCBmb3J0aCBpbiB0aGUgU3BlY2lmaWNhdGlvbiAoZS5nLiwgc2VtaWNvbmR1Y3RvciBtYW51ZmFjdHVyaW5nIHRlY2hub2xvZ3ksIGNvbXBpbGVyIHRlY2hub2xvZ3ksIG9iamVjdC1vcmllbnRlZCB0ZWNobm9sb2d5LCBiYXNpYyBvcGVyYXRpbmcgc3lzdGVtIHRlY2hub2xvZ3ksIGFuZCB0aGUgbGlrZSk7IG9yDQp0aGUgaW1wbGVtZW50YXRpb24gb2YgdGVjaG5vbG9neSBkZXZlbG9wZWQgZWxzZXdoZXJlIGFuZCBtZXJlbHkgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZSBpbiB0aGUgYm9keSBvZiB0aGUgU3BlY2lmaWNhdGlvbi4NCjEwLjMuMy4gZGVzaWduIHBhdGVudHMgYW5kIGRlc2lnbiByZWdpc3RyYXRpb25zLg0KRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgdGhlIG5vcm1hdGl2ZSBwb3J0aW9ucyBvZiB0aGUgU3BlY2lmaWNhdGlvbiBzaGFsbCBiZSBkZWVtZWQgdG8gaW5jbHVkZSBvbmx5IGFyY2hpdGVjdHVyYWwgYW5kIGludGVyb3BlcmFiaWxpdHkgcmVxdWlyZW1lbnRzLiBPcHRpb25hbCBmZWF0dXJlcyBpbiB0aGUgUkZDIDIxMTkgc2Vuc2UgYXJlIGNvbnNpZGVyZWQgbm9ybWF0aXZlIHVubGVzcyB0aGV5IGFyZSBzcGVjaWZpY2FsbHkgaWRlbnRpZmllZCBhcyBpbmZvcm1hdGl2ZS4gSW1wbGVtZW50YXRpb24gZXhhbXBsZXMgb3IgYW55IG90aGVyIG1hdGVyaWFsIHRoYXQgbWVyZWx5IGlsbHVzdHJhdGUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGUgU3BlY2lmaWNhdGlvbiBhcmUgaW5mb3JtYXRpdmUsIHJhdGhlciB0aGFuIG5vcm1hdGl2ZS4NCjEwLjQuIEksIE1lLCBvciBNeS4gk0kslCCTbWUslCBvciCTbXmUIHJlZmVycyB0byB0aGUgc2lnbmF0b3J5Lg0KMTAuNSBQcm9qZWN0LiCTUHJvamVjdJQgbWVhbnMgdGhlIFczQyBDb21tdW5pdHkgR3JvdXAgb3IgQnVzaW5lc3MgR3JvdXAgZm9yIHdoaWNoIEkgZXhlY3V0ZWQgdGhpcyBBZ3JlZW1lbnQuDQoxMC42LiBTcGVjaWZpY2F0aW9uLiCTU3BlY2lmaWNhdGlvbpQgbWVhbnMgdGhlIFNwZWNpZmljYXRpb24gaWRlbnRpZmllZCBieSB0aGUgUHJvamVjdCBhcyB0aGUgdGFyZ2V0IG9mIHRoaXMgYWdyZWVtZW50IGluIGEgY2FsbCBmb3IgRmluYWwgU3BlY2lmaWNhdGlvbiBDb21taXRtZW50cy4gVzNDIHNoYWxsIHByb3ZpZGUgdGhlIGF1dGhvcml0YXRpdmUgbWVjaGFuaXNtcyBmb3IgdGhlIGlkZW50aWZpY2F0aW9uIG9mIHRoaXMgU3BlY2lmaWNhdGlvbi4NCjEwLjcuIFczQyBDb21tdW5pdHkgUkYgTGljZW5zaW5nIFJlcXVpcmVtZW50cy4gk1czQyBDb21tdW5pdHkgUkYgTGljZW5zaW5nIFJlcXVpcmVtZW50c5QgbGljZW5zZSBzaGFsbCBtZWFuIGEgbm9uLWFzc2lnbmFibGUsIG5vbi1zdWJsaWNlbnNhYmxlIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHNlbGwsIGhhdmUgc29sZCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0LCBhbmQgZGlzdHJpYnV0ZSBhbmQgZGlzcG9zZSBvZiBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIFNwZWNpZmljYXRpb24gdGhhdDogDQoxMC43LjEuIHNoYWxsIGJlIGF2YWlsYWJsZSB0byBhbGwsIHdvcmxkd2lkZSwgd2hldGhlciBvciBub3QgdGhleSBhcmUgVzNDIE1lbWJlcnM7DQoxMC43LjIuIHNoYWxsIGV4dGVuZCB0byBhbGwgRXNzZW50aWFsIENsYWltcyBvd25lZCBvciBjb250cm9sbGVkIGJ5IG1lOw0KMTAuNy4zLiBtYXkgYmUgbGltaXRlZCB0byBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIFNwZWNpZmljYXRpb24sIGFuZCB0byB3aGF0IGlzIHJlcXVpcmVkIGJ5IHRoZSBTcGVjaWZpY2F0aW9uOw0KMTAuNy40LiBtYXkgYmUgY29uZGl0aW9uZWQgb24gYSBncmFudCBvZiBhIHJlY2lwcm9jYWwgUkYgbGljZW5zZSAoYXMgZGVmaW5lZCBpbiB0aGlzIHBvbGljeSkgdG8gYWxsIEVzc2VudGlhbCBDbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgbGljZW5zZWUuIEEgcmVjaXByb2NhbCBsaWNlbnNlIG1heSBiZSByZXF1aXJlZCB0byBiZSBhdmFpbGFibGUgdG8gYWxsLCBhbmQgYSByZWNpcHJvY2FsIGxpY2Vuc2UgbWF5IGl0c2VsZiBiZSBjb25kaXRpb25lZCBvbiBhIGZ1cnRoZXIgcmVjaXByb2NhbCBsaWNlbnNlIGZyb20gYWxsLg0KMTAuNy41LiBtYXkgbm90IGJlIGNvbmRpdGlvbmVkIG9uIHBheW1lbnQgb2Ygcm95YWx0aWVzLCBmZWVzIG9yIG90aGVyIGNvbnNpZGVyYXRpb247DQoxMC43LjYuIG1heSBiZSBzdXNwZW5kZWQgd2l0aCByZXNwZWN0IHRvIGFueSBsaWNlbnNlZSB3aGVuIGxpY2Vuc29yIGlzc3VlZCBieSBsaWNlbnNlZSBmb3IgaW5mcmluZ2VtZW50IG9mIGNsYWltcyBlc3NlbnRpYWwgdG8gaW1wbGVtZW50IHRoZSBTcGVjaWZpY2F0aW9uIG9yIGFueSBXM0MgUmVjb21tZW5kYXRpb247DQoxMC43LjcuIG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIGNvbmRpdGlvbnMgb3IgcmVzdHJpY3Rpb25zIG9uIHRoZSB1c2Ugb2YgYW55IHRlY2hub2xvZ3ksIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMsIG9yIG90aGVyIHJlc3RyaWN0aW9ucyBvbiBiZWhhdmlvciBvZiB0aGUgbGljZW5zZWUsIGJ1dCBtYXkgaW5jbHVkZSByZWFzb25hYmxlLCBjdXN0b21hcnkgdGVybXMgcmVsYXRpbmcgdG8gb3BlcmF0aW9uIG9yIG1haW50ZW5hbmNlIG9mIHRoZSBsaWNlbnNlIHJlbGF0aW9uc2hpcCBzdWNoIGFzIHRoZSBmb2xsb3dpbmc6IGNob2ljZSBvZiBsYXcgYW5kIGRpc3B1dGUgcmVzb2x1dGlvbjsNCjEwLjcuOC4gc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgYWNjZXB0ZWQgYnkgYW4gaW1wbGVtZW50ZXIgd2hvIG1hbmlmZXN0cyBhbiBpbnRlbnQgbm90IHRvIGFjY2VwdCB0aGUgdGVybXMgb2YgdGhlIFczQyBDb21tdW5pdHkgUkYgTGljZW5zaW5nIFJlcXVpcmVtZW50cyBsaWNlbnNlIGFzIG9mZmVyZWQgYnkgdGhlIGxpY2Vuc29yLg0KMTAuNy45LiBUaGUgUkYgbGljZW5zZSBjb25mb3JtaW5nIHRvIHRoZSByZXF1aXJlbWVudHMgaW4gdGhpcyBwb2xpY3kgc2hhbGwgYmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIGxpY2Vuc29yIGFzIGxvbmcgYXMgdGhlIFNwZWNpZmljYXRpb24gaXMgaW4gZWZmZWN0LiBUaGUgdGVybSBvZiBzdWNoIGxpY2Vuc2Ugc2hhbGwgYmUgZm9yIHRoZSBsaWZlIG9mIHRoZSBwYXRlbnRzIGluIHF1ZXN0aW9uLg0KSSBhbSBlbmNvdXJhZ2VkIHRvIHByb3ZpZGUgYSBjb250YWN0IGZyb20gd2hpY2ggbGljZW5zaW5nIGluZm9ybWF0aW9uIGNhbiBiZSBvYnRhaW5lZCBhbmQgb3RoZXIgcmVsZXZhbnQgbGljZW5zaW5nIGluZm9ybWF0aW9uLiBBbnkgc3VjaCBpbmZvcm1hdGlvbiB3aWxsIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLiANCjEwLjguIFlvdSBvciBZb3VyLiCTWW91LJQgk3lvdSyUIG9yIJN5b3VylCBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB3aG8gZXhlcmNpc2VzIGNvcHlyaWdodCBvciBwYXRlbnQgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZCBhbnkgcGVyc29uIHRoYXQgcGVyc29uIG9yIGVudGl0eSBjb250cm9scy4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQotLS0tLS0tLS0tLS0tLS0tLS0tIFdlYkdMIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpDb3B5cmlnaHQgKGMpIDIwMTggVGhlIEtocm9ub3MgR3JvdXAgSW5jLg0KDQpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQ0KY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZC9vciBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQ0KIk1hdGVyaWFscyIpLCB0byBkZWFsIGluIHRoZSBNYXRlcmlhbHMgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nDQp3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsDQpkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIE1hdGVyaWFscywgYW5kIHRvDQpwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBNYXRlcmlhbHMgYXJlIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bw0KdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KDQpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZA0KaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgTWF0ZXJpYWxzLg0KDQpUSEUgTUFURVJJQUxTIEFSRSBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELA0KRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GDQpNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuDQpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQ0KQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwNClRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFDQpNQVRFUklBTFMgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgTUFURVJJQUxTLg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCi0tLS0tLS0tLS0tLS0gRW5kIG9mIFRoaXJkUGFydHlOb3RpY2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCg0K