PCEtLQ0KICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCiAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQogIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCiAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCiAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCg0KICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQoNCiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCi0tPg0KPGh0bWw+DQoNCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+DQo8dGl0bGU+QmxhemVEUyBCaW5hcnkgUmVhZG1lPC90aXRsZT4NCjxzdHlsZT4NCjwhLS0NCiAvKiBGb250IERlZmluaXRpb25zICovDQogQGZvbnQtZmFjZQ0KCXtmb250LWZhbWlseToiQ2FtYnJpYSBNYXRoIjsNCglwYW5vc2UtMToyIDQgNSAzIDUgNCA2IDMgMiA0O30NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6VmVyZGFuYTsNCglwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDt9DQogLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8NCiBwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsDQoJe21hcmdpbjowaW47DQoJbWFyZ2luLWJvdHRvbTouMDAwMXB0Ow0KCWZvbnQtc2l6ZToxMi4wcHQ7DQoJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiIsInNlcmlmIjsNCgljb2xvcjp3aW5kb3d0ZXh0O30NCmgzDQoJe21zby1zdHlsZS1saW5rOiJIZWFkaW5nIDMgQ2hhciI7DQoJbWFyZ2luLXJpZ2h0OjBpbjsNCgltYXJnaW4tbGVmdDowaW47DQoJZm9udC1zaXplOjEzLjVwdDsNCglmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIiwic2VyaWYiOw0KCWNvbG9yOmJsYWNrOw0KCWZvbnQtd2VpZ2h0OmJvbGQ7fQ0KYTpsaW5rLCBzcGFuLk1zb0h5cGVybGluaw0KCXtjb2xvcjpibHVlOw0KCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQ0KYTp2aXNpdGVkLCBzcGFuLk1zb0h5cGVybGlua0ZvbGxvd2VkDQoJe2NvbG9yOnB1cnBsZTsNCgl0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30NCnANCgl7bWFyZ2luLXJpZ2h0OjIuNnB0Ow0KCW1hcmdpbi1sZWZ0OjIuNnB0Ow0KCWZvbnQtc2l6ZToxMi4wcHQ7DQoJZm9udC1mYW1pbHk6IlZlcmRhbmEiLCJzYW5zLXNlcmlmIjsNCgljb2xvcjpibGFjazt9DQpwcmUNCgl7bXNvLXN0eWxlLWxpbms6IkhUTUwgUHJlZm9ybWF0dGVkIENoYXIiOw0KCW1hcmdpbjowaW47DQoJbWFyZ2luLWJvdHRvbTouMDAwMXB0Ow0KCWZvbnQtc2l6ZToxMC4wcHQ7DQoJZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3IjsNCgljb2xvcjp3aW5kb3d0ZXh0O30NCnNwYW4uSGVhZGluZzNDaGFyDQoJe21zby1zdHlsZS1uYW1lOiJIZWFkaW5nIDMgQ2hhciI7DQoJbXNvLXN0eWxlLWxpbms6IkhlYWRpbmcgMyI7DQoJZm9udC1mYW1pbHk6IkNhbWJyaWEiLCJzZXJpZiI7DQoJY29sb3I6IzRGODFCRDsNCglmb250LXdlaWdodDpib2xkO30NCnNwYW4uSFRNTFByZWZvcm1hdHRlZENoYXINCgl7bXNvLXN0eWxlLW5hbWU6IkhUTUwgUHJlZm9ybWF0dGVkIENoYXIiOw0KCW1zby1zdHlsZS1saW5rOiJIVE1MIFByZWZvcm1hdHRlZCI7DQoJZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijt9DQouTXNvQ2hwRGVmYXVsdA0KCXtmb250LXNpemU6MTAuMHB0O30NCkBwYWdlIFNlY3Rpb24xDQoJe3NpemU6OC41aW4gMTEuMGluOw0KCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluO30NCmRpdi5TZWN0aW9uMQ0KCXtwYWdlOlNlY3Rpb24xO30NCiAvKiBMaXN0IERlZmluaXRpb25zICovDQogb2wNCgl7bWFyZ2luLWJvdHRvbTowaW47fQ0KdWwNCgl7bWFyZ2luLWJvdHRvbTowaW47fQ0KLS0+DQo8L3N0eWxlPg0KDQo8L2hlYWQ+DQoNCjxib2R5IGxhbmc9RU4tVVMgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4NCg0KPGRpdiBjbGFzcz1TZWN0aW9uMT4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsPiZuYnNwOzwvcD4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsPkJsYXplRFMgQmluYXJ5IERpc3RyaWJ1dGlvbjwvcD4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsPiZuYnNwOzwvcD4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsPlRoaXMgQmxhemVEUyBCaW5hcnkgZGlzdHJpYnV0aW9uIGluY2x1ZGVzDQp0aGUgQWRvYmUgQmxhemVEUyB3ZWIgYXBwbGljYXRpb24gd2hvc2UgbGljZW5zZXMgYXJlIGRlc2NyaWJlZCBiZWxvdzo8L3A+DQoNCjxwIGNsYXNzPU1zb05vcm1hbD4mbmJzcDs8L3A+DQoNCjxwIGNsYXNzPU1zb05vcm1hbD4mbmJzcDs8L3A+DQoNCjxwIGNsYXNzPU1zb05vcm1hbD48dT48c3BhbiBzdHlsZT0nZm9udC1zaXplOjE0LjBwdCc+QWRvYmUgQmxhemVEUyBMaWNlbnNlDQpJbmZvcm1hdGlvbjwvc3Bhbj48L3U+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxNC4wcHQnPjo8L3NwYW4+PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWw+Jm5ic3A7PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz6pDQoyMDA0LTIwMDggQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9zcGFuPjwvcD4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Jm5ic3A7PC9zcGFuPjwvcD4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcw0KcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQ0KdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAzLCBhcyBwdWJsaXNoZWQgYnkgdGhlDQpGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uPC9zcGFuPjwvcD4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Jm5ic3A7PC9zcGFuPjwvcD4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcw0KcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkNCldBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEENClBBUlRJQ1VMQVIgUFVSUE9TRS6gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlDQpkZXRhaWxzLjwvc3Bhbj48L3A+DQoNCjxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZuYnNwOzwvc3Bhbj48L3A+DQoNCjxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPllvdQ0Kc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aA0KdGhpcyBwcm9ncmFtLqAgSWYgbm90LCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy48L3NwYW4+PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mbmJzcDs8L3NwYW4+PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Zb3UNCnNoYWxsIG5vdCBkaXNjbGFpbSB3YXJyYW50eSBvciBsaW1pdCBsaWFiaWxpdHkgZGlmZmVyZW50bHkgZnJvbSB0aGUgdGVybXMgb2YNClNlY3Rpb25zIDE1IGFuZCAxNiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMywgd2hpY2ggaXMNCmluY29ycG9yYXRlZCBpbnRvIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuPC9zcGFuPjwvcD4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Jm5ic3A7PC9zcGFuPjwvcD4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+WW91DQpzaGFsbCBwcmVzZXJ2ZSBhbGwgbGVnYWwgbm90aWNlcyBvciBhdXRob3IgYXR0cmlidXRpb25zIGluIHRoZSBwcm9ncmFtLjwvc3Bhbj48L3A+DQoNCjxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZuYnNwOzwvc3Bhbj48L3A+DQoNCjxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPllvdQ0Kc2hhbGwgbm90IG1pc3JlcHJlc2VudCB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgcHJvZ3JhbSwgYW5kIHlvdSBzaGFsbCBtYXJrDQphbGwgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIHByb2dyYW0gaW4gcmVhc29uYWJsZSB3YXlzIHRvIHNob3cgdGhlIGRpZmZlcmVuY2VzDQpmcm9tIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBwcm9ncmFtLjwvc3Bhbj48L3A+DQoNCjxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPqA8L3NwYW4+PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Jbg0KYWNjb3JkYW5jZSB3aXRoIFNlY3Rpb24gNyhmKSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMywNCndoaWNoIGlzIGluY29ycG9yYXRlZCBpbnRvIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGNlcnRhaW4NCnBvcnRpb25zIG9mIHRoaXMgcHJvZ3JhbSBhcmUgbGljZW5zZWQgdW5kZXIgQXBhY2hlIDIuMCB3aGljaCByZXF1aXJlcyB0aGUNCmluZGVtbmlmaWNhdGlvbiBvZiB0aGUgYXV0aG9yIG9yIGxpY2Vuc29ycyBvZiB0aGUgc29mdHdhcmUgbGljZW5zZWQgdW5kZXINCkFwYWNoZSAyLjAgbGljZW5zZSBieSB0aG9zZSB3aG8gY29udmV5IHRoZSBwcm9ncmFtLjwvc3Bhbj48L3A+DQoNCjxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmDQp5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIHJlZ2FyZGluZyB0aGlzIGFncmVlbWVudCBvciBpZiB5b3Ugd2lzaCB0byByZXF1ZXN0IGFueQ0KaW5mb3JtYXRpb24gZnJvbSBBZG9iZSBwbGVhc2UgdXNlIHRoZSBhZGRyZXNzIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIGluY2x1ZGVkDQp3aXRoIHRoaXMgcHJvZ3JhbSB0byBjb250YWN0IHRoZSBBZG9iZSBvZmZpY2Ugc2VydmluZyB5b3VyIGp1cmlzZGljdGlvbi48L3NwYW4+PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mbmJzcDs8L3NwYW4+PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5CeQ0KZG93bmxvYWRpbmcsIHVzaW5nLCBtb2RpZnlpbmcsIGRpc3RyaWJ1dGluZyBhbmQvb3IgYWNjZXNzaW5nIHRoZSBwcm9ncmFtLCB5b3UNCmFncmVlIHRvIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMy48L3NwYW4+PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mbmJzcDs8L3NwYW4+PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGUgbmFtZSAmbGRxdW87QmxhemVEUyZyZHF1bzsgYW5kIHRoZSBCbGF6ZURTIGxvZ28gbXVzdCBub3QgYmUgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3IgIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIEFkb2JlLiAmbmJzcDtTaW1pbGFybHksIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIG9wZW4gIHNvdXJjZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAmcXVvdDtCbGF6ZURTJnF1b3Q7LCBub3IgbWF5ICAmcXVvdDtCbGF6ZURTJnF1b3Q7IGFwcGVhciBpbiB0aGVpciBuYW1lIG9yIHRoZSBCbGF6ZURTIGxvZ28gYXBwZWFyIHdpdGggc3VjaCAgcHJvZHVjdHMsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIEFkb2JlLjwvc3Bhbj48L3A+DQoNCjxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZuYnNwOzwvc3Bhbj48L2I+PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5OT1RJQ0VTDQpSRUxBVEVEIFRPIENFUlRBSU4gVEhJUkQgUEFSVFkgTUFURVJJQUxTOjwvc3Bhbj48L2I+PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mbmJzcDs8L3NwYW4+PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjx1PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BcGFjaGUNCjEuMSBMaWNlbnNlZCBQcm9kdWN0czwvc3Bhbj48L3U+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjqgIDwvc3Bhbj48L3A+DQoNCjxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZuYnNwOzwvc3Bhbj48L3A+DQoNCjxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMNCnByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgbGlzdGVkIGJlbG93IHRoYXQgd2VyZSBkZXZlbG9wZWQgYnkgdGhlIEFwYWNoZQ0KU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuoCBTdWNoIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyDQp0aGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xOyB5b3UgbWF5IG9idGFpbiBhIGNvcHkgb2Ygc3VjaCBsaWNlbnNlDQphdKAgaHR0cDovL2FwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0xLjEuPC9zcGFuPjwvcD4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Jm5ic3A7PC9zcGFuPjwvcD4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+LQ0KQXBhY2hlIENvbW1vbnM8L3NwYW4+PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz6goA0KLS0gY29tbW9ucy1jb2RlYy0xLjMuamFyPC9zcGFuPjwvcD4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+oKANCi0tIGNvbW1vbnMtZmlsZXVwbG9hZC0xLjEuamFyPC9zcGFuPjwvcD4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+oKANCi0tIGNvbW1vbnMtaHR0cGNsaWVudC0zLjAuMS5qYXI8L3NwYW4+PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz6goA0KLS0gY29tbW9ucy1pby0xLjEuamFyPC9zcGFuPjwvcD4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Jm5ic3A7PC9zcGFuPjwvcD4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+LSBBcGFjaGUNClZlbG9jaXR5PC9zcGFuPjwvcD4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+oKANCi0tIG1tLXZlbG9jaXR5LTEuNC5qYXI8L3NwYW4+PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mbmJzcDs8L3NwYW4+PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4tDQpBcGFjaGUgWE1MPC9zcGFuPjwvcD4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+oKANCi0tIHhhbGFuLmphciAodmVyc2lvbiAyLjUuMik8L3NwYW4+PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mbmJzcDs8L3NwYW4+PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mbmJzcDs8L3NwYW4+PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjx1PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5DcmVhdGl2ZQ0KQ29tbW9ucyBMaWNlbnNlZCBQcm9kdWN0czwvc3Bhbj48L3U+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjogPC9zcGFuPjwvcD4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Jm5ic3A7PC9zcGFuPjwvcD4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcw0Kc29mdHdhcmUgdXNlcyB0aGUgamF2YS51dGlsLmNvbmN1cnJlbnQgKGNvbmN1cnJlbnQuamFyIHZlcnNpb24gMS4zLjMpIEFQSSBhbmQNCnRoZSBiYWNrcG9ydCBvZiBqYXZhLnV0aWwuY29uY3VycmVudCBBUEkuIEJvdGggcGFja2FnZXMgYXJlIHB1YmxpYy1kb21haW4NCnNvdXJjZXMgZnJvbSB0aGUgSlNSIDE2NiBDVlMgcmVwb3NpdG9yeSwgdGhlIGRsLnV0aWwuY29uY3VycmVudCBwYWNrYWdlLCBhbmQNCnRoZSBEb3VnIExlYSdzIGNvbGxlY3Rpb25zIHBhY2thZ2UuYmFja3BvcnQtdXRpbC1jb25jdXJyZW50LmphciAodmVyc2lvbiAyLjIpDQpUaGUgbGljZW5zZSB0ZXJtcyBvZiB0aGVzZSBwYWNrYWdlcyBjYW4gYmUgZm91bmQgaGVyZQ0KKGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnOjgxL2xpY2Vuc2VzL3B1YmxpY2RvbWFpbi8pLiA8L3NwYW4+PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mbmJzcDs8L3NwYW4+PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mbmJzcDs8L3NwYW4+PC9wPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjx1PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5HTlUNCkxHUEx2LjIuMSBMaWNlbnNlZCBQcm9kdWN0czwvc3Bhbj48L3U+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjogPC9zcGFuPjwvcD4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Jm5ic3A7PC9zcGFuPjwvcD4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcw0Kc29mdHdhcmUgdXNlcyB0aGUgSkdyb3VwcyB0b29sa2l0IGxpYnJhcnkgZm9yIHJlbGlhYmxlIG11bHRpY2FzdCBjb21tdW5pY2F0aW9uDQooamdyb3Vwcy5qYXIpLqAgU3VjaCBKR3JvdXBzIGxpYnJhcnkgaXMgbGljZW5zZWQgdW5kZXKgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwNClB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIuMSwgYSBjb3B5IG9mIHdoaWNoIGlzIGluY2x1ZGVkIHdpdGggc3VjaCBsaWJyYXJ5LqANCllvdSBtYXkgYWxzbyBvYnRhaW4gYSBjb3B5IG9mIHN1Y2ggbGljZW5zZSBhdCA8YQ0KaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyI+aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLzwvYT4uoKAgPC9zcGFuPjwvcD4NCg0KDQo8L2Rpdj4NCg0KPC9ib2R5Pg0KDQo8L2h0bWw+DQo=