PD9waHAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXJlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL2FwcC5jbGFzcy5waHAiKTsJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbmF2LmNsYXNzLnBocCIpOyAJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbWVudS5jbGFzcy5waHAiKTsgCSRBcHAgCT0gbmV3IEFwcCgpOwkkTmF2CT0gbmV3IE5hdigpOwkkTWVudSAJPSBuZXcgTWVudSgpOwkJaW5jbHVkZSgkQXBwLT5nZXRQcm9qZWN0Q29tbW9uKCkpOyAgICAjIEFsbCBvbiB0aGUgc2FtZSBsaW5lIHRvIHVuY2x1dHRlciB0aGUgdXNlcidzIGRlc2t0b3AnCgokcGFnZVRpdGxlIAkJPSAiIjsKJHBhZ2VLZXl3b3Jkcwk9ICIiOwokcGFnZUF1dGhvcgkJPSAiIjsKCm9iX3N0YXJ0KCk7Cj8+CiAgICA8ZGl2IGlkPSJtYWluY29udGVudCI+Cgk8ZGl2IGlkPSJtaWRjb2x1bW4iPgoKPGgxPkVjbGlwc2UgTW9kZWwtdG8tVGV4dCAoTTJUKSBUcmFuc2Zvcm1hdGlvbiBQcm9qZWN0IFByb3Bvc2FsPC9oMT4KPC9wPgo8P3BocAppbmNsdWRlX29uY2UoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvcHJvamVjdHMvZnJhZ21lbnRzL3Byb3Bvc2FsLXBhZ2UtaGVhZGVyLnBocCIpOwpnZW5lcmF0ZV9oZWFkZXIoIk1vZGVsLXRvLVRleHQgKE0yVCkgVHJhbnNmb3JtYXRpb24iKTsKPz4KCjxoMj5JbnRyb2R1Y3Rpb248L2gyPgo8cD5SZXZpc2VkOiBEZWMgNywgMjAwNjwvcD4KPHA+VGhlIE1vZGVsLXRvLVRleHQgVHJhbnNmb3JtYXRpb24gKE0yVCkgVHJhbnNmb3JtYXRpb24gUHJvamVjdCBpcwphIHByb3Bvc2VkIG9wZW4gc291cmNlIHByb2plY3QgdW5kZXIgdGhlIDxhCglocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL21vZGVsaW5nLyI+RWNsaXBzZSBNb2RlbGluZyBQcm9qZWN0PC9hPi48L3A+Cgo8cD5UaGlzIHByb3Bvc2FsIGlzIGluIHRoZSBQcm9qZWN0IFByZS1Qcm9wb3NhbCBQaGFzZSAoYXMgZGVmaW5lZCBpbgp0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wcm9qZWN0cy9kZXZfcHJvY2Vzcy8iPkVjbGlwc2UKRGV2ZWxvcG1lbnQgUHJvY2VzczwvYT4gZG9jdW1lbnQpIGFuZCBpcyB3cml0dGVuIHRvIGRlY2xhcmUgaXRzIGludGVudCBhbmQKc2NvcGUuIFRoaXMgcHJvcG9zYWwgaXMgd3JpdHRlbiB0byBzb2xpY2l0IGFkZGl0aW9uYWwgcGFydGljaXBhdGlvbiBhbmQKaW5wdXQgZnJvbSB0aGUgRWNsaXBzZSBjb21tdW5pdHkuIFlvdSBhcmUgaW52aXRlZCB0byBjb21tZW50IGFuZC9vciBqb2luCnRoZSBwcm9qZWN0LiBQbGVhc2Ugc2VuZCBhbGwgZmVlZGJhY2sgdG8gdGhlIDxhCglocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL25ld3Nwb3J0YWwvdGhyZWFkLnBocD9ncm91cD1lY2xpcHNlLm1vZGVsaW5nLm0ydC8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbmV3c3BvcnRhbC90aHJlYWQucGhwP2dyb3VwPWVjbGlwc2UubW9kZWxpbmcubTJ0PC9hPgpuZXdzZ3JvdXAuPC9wPgoKPGgyPkJhY2tncm91bmQ8L2gyPgoKPHA+TW9kZWwgRHJpdmVuCkRldmVsb3BtZW50IChNREQpIGFuZCBPTUcgPGEgaHJlZj0iaHR0cDovL3d3dy5vbWcub3JnL21kYS8iPk1vZGVsCkRyaXZlIEFyY2hpdGVjdHVyZSAoTURBKTwvYT4gZW1waGFzaXplIHRoZSBjcmVhdGlvbiBvZiBtb2RlbHMgb2YgYSBzb2Z0d2FyZQpzb2x1dGlvbiB3aGljaCBhcmUgdGhlbiByZWZpbmVkIGFuZCB0cmFuc2Zvcm1lZCB1bnRpbCB1bHRpbWF0ZWx5IHNvdXJjZQpjb2RlIChlLmcuIEphdmEsIEMrKykgYW5kIGFzc29jaWF0ZWQgcmVzb3VyY2VzIChlLmcuIHByb3BlcnRpZXMgZmlsZXMsCmNvbmZpZ3VyYXRpb24gZmlsZXMpIGFyZSBjcmVhdGVkLiBUaGUgPGEKCWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcHJvcG9zYWxzL20ybS8iPk1vZGVsLXRvLU1vZGVsIChNMk0pIFRyYW5zZm9ybWF0aW9ucyBQcm9qZWN0IHByb3Bvc2FsPC9hPgooaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wcm9wb3NhbHMvbTJtLykgZm9jdXNlcyBvbiB0ZWNobm9sb2dpZXMgdG8KdHJhbnNmb3JtIGJldHdlZW4gZGlmZmVyZW50IG1vZGVscy4gVGhpcyBwcm9wb3NhbCBmb2N1c2VzIG9uCnRlY2hub2xvZ2llcyBmb3IgdHJhbnNmb3JtaW5nIG1vZGVscyBpbnRvIHRleHQgKHR5cGljYWxseSBsYW5ndWFnZQpzb3VyY2UgY29kZSBhbmQgdGhlIHJlc291cmNlcyBpdCBjb25zdW1lcykuPC9wPgoKPHA+U29sdXRpb25zIGZvcgptb2RlbC10by10ZXh0IHRyYW5zZm9ybWF0aW9ucyBnZW5lcmFsbHkgbWFrZSB1c2Ugb2YgInRlbXBsYXRlcyIuIEEKdGVtcGxhdGUgbWF5IGJlIGdlbmVyYWxseSBkZXNjcmliZWQgYXMgYSB0ZXh0IHNlcXVlbmNlIGludGVyc3BlcnNlZCB3aXRoCmNvbW1hbmRzIHRoYXQgZXh0cmFjdCBpbmZvcm1hdGlvbiBmcm9tIGEgbW9kZWwuIENvbW1hbmRzIGFyZSBub3QgbGltaXRlZAp0byBpbmZvcm1hdGlvbiBleHRyYWN0aW9uIJYgdGhleSBvZnRlbiBzZXJ2ZSBhcyBmbG93IGNvbnRyb2wgaW4gYQp0ZW1wbGF0ZTsgY29udHJvbGxpbmcgd2hldGhlciBhbmQgaG93IG1hbnkgdGltZXMgYmxvY2tzIG9mIHRleHQgYXJlCnByb2Nlc3NlZC4gPC9wPgoKPHA+VGhlcmUgYXJlIGEgbGFyZ2UKbnVtYmVyIG9mIHRlbXBsYXRlIGxhbmd1YWdlcyCWIGEgR29vZ2xlIHNlYXJjaCBvbiCRdGVtcGxhdGUgbGFuZ3VhZ2WSCnlpZWxkcyAyNTgsMDAwIGhpdHMuIFRoZSBwYXJ0aWVzIGludGVyZXN0ZWQgaW4gdGhpcyBwcm9wb3NhbCByZXByZXNlbnQKb3IgaGF2ZSBpbnRlcmVzdCBpbiB0aGUgZm9sbG93aW5nIGxhbmd1YWdlcy48L3A+Cgo8dWw+CjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZnQvcHJvamVjdHMvamV0Ij5KRVQ8L2E+LCBhCmRlcml2YXRpdmUgb2YgSmF2YVNlcnZlciBQYWdlcyAoSlNQKSBpbml0aWFsbHkgZGV2ZWxvcGVkIGFzIHBhcnQgb2YgdGhlCkVjbGlwc2UgTW9kZWxpbmcgRnJhbWV3b3JrIChFTUYpLCBhbmQgY3VycmVudGx5IGFuIGluY3ViYXRvciBwcm9qZWN0IGluCnRoZSBFY2xpcHNlIE1vZGVsaW5nIFByb2plY3QuPC9saT4KCjxsaT5YUGFuZCwgdGhlIHRlbXBsYXRlIGxhbmd1YWdlIHRoYXQgaXMgcGFydCBvZiA8YQoJaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9nbXQvb2F3LyI+b3BlbkFyY2hpdGVjdHVyZVdhcmU8L2E+LjwvbGk+Cgo8bGk+QWNjZWxlbyB0ZW1wbGF0ZSBsYW5ndWFnZSwgcGFydCBvZiBPQkVPknMgPGEKCWhyZWY9Imh0dHA6Ly93d3cuYWNjZWxlby5vcmcvIj5BY2NlbGVvIE1EQSBnZW5lcmF0b3I8L2E+LjwvbGk+Cgo8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5vbWcub3JnL2NnaS1iaW4vZG9jP2FkLzIwMDQtNC03Ij5PTUcgTU9GIE1vZGVsIHRvIFRleHQ8L2E+LAphIHJlY2VudGx5IGFwcHJvdmVkIE9NRyBzdGFuZGFyZCBmb3IgdGV4dCBnZW5lcmF0aW9uIGZyb20gTU9GIG1vZGVsczsgaW50ZW5kZWQgdG8gY29tcGxlbWVudCBPTUcgUVZULjwvbGk+CjwvdWw+Cgo8cD5PbmUgb2YgdGhlCmNvbmNlcm5zIG9mIHRoaXMgcHJvamVjdCBpcyB0byByZWR1Y2UgdGhlIGR1cGxpY2F0ZSBlZmZvcnQgaW52b2x2ZWQgaW4KZGV2ZWxvcGluZyBhbmQgbWFpbnRhaW5pbmcgdGVtcGxhdGUgbGFuZ3VhZ2VzLjwvcD4KCjxoMz5UZWNobm9sb2dpZXMgb2YgYSBNb2RlbC10by1UZXh0IHNvbHV0aW9uPC9oMz4KCjxwPkV4cGFuZGluZwp0ZW1wbGF0ZXMgaXMgb25seSBhIHBhcnQgb2YgdGhlIHJlcXVpcmVtZW50cyBmb3IgYSBNb2RlbC10by1UZXh0CnNvbHV0aW9uLiBJbiBhZGRpdGlvbiwgc29sdXRpb25zIG11c3QgdHlwaWNhbGx5IGhhdmU6PC9wPgo8dWw+CjxsaT5BIG1lY2hhbmlzbSBmb3IgYWNjZXNzaW5nIGFuZCBuYXZpZ2F0aW5nIGRpdmVyc2UgaW5wdXQgbW9kZWxzLjwvbGk+Cgo8bGk+QSBtZWNoYW5pc20gdG8gYWRkICJkZXJpdmVkIiBwcm9wZXJ0aWVzIHRvIGV4aXN0aW5nIG1ldGEKbW9kZWxzLiBTdWNoIGFkZGl0aW9uYWwgcHJvcGVydGllcyBhcmUgYWxtb3N0IGFsd2F5cyByZXF1aXJlZCBmb3IKcmVhbC13b3JsZCBnZW5lcmF0b3JzLjwvbGk+Cgo8bGk+QSBtZWNoYW5pc20gZm9yIG9yY2hlc3RyYXRpbmcgdGVtcGxhdGUgZXhlY3V0aW9uLCBhbmQgc2F2aW5nCnRoZWlyIHJlc3VsdHMgdG8gYSBmaWxlIHN5c3RlbS4gSW4gdGhlIEVjbGlwc2UgZW52aXJvbm1lbnQsIHRoaXMKaW5jbHVkZXMgcGxheWluZyB3ZWxsIHdpdGggVGVhbSBwcm92aWRlcnMsIGFuZCBjb3JyZWN0bHkgaGFuZGxpbmcgZmlsZQplbmNvZGluZ3MuPC9saT4KCjxsaT5BIG1lY2hhbmlzbSBmb3IgaW50ZWdyYXRpbmcgZ2VuZXJhdGVkIGFuZCBtYW51YWxseSB3cml0dGVuCmNvZGUuIFRoaXMgZW5jb21wYXNzZXMgcmVzcGVjdGluZyBhbmQgcmVjb25jaWxpbmcgdXNlciBjaGFuZ2VzIHdoZW4KcmVnZW5lcmF0ZWQgb3V0cHV0IGlzIG1lcmdlZCB3aXRoIHVzZXIgbW9kaWZpZWQgb3V0cHV0LCBhcyB3ZWxsIGFzCnByb3ZpZGluZyB0b29sIHN1cHBvcnQgZm9yICJlbmZvcmNpbmciIGNvbnZlbnRpb25zIChzdWNoIGFzIGUuZy4gdGhhdApkZXZlbG9wZXJzIGhhdmUgdG8gY3JlYXRlIGEgc3ViY2xhc3MgZnJvbSBhIGdlbmVyYXRlZCBjbGFzcyBhbmQKaW1wbGVtZW50IGNlcnRhaW4gbWV0aG9kcyk8L2xpPgo8L3VsPgoKPHA+SW4gbWFueSBjYXNlcywKdGhlc2UgInRlbXBsYXRlIGxhbmd1YWdlIHRlY2hub2xvZ2llcyIgY2FuIGJlIGltcGxlbWVudGVkIGluIGEgbGFuZ3VhZ2UKaW5kZXBlbmRlbnQgZmFzaGlvbi48L3A+Cgo8aDI+UHJvamVjdCBEZXNjcmlwdGlvbjwvaDI+Cgo8cD5UaGUgTTJUIHByb2plY3Qgd2lsbCBkZWxpdmVyIHRoZSBmb2xsb3dpbmc6PC9wPgoKPHVsPgo8bGk+QW4gZXh0ZW5zaWJsZSBmcmFtZXdvcmsgKHRoZSBNMlQgSW52b2NhdGlvbiBGcmFtZXdvcmspIGZvcgppbnRlZ3JhdGluZyBtb2RlbC10by10ZXh0IGxhbmd1YWdlcyBpbnRvIE1ERC9NREEgc29sdXRpb25zLiBUaGUgaW5pdGlhbApnb2FscyBvZiB0aGlzIGZyYW1ld29yayB3b3VsZCBiZSB0byBhbGxvdyBBUEkgY29uc3VtZXJzIHRvOjwvbGk+Cjx1bD4KPGxpPkludm9rZSBhIGNvbXBvbmVudCBzdXBwbGllZCB0ZW1wbGF0ZSBpbmRlcGVuZGVudGx5IG9mIHRoZQp0ZW1wbGF0ZSBsYW5ndWFnZSB1c2VkLjwvbGk+Cgo8bGk+UGVybWl0IHJ1bnRpbWUgc3Vic3RpdHV0aW9uIG9mIGEgdXNlciBzdXBwbGllZCB0ZW1wbGF0ZSBmb3IgYQpjb21wb25lbnQgc3VwcGxpZWQgdGVtcGxhdGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIHRlbXBsYXRlIGxhbmd1YWdlcyB1c2VkCmJ5IGVpdGhlci4gVGhhdCBpcywgdGhlIHR3byB0ZW1wbGF0ZXMgbWF5IGJlIGltcGxlbWVudGVkIGJ5IGRpZmZlcmVudApsYW5ndWFnZXMuPC9saT4KCjxsaT5JbnZva2UgYSBjb21wb25lbnQgc3VwcGxpZWQgY29kZSBnZW5lcmF0b3IgaW5kZXBlbmRlbnRseSBvZgp0aGUgdGVjaG5vbG9neSB1c2VkIHRvIGNyZWF0ZSB0aGUgY29kZSBnZW5lcmF0b3IuIDwvbGk+Cgo8bGk+UGVybWl0IHJ1bnRpbWUgc3Vic3RpdHV0aW9uIG9mIGEgdXNlciBzdXBwbGllZCBjb2RlIGdlbmVyYXRvcgpmb3IgYSBjb21wb25lbnQgc3VwcGxpZWQgY29kZSBnZW5lcmF0b3IsIHJlZ2FyZGxlc3Mgb2YgdGhlIGNvZGUKZ2VuZXJhdG9yIHRlY2hub2xvZ2llcyBlbXBsb3llZC48L2xpPgo8L3VsPgo8bGk+QVBJcyB0byBpbXBsZW1lbnQgY29tbW9uIHRlbXBsYXRlIGxhbmd1YWdlIHRlY2hub2xvZ2llcy4gVGhlCnByaW1hcnkgY29uc3VtZXJzIG9mIHRoZXNlIEFQSXMgd291bGQgYmUgdGVtcGxhdGUgbGFuZ3VhZ2UKaW1wbGVtZW50YXRpb25zIHRoZW1zZWx2ZXMuPC9saT4KCjxsaT5JbXBsZW1lbnRhdGlvbnMgb2YgdGVtcGxhdGUgbGFuZ3VhZ2VzIHN0cmF0ZWdpYyB0byB0aGUgRWNsaXBzZQpNb2RlbGluZyBQcm9qZWN0LiBUaGVzZSBpbmNsdWRlOjwvbGk+Cjx1bD4KPGxpPkpFVDwvbGk+Cgo8bGk+WFBhbmQ8L2xpPgoKPGxpPk9NRyBNT0YgTW9kZWwgdG8gVGV4dDwvbGk+CjwvdWw+CjxsaT5Gb3IgZWFjaCBzdHJhdGVnaWMgdGVtcGxhdGUgbGFuZ3VhZ2U6PC9saT4KPHVsPgo8bGk+SW50ZWdyYXRpb25zIGludG8gdGhlIE0yVCBJbnZvY2F0aW9uIEZyYW1ld29yay4gPC9saT4KCjxsaT5UZW1wbGF0ZSBlZGl0b3JzLjwvbGk+CjwvdWw+CjxsaT5WYXJpb3VzIHRvb2xzL2FwcHJvYWNoZXMgZm9yIGludGVncmF0aW5nIGdlbmVyYXRlZCBhbmQKbWFudWFsbHkgd3JpdHRlbiBjb2RlLCBzdWNoIGFzIHByb3RlY3RlZCByZWdpb24gbWFuYWdlbWVudCwgbWVyZ2luZwpzdXBwb3J0LCBhIHJlY2lwZSBmcmFtZXdvcms8L2xpPgo8L3VsPgoKPHA+SW1wbGVtZW50YXRpb25zIHdpbGwgdXNlIEVNRiBFY29yZSBtZXRhLW1vZGVscyAoPGEKCWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mIj53d3cuZWNsaXBzZS5vcmcvZW1mPC9hPikgYXMgdGhlCnByaW1hcnkgbWV0YS1tb2RlbCBmb3IgY29uc3VtZWQgbW9kZWxzLiA8L3A+Cgo8cD5CZWNhdXNlIE0yVCBzaG91bGQgbm90IGJlY29tZSBhIHdhcmVob3VzZSBmb3IgbW9kZWwtdG8tdGV4dApsYW5ndWFnZXMsIHRoZSBwcm9qZWN0IHdpbGwgaG9zdCBvbmx5IGxhbmd1YWdlcyBkZWVtZWQgc3RyYXRlZ2ljIHRvIHRoZQpnb2FscyBvZiB0aGUgRWNsaXBzZSBNb2RlbGluZyBQcm9qZWN0LiBNb3N0IGV4aXN0aW5nIGxhbmd1YWdlcyBhbHJlYWR5CmhhdmUgYSAiaG9tZSIsIGFuZCB0aGVyZSB3b3VsZCBiZSBsaXR0bGUgYmVuZWZpdCBmcm9tIG1pZ3JhdGlvbiB0byBhIG5ldwpwcm9qZWN0LiBBdCBpbmNlcHRpb24sIHRoZSBKRVQgbGFuZ3VhZ2UgaGFzIGJlZW4gaWRlbnRpZmllZCBhcyBzdHJhdGVnaWMKYmVjYXVzZSBvZiBpdHMgbG9uZyBhc3NvY2lhdGlvbiB3aXRoIEVNRi4gVGhlIFhQYW5kIGxhbmd1YWdlIGZyb20Kb3BlbkFyY2hpdGVjdHVyZVdhcmUgaXMgYWxzbyBzdHJhdGVnaWMuIApUaGUgT01HIE1PRiBNb2RlbCB0byBUZXh0IGxhbmd1YWdlIGlzIHN0cmF0ZWdpYyBiZWNhdXNlIGl0IGlzIHJlcHJlc2VudHMgYW4gZW1lcmdpbmcgYSBzdGFuZGFyZAppbiB0aGUgbW9kZWwtdG8tdGV4dCBkb21haW4uCkVhY2ggc3RyYXRlZ2ljIGxhbmd1YWdlIHdpbGwgYmUKYSBzZXBhcmF0ZSBjb21wb25lbnQgc28gYXMgdG8gYmUgc2VwYXJhdGVseSBkaXN0cmlidXRhYmxlIGFuZAppbnN0YWxsYWJsZS48L3A+Cgo8cD5TaW1pbGFybHksIGludGVncmF0aW9ucyB3aXRoIHRoZSBNMlQgSW52b2NhdGlvbiBGcmFtZXdvcmsgc2hvdWxkCmJlIGhvc3RlZCBpbiB0aGUgc2FtZSBwcm9qZWN0IGFzIHRoZSBtb2RlbC10by10ZXh0IGxhbmd1YWdlIGl0c2VsZi4KSG93ZXZlciwgaW4gY2FzZXMgd2hlcmUgdGhpcyBpcyBub3QgcG9zc2libGUgYW5kIHRoZSBpbnRlZ3JhdGlvbiBpcwpzdHJhdGVnaWMgdG8gdGhlIGdvYWxzIG9mIHRoZSBFY2xpcHNlIE1vZGVsaW5nIFByb2plY3QsIHRoZSBNMlQgcHJvamVjdApjYW4gc2VydmUgYXMgdGhlIGhvc3QgcHJvamVjdC4gQWdhaW4sIGVhY2ggc3VjaCBpbnRlZ3JhdGlvbiB3aWxsIGJlIGEKc2VwYXJhdGUgY29tcG9uZW50IHNvIGFzIHRvIGJlIHNlcGFyYXRlbHkgZGlzdHJpYnV0YWJsZSBhbmQgaW5zdGFsbGFibGUuPC9wPgoKPGgyPkluaXRpYWwgQ29udHJpYnV0aW9uczwvaDI+Cgo8cD5UaGUgZm9sbG93aW5nIGNvZGUgd2lsbCBiZSBjb250cmlidXRlZCB0byB0aGUgcHJvamVjdDo8L3A+Cgo8dWw+CjxsaT5KRVQsIGZyb20gdGhlIEVNRlQgSkVUIHN1YnByb2plY3QuPC9saT4KCjxsaT5VdGlsaXR5IGZlYXR1cmVzIChKTWVyZ2UsIEltcG9ydHNNYW5hZ2VyKSBmcm9tIHRoZSBKRVQKY29tcG9uZW50IG9mIEVNRi48L2xpPgoKPGxpPkpFVCBFZGl0b3IsIGZyb20gdGhlIEVNRlQgSkVURWRpdG9yIHN1YnByb2plY3QuPC9saT4KCjxsaT5YUGFuZCBhbmQgaXRzIHJlcXVpcmVkIG9BVyBjb21wb25lbnRzIChleHByZXNzaW9uIGxhbmd1YWdlLApYVGVuZCk8L2xpPgoKPGxpPkFwcHJvcHJpYXRlIG9BVyBlZGl0b3JzIChYUGFuZCBlZGl0b3IsIFhUZW5kIGVkaXRvcik8L2xpPgoKPGxpPm9BV5JzIFJlY2lwZSBGcmFtZXdvcmsgZm9yIGludGVncmF0aW5nIGdlbmVyYXRlZCBhbmQgbWFudWFsbHkKd3JpdHRlbiBjb2RlPC9saT4KCjxsaT5Db21wdXdhcmUgaGFzIG9mZmVyZWQgdHdvIGNvbW1pdHRlcnMgdG8gaW1wbGVtZW50IHRoZSBPTUcgTU9GLU1vZGVsLXRvLVRleHQgKE1NMlQpIHN0YW5kYXJkLiAKVGhlcmUgd291bGQgYmUgZW50aXJlbHkgbmV3IGRldmVsb3BtZW50LjwvbGk+CjwvbGk+CjwvdWw+Cgo8aDI+T3JnYW5pemF0aW9uPC9oMj4KCjxwPldlIHByb3Bvc2UgdGhhdCB0aGlzIHByb2plY3QgYmUgdW5kZXJ0YWtlbiBhcyBwYXJ0IG9mIHRoZSBFY2xpcHNlCk1vZGVsaW5nIFByb2plY3QuIEl0IHdpbGwgaGF2ZSBkZXBlbmRlbmNpZXMgb24gdGhlIEVjbGlwc2UgUGxhdGZvcm0sCmluY2x1ZGluZyB0aGUgSkRUIGFuZCBFTUYuPC9wPgoKPHA+CkZ1cnRoZXIgbW9yZSwgaXQgaXMgcHJvcG9zZWQgdGhhdCB0aGUgcHJvamVjdCBiZSBkaXZpZGVkIGludG8gY29tcG9uZW50cyBhcyBmb2xsb3dzLiBFYWNoIGNvbXBvbmVudCB3b3VsZCBoYXZlIGEgbGVhZCBhbmQgaXRzIG93biBjb21taXR0ZXJzIChhbHRob3VnaCBub3RoaW5nIHdvdWxkIHByZXZlbnQgb25lIGNvbW1pdHRlciB3b3JraW5nIG9uIHNldmVyYWwgY29tcG9uZW50cykuCjwvcD4KPHVsPgo8bGk+TW9kZWwtdG8tVGV4dCBJbnZvY2F0aW9uIEZyYW1ld29yayAoTTJULUlGKTwvbGk+CjxsaT5TaGFyZWQgY29tcG9uZW50czwvbGk+CjxsaT5KRVQ8L2xpPgo8bGk+WFBhbmQ8L2xpPgo8bGk+T01HIE1PRiBNb2RlbCB0byBUZXh0IChNTTJUKTwvbGk+CjwvdWw+Cgo8aDM+SW5pdGlhbCBjb21taXR0ZXJzPC9oMz4KPHA+VGhlIGZvbGxvd2luZwpjb21wYW5pZXMgd2lsbCBjb250cmlidXRlIGNvbW1pdHRlcnMgdG8gZ2V0IHRoZSBwcm9qZWN0IHN0YXJ0ZWQ6PC9wPgo8dWw+CjxsaT5JQk0gKDxhIGhyZWY9Imh0dHA6Ly93d3cuaWJtLmNvbS8iPnd3dy5pYm0uY29tPC9hPik8L2xpPgogCiAgICA8dWw+CgkJPGxpPiBQYXVsIEVsZGVyIChwcm9wb3NlZCBwcm9qZWN0IGxlYWQpIC0gSkVULCBNMlQtSUYsIFNoYXJlZCBjb21wb25lbnRzPC9saT4KCTwvdWw+Cgk8bGk+T3BlbkFyY2hpdGVjdHVyZVdhcmU8L2xpPgoJPHVsPgoJCTxsaT5NYXJrdXMgVm9lbHRlciAtIFhQYW5kLCBTaGFyZWQgY29tcG9uZW50czwvbGk+CgkJPGxpPlN2ZW4gRWZmdGluZ2UgLSBYUGFuZDwvbGk+CgkJPGxpPkJlcm5kIEtvbGIgLSBYUGFuZDwvbGk+Cgk8L3VsPgoJPGxpPkNvbXB1d2FyZTwvbGk+Cgk8dWw+CgkJPGxpPlR3byAoMikgY29tbWl0dGVycyBmb3IgT01HIE1vZGVsIHRvIFRleHQ8L2xpPgoJPC91bD4KCTxsaT5JTG9nPC9saT4KCTx1bD4KCQk8bGk+Sm9lbCBDaGV1b3VhIC0gSkVUIChKRVQgZWRpdG9yKTwvbGk+Cgk8L3VsPgoJPGxpPk9CRU88L2xpPgoJPHVsPgoJCTxsaT5UQkQgLSBzaGFyZWQgY29tcG9uZW50czwvbGk+Cgk8L3VsPgo8L3VsPgoKPGgzPkluaXRpYWwgQ29udHJpYnV0b3JzPC9oMz4KCjxwPkFydGVtIFRpa2hvbWlyb3YKKEJvcmxhbmQpIC0gYSB2ZXJzaW9uIG9mIFhQYW5kIHRoYXQgdXNlcyBMUEcgcmF0aGVyIHRoYW4gQW50bHI8L3A+Cgo8aDM+SW50ZXJlc3RlZCBwYXJ0aWVzPC9oMz4KCjxwPlRoZSBmb2xsb3dpbmcKb3JnYW5pemF0aW9ucyBoYXZlIGV4cHJlc3NlZCBpbnRlcmVzdCBpbiB0aGUgcHJvamVjdDo8L3A+Cjx1bD4KPGxpPm9wZW5BcmNoaXRlY3R1cmVXYXJlICg8YQoJaHJlZj0iaHR0cDovL3d3dy5vcGVuYXJjaGl0ZWN0dXJld2FyZS5vcmcvIj53d3cub3BlbmFyY2hpdGVjdHVyZXdhcmUub3JnPC9hPik8L2xpPgoKPGxpPkJvcmxhbmQgKEdNRik8L2xpPgo8dWw+CjxsaT5HTUYgaGFzIHByb3Bvc2VkIGVtYmVkZGluZyBYUGFuZCBhcyB0ZW1wbGF0ZSB0ZWNobm9sb2d5IGZvcgpHTUYuLjwvbGk+CjwvdWw+CjxsaT5PQkVPICg8YSBocmVmPSJodHRwOi8vd3d3Lm9iZW8uZnIvIj53d3cub2Jlby5mcjwvYT4pIJYKY3JlYXRvcnMgb2YgQWNjZWxpbyBNREEuPC9saT4KPHVsPgo8bGk+T0JFTyBpcyBpbnRlcmVzdGVkIGluIGNvbnRyaWJ1dGluZyB0aGUgZm9sbG93aW5nIHRlY2hub2xvZ2llczo8L2xpPgo8dWw+CjxsaT5SZWZsZWN0aXZlIGVkaXRvciBiZXR3ZWVuIG1vZGVsIGFuZCB0ZXh0LjwvbGk+Cgo8bGk+RWRpdG9yIHRlY2hub2xvZ3kgZm9yIEpFVC48L2xpPgo8L3VsPgo8L3VsPgo8bGk+SUxPRyAoPGEgaHJlZj0iaHR0cDovL3d3dy5pbG9nLmNvbS8iPnd3dy5pbG9nLmNvbTwvYT4pIJYKY3VycmVudGx5IHdvcmtpbmcgb24gdGhlIEVNRlQgSmV0IEVkaXRvcjwvbGlwPgoKPGxpPklCTSAoSkVUKTwvbGk+CjxsaT5TeWJhc2U8L2xpPgo8L3VsPgo8aDM+UGFydGljaXBhdGlvbjwvaDM+Cgo8cD5Dcml0aWNhbCB0byB0aGUgc3VjY2VzcyBvZiB0aGlzIHByb2plY3QgaXMgcGFydGljaXBhdGlvbiBvZgpkZXZlbG9wZXJzIGluIHRoZSBtb2RlbGluZyBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBjb21tdW5pdHkuIFdlIGludGVuZAp0byByZWFjaCBvdXQgdG8gdGhpcyBjb21tdW5pdHkgYW5kIGVubGlzdCB0aGUgc3VwcG9ydCBvZiB0aG9zZQppbnRlcmVzdGVkIGluIG1ha2luZyBhIHN1Y2Nlc3Mgb2YgdGhlIE1vZGVsLXRvLVRleHQgVHJhbnNmb3JtYXRpb24KcHJvamVjdC4gV2UgYXNrIGludGVyZXN0ZWQgcGFydGllcyB0byBjb250YWN0IHRoZSBNMlQgbmV3c2dyb3VwIHRvCmV4cHJlc3MgaW50ZXJlc3QgaW4gY29udHJpYnV0aW5nIHRvIHRoZSBwcm9qZWN0LjwvcD4KCiAgICAgIDwvZGl2PgogIDwvZGl2Pgo8P3BocAoJJGh0bWwgPSBvYl9nZXRfY29udGVudHMoKTsKCW9iX2VuZF9jbGVhbigpOwoKCSMgR2VuZXJhdGUgdGhlIHdlYiBwYWdlCgkkQXBwLT5nZW5lcmF0ZVBhZ2UoJHRoZW1lLCAkTWVudSwgJE5hdiwgJHBhZ2VBdXRob3IsICRwYWdlS2V5d29yZHMsICRwYWdlVGl0bGUsICRodG1sKTsKPz4K