PD9waHAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXJlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL2FwcC5jbGFzcy5waHAiKTsJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbmF2LmNsYXNzLnBocCIpOyAJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbWVudS5jbGFzcy5waHAiKTsgCSRBcHAgCT0gbmV3IEFwcCgpOwkkTmF2CT0gbmV3IE5hdigpOwkkTWVudSAJPSBuZXcgTWVudSgpOwkJaW5jbHVkZSgkQXBwLT5nZXRQcm9qZWN0Q29tbW9uKCkpOyAgICAjIEFsbCBvbiB0aGUgc2FtZSBsaW5lIHRvIHVuY2x1dHRlciB0aGUgdXNlcidzIGRlc2t0b3AnCgoJIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkjCgkjIHRlbXBsYXRlLnBocAoJIwoJIyBBdXRob3I6IAkJTmF0aGFuIEdlcnZhaXMKCSMgRGF0ZToJCQkyMDA3LTEyLTA1CgkjCgkjIERlc2NyaXB0aW9uOiBEVFAgV2Vic2l0ZQoJIwoJIwoJIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCQoJIwoJIyBCZWdpbjogcGFnZS1zcGVjaWZpYyBzZXR0aW5ncy4gIENoYW5nZSB0aGVzZS4gCgkkcGFnZVRpdGxlIAkJPSAiRWNsaXBzZSBEYXRhIFRvb2xzIFBsYXRmb3JtIChEVFApIFByb2plY3QgQ2hhcnRlciI7CgkkcGFnZUtleXdvcmRzCT0gImVjbGlwc2UsIGRhdGEgdG9vbHMsIGR0cCwgZGF0YXRvb2xzIjsKCSRwYWdlQXV0aG9yCQk9ICJOYXRoYW4gR2VydmFpcyI7CgkKCW9iX3N0YXJ0KCk7Cgk/PgoJCgk8ZGl2IGlkPSJtaWRjb2x1bW4iPgoJCTxoMT48Pz0kcGFnZVRpdGxlOyA/PjwvaDE+CgkJPGRpdiBjbGFzcz0iaG9tZWl0ZW0zY29sIj4KCQkJPGgzPlRoZSBFY2xpcHNlIERhdGEgVG9vbHMgUGxhdGZvcm0gUHJvamVjdCAtIFRvcCBMZXZlbCBQcm9qZWN0IENoYXJ0ZXIgLSBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uPC9oMz4KCQkJPGg0Pk92ZXJ2aWV3PC9oND4KCQkJPHA+IkRhdGEgVG9vbHMiIGlzIGEgdmFzdCBkb21haW4sIHlldCB0aGVyZSBhcmUgYSBmYWlybHkgc21hbGwgbnVtYmVyIG9mIGZvdW5kYXRpb25hbCByZXF1aXJlbWVudHMgd2hlbiBkZXZlbG9waW5nIHdpdGggb3IgbWFuYWdpbmcgZGF0YS1jZW50cmljIHN5c3RlbXMuIEEgZGV2ZWxvcGVyIGlzIGludGVyZXN0ZWQgaW4gYW4gZW52aXJvbm1lbnQgdGhhdCBpcyBlYXN5IHRvIGNvbmZpZ3VyZSAtLSBvbmUgaW4gd2hpY2ggdGhlIGNoYWxsZW5nZXMgb2YgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgYXJlIGR1ZSB0byB0aGUgcHJvYmxlbSBkb21haW4sIG5vdCB0aGUgY29tcGxleGl0eSBvZiB0aGUgdG9vbHMgZW1wbG95ZWQuIERhdGEgbWFuYWdlbWVudCwgd2hldGhlciBieSBhIGRldmVsb3BlciB3b3JraW5nIG9uIGFuIGFwcGxpY2F0aW9uLCBvciBhbiBhZG1pbmlzdHJhdG9yIG1haW50YWluaW5nIG9yIG1vbml0b3JpbmcgYSBwcm9kdWN0aW9uIHN5c3RlbSwgc2hvdWxkIGFsc28gcHJvdmlkZSBhIGNvbnNpc3RlbnQsIGhpZ2hseSB1c2FibGUgZW52aXJvbm1lbnQgdGhhdCB3b3JrcyB3ZWxsIHdpdGggYXNzb2NpYXRlZCB0ZWNobm9sb2dpZXMuPC9wPgoJCQk8cD5TdWNoIGFuIGVudmlyb25tZW50IHN0YXJ0cyB3aXRoIGtleSBmcmFtZXdvcmtzIGRlc2lnbmVkIGJvdGggZm9yIHVzZSBhbmQgZXh0ZW5zaWJpbGl0eS4gRXhhbXBsZXMgaW5jbHVkZSBsb2NhdGlvbiBhbmQgbWFuYWdlbWVudCBvZiBkYXRhIHNvdXJjZSBkcml2ZXJzLCBhbmQgY29uZmlndXJhdGlvbnMgZm9yIGFjY2VzcyB0byBwYXJ0aWN1bGFyIGRhdGEgc291cmNlIGluc3RhbmNlcy4gT25jZSBhIGNvbm5lY3Rpb24gaXMgc3VjY2Vzc2Z1bGx5IG1hZGUsIHRoZSBuZXh0IHRhc2sgb2Z0ZW4gaXMgdG8gZXhwbG9yZSB0aGUgZGF0YSBzb3VyY2UsIG1ha2luZyBjaGFuZ2VzIGFzIHJlcXVpcmVkLiBTb21lIG9mIHRoZXNlIG9wZXJhdGlvbnMgbWlnaHQgYmUgY2FycmllZCBvdXQgYnkgR1VJIGFjdGlvbnMsIG90aGVycyBkaXJlY3RseSB0aHJvdWdoIGNvbW1hbmRzLiBGb3IgZXhhbXBsZSwgdXNlcnMgLSBib3RoIGRldmVsb3BlcnMgYW5kIGFkbWluaXN0cmF0b3JzIC0gdHlwaWNhbGx5IHdpbGwgY3JlYXRlLCBlZGl0LCBhbmQgdGVzdCBTUUwgZm9yIHRoZXNlIGNvbW1hbmRzLiBBc3Npc3RhbmNlIGluIGVkaXRpbmcgU1FMIHRocm91Z2ggY29kZSBjb21wbGV0aW9uLCBmb3JtYXR0aW5nLCBhbmQgZGlhbGVjdCBzcGVjaWFsaXphdGlvbiwgZ3JlYXRseSBlbmhhbmNlcyBwcm9kdWN0aXZpdHkuIEZ1cnRoZXIsIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgb3IgZGVidWcgY29tbWFuZHMsIGJvdGggU1FMIGFuZCBzdG9yZWQgcHJvY2VkdXJlcywgcm91bmRzIG91dCB0aGUgcmFwaWQgZGV2ZWxvcG1lbnQgcHJvY2VzcyB0aGF0IEVjbGlwc2Ugc3VwcG9ydHMgc28gd2VsbC4gRmluYWxseSwgYnJpZGdpbmcgY2hhc21zLCB3aGV0aGVyIGJldHdlZW4gcmVsYXRpb25hbCwgb2JqZWN0LCBvciBvdGhlciBzdHJ1Y3R1cmVzLCBwcmVzZW50cyBjaGFsbGVuZ2VzIHRoYXQgZGF0YSBtYW5hZ2VtZW50IHRvb2xpbmcgc2hvdWxkIGFkZHJlc3MuPC9wPgoJCQk8aDQ+TWlzc2lvbjwvaDQ+CgkJCTxwPlRoZSBEYXRhIFRvb2xzIFBsYXRmb3JtIChEVFApIHByb2plY3Qgd2lsbCBpbmNsdWRlIGV4dGVuc2libGUgZnJhbWV3b3JrcyBhbmQgZXhlbXBsYXJ5IHRvb2xzLCBlbmFibGluZyBhIGRpdmVyc2Ugc2V0IG9mIHBsdWctaW4gb2ZmZXJpbmdzIHNwZWNpZmljIHRvIHBhcnRpY3VsYXIgZGF0YS1jZW50cmljIHRlY2hub2xvZ2llcyBhbmQgc3VwcG9ydGVkIGJ5IHRoZSBEVFAgZWNvc3lzdGVtLiBJbiB0aGUgc3Bpcml0IG9mIEVjbGlwc2UsIHRoZSBwcm9qZWN0IHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSBmb2xsb3dpbmcgdmFsdWVzOjwvcD4KCQkJPHVsPgoJCQkJPGxpPjxpPlZlbmRvciBuZXV0cmFsaXR5OjwvaT4gV2UgaW50ZW5kIHRvIHByb3ZpZGUgZGF0YSBtYW5hZ2VtZW50IGZyYW1ld29ya3MgYW5kIHRvb2xzIG5vdCBiaWFzZWQgdG93YXJkIGFueSB2ZW5kb3IuIE91ciBpbnRlbnRpb24gaXMgdGhhdCBEVFAgYmUgbGV2ZXJhZ2VkIHRvIHByb3ZpZGUgdGhlIEVjbGlwc2UgY29tbXVuaXR5IHdpdGggdGhlIHdpZGVzdCByYW5nZSBvZiBjaG9pY2VzIHBvc3NpYmxlLiBUbyB0aGlzIGVuZCwgd2Ugc2VlayBjb21tdW5pdHkgaW52b2x2ZW1lbnQgaW4gZm9ybXVsYXRpbmcga2V5IGZyYW1ld29yayBpbnRlcmZhY2VzLCBzbyB0aGF0IHRoZSBsYXJnZXN0IHBvc3NpYmxlIGNvbnN0aXR1ZW5jeSBpcyByZXByZXNlbnRlZC48L2xpPgoJCQkJPGxpPjxpPkV4dGVuc2liaWxpdHk6PC9pPiAgV2UgcmVjb2duaXplIGJvdGggdGhlIGNvbW1vbiBuZWVkIGZvciBkYXRhIHRvb2xpbmcgaW5mcmFzdHJ1Y3R1cmUgYW5kIHRoZSBkZXNpcmUgdG8gZXh0ZW5kIHRoZSBvZmZlcmluZ3MgaW4gbmV3IGFuZCBpbm5vdmF0aXZlIHdheXMuIFRvIHN1cHBvcnQgdGhlc2UgZWZmb3J0cywgb3VyIGNvbXBvbmVudHMgd2lsbCBiZSBkZXNpZ25lZCBmb3IsIGFuZCBtYWtlIGdvb2QgdXNlIG9mLCBleHRlbnNpYmlsaXR5IG1lY2hhbmlzbXMgc3VwcG9ydGVkIGJ5IEVjbGlwc2UuPC9saT4KCQkJCTxsaT48aT5Db21tdW5pdHkgSW52b2x2ZW1lbnQ6PC9pPiBTdWNjZXNzIGZvciBEVFAsIGFzIHdpdGggb3RoZXIgZWNsaXBzZS5vcmcgcHJvamVjdHMsIGlzIGFzIG11Y2ggYSBmYWN0b3Igb2YgY29tbXVuaXR5IGludm9sdmVtZW50IGFzIHRoZSB0ZWNobmljYWwgbWVyaXQgb2YgaXRzIGNvbXBvbmVudHMuIFdlIHN0cm9uZ2x5IGJlbGlldmUgdGhhdCBEVFAgd2lsbCBhY2hpZXZlIGl0cyBmdWxsIHBvdGVudGlhbCBvbmx5IGFzIHRoZSByZXN1bHQgb2YgZGVlcCBhbmQgYnJvYWQgY29vcGVyYXRpb24gd2l0aCB0aGUgRWNsaXBzZSBtZW1iZXJzaGlwLWF0LWxhcmdlLiBUaHVzLCB3ZSB3aWxsIG1ha2UgZXZlcnkgZWZmb3J0IHRvIGFjY29tbW9kYXRlIGNvbGxhYm9yYXRpb24sIHJlYWNoIGFjY2VwdGFibGUgY29tcHJvbWlzZXMsIGFuZCBwcm92aWRlIGEgcHJvamVjdCBtYW5hZ2VtZW50IGluZnJhc3RydWN0dXJlIHRoYXQgaW5jbHVkZXMgYWxsIGNvbnRyaWJ1dG9ycywgcmVnYXJkbGVzcyBvZiB0aGVpciBhZmZpbGlhdGlvbiwgbG9jYXRpb24sIGludGVyZXN0cywgb3IgbGV2ZWwgb2YgaW52b2x2ZW1lbnQuIFJlZ3VsYXIgbWVldGluZ3MgY292ZXJpbmcgYWxsIGFzcGVjdHMgb2YgRFRQLCBvcGVuIGNvbW11bmljYXRpb24gY2hhbm5lbHMsIGFuZCBlcXVhbCBhY2Nlc3MgdG8gcHJvY2VzcyB3aWxsIGJlIGtleSBhcmVhcyBpbiBkcml2aW5nIHN1Y2Nlc3NmdWwgY29tbXVuaXR5IGludm9sdmVtZW50LjwvbGk+CgkJCQk8bGk+PGk+VHJhbnNwYXJlbmN5OjwvaT4gQXMgd2l0aCBhbGwgcHJvamVjdHMgdW5kZXIgdGhlIGVjbGlwc2Uub3JnIGJhbm5lciwga2V5IGluZm9ybWF0aW9uIGFuZCBkaXNjdXNzaW9ucyBhdCBldmVyeSBsZXZlbCAtIHN1Y2ggYXMgcmVxdWlyZW1lbnRzLCBkZXNpZ24sIGltcGxlbWVudGF0aW9uLCBhbmQgdGVzdGluZyAtIHdpbGwgYmUgZWFzaWx5IGFjY2Vzc2libGUgdG8gdGhlIEVjbGlwc2UgbWVtYmVyc2hpcC1hdC1sYXJnZS48L2xpPgoJCQkJPGxpPjxpPkFnaWxlIGRldmVsb3BtZW50OjwvaT4gV2Ugd2lsbCBzdHJpdmUgdG8gaW5jb3Jwb3JhdGUgaW50byBvdXIgcGxhbm5pbmcgcHJvY2VzcyBpbm5vdmF0aW9ucyB0aGF0IGFyaXNlIG9uY2UgYSBwcm9qZWN0IGlzIHVuZGVyd2F5LCBhbmQgdGhlIGZlZWRiYWNrIGZyb20gb3VyIHVzZXIgY29tbXVuaXR5IG9uIG91ciBhY2hpZXZlbWVudHMgdG8gZGF0ZS4gV2UgdGhpbmsgYW4gYWdpbGUgcGxhbm5pbmcgYW5kIGRldmVsb3BtZW50IHByb2Nlc3MsIGluIHdoaWNoIHByb2dyZXNzIGlzIGluY3JlbWVudGFsLCBuZWFyLXRlcm0gZGVsaXZlcmFibGVzIGFyZSBmb2N1c2VkLCBhbmQgbG9uZy10ZXJtIHBsYW5uaW5nIGlzIGZsZXhpYmxlLCB3aWxsIGJlIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMuPC9saT4KCQkJPC91bD4KCQkJPGg0PlNjb3BlPC9oND4KCQkJPHA+RGF0YS1jZW50cmljIGFwcGxpY2F0aW9ucyBhcmUgdGhvc2UgaGF2aW5nIGFuIGFzc29jaWF0aW9uIHdpdGggYSBkYXRhIHNvdXJjZSwgYW5kIGEgbWFwcGluZyBmcm9tIGEgZGF0YSBzb3VyY2UgdG8gYW4gaW4tbWVtb3J5IG1vZGVsLiBUaGUgZGlzdGluZ3Vpc2hpbmcgY2hhcmFjdGVyaXN0aWMgb2Ygc3VjaCBhcHBsaWNhdGlvbnMgaXMgdGhhdCB0aGVpciBkb21haW4gb2YgY2FwYWJpbGl0aWVzIGlzIG5vIG1vcmUgc3BlY2lmaWMgdGhhbiBkYXRhLWNlbnRyaWMuIEZvciBpbnN0YW5jZSwgd2hpbGUgYSBKYXZhIHNvdXJjZSBmaWxlIGFuZCBpdHMgaW4tbWVtb3J5IHJlcHJlc2VudGF0aW9uIGNvdWxkIGJlIGNvbnNpZGVyZWQgZGF0YSwgdGhlIGRvbWFpbiBvZiBKYXZhIGRldmVsb3BtZW50IGlzIGNsZWFybHkgcHJlc2VudCwgYW5kIGlzIG1vcmUgc3BlY2lmaWMgdGhhbiBqdXN0ICJkYXRhLiIgVGh1cywgZGF0YS1jZW50cmljIGRlbGluZWF0ZXMgYW4gYWJzdHJhY3QsIGZvdW5kYXRpb25hbCBkb21haW4sIHdoaWNoIGlzIHN1cGVyc2VkZWQgYnkgbW9yZSBzcGVjaWZpYyBkb21haW5zIHdoZW4gdGhlIGFwcGxpY2F0aW9uIG1hbmlwdWxhdGVzIHNvbWV0aGluZyBtb3JlIHRoYW4ganVzdCAiZGF0YS4iIEFuIGFwcGxpY2F0aW9uIHdpdGggYSBtb3JlIHNwZWNpZmljIGRvbWFpbiBpcyBkYXRhLWRlcGVuZGVudCByYXRoZXIgdGhhbiBkYXRhLWNlbnRyaWMuIERhdGEtZGVwZW5kZW50IGFwcGxpY2F0aW9ucyBhcmUgbm90IHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcyBwcm9qZWN0LjwvcD4KCQkJPHA+VXNpbmcgYSBtb2RlbC1kcml2ZW4gYXBwcm9hY2gsIHRoZSBEYXRhIFRvb2xzIFByb2plY3QgKERUUCkgY29uc2lzdHMgb2YgZXh0ZW5zaWJsZSBmcmFtZXdvcmtzIGFuZCBleGVtcGxhcnkgdG9vbHMgZm9yIGRhdGEtY2VudHJpYyBhcHBsaWNhdGlvbnMuIFRoZXNlIGluY2x1ZGU6PC9wPgoJCQk8dWw+CgkJCQk8bGk+SW4tbWVtb3J5IHJlcHJlc2VudGF0aW9uOiBNb2RlbHMgcHJvdmlkaW5nIGEgZG9tYWluLWJhc2VkIGludGVyYWN0aW9uIHdpdGggZGF0YSwgc3VjaCBhcyBkYXRhYmFzZSBkZWZpbml0aW9ucywgcXVlcnkgbW9kZWxzLCByZXN1bHQgc2V0cywgYW5kIG9iamVjdHMuIFRoZXNlIG1vZGVscyBwcm92aWRlIHRoZSBiYXNpcyB1cG9uIHdoaWNoIGFsbCBvdGhlciBEVFAgY29tcG9uZW50cyBhcmUgY29uc3RydWN0ZWQuPC9saT4KCQkJCTxsaT5Db25uZWN0aXZpdHk6IFNwZWNpZmljYXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gb2YgZGF0YSBzb3VyY2UgZHJpdmVycy48L2xpPgoJCQkJPGxpPk1hbmFnZW1lbnQ6IEFkbWluaXN0cmF0aW9uIG9mIGRhdGEgc291cmNlcyBpbmNsdWRpbmcgYm90aCBnZW5lcmljIGFuZCB2ZW5kb3Itc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zLiBFeGFtcGxlcyBpbmNsdWRlIGFkZGluZyBhbmQgcmVtb3ZpbmcgdGFibGVzIGZyb20gYSBkYXRhYmFzZSwgc2V0dGluZyB0eXBlIGluZm9ybWF0aW9uIGZvciBjb250YWluZWQgZGF0YSwgYW5kIHNldHRpbmcgcGVyZm9ybWFuY2UgcGFyYW1ldGVycy48L2xpPgoJCQkJPGxpPkRhdGEtY2VudHJpYyBtb2RlbCB0cmFuc2Zvcm1hdGlvbjogQ2hhbmdpbmcgZGF0YSBmcm9tIG9uZSBmb3JtYXQgdG8gYW5vdGhlciBpcyBhIGNvbW1vbiB0YXNrIGluIGRhdGEtY2VudHJpYyBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudC4gRm9yIGV4YW1wbGUsIHRoZXJlIGFyZSBzZXZlcmFsIHBvcHVsYXIgZGlhbGVjdHMgb2YgdGhlIFNRTCBzdGFuZGFyZC4gQSBxdWVyeSB1c2luZyB2ZW5kb3Itc3BlY2lmaWMtZGlhbGVjdCBleHRlbnNpb25zIGlzIHVzZWxlc3Mgd2hlbiB1c2VkIHdpdGggYW5vdGhlciB2ZW5kb3KScyBkYXRhIHNvdXJjZS4gSGVuY2UsIHRoZXJlIGlzIGEgbmVlZCB0byB0cmFuc2xhdGUgYmV0d2VlbiB0aGUgdHdvIGRpYWxlY3RzLjwvbGk+CgkJCQk8bGk+RXh0cmFjdC1UcmFuc2Zvcm0tTG9hZDogT2J0YWluaW5nIGRhdGEgZnJvbSBhbmQgc3VwcGx5aW5nIGRhdGEgdG8gZGF0YSBzb3VyY2VzLCB0eXBpY2FsbHkgdXNpbmcgbGFyZ2Utc2NhbGUgYmF0Y2ggbW92ZW1lbnRzIGFuZCBpbnZvbHZpbmcgZGF0YSBjaGVja2luZyBhbmQgdmFsaWRhdGlvbi4gT2Z0ZW4gaW5jbHVkZXMgc29tZSBvcGVyYXRpb25zIG9uIGRhdGEgb2J0YWluZWQgYmVmb3JlIGxvYWRpbmcgaW50byB0YXJnZXQgZGF0YSBzb3VyY2UuPC9saT4KCQkJCTxsaT5EYXRhIE1hcHBpbmc6IE1hcHBpbmcgYmV0d2VlbiBkYXRhIHNvdXJjZSBhbmQgaW4tbWVtb3J5IHJlcHJlc2VudGF0aW9uLCB1c2VkIGZvciBicmlkZ2luZyBiZXR3ZWVuIGRvbWFpbnMgc3VjaCBhcyBvYmplY3QsIHJlbGF0aW9uYWwsIGhpZXJhcmNoaWNhbCwgYW5kIG11bHRpLWRpbWVuc2lvbmFsIGRhdGEgc3RydWN0dXJlcy48L2xpPgoJCQk8L3VsPgoJCQk8cD5BbHRob3VnaCB0aGUgc2NvcGUgb2YgRFRQIGluY2x1ZGVzIGV4ZW1wbGFyeSBjb25uZWN0b3JzIGZvciBwb3B1bGFyIG9wZW4gc291cmNlIGFuZCBjb21tZXJjaWFsIGRhdGEgc291cmNlcywgdGhlc2UgYXJlIG5vdCBuZWNlc3NhcmlseSBpbnRlbmRlZCB0byBiZSB0aGUgZGVmaW5pdGl2ZSBjb25uZWN0b3JzLiBJbnN0ZWFkLCB0aGV5IGFyZSBpbnRlbmRlZCB0byBzZXJ2ZSB0d28gcHVycG9zZXMuIEZpcnN0LCB0aGV5IGFyZSBpbnRlbmRlZCB0byBlbmFibGUgdXNlcnMgdG8gaW1tZWRpYXRlbHkgdXNlIHRoZXNlIGRhdGEgc291cmNlcywgYWx0aG91Z2ggcG9zc2libHkgd2l0aG91dCBleHBsb2l0aW5nIGFsbCB0aGVpciBmZWF0dXJlcy4gU2Vjb25kLCB0aGV5IGFyZSBpbnRlbmRlZCB0byBzZXJ2ZSBhcyBleGFtcGxlcyB0byBib3RoIGNvbW1lcmNpYWwgYW5kIG9wZW4gc291cmNlIGRldmVsb3BlcnMgd2hvIHdhbnQgdG8gaW50ZWdyYXRlIGRhdGEgc291cmNlcyBpbnRvIEVjbGlwc2UuIEl0IGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgZ29hbHMgb2YgdGhpcyBwcm9qZWN0IHRoYXQgdGhlIGV4ZW1wbGFyeSBjb25uZWN0b3JzIGJlY29tZSBzdXBlcnNlZGVkIGJ5IG1vcmUgY29tcGxldGUgaW1wbGVtZW50YXRpb25zIHByb3ZpZGVkIGJ5IHRoaXJkIHBhcnRpZXMsIGJvdGggY29tbWVyY2lhbCBhbmQgb3BlbiBzb3VyY2UuPC9wPgoJCQk8aDQ+UHJvamVjdHM8L2g0PgoJCQk8cD5Jbml0aWFsbHkgRFRQIHdpbGwgY29udGFpbiB0aGUgZm9sbG93aW5nIHRocmVlIHByb2plY3RzLCBhbmQgZW1waGFzaXplIHJlbGF0aW9uYWwgZGF0YSBzb3VyY2VzIGFuZCBzdHJ1Y3R1cmVzLjwvcD4KCQkJPHA+PGI+TW9kZWwgYmFzZTwvYj48L3A+CgkJCTxwPlRoZSBNb2RlbCBCYXNlIHByb2plY3QgcHJvdmlkZXMgdGhlIGZvdW5kYXRpb24gZm9yIERUUC4gVXNpbmcgaW5kdXN0cnkgYmVzdCBwcmFjdGljZXMgc3VjaCBhcyBtb2RlbC1kcml2ZW4gZGV2ZWxvcG1lbnQgd2l0aCBVTUwsIGFuZCB0YWtpbmcgYWR2YW50YWdlIG9mIHRoZSBFY2xpcHNlIE1vZGVsaW5nIEZyYW1ld29yayAoRU1GKSwgaW5pdGlhbGx5IGluY2x1ZGVkIGFyZSBtb2RlbHMgZm9yOjwvcD4KCQkJPHVsPgoJCQkJPGxpPkRyaXZlciBkZWZpbml0aW9uPC9saT4KCQkJCTxsaT5EYXRhYmFzZSBkZWZpbml0aW9uPC9saT4KCQkJCTxsaT5TUUw8L2xpPgoJCQkJPGxpPlNRTCBRdWVyeTwvbGk+CgkJCTwvdWw+CgkJCTxwPktleSBmZWF0dXJlcyBzdXBwb3J0ZWQgYW5kIGJlbmVmaXRzIHByb3ZpZGVkIGluY2x1ZGU6PC9wPgoJCQk8dWw+CgkJCQk8bGk+U3VwcG9ydCBmb3IgY2hhbmdlIG1hbmFnZW1lbnQ6IE1vZGVscyBjYW4gYmUgdmVyc2lvbiBjb250cm9sbGVkIHRocm91Z2ggRWNsaXBzZSB0ZWFtIHN1cHBvcnQuPC9saT4KCQkJCTxsaT5Ccm9hZCBlZGl0aW5nIHN1cHBvcnQ6IFZpc3VhbCBhbmQgb3RoZXIgbWVhbnMgb2YgbW9kZWwgZWRpdGluZywgaW50ZWdyYXRlZCB3aXRoIEVNRiwgZW5hYmxpbmcgc2VhbWxlc3MgZWRpdGluZyBhbmQgRU1GIG1vZGVsIGdlbmVyYXRpb24uPC9saT4KCQkJCTxsaT5QdWJsaXNoZWQgbW9kZWxzIHdpdGggZG9jdW1lbnRhdGlvbiAoSmF2YSBEb2MpIHRvIHN1cHBvcnQgRFRQIGNvbnN1bWVycy48L2xpPgoJCQkJPGxpPkV4dGVuc2libGUgYW5kIGRhdGFiYXNlLWFnbm9zdGljIG1vZGVscy48L2xpPgoJCQkJPGxpPkNvbXBsaWFuY2Ugd2l0aCB0aGUgbGF0ZXN0IHN0YW5kYXJkcywgc3VjaCBhcyBTUUwuPC9saT4KCQkJCTxsaT5TdXBwb3J0IGZvciBKREJDIGFuZCBvdGhlciBjb25uZWN0aXZpdHkgc3RhbmRhcmRzPC9saT4KCQkJCTxsaT5TYW1wbGUgY29kZS9wbHVnLWluczogVG8gZGVtb25zdHJhdGUgbW9kZWwgdXNhZ2UuPC9saT4JCQkJCQkJCQkJCQkJCQkJCQkJCQoJCQk8L3VsPgoJCQk8cD48Yj5Db25uZWN0aXZpdHk8L2I+PC9wPgoJCQk8cD5UaGUgQ29ubmVjdGl2aXR5IHByb2plY3QgaW5jbHVkZXMgY29tcG9uZW50cyBmb3IgZGVmaW5pbmcsIGNvbm5lY3RpbmcgdG8sIGFuZCB3b3JraW5nIHdpdGggZGF0YSBzb3VyY2VzLiBUaGVzZSBpbmNsdWRlOjwvcD4KCQkJPHVsPgoJCQkJPGxpPkRyaXZlciBNYW5hZ2VtZW50IEZyYW1ld29yazxici8+PGJyLz4KCQkJCUFjY2VzcyB0byB0aGUgYXBwcm9wcmlhdGUgZHJpdmVycyBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgcHJvZ3JhbW1hdGljIGludGVyYWN0aW9uIHdpdGggZGF0YSBzb3VyY2VzLiBUaGUgRHJpdmVyIE1hbmFnZW1lbnQgRnJhbWV3b3JrIChETUYpIHN1cHBsaWVzIGFuIEVjbGlwc2UgcHJlZmVyZW5jZSBwYWdlIGVuYWJsaW5nIHVzZXJzIHRvIGNyZWF0ZSBkcml2ZXIgZGVmaW5pdGlvbnMgYmFzZWQgb24gc3VwcGxpZWQgdGVtcGxhdGVzLiBBIG51bWJlciBvZiB0ZW1wbGF0ZXMgYXJlIHByb3ZpZGVkIGluIHRoZSBiYXNlIGluc3RhbGxhdGlvbiwgYW5kIGFkZGl0aW9uYWwgdGVtcGxhdGVzIGNhbiBiZSBhZGRlZCBieSBjb21wb25lbnQgZGV2ZWxvcGVycyBjb250cmlidXRpbmcgdG8gRE1GIGV4dGVuc2lvbiBwb2ludHMuPC9saT4KCQkJCTxsaT5Db25uZWN0aW9uIE1hbmFnZW1lbnQgRnJhbWV3b3JrPGJyLz48YnIvPgoJCQkJVGhlIENvbm5lY3Rpb24gTWFuYWdlbWVudCBGcmFtZXdvcmsgKENNRikgaXMgdGhlIGZvdW5kYXRpb24gdXBvbiB3aGljaCBzcGVjaWZpYyBjb25uZWN0aW9uIHR5cGVzIGFyZSBjcmVhdGVkLiBUaGUgY29ubmVjdGlvbiB0eXBlcywgY2FsbGVkIDxpPkNvbm5lY3Rpb24gUHJvZmlsZXM8L2k+IChDUCksIGFyZSBjb250cmlidXRlZCB0byB0aGUgQ01GIHRocm91Z2ggZXh0ZW5zaW9uIHBvaW50cy4gVXNlcnMgdGhlbiBjb25uZWN0IHRvIGRhdGEgc291cmNlIGluc3RhbmNlcyBieSBjcmVhdGluZyBhbmQgY29uZmlndXJpbmcgYSBDUCBmb3IgdGhhdCBkYXRhIHNvdXJjZSB0eXBlLiBEYXRhIHNvdXJjZS1zdGFuZGFyZCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMsIHN1Y2ggYXMgdGhlIGNvbm5lY3Rpb24gVVJMLCB1c2VyIG5hbWUsIGFuZCBwYXNzd29yZCwgYXJlIHByb3ZpZGVkIG9uIENQIGluc3RhbmNlIGNyZWF0aW9uIGFuZCBzdG9yZWQgYXMgc2VjdXJlIG1ldGEtZGF0YSBmb3IgdGhlIENQLiBDUCBhbGxvdyBmb3IgaG9zdCBjb25uZWN0aXZpdHkgY2hlY2tzICgicGluZyIpLCBjb25uZWN0aW9uLCBhdXRvLWNvbm5lY3Qgb24gQ1Agc3RhcnR1cCwgYW5kIGRpc2Nvbm5lY3QuIEZ1cnRoZXIsIENQIEV4dGVuc2lvbnMgZW5hYmxlIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSBhbmQgY29udGVudCB0byBiZSBhZGRlZCB0byBhIENQLiBGb3IgcmV1c2Ugb2YgQ1AgaW5zdGFuY2UgY29uZmlndXJhdGlvbiwgYmFzZSBpbXBvcnQvZXhwb3J0IGZ1bmN0aW9uYWxpdHkgaXMgcHJvdmlkZWQgYnkgQ01GIGFuZCBzdXJmYWNlZCBpbiB0b29scyBzdWNoIGFzIHRoZSBEU0UgRXhwbG9yZXIgKHNlZSBiZWxvdykuIERhdGEgc291cmNlIENQIHRoZW4gYmVjb21lIHRoZSBjb25uZWN0aW9uIHByb3ZpZGVycyB0aHJvdWdoIHdoaWNoIG90aGVyIERUUCB0b29saW5nIGFjY2Vzc2VzIGRhdGEgc291cmNlIGluc3RhbmNlcy48L2xpPgoJCQkJPGxpPkpEQkMgY29ubmVjdGlvbiBzdXBwb3J0PGJyLz48YnIvPgoJCQkJRFRQIHdpbGwgaW5jbHVkZSBhIEpEQkMgZHJpdmVyIHRlbXBsYXRlIGFuZCBDUCwgYXMgYSBtZWFucyBvZiBlbmFibGluZyBkYXRhYmFzZSBjb25uZWN0aXZpdHksIGFuZCBzZXJ2aW5nIGFzIGFuIGV4YW1wbGUgZm9yIGZ1cnRoZXIgQ1AgZGV2ZWxvcG1lbnQuIERhdGFiYXNlLXNwZWNpZmljIGNhcGFiaWxpdGllcyBjYW4gdGhlbiBiZSBzdXJmYWNlZCBhcyBDUCBleHRlbnNpb25zLCBhbGxvd2luZyBmb3Igc3BlY2lhbGl6YXRpb24gYW5kIHByZXNlbnRhdGlvbiBvZiBkaWZmZXJlbnRpYXRpbmcgZGF0YWJhc2UgZnVuY3Rpb25hbGl0eSBkaXJlY3RseSBpbiB0aGF0IGRhdGFiYXNlJ3MgQ1AuPC9saT4KCQkJCTxsaT5EYXRhIFNvdXJjZSBFeHBsb3Jlcjxici8+PGJyLz4KCQkJCVRoZSBEYXRhIFNvdXJjZSBFeHBsb3JlciAoRFNFKSBpcyBhbiBFY2xpcHNlIHZpZXcgaG91c2luZyBDUCBpbnN0YW5jZXMuIEZyb20gdGhpcyB2aWV3LCBDUCBjYXBhYmlsaXRpZXMgYXJlIHN1cmZhY2VkLCBhbmQgZGF0YSBzb3VyY2UgY29udGVudCBpcyBwcmVzZW50ZWQuIFRoZSB0eXBlIGFuZCBsZXZlbCBvZiBkZXRhaWwgZm9yIGFueSBvbmUgaW5zdGFuY2UgaXMgY29uc3RyYWluZWQgb25seSBieSB0aGUgQ1AgaXRzZWxmLiBEU0UgYWxzbyBpcyBhIHByb3ZpZGVyIG9mIENQIGluc3RhbmNlIGRhdGEgdG8gY2xpZW50cywgc3VjaCBhcyBkcmFnIGFuZCBkcm9wIGFuZCBBUEkgY2FsbHMuIFRoaXMgYWxsb3dzIGRhdGEgdG9vbGluZyByZXF1aXJpbmcgY29ubmVjdGlvbiBtYW5hZ2VtZW50IHRvIGludGVyYWN0IHdpdGggdGhlIERTRSBhcyBhIG1lZGlhdG9yIHRvIENQIGluc3RhbmNlcy48L2xpPgoJCQkJPGxpPk9wZW4gRGF0YSBBY2Nlc3M8YnIvPjxici8+CgkJCQlUaGUgT3BlbiBEYXRhIEFjY2VzcyAoT0RBKSBjb21wb25lbnQgaXMgYW4gb3BlbiBhbmQgZmxleGlibGUgZGF0YSBhY2Nlc3MgZnJhbWV3b3JrIHRoYXQgYWxsb3dzIGFwcGxpY2F0aW9ucyB0byBhY2Nlc3MgZGF0YSBmcm9tIGJvdGggc3RhbmRhcmQgYW5kIGN1c3RvbSBkYXRhIHNvdXJjZXMuIEl0IGVuYWJsZXMgZGF0YSBjb25uZWN0aXZpdHkgYmV0d2VlbiBkYXRhIGNvbnN1bWVycyBhbmQgZGF0YSBzb3VyY2UgcHJvdmlkZXJzIHRocm91Z2ggcHVibGlzaGVkIHJ1bi10aW1lIGFuZCBkZXNpZ24tdGltZSBpbnRlcmZhY2VzLiBJbiBhZGRpdGlvbiwgdGhlIGZyYW1ld29yayBhbHNvIGluY2x1ZGVzIGFuIE9EQSBkcml2ZXIgbWFuYWdlbWVudCBwYWNrYWdlIHRoYXQgaGVscHMgYW4gT0RBIGNvbnN1bWVyIGFwcGxpY2F0aW9uIHRvIG1hbmFnZSBkaXZlcnNlIGJlaGF2aW9yIG9mIGluZGl2aWR1YWwgT0RBIGRhdGEgZHJpdmVycy48YnIvPjxici8+CgkJCQlBIGRhdGEgZHJpdmVyIGlzIGNyZWF0ZWQgc2ltcGx5IGJ5IGltcGxlbWVudGluZyB0aGUgcnVuLXRpbWUgaW50ZXJmYWNlcyBkZWZpbmVkIGJ5IHRoZSBmcmFtZXdvcmsuIFRoZSBydW4tdGltZSBpbnRlcmZhY2VzIGluY2x1ZGUgc3VwcG9ydCBmb3IgZXN0YWJsaXNoaW5nIGEgY29ubmVjdGlvbiwgYWNjZXNzaW5nIG1ldGEtZGF0YSwgYW5kIGV4ZWN1dGluZyBxdWVyaWVzIHRvIHJldHJpZXZlIGRhdGEuICBBIGRyaXZlciBjYW4gZGVmaW5lIGludGVybmFsIGRhdGEgc291cmNlIGNvbm5lY3Rpb24gcHJvZmlsZXMgYW5kL29yIHdvcmsgd2l0aCB0aGUgQ01GJ3MgQ29ubmVjdGlvbiBQcm9maWxlcyBleHRlbnNpb25zLiBPbmNlIGRldmVsb3BlZCwgdGhlIGRyaXZlciBjYW4gYmUgcmVnaXN0ZXJlZCB0aHJvdWdoIGFuIGV4dGVuc2lvbiBwb2ludCB3aXRoIGluZGl2aWR1YWwgT0RBIGNvbnN1bWVyIGNvbXBvbmVudHMgdG8gZW5hYmxlIGRhdGEgY29ubmVjdGl2aXR5LiBUaGUgZnJhbWV3b3JrIGFsc28gcHJvdmlkZXMgZGVzaWduLXRpbWUgaW50ZXJmYWNlcyB0byBpbnRlZ3JhdGUgY3VzdG9tIHF1ZXJ5IGJ1aWxkZXJzIHdpdGhpbiBhbiBhcHBsaWNhdGlvbiBkZXNpZ25lciB0b29sLjwvbGk+CgkJCTwvdWw+CgkJCTxwPjxiPlNRTCBEZXZlbG9wbWVudCBUb29sczwvYj48L3A+CgkJCTxwPlRoZSBTUUwgRGV2ZWxvcG1lbnQgVG9vbHMgcHJvamVjdCBwcm92aWRlcyBmcmFtZXdvcmtzIGFuZCB0b29scyBmb3IgZGVlcCBhbmQgYnJvYWQgU1FMIHN1cHBvcnQuIFRoZSBmcmFtZXdvcmtzIGluY2x1ZGU6PC9wPgoJCQk8dWw+CgkJCQk8bGk+Um91dGluZXMgRWRpdG9yIEZyYW1ld29yazxici8+PGJyLz4KCQkJCUFuIGV4dGVuc2libGUgZnJhbWV3b3JrIGZvciBlZGl0aW5nIGRhdGFiYXNlIHJvdXRpbmVzIGFuZCBTUUwgc3RhdGVtZW50cy4gVmVuZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMgZW5hYmxlIHNwZWNpYWxpemVkIHN1cHBvcnQgZm9yIHBhcnRpY3VsYXIgZGF0YWJhc2VzLjwvbGk+CgkJCQk8bGk+Um91dGluZXMgRGVidWdnZXIgRnJhbWV3b3JrPGJyLz48YnIvPgoJCQkJV2hpbGUgcm91dGluZSBkZWJ1ZyBzdXBwb3J0IHZhcmllcyB3aWRlbHkgaW4gZXhpc3RpbmcgZGF0YWJhc2Ugb2ZmZXJpbmdzLCB0aGUgUm91dGluZXMgRGVidWdnZXIgRnJhbWV3b3JrIHdpbGwgcHJvdmlkZSBhbiBleHRlbnNpYmxlIGJhc2UgZW5hYmxpbmcgZGVidWcgc3VwcG9ydCBmb3Igc3BlY2lmaWMgY2FzZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIGV4aXN0aW5nIEVjbGlwc2UgZGVidWcgaW5mcmFzdHJ1Y3R1cmUuPC9saT4KCQkJCTxsaT5TUUwgUXVlcnkgUGFyc2VyPGJyLz48YnIvPgoJCQkJQWx0aG91Z2ggU1FMIGlzIGRlZmluZWQgYnkgYSBzdGFuZGFyZCwgc2V2ZXJhbCBtYWpvciBkaWFsZWN0cyBleGlzdC4gVGh1cywgd2hpbGUgdGhlIHN0YW5kYXJkIG11c3QgYmUgc3VwcG9ydGVkLCBwcmFjdGljYWxpdHkgYWxzbyBkZW1hbmRzIGZsZXhpYmlsaXR5IGluIGFkanVzdG1lbnQgdG8gZGlhbGVjdHMuIFRoZSBTUUwgUXVlcnkgUGFyc2VyIG1lZXRzIHRoZXNlIG5lZWRzIGJ5IHByb3ZpZGluZyBhbiBleHRlbnNpYmxlIGZyYW1ld29yaywgZW5hYmxpbmcgZGlhbGVjdC1hd2FyZSBTUUwgY29tcG9uZW50cyBhbmQgdG9vbHMuPC9saT4KCQkJCTxsaT5TUUwgRXhlY3V0aW9uIFBsYW4gRnJhbWV3b3JrPGJyLz48YnIvPgoJCQkJVGhlIGFiaWxpdHkgdG8gdW5kZXJzdGFuZCBob3cgYSBTUUwgZXZhbHVhdGlvbiBlbmdpbmUgd2lsbCBleGVjdXRlIGEgZ2l2ZW4gcXVlcnkgaXMgdml0YWwgaW4gdHVuaW5nIHF1ZXJpZXMgdG8gb3B0aW1pemUgcGVyZm9ybWFuY2UuIFRoZSBTUUwgRXhlY3V0aW9uIFBsYW4gRnJhbWV3b3JrIHdpbGwgcHJvdmlkZSBhIG1lYW5zIGZvciBjYXB0dXJpbmcgYW5kIHByZXNlbnRpbmcgZXhlY3V0aW9uIHBsYW5zIGluIGEgZ2VuZXJpYyBmYXNoaW9uLCBlbmFibGluZyBleHRlbnNpb25zIHRvIGN1c3RvbWl6ZSBzdXBwb3J0IGZvciBzcGVjaWZpYyBTUUwgZXhlY3V0aW9uIGVuZ2luZXMuPC9saT4KCQkJPC91bD4KCQkJPHA+VGhlIHRvb2xzIGluY2x1ZGU6PC9wPgoJCQk8dWw+CgkJCQk8bGk+U1FMIEVkaXRvcjxici8+PGJyLz4KCQkJCVRoZSBTUUwgRWRpdG9yIHdpbGwgcHJvdmlkZSBhbiBleGVtcGxhcnkgdG9vbCBmb3Igc3RhbmRhcmQgdGV4dC1iYXNlZCBlZGl0aW5nIG9mIFNRTCBzdGF0ZW1lbnRzLiBQcm92aWRpbmcgY29udGVudCBhc3Npc3QgdGllZCB0byB0aGUgU1FMIE1vZGVsLCBzeW50YXggY29sb3JpemF0aW9uLCBhbmQgbXVsdGlwbGUgc3RhdGVtZW50IHN1cHBvcnQsIHRoaXMgZWRpdG9yIHdpbGwgcHJvdmlkZSBhbiBlc3NlbnRpYWwgdG9vbCBmb3IgZGF0YS1jZW50cmljIGRldmVsb3BtZW50LjwvbGk+CgkJCQk8bGk+VmlzdWFsIFNRTCBCdWlsZGVyPGJyLz48YnIvPgoJCQkJVGhlIFZpc3VhbCBTUUwgQnVpbGRlciBhbGxvd3MgZm9yIGdyYXBoaWNhbCBlZGl0aW5nIG9mIFNRTCwgcmFpc2luZyB0aGUgbGV2ZWwgb2YgYWJzdHJhY3Rpb24sIGluY3JlYXNpbmcgZGV2ZWxvcGVyIHByb2R1Y3Rpdml0eSwgYW5kIG1ha2luZyBxdWVyeSBjb25zdHJ1Y3Rpb24gcG9zc2libGUgZm9yIGEgd2lkZXIgdXNlciBiYXNlLjwvbGk+CgkJCQk8bGk+UmVzdWx0cyBWaWV3PGJyLz48YnIvPgoJCQkJVGhlIFJlc3VsdHMgVmlldyBkaXNwbGF5cyB0aGUgb3V0cHV0IG9mIHJvdXRpbmUgb3IgU1FMIHN0YXRlbWVudCBleGVjdXRpb24gaW4gYSB0YWJ1bGFyIGZvcm0gdHlwaWNhbCBvZiBTUUwgcmVzdWx0IHNldHMuIFRoZXNlIHJlc3VsdHMgY2FuIGJlIGV4cG9ydGVkIHRvIHBlcnNpc3RlbnQgc3RvcmFnZSBpbiBhIHZhcmlldHkgb2YgZm9ybWF0cyBhbmQgcmVsb2FkZWQgYXQgYSBsYXRlciB0aW1lIGludG8gdGhlIHJlc3VsdHMgdmlldy48L2xpPgoJCQkJPGxpPlNjcmlwdCBIaXN0b3J5PGJyLz48YnIvPgoJCQkJVHlwaWNhbGx5IGEgbnVtYmVyIG9mIHNjcmlwdHMgd2lsbCBiZSBleGVjdXRlZCByZXBlYXRlZGx5IGR1cmluZyB0aGUgY291cnNlIG9mIGRhdGEtY2VudHJpYyBkZXZlbG9wbWVudC4gVGhlIGFiaWxpdHkgdG8gcmV0YWluIGEgaGlzdG9yeSBvZiB0aGVzZSBxdWVyaWVzIGFuZCB0aGVyZWJ5IHF1aWNrbHkgcmVwZWF0IGV4ZWN1dGlvbiBvZiB0aGVtIGFuZCB2aWV3IHJlc3VsdHMgaW5jcmVhc2VzIHByb2R1Y3Rpdml0eS4gVGhlIFNjcmlwdCBIaXN0b3J5IGlzIGEgdmlldyBtZWV0aW5nIHRoZXNlIG5lZWRzLCBiYXNlZCBvbiBhIGRldmVsb3BtZW50IHNlc3Npb24uPC9saT4KCQkJPC91bD48YnIvPjxici8+CgkJCTxoND5PdGhlciBUZXJtczwvaDQ+CgkJCTxwPlRoaXMgQ2hhcnRlciBpbmhlcml0cyBhbGwgdGVybXMgbm90IG90aGVyd2lzZSBkZWZpbmVkIGhlcmVpbiBmcm9tIHRoZSBFY2xpcHNlIFN0YW5kYXJkIFRvcC1MZXZlbCBDaGFydGVyICg8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9wcm9jZXNzZXMvRWNsaXBzZV9TdGFuZGFyZF9Ub3BMZXZlbF9DaGFydGVyX3YxLjAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvcHJvY2Vzc2VzL0VjbGlwc2VfU3RhbmRhcmRfVG9wTGV2ZWxfQ2hhcnRlcl92MS4wLmh0bWw8L2E+KS4gVGhpcyBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzZWN0aW9ucyBvbiB0aGUgUHJvZ3JhbSBNYW5hZ2VtZW50IENvbW1pdHRlZSwgUm9sZXMsIFByb2plY3QgT3JnYW5pemF0aW9uLCBUaGUgRGV2ZWxvcG1lbnQgUHJvY2VzcywgYW5kIExpY2Vuc2luZy48L3A+CgkJCQkJCQkJCgkJPC9kaXY+Cgk8L2Rpdj4KCjw/CgkkaHRtbCA9IG9iX2dldF9jbGVhbigpOwoJIyBHZW5lcmF0ZSB0aGUgd2ViIHBhZ2UKCSRBcHAtPmdlbmVyYXRlUGFnZSgkdGhlbWUsICRNZW51LCAkTmF2LCAkcGFnZUF1dGhvciwgJHBhZ2VLZXl3b3JkcywgJHBhZ2VUaXRsZSwgJGh0bWwpOwo/Pg==